問(wèn)題陳述:
找出銷(xiāo)往各個(gè)國(guó)家商品數(shù)量。
輸入: 我們的畋輸入數(shù)據(jù)集合是一個(gè) CSV 文件, Sales2014.csv
前提條件:
在實(shí)際操作過(guò)程中,使用的用戶是'hduser_“(此用戶使用 Hadoop)。
yiibai@ubuntu:~$ su hduser_
步驟:
1.創(chuàng)建一個(gè)新的目錄名稱是:MapReduceTutorial
hduser_@ubuntu:~$ sudo mkdir MapReduceTuorial
授予權(quán)限
hduser_@ubuntu:~$ sudo chmod -R 777 MapReduceTutorial
下載相關(guān)文件:下載 Java 程序文件,拷貝以下文件:SalesMapper.java, SalesCountryReducer.java 和 SalesCountryDriver.java 到 MapReduceTutorial 目錄中,
檢查所有這些文件的文件權(quán)限是否正確:


如果“讀取”權(quán)限缺少可重新再授予權(quán)限,執(zhí)行以下命令:
yiibai@ubuntu:/home/hduser_/MapReduceTutorial$ sudo chmod +r *
2.導(dǎo)出類(lèi)路徑
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). 它的類(lèi)文件將被放在包目錄:
hduser_@ubuntu:~/MapReduceTutorial$ javac -d . SalesMapper.java SalesCountryReducer.java SalesCountryDriver.java

安全地忽略此警告:
此編譯將創(chuàng)建一個(gè)名稱與Java源文件(在我們的例子即,SalesCountry)指定包名稱的目錄,并把所有編譯的類(lèi)文件在里面,因此這個(gè)目錄要在編譯文件前創(chuàng)建。


接下來(lái):
創(chuàng)建一個(gè)新的文件:Manifest.txt
hduser_@ubuntu:~/MapReduceTutorial$ vi Manifest.txt
添加以下內(nèi)容到文件中:
Main-Class: SalesCountry.SalesCountryDriver
SalesCountry.SalesCountryDriver 是主類(lèi)的名稱。請(qǐng)注意,必須鍵入回車(chē)鍵,在該行的末尾。
下一步:創(chuàng)建一個(gè) jar 文件
hduser_@ubuntu:~/MapReduceTutorial$ $JAVA_HOME/bin/jar cfm ProductSalePerCountry.jar Manifest.txt SalesCountry/*.class
檢查所創(chuàng)建的 jar 文件,結(jié)果如下:

6. 啟動(dòng) 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
現(xiàn)在使用以下命令來(lái)拷貝 ~/inputMapReduce 到 HDFS.
hduser_@ubuntu:~$ $HADOOP_HOME/bin/hdfs dfs -copyFromLocal ~/inputMapReduce /
我們可以放心地忽略此警告。驗(yàn)證文件是否真正復(fù)制沒(méi)有?
hduser_@ubuntu:~$ $HADOOP_HOME/bin/hdfs dfs -ls /inputMapReduce
8. 運(yùn)行MapReduce 作業(yè)
hduser_@ubuntu:~$ $HADOOP_HOME/bin/hadoop jar ProductSalePerCountry.jar /inputMapReduce /mapreduce_output_sales
這將在 HDFS 上創(chuàng)建一個(gè)輸出目錄,名為mapreduce_output_sales。此目錄的文件內(nèi)容將包含每個(gè)國(guó)家的產(chǎn)品銷(xiāo)售。
9. 結(jié)果可以通過(guò)命令界面中可以看到
hduser_@ubuntu:~$ $HADOOP_HOME/bin/hdfs dfs -cat /mapreduce_output_sales/part-00000
結(jié)果也可以通過(guò) Web 界面看到,打開(kāi) Web 瀏覽器,輸入網(wǎng)址:http://localhost:50070/dfshealth.jsp ,結(jié)果如下:

現(xiàn)在選擇 'Browse the filesystem' 并導(dǎo)航到 /mapreduce_output_sales 如下:

打開(kāi) part-r-00000 ,如下圖所示:


下載后,查看結(jié)果內(nèi)容。