Hadoop程式入門實踐


問題陳述:

找出銷往各個國家商品數量。

輸入: 我們的畋輸入資料集合是一個 CSV 檔案, Sales2014.csv

前提條件:

  • 本教學是在Linux上開發 - Ubuntu作業系統
  • 已經安裝了Hadoop(本教學使用版本2.7.1)
  • 系統上已安裝了Java(本教學使用 JDK1.8.0)。

在實際操作過程中,使用的使用者是'hduser_“(此使用者使用 Hadoop)。

yiibai@ubuntu:~$ su hduser_

步驟:

1.建立一個新的目錄名稱是:MapReduceTutorial

hduser_@ubuntu:~$ sudo mkdir MapReduceTuorial

授予許可權

hduser_@ubuntu:~$ sudo chmod -R 777 MapReduceTutorial

下載相關檔案:下載 Java 程式檔案,拷貝以下檔案:SalesMapper.java, SalesCountryReducer.java 和 SalesCountryDriver.java 到 MapReduceTutorial 目錄中,

檢查所有這些檔案的檔案許可權是否正確:

如果“讀取”許可權缺少可重新再授予許可權,執行以下命令:

yiibai@ubuntu:/home/hduser_/MapReduceTutorial$ sudo chmod +r *

2.匯出類路徑

hduser_@ubuntu:~/MapReduceTutorial$ export CLASSPATH="$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.7.1.jar:$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-common-2.7.1.jar:$HADOOP_HOME/share/hadoop/common/hadoop-common-2.7.1.jar:~/MapReduceTutorial/SalesCountry/*:$HADOOP_HOME/lib/*"
hduser_@ubuntu:~/MapReduceTutorial$

3. 編譯Java檔案(這些檔案存在於目錄:Final-MapReduceHandsOn). 它的類檔案將被放在包目錄:

hduser_@ubuntu:~/MapReduceTutorial$ javac -d . SalesMapper.java SalesCountryReducer.java SalesCountryDriver.java

安全地忽略此警告:

此編譯將建立一個名稱與Java原始檔(在我們的例子即,SalesCountry)指定包名稱的目錄,並把所有編譯的類檔案在裡面,因此這個目錄要在編譯檔案前建立。

接下來:

建立一個新的檔案:Manifest.txt

hduser_@ubuntu:~/MapReduceTutorial$ vi Manifest.txt

新增以下內容到檔案中:

Main-Class: SalesCountry.SalesCountryDriver

SalesCountry.SalesCountryDriver 是主類的名稱。請注意,必須鍵入確認鍵,在該行的末尾。

下一步:建立一個 jar 檔案

hduser_@ubuntu:~/MapReduceTutorial$ $JAVA_HOME/bin/jar cfm ProductSalePerCountry.jar Manifest.txt SalesCountry/*.class

檢查所建立的 jar 檔案,結果如下:

6. 啟動 Hadoop

hduser_@ubuntu:~$ $HADOOP_HOME/sbin/start-dfs.sh
hduser_@ubuntu:~$ $HADOOP_HOME/sbin/start-yarn.sh



7. 拷貝檔案 Sales2014.csv 到 ~/inputMapReduce

hduser_@ubuntu:~$ mkdir inputMapReduce
hduser_@ubuntu:~$ cp MapReduceTutorial/Sales2014.csv ./inputMapReduce/Sales2014.csv

現在使用以下命令來拷貝 ~/inputMapReduce 到 HDFS.

hduser_@ubuntu:~$ $HADOOP_HOME/bin/hdfs dfs -copyFromLocal ~/inputMapReduce /

我們可以放心地忽略此警告。驗證檔案是否真正複製沒有?

hduser_@ubuntu:~$ $HADOOP_HOME/bin/hdfs dfs -ls /inputMapReduce

8. 執行MapReduce 作業

hduser_@ubuntu:~$ $HADOOP_HOME/bin/hadoop jar ProductSalePerCountry.jar /inputMapReduce /mapreduce_output_sales

這將在 HDFS 上建立一個輸出目錄,名為mapreduce_output_sales。此目錄的檔案內容將包含每個國家的產品銷售。

9. 結果可以通過命令介面中可以看到

hduser_@ubuntu:~$ $HADOOP_HOME/bin/hdfs dfs -cat /mapreduce_output_sales/part-00000

結果也可以通過 Web 介面看到,開啟 Web 瀏覽器,輸入網址:http://localhost:50070/dfshealth.jsp ,結果如下:

現在選擇 'Browse the filesystem' 並導航到 /mapreduce_output_sales 如下:

開啟 part-r-00000 ,如下圖所示:

下載後,檢視結果內容。