問題陳述:
找出銷往各個國家商品數量。
輸入: 我們的畋輸入資料集合是一個 CSV 檔案, Sales2014.csv
前提條件:
在實際操作過程中,使用的使用者是'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 ,如下圖所示:
下載後,檢視結果內容。