標籤:blog http 使用 os 檔案 資料 ar file
hadoop fs
列出所有的命令
hadoop fs -help ls
列出某個命令的詳細資料
hadoop dfs -mkdir /data/weblogs
hadoop dfs -mkdir /data/dir1 /data/dir2 ...
建立檔案夾,可以遞迴建立,可同時建立多個目錄
echo "Hello world" > weblog_entries.txt
建立新的本地檔案(無則建立)
hadoop fs -copyFromLocal weblog_entries.txt /data/weblogs
hadoop fs -put weblog_entries.txt /data/weblogs,put可以對整個檔案夾進行複製(1.0版之後)
從本地檔案系統複製資料到hdfs上
hadoop dfs -ls /data/weblogs
列出檔案夾下的檔案資訊
hadoop dfs -cat /data/weblogs/*
hadoop dfs -cat /data/weblogs/* | head -1
hadoop dfs -cat /data/weblogs/* | tail -1
查看檔案內容
hadoop dfs -copyToLocal /data/weblogs/* /
hadoop dfs -get /data/weblogs/* /
hadoop dfs -getmerge /data/weblogs/* /合并後的檔案名稱 (可將多個檔案合并成一個檔案下載到本地,其中合并後的檔案名稱需要指定)
hadoop dfs -get -ignorecrc ..... 複製到本地時不進行資料校正(CRC),一般是在資料損毀時複製損壞的資料到本地才使用的
hadoop dfs -get -crc ....複製資料,同時複製crc校正檔案
從hdfs複製檔案到本地
需保證本地檔案系統空間可用,和網路傳輸速度
幾十個TB的資料,傳輸速率為1Gbit,消耗23個小時
get無法完成對整個檔案夾的複製,put在1.0之後可以完成
-----
原理:
fs FileSystem,各個命令對應這個類的不同方法
預設系統為core-site.xml配置的fs.default.name這個屬性,如hdfs://hostname:9000即預設使用hdfs系統,也就是hadoop fs和hadoop dfs是一樣的。
mapreduce輸出檔案的個數,是由mapred.reduce.tasks的值決定的,可在編程時通過job.setNumReduceTasks(int num)來進行設定,這是用戶端參數,非叢集參數,對不同的job設定不同的reduce個數。
預設值為1
推薦兩個數:
0.95*叢集中datanode個數*mapred.tasktracker.reduce.tasks.maximum(配置每個jobtracker可使用的reduce的插槽最大個數)
或者
1.75*叢集中jobtracker個數*mapred.taskreacker.reduce.tasks.maximum
原因:
0.95可保證在map結束後可立即啟用所有的reduce進行map結果的處理,只需要一波就可以完成作業。
1.75 使得運行快的reduce能夠再次執行第二波的reduce,保證兩撥reduce就能完作業,使作業整體的負載平衡。
--使用pig示範getmerge
首先建立檔案test,內容為
1 hello
2 world
3 url
4 test
5 haha
上傳到hdfs的/data/weblogs目錄下
test.pig指令碼內容
weblogs = load ‘/data/weblogs/*‘ as
(
md5:chararray,
url:chararray
);#預設分割方式為tab
md5_grp = group weblogs by md5 parallel 4;#依據md5進行分組,同時設定reduce個數為4
store md5_grp into ‘/data/weblogs/md5_group.bcp‘; #設定reduce的輸出目錄,此目錄下將包含4個reduce輸出檔案
-----
使用getmerge命令合并reduce的四個輸出檔案,下載到本地
hadoop dfs -getmerge /data/weblogs/md5_group.bcp 本機檔案名稱(一定要指定檔案名稱)