hadoop(06)、使用Eclipse開發Hadoop的MapReduce項目

         本文實踐源代碼的碼雲地址: https://gitee.com/MaxBill/HMRPhtml

         在上文《hadoop(05)、使用Eclipse鏈接遠程Hadoop集羣》中咱們主要實踐了使用Eclispe開發工具安java

裝hadoop的開發插件,而且使用hadoop插件鏈接Hadoop遠程集羣。本文咱們要在上文搭建的hadoop開node

發環境的基礎上開發Hadoop的MapReduce項目。git

1、環境準備

1.hadoop集羣web

2.安裝了hadoop插件的Eclipseapache

2、建立MapReduce項目

建立MapReduce項目能夠經過eclispe的MapReduce插件建立,也可使用Maven來構建,建議使用Maven來構建,能夠更好的管理項目依賴等問題,下面兩種方式都會進行:api

1.打開Eclipse的File菜單下的New Project視圖,選擇創建Map/Reduce Projecteclipse


2.新建一個Map/Reduce項目函數

配置默認的hadoop,點擊Configure Hadoop install directory...工具

設置完成默認的hadoop,點擊next

配置項目信息,點擊完成,便可建立一個新的Map/Reduce項目

注意:以上方式適合簡單的Map/Reduce項目,須要手動管理項目的JAR包,建議使用Maven來構建Map/Reduce項目,文本實際上使用的是如下Maven的方式:

1.建立Maven項目

點擊File菜單下的New Project視圖,選擇創建Maven Project

2. 填寫項目信息,完成便可

項目結構以下:

注:代碼中項目名重構爲HMRP了

3、編寫代碼

1.在上面建立的Maven項目中添加用到的hadoop開api包依賴

<dependency>

          <groupId>org.apache.hadoop</groupId>

          <artifactId>hadoop-common</artifactId>

          <version>2.8.2</version>

</dependency>

<dependency>

         <groupId>org.apache.hadoop</groupId>

         <artifactId>hadoop-hdfs</artifactId>

         <version>2.8.2</version>

</dependency>

<dependency>

         <groupId>org.apache.hadoop</groupId>

         <artifactId>hadoop-client</artifactId>

          <version>2.8.2</version>

</dependency>

pom.xml以下圖:

項目總體結構圖以下:

注意:項目個類說明

JobBean:是用來傳遞做業運行所需參數的BEAN

WordCountMap:咱們本身定義的map函數類

WordCountReduce:咱們定義的reduce函數類

HdfsUtils:Hdfs操做的工具類

JobsUtils:做業工具類

WordCount:詞頻統計主類

項目源代碼已經上傳碼雲,地址:https://gitee.com/MaxBill/HMRP

2.建立WordCount類,使用hadoop官方給出的例子代碼來調試

本文使用的hadoop的版本是2.8.2,使用《官方hadoop2.8.2的wordcount示例代碼》實踐

3.使用java操做HDFS

咱們對官方的例子作一些改動,官方是將寫好的WordCount程序丟到hadoop上去執行,咱們採用eclipse遠程開發調試的方式

<1>.編寫java客戶端操做遠程hdfs的工做類

<2>.編寫自定義map函數

<3>.編寫自定義reduce函數

<4>.編寫做業工具類

4.咱們改動後的測試主類

4、運行調試

1.準備資源數據

咱們是統計詞頻程序,準備一個文本的元數據,用於咱們的統計詞頻做業程序,在本地建一個txt文本,裏面內容隨便輸入一些單詞和句子便可

2.啓動hadoop集羣

3.運行程序查看狀態

從hdfs的web控制面板或者eclipse的hdfs插件能夠看到,在數據輸出目錄已經產生執行完做業的數據結果了 :

4.查看做業執行數據結果集

在eclipse的插件中雙擊咱們執行做業產生的做業結果:

和輸入的元數據進行比對,統計結果正確

5、問題反思

1.用戶權限問題

Permission denied: user=hadoop, access=WRITE, inode="/":root:supergroup:drwxr-xr-x

解決方案:執行 hadoop fs -chmod 777 /user/hadoop,其餘的操做目錄也要賦權限

2.集羣格式問題

在使用hdfs namenode -format格式化namenode的時候必定要先刪除各個節點下data目錄下的舊數據,否則會啓動集羣后沒法鏈接datanode

6、總結

本文應用對官方WordCount的例子進行改動,實踐了使用Eclispe鏈接遠程Hadoop集羣操做Hdfs以及開發運行調試了一個簡單的MapReduce的項目。在項目中遇到了許多問題在文中也都列了出來,經過查資料也都順利解決了。文中介紹了兩種建立MapReduce項目的方式,實際項目中通常都會採用Maven的方式來構建,雖然完整的實踐了MapReduce項目的開發過程,可是MapReduce和Hdfs是什麼關 系,MapReduce運行的原理是什麼,在後面的文中咱們詳細的討論。

相關文章
相關標籤/搜索