買了一本書《Hadoop權威指南》第二版,書寫的真不錯,就是思維跳躍性太大,看了沒兩章,是前後狂翻(沒辦法,他一說就是看附錄A安裝Hadoop,看附錄C準備NCDC天氣資料)
附錄A需要研究一下,根據自己的需求確定下來,學習階段也就本地模式就夠了,不要玩什麼叢集模式,浪費感情,浪費電腦資源。具體過程上網搜搜吧,好多人寫,不過你需要的就是最基本的模式,只要安裝Java、解壓縮Hadoop,配置hadoop的bin目錄到path環境變數。就可以了。叢集了之類的,不要玩那些沒用的,入門以後再說。我相信你30分鐘都能搞好一個liunx系統,並安裝jdk、解壓縮hadoop,配置JAVA_HOME,和path環境變數。
附錄C:準備NCDC天氣資料,這一章節巨崩潰,看了兩天(全是下班後的業餘時間)也就從它所描述的NCDC官網上下載到了我需要的測試資料,好多,看了半天本來就是測試,隨便找兩個溫度測試網站的2年的資料合併一下作為測試資料算了。
下面開始我對前兩章的理解,希望給後來者能通過一晚上的時間,快速學習會第二章節的內容。
1. 準備工作(30分鐘)1) 科普HDFS基礎命令
1,查看目錄(列表)資訊
#bin/hadoop dfs -ls /
2,建立目錄test
#bin/hadoop dfs -mkdir test
3,刪除目錄test
#bin/hadoop dfs -rmr test
4,上傳檔案到HDFS目錄
#bin/haddop dfs -put *.txt test
5,下載檔案
#bin/hadoop dfs -get test test1
6. 查看一個檔案
#bin/hadoop dfs –tail test
#bin/hadoop dfs –cat test
2) 準備天氣預報資料
開啟FTP
ftp://ftp.ncdc.noaa.gov/pub/data/gsod/
隨意下兩個年份的檔案進行分析。
2011/007018-99999-2011.op.gz
2010/999999-94645-2012.op.gz
上傳這兩個gz檔案到Linux伺服器上,解壓縮gz檔案,執行命令合并兩個臨時檔案
cat 007018-99999-2011.op 999999-94645-2012.op> ncdc-all.op
將合并後的溫度檔案,上傳到hdfs上,等待分析備用。
hadoop dfs -put ncdc-all.op ./hdfs/temperature
2. 編寫Map-Reduce函數和調度函數(Job)(60分鐘)
多看看代碼吧,沒壞處。詳見附件。附件沒法上傳,等我上傳到資源裡面吧。
http://download.csdn.net/detail/xzknet/4905094
哦,對了,附件密碼忘記說了,和檔案名稱一樣。哈哈
3. 上傳Jar包到Linux伺服器。(30分鐘)
將第二步編寫的代碼打包成HadoopTest.jar放到本地某一個目錄下,例如:
/home/xzknet/demo/ch02/
然後進入該目錄執行如下命令
hadoop jar ./ch02.jar /home/xzknet/demo/ch02/hdfs output
系統返回如下資訊
xzknet@bogon:~/demo/ch02$hadoop jar ./ch02.jar /home/xzknet/demo/ch02/hdfs output
12/12/1807:35:48 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker,sessionId=
12/12/1807:35:48 WARN mapred.JobClient: Use GenericOptionsParser for parsing thearguments. Applications should implement Tool for the same.
12/12/1807:35:48 INFO mapred.FileInputFormat: Total input paths to process : 1
12/12/1807:35:48 INFO mapred.JobClient: Running job: job_local_0001
12/12/1807:35:48 INFO mapred.FileInputFormat: Total input paths to process : 1
12/12/1807:35:48 INFO mapred.MapTask: numReduceTasks: 1
12/12/1807:35:48 INFO mapred.MapTask: io.sort.mb = 100
12/12/1807:35:48 INFO mapred.MapTask: data buffer = 79691776/99614720
12/12/1807:35:48 INFO mapred.MapTask: record buffer = 262144/327680
12/12/1807:35:48 INFO mapred.MapTask: Starting flush of map output
12/12/1807:35:49 INFO mapred.MapTask: Finished spill 0
12/12/1807:35:49 INFO mapred.TaskRunner: Task:attempt_local_0001_m_000000_0 is done.And is in the process of commiting
12/12/1807:35:49 INFO mapred.LocalJobRunner:file:/home/xzknet/demo/ch02/hdfs/temperature:0+99802
12/12/1807:35:49 INFO mapred.TaskRunner: Task 'attempt_local_0001_m_000000_0' done.
12/12/1807:35:49 INFO mapred.LocalJobRunner:
12/12/1807:35:49 INFO mapred.Merger: Merging 1 sorted segments
12/12/1807:35:49 INFO mapred.Merger: Down to the last merge-pass, with 1 segments leftof total size: 7878 bytes
12/12/1807:35:49 INFO mapred.LocalJobRunner:
12/12/1807:35:49 INFO mapred.TaskRunner: Task:attempt_local_0001_r_000000_0 is done.And is in the process of commiting
12/12/1807:35:49 INFO mapred.LocalJobRunner:
12/12/1807:35:49 INFO mapred.TaskRunner: Task attempt_local_0001_r_000000_0 is allowedto commit now
12/12/1807:35:49 INFO mapred.FileOutputCommitter: Saved output of task'attempt_local_0001_r_000000_0' to file:/home/xzknet/demo/ch02/output
12/12/1807:35:49 INFO mapred.LocalJobRunner: reduce > reduce
12/12/1807:35:49 INFO mapred.TaskRunner: Task 'attempt_local_0001_r_000000_0' done.
12/12/1807:35:49 INFO mapred.JobClient: map 100%reduce 100%
12/12/1807:35:49 INFO mapred.JobClient: Job complete: job_local_0001
12/12/1807:35:49 INFO mapred.JobClient: Counters: 13
12/12/1807:35:49 INFO mapred.JobClient: FileSystemCounters
12/12/1807:35:49 INFO mapred.JobClient: FILE_BYTES_READ=244318
12/12/1807:35:49 INFO mapred.JobClient: FILE_BYTES_WRITTEN=78028
12/12/1807:35:49 INFO mapred.JobClient: Map-Reduce Framework
12/12/1807:35:49 INFO mapred.JobClient: Reduce input groups=2
12/12/1807:35:49 INFO mapred.JobClient: Combine output records=0
12/12/1807:35:49 INFO mapred.JobClient: Mapinput records=718
12/12/1807:35:49 INFO mapred.JobClient: Reduce shuffle bytes=0
12/12/1807:35:49 INFO mapred.JobClient: Reduce output records=2
12/12/1807:35:49 INFO mapred.JobClient: Spilled Records=1432
12/12/1807:35:49 INFO mapred.JobClient: Mapoutput bytes=6444
12/12/1807:35:49 INFO mapred.JobClient: Mapinput bytes=99802
12/12/1807:35:49 INFO mapred.JobClient: Combine input records=0
12/12/1807:35:49 INFO mapred.JobClient: Mapoutput records=716
12/12/1807:35:49 INFO mapred.JobClient: Reduce input records=716
然後查看目前的目錄,產生output目錄,開啟此目錄,可以看到產生結果檔案,我們會看到此目錄包含crc檔案,是一個HDFS檔案夾。
我們可以直接開啟此結果檔案,我們即可以看到兩年的最高氣溫
xzknet@bogon:~/demo/ch02$ls
ch02.jar hdfs ncdc-all.op output
xzknet@bogon:~/demo/ch02$cd output
xzknet@bogon:~/demo/ch02/output$ls
part-00000
xzknet@bogon:~/demo/ch02/output$ls
part-00000
xzknet@bogon:~/demo/ch02/output$tail part-00000
2010 85.4
2012 73.7
注意:eclipse的匯出Jar包時,export選項中有MainClass選項,注意設定該選項,否則:運行hadoop jar 命令時在***.jar後面需要指定包括包路徑的mainclass類名.
跟書上的命令不大一樣,不過他那裡是指的local的方式,
這裡ch02.jar在本地,要分析的資料檔案temperature 在hdfs上,產生的輸出在hdfs上,output是一個檔案夾
xzknet@bogon:~/demo/ch02$ hadoop dfs -cat ./output/part-00000
2010 85.4
2012 73.7
xzknet@bogon:~/demo/ch02$ hadoop dfs -tail ./output/part-00000
2010 85.4
2012 73.7
到這裡,恭喜你,你已經入門了。並用Hadoop開發了自己第一個雲端運算程式。