Hadoop學習筆記—6.Hadoop Eclipse插件的使用


開篇:Hadoop是一個強大的並行軟件開發框架,它可以讓任務在分布式集群上並行處理,從而提高執行效率。但是,它也有一些缺點,如編碼、調試Hadoop程序的難度較大,這樣的缺點直接導致開發人員入門門檻高,開發難度大。因此,Hadop的開發者為了降低Hadoop的難度,開發出了Hadoop Eclipse插件,它可以直接嵌入到Hadoop開發環境中,從而實現了開發環境的圖形界面化,降低了編程的難度。

一、天降神器插件-Hadoop Eclipse

  Hadoop Eclipse是Hadoop開發環境的插件,在安裝該插件之前需要首先配置Hadoop的相關信息。用戶在創建Hadoop程序時,Eclipse插件會自動導入Hadoop編程接口的jar文件,這樣用戶就可以在Eclipse插件的圖形界面中進行編碼、調試和運行Hadop程序,也能通過Eclipse插件查看程序的實時狀態、錯誤信息以及運行結果。除此之外,用戶還可以通過Eclipse插件對HDFS進行管理和查看。

  總而言之,Hadoop Eclipse插件不僅安裝簡單,使用起來也很方便。它的功能強大,特別在Hadoop編程方面為開發者降低了很大的難度,是Hadoop入門和開發的好幫手!

二、Hadoop Eclipse的開發配置

2.1 獲取Hadoop Eclipse插件

  (1)為了方便,我們可以直接百度一下,我這里hadoop版本是1.1.2,因此只需要搜索一下hadoop-eclipse-plugin-1.1.2.jar即可,我們可以從下面的鏈接中下載該插件。

  URL:http://download.csdn.net/download/azx321/7330363

  (2)將下載下來的插件jar文件放置到eclipse的plugins目錄下,然后重新啟動eclipse。

  (3)重新啟動eclipse之后,單擊按鈕,添加hadoop eclipse插件視圖按鈕:首先選擇Other選項,彈出如下圖所示的對話框,從中選擇Map/Reduce選項,然后單擊OK即可。

  (4)添加完成后,eclipse中就會多出一個Map/Reduce視圖按鈕,我們可以點擊進入Map/Reduce工作目錄視圖:

2.2 Hadoop Eclipse插件的基本配置

  (1)設置Hadoop的安裝目錄

  在eclipse中選擇Windows→Preference按鈕,彈出一個對話框,在該對話框左側會多出一個Hadoop Map/Reduce選項,然后單擊此選項,在右側設置Hadoop的安裝目錄。

  (2)設置Hadoop的集群信息

  這里需要與Hadoop集群建立連接,在Map/Reduce Locations界面中右擊,彈出選項條,選擇New Hadoop Location選項;

  在彈出的對話框中填寫連接hadoop集群的信息,如下圖所示:

  在上圖所示的紅色區域是我們需要關注的地方,也是我們需要好好填寫的地方。

PS:Location name: 這個隨便填寫,我填寫的是我的Hadoop Master節點的主機名;

Map/Reduce Master 這個框里:
Host:就是jobtracker 所在的集群機器,我這里是192.168.80.100
Hort:就是jobtracker 的port,這里寫的是9001(默認的端口號)
這兩個參數就是mapred-site.xml里面mapred.job.tracker里面的ip和port;

 
DFS Master 這個框里:
Host:就是namenode所在的集群機器,我這里由於是偽分布,都在192.168.80.100上面
Port:就是namenode的port,這里寫9000(默認的端口號)
這兩個參數就是core-site.xml里面fs.default.name里面的ip和port
(Use M/R master host,這個復選框如果選上,就默認和Map/Reduce Master這個框里的host一樣,如果不選擇,就可以自己定義輸入,這里jobtracker 和namenode在一個機器上,所以是一樣的,就勾選上)

User name:這個是連接hadoop的用戶名,我這里是root用戶;

  接下來,單擊Advanced parameters選項卡中的hadoop.tmp.dir選項,修改為你的Hadoop集群中設置的地址,我這里Hadoop集群中設置的地址是/usr/local/hadoop/tmp,然后單擊Finish按鈕(這個參數在core-site.xml中進行了配置)

PS:Advanced parameters選項卡中大部分的屬性都已經自動填寫上了,其實就是把那幾個核心xml配置文件里面的一些配置屬性展示出來。

  剛剛的配置完成后,返回eclipse中,我們可以看到在Map/Reduce Locations下面就會多出來一個Hadoop-Master的連接項,這就是剛剛建立的名為Hadoop-Master的Map/Reduce Location連接,如下圖所示:

2.3 查看HDFS

  (1)通過選擇eclipse左側的DFS Locations下面的Hadoop-Master選項,就會展示出HDFS中的文件結構;

  (2)這里在testdir文件夾處右擊選擇一個指定的文件,如下圖所示:

三、在Eclipse下運行WordCount程序

3.1 創建Map/Reduce項目

  選擇File→Other命令,找到Map/Reduce Project,然后選擇它,如下所示:

  輸入Map/Reduce工程的名稱,這里取為:WordCount,單擊Finish按鈕完成,如下圖所示:

3.2 創建WordCount類

  這里新建一個WordCount類,輸入以下代碼:

public class WordCount extends Configured implements Tool {

    /**
     * @author Edison Chou
     * @version 1.0
     */
    public static class MyMapper extends
            Mapper<LongWritable, Text, Text, LongWritable> {
        /*
         * @param KEYIN →k1 表示每一行的起始位置(偏移量offset)
         * 
         * @param VALUEIN →v1 表示每一行的文本內容
         * 
         * @param KEYOUT →k2 表示每一行中的每個單詞
         * 
         * @param VALUEOUT →v2表示每一行中的每個單詞的出現次數,固定值為1
         */
        protected void map(LongWritable key, Text value,
                Mapper<LongWritable, Text, Text, LongWritable>.Context context)
                throws java.io.IOException, InterruptedException {
            Counter sensitiveCounter = context.getCounter("Sensitive Words:", "Hello");
            
            String line = value.toString();
            // 這里假定Hello是一個敏感詞
            if(line.contains("Hello")){
                sensitiveCounter.increment(1L);
            }
            String[] spilted = line.split(" ");
            for (String word : spilted) {
                context.write(new Text(word), new LongWritable(1L));
            }
        };
    }

    /**
     * @author Edison Chou
     * @version 1.0
     */
    public static class MyReducer extends
            Reducer<Text, LongWritable, Text, LongWritable> {
        /*
         * @param KEYIN →k2 表示每一行中的每個單詞
         * 
         * @param VALUEIN →v2 表示每一行中的每個單詞的出現次數,固定值為1
         * 
         * @param KEYOUT →k3表示每一行中的每個單詞
         * 
         * @param VALUEOUT →v3 表示每一行中的每個單詞的出現次數之和
         */
        protected void reduce(Text key,
                java.lang.Iterable<LongWritable> values,
                Reducer<Text, LongWritable, Text, LongWritable>.Context context)
                throws java.io.IOException, InterruptedException {
            long count = 0L;
            for (LongWritable value : values) {
                count += value.get();
            }
            context.write(key, new LongWritable(count));
        };
    }

    // 輸入文件路徑
    public static String INPUT_PATH = "hdfs://hadoop-master:9000/testdir/input/words.txt";
    // 輸出文件路徑
    public static String OUTPUT_PATH = "hdfs://hadoop-master:9000/testdir/output/wordcount";

    @Override
    public int run(String[] args) throws Exception {
        // 首先刪除輸出路徑的已有生成文件
        FileSystem fs = FileSystem.get(new URI(INPUT_PATH), getConf());
        Path outPath = new Path(OUTPUT_PATH);
        if (fs.exists(outPath)) {
            fs.delete(outPath, true);
        }

        Job job = new Job(getConf(), "WordCount");
        // 設置輸入目錄
        FileInputFormat.setInputPaths(job, new Path(INPUT_PATH));
        // 設置自定義Mapper
        job.setMapperClass(MyMapper.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(LongWritable.class);
        // 設置自定義Reducer
        job.setReducerClass(MyReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);
        // 設置輸出目錄
        FileOutputFormat.setOutputPath(job, new Path(OUTPUT_PATH));

        System.exit(job.waitForCompletion(true) ? 0 : 1);
        return 0;
    }

    public static void main(String[] args) {
        Configuration conf = new Configuration();
        try {
            int res = ToolRunner.run(conf, new WordCount(), args);
            System.exit(res);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
View Code

3.3 運行WordCount程序

  選擇WordCount並右擊,選擇Run on Hadoop方式運行,如下圖所示:

  運行結果如下圖所示:

3.4 查看HDFS中的運行結果

  打開設定的輸出文件夾output下的part-r-00000文件,就是WordCount程序的執行結果,如下圖所示:

參考資料

(1)萬川梅、謝正蘭,《Hadoop應用開發實戰詳解(修訂版)》:http://item.jd.com/11508248.html

(2)cybercode,《eclipse hadoop開發環境配置》:http://blog.csdn.net/cybercode/article/details/7084603

 


免責聲明!

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



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