Windows 下配置 Eclipse 連接 Hadoop 開發環境


個人小站,正在持續整理中,歡迎訪問:http://shitouer.cn

小站博文地址:Windows 下配置 Eclipse 連接  Hadoop 開發環境,歡迎原站訪問~

 

學習更多,請訪問系列文章:

1. VMware Redhat網絡配置

2. Hadoop 三台主機 集群搭建 詳解

3. Windows 下配置 Eclipse 連接 Hadoop 開發環境

 

學習本篇之前,首先需要搭建Hadoop集群環境,具體請參見:Hadoop 三台主機 集群搭建 詳解

在上一篇Hadoop 三台主機 集群搭建 詳解,已經搭建起Hadoop集群,但是要開發調試MapReduce程序,還是在Windows下比較方便和舒服。成功配置這個環境,花費了我好幾個晚上,先記錄如下,方便后來學習的人:

環境及配置:

Eclipse選擇

非常重要,至少我是在這花費了很多時間,幾乎試遍了所有的eclipse版本,都不成功,最后選擇了SpringSource Tool,真的很好用,下載地址:http://www.springsource.org/downloads/sts

Cygwin

hadoop是基於Linux平台的,如其啟動,關閉 配置需要在Linux命令行中執行,cygwin是用來模擬Linux下的命令行工具。安裝地址:http://cygwin.com/install.html

Hadoop Eclipse插件

不建議使用Hadoop自帶的,不好用,如果使用SpringSource Tool的話,請使用hadoop-eclipse-plugin-0.20.3-SNAPSHOT,下載地址:https://issues.apache.org/jira/browse/MAPREDUCE-1280

預先配置

1. 安裝Cygwin,這個只要一路確定就行了,不過中間千萬別停頓。

2. 配置Windows Hosts文件,為了DNS解析尋址用

方法:進入C:\Windows\System32\drivers\etc,找到hosts文件,編輯添加hadoop集群配置的hosts文件相關信息如下:

192.168.40.5    master

192.168.40.6    slave1#非必須#

192.168.40.7    slave2#非必須#

安裝配置:

① 解壓下載的SpringSource Tool到D:\\STS,將hadoop-eclipse-plugin-0.20.3-SNAPSHOT放到:D:\STS\sts-2.9.1.RELEASE\plugins

② 點擊STS.exe,啟動SpringSource Tool(一下簡稱Eclipse),如果在Project Explorer中出現DFS Locations圖標,則說明安裝正確,如圖:

③ 之后,點擊Windows-->Preferrence-->hadoop map/reduce, Brower 選擇下載的hadoop-0.20.2所在的路徑:

④ 配置相關參數,點擊 Windows-->Show View -->Other --> Map/Reduce Location,打開Hadoop的MapReduce View

點擊Ok之后,出現如下圖

⑤ 上一步你不應該看到hadoopLoc, 應該什么都沒有,右鍵點擊空白處-->New Hadoop Location, 你會看到一個填寫MapReduce Location參數的一個界面:

其中:

Location Name:

這個不用在意,就是對這個MapReduce的標示,只要能幫你記憶即可

Map/Reduce Master 部分相關定義:

Host:上一節搭建的集群中JobTracker所在的機器的IP地址

port:JobTracker的端口

兩個參數就是 mapred-site.xml中mapred.job.tracker的ip和端口

DFS Master部分:

Host:就是上一節集群搭建中Namenode所在機器IP

Port:就是namenode的端口

這兩個參數是在 core-site.xml里fs.default.name里面的ip和端口

User Name:

就是搭建Hadoop集群是所用的用戶名,我這里用的是root

⑥ 填寫完以上信息以后,關閉Eclipse,然后重新啟動。

為什么這么做呢?因為如果不重新啟動,Advanced Parameters里,有些重要的選項不能顯示,重啟后,來配制Advanced Parameters信息:

可看到大部分選項都已經預設值好了,其中有一下幾個選項,必須注意填寫,其他的選項,要么默認,要么會根據我們填寫的以下幾個選項自動修改:

dfs.replication:

這個這里默認是3,但是要根據你的Datanode的個數來定,如果你僅有2個datanode,那么就寫2,如果只有一個,就寫1,大於或者等於3個,寫3

hadoop.tmp.dir:

這個要跟上節建立的Hadoop集群配置中core-site.xml 中的hadoop.tmp.dir設置一樣,上節填寫的是/tmp/hadoop-root,這里也如是填寫

hadoop.job.ugi:

填成root,Tardis,其中root是我們的用戶名,后邊的",Tardis"一定要這么寫,不能改

這些都填寫完了之后,點擊保存,重新啟動Eclipse,會發現,很多Advanced Parameters里的好多選項都根據hadoop.tmp.dir重新進行了設置。

(2012.10.26修改:現在又用hadoop1.0.3,此選項沒有了)

⑦ 重新啟動后,在Project Explorer中,會有如下顯示:

 注意,第一次初始化打開,並不會有user, input, output 這些文件夾,之后紅圈圈出的部分,也沒有job_local_0001(1).如果是這樣顯示說明你已經連接成功,否則,展開所有tmp文件夾,會發現最后有錯誤信息提示。

2012.10.26修改:

hadoop1.0.3此時還會出錯,是plugin中jar包不夠,可做如下修改:

1.打開Eclipse Plugins中的hadoop-eclipse-plugin-1.0.0.jar,發現只有發現只有commons-cli-1.2.jarhadoop-core.jar兩個包,將%HADOOP_HOME%/lib下的 commons-configuration-1.6.jar , commons-httpclient-3.0.1.jar , commons-lang-2.4.jar , jackson-core-asl-1.8.8.jar 和 jackson-mapper-asl-1.0.8.jar五個jar包打入hadoop-eclipse-plugin-1.0.0.jar中。

2.修改hadoop-eclipse-plugin-1.0.0.jar中META-INF目錄下的MANIFEST.MF,將classpath修改為以下內容:Bundle-ClassPath: classes/,lib/hadoop-core.jar,lib/commons-cli-1.2.jar,lib/commons-httpclient-3.0.1.jar,lib/jackson-core-asl-1.0.1.jar,lib/jackson-mapper-asl-1.0.1.jar,lib/commons-configuration-1.6.jar,lib/commons-lang-2.4.jar

3.重啟Eclipse即可。

⑧ 在Eclipse中編寫調試第一個Hadoop的HelloWorld程序:wordcount

建立Map/Reduce 工程

定義WordCount.Java類

這里,我下載了Hadoop源碼,直接拷貝了其WordCount.java文件,代碼如下:

package org.apache.hadoop.examples;

import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;

public class WordCount {

    public static class TokenizerMapper extends
            Mapper<Object, Text, Text, IntWritable> {

        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text();

        public void map(Object key, Text value, Context context)
                throws IOException, InterruptedException {
            String line = value.toString();
            StringTokenizer itr = new StringTokenizer(line);
            while (itr.hasMoreTokens()) {
                word.set(itr.nextToken().toLowerCase());
                context.write(word, one);
            }
        }
    }

    public static class IntSumReducer extends
            Reducer<Text, IntWritable, Text, IntWritable> {
        private IntWritable result = new IntWritable();

        public void reduce(Text key, Iterable<IntWritable> values,
                Context context) throws IOException, InterruptedException {
            int sum = 0;
            for (IntWritable val : values) {
                sum += val.get();
            }
            result.set(sum);
            context.write(key, new IntWritable(sum));
        }
    }

    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        String[] otherArgs = new GenericOptionsParser(conf, args)
                .getRemainingArgs();
        if (otherArgs.length != 2) {
            System.err.println("Usage: wordcount <in> <out>");
            System.exit(2);
        }
        Job job = new Job(conf, "word count");
        job.setJarByClass(WordCount.class);
        job.setMapperClass(TokenizerMapper.class);
        job.setCombinerClass(IntSumReducer.class);
        job.setReducerClass(IntSumReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
        FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

為了使程序成功運行,我們需要做一下工作

設置輸入:

在命令行中,像hadoop中添加一個文本文件:

hadoop fs -mkdir /input  #在HDFS用戶根目錄下建立input文件夾

hadoop fs -put test.txt /input/ #向input文件夾里放入所在路徑的test.txt文件

該步驟也可以在Eclipse中建立,首先右鍵點擊Project Explorer中大象圖標下第一個沒有名字的文件夾,點擊 Create New Directory,創建input文件夾,后再右鍵該文件夾,上傳test.txt文件。此時到hadoop DFS中查看,也會發現創建成功。

Eclipse中設置輸入參數

設置WordCount.java的執行參數如圖

在Eclipse中執行

如圖,點擊 Run on Hadoop

在控制台,會有以下輸出

OK,至此,Congratulations,你已經建立起自己在Windows中Eclipse下進行Hadoop MapReduce開發的基本環境設置工作,並且輸出了一個屬於自己的HelloWorld程序,並且稍微了解了一些hadoop日志分析的信息,你已經開始進入Hadoop的世界,剩下的,就是要不斷地深入學習了。

接下來,本來打算將Hive,HBase,Fuse等Hadoop工程相關的配置過程都詳細的記錄,但是現在都還用不到,所以就打算先擱下,開始讀Hadoop源碼,本身以前也沒有讀源碼的經驗(以前做Salesforce CRM雲計算,是不開源的),也會將一步一步學習的過程記錄並分享。從Configuration類讀起,依舊立此存照,必須說到做到。

轉載注明出處,博客園 石頭兒 尤其說給 Linux 公社 聽,沒見過你們這么無恥的人!轉載之后,不僅原轉載文章被變成你們的,連引用的自己的文章,也都一並給你們摘抄過去變成你們的了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM