2012-12-11 36 views
0

我有一些我想從hdfs中提取的字段。如何加速通過流式傳輸探索HDFS中的數據?

目前我在做hadoop fs -text /path/to/20120903/*-* 2>/dev/null | awk -F '\t' '{ print $16 }' | sort | uniq > users-0903

我怎麼能加快這一點(需要做到這一點0904,0905 ...這需要一些時間)?

我有一些Hadoop流嘗試,但它似乎不喜歡我給它的大部分腳本,所以我放棄了。你將如何使用流式傳輸來嘗試這個任務?

回答

2

一個快速的方法來做到這一點使用Hadoop流將是:

hadoop jar hadoop-streaming.jar -input /path/to/2012093 -output /path/to/output-0903 -mapper "awk -F '\t' '{print \$16}'" -reducer 'uniq'

或者更好寫:

hadoop jar hadoop-streaming.jar \ 
    -input /path/to/2012093 \ 
    -output /path/to/output-0903 \ 
    -mapper "awk -F '\t' '{print \$16}'"\ 
    -reducer 'uniq' 

映射器會發出標籤之間的16字與無鑰匙值。然後它將在隨機/排序期間被分類,並且對uniq的調用將得到每個鍵/值對的重複。這些將通過uniq減少到一個副本。

+0

感謝提及隱式洗牌/排序。 – exic