Eclipse Hadoop開發環境搭建

準備工作

  1. 搭建完成的Hadoop分佈式集羣或者僞分佈式。
  2. eclipse.zip包
  3. hadop-2.5.0.tzr.gz包
  4. hadoop-eclipse-plugin-2.5.0.jar插件
  5. 備用文件:
    hadoop.dll
    winutils.exe

文件目錄

這裏寫圖片描述
如圖所示:
1. eclipse-java-neon-x86_64.zip解壓及安裝eclipse。
2. hadoop-2.5.0.tar.gz解壓及安裝hadoop在windows上。
注:此處的hadoop包需要和linux服務器上的hadoop包版本相同,否則可能會出現一些莫名奇妙的錯誤。
3. 另外三個文件是搭建過程中需要的插件和其他文件。

開始搭建

  1. 首先完成Windows下hadoop環境變量的配置。
    這裏寫圖片描述
    這裏寫圖片描述
    如圖:首先添加HADOOP_HOME,路徑爲Windowx下hadoop的解壓路徑;然後修改path變量,添加記錄。
  2. 將hadoop-eclipse-plugin-2.5.0.jar插件複製到eclipse/plugins目錄。如圖:
    這裏寫圖片描述
  3. 開啓eclipse:Windows->Preferences->Hadoop Map/Reduce添加Windows下hadoop的解壓路徑。如圖:
    這裏寫圖片描述
  4. Windows->Show View->Other->Map/Reduce Locations。如圖:
    這裏寫圖片描述
  5. 設置完成之後將看到如下頁面。
    這裏寫圖片描述
    注:looc爲我的一個項目,存在DFS Locations則說明以上步驟無誤(存在Error是因爲還未配置DFS Locarions)。
  6. 點擊黑色矩形圈出的指定按鈕進行DFS Locations的配置。如圖:
    這裏寫圖片描述
    這裏寫圖片描述
  7. 右鍵點擊DFS Locations刷新查看是否鏈接成功(此時hadoop分佈式集羣或者僞分佈式需要處於開啓狀態)。如圖:
    這裏寫圖片描述
    注:此處爲連接成功之後所做的WordCount實例測試。創建input文件夾並上傳三個.txt文檔,運行WordCount.java得output文件夾中的內容,其中part-r-00000中爲WordCount的結果。
    另:第一次運行MapReduce程序需要先配置HDFS路徑,右鍵代碼編輯區空白處,選擇Run As->Run Configurations。如圖:
    這裏寫圖片描述
    點擊Run即可開始運行,之後便可以選擇Run As->Run on Hadoop運行MapReduce程序。
    附:
package com.looc.wordcount;

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;

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 {
            StringTokenizer itr = new StringTokenizer(value.toString());
            while (itr.hasMoreTokens()) {
                word.set(itr.nextToken());
                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, result);
        }
    }

    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(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(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

問題解決

如何存在一些問題可進行如下操作:
1. 將準備工作第五點中的兩個文件複製到hadoop/bin目錄下。如圖:
這裏寫圖片描述
2. 修改hadoop分佈式集羣或者僞分佈式中core-site.xml文件。如圖:
這裏寫圖片描述
3. 修改hadoop分佈式集羣或者僞分佈式中hdfs-site.xml文件,添加如下記錄。如圖:
這裏寫圖片描述
4. 防火牆也可能成爲連接不成功的原因之一。

Over

發佈了34 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章