2013-07-22 40 views
1

我熟悉使用Java的Hadoop。只使用AWK查找示例Hadoop Map簡化程序。使用Awk的Hadoop示例地圖減少程序

對於包含一個文本文件...

A k1 
B k1 
C k2 
D k3 

尋找一個O/P

k1 2 
k2 1 
k3 1 
+1

這似乎不太可能你會找到一個既是awk專家又是「Hadoop Map reduce」專家(無論是什麼!)。您展示了示例輸入和期望輸出,並要求使用awk腳本來執行該轉換,但之後拒絕了@ sudo_0的答案。不知道你希望從這裏走到哪裏。 –

回答

4

我會建議使用Hadoop流媒體來做到這一點。我不以任何方式一個awk中的專家,但使用@sudo_O答案並將它轉換爲Hadoop的世界這裏是我會做:

  1. 寫入將作爲您的映射awk腳本。你只需要一個映射器,不需要減速器。

    $ cat mapper.awk 
    #!/usr/bin/awk -f 
    
    {a[$2]++}END{for(k in a)print k,a[k]} 
    
  2. 您可以運行Hadoop的數據流作業,執行下列操作:

    ${HADOOP_HOME}/bin/hadoop \ 
    jar ${HADOOP_HOME}/contrib/streaming/*.jar \ 
    -D mapreduce.job.reduces=0 \ 
    -D mapred.reduce.tasks=0 \ 
    -input /path/to/input.txt \ 
    -output /path/to/output/dir \ 
    -mapper mapper.awk \ 
    -file /path/to/mapper.awk 
    
  3. 您可以通過執行查看HDFS結果:

    hadoop fs -cat /path/to/output/dir/* 
    
4

這將這樣的伎倆:

$ awk '{a[$2]++}END{for(k in a)print k,a[k]}' file 
k1 2 
k2 1 
k3 1 
+1

但是尋找hadoop map reduce可以在包含多個節點的集羣上運行... –

+1

我對Hadoop一無所知......我知道如何使用'awk'來執行文本轉換。給出的'awk'腳本將輸入您的示例輸入並將其映射到示例輸出,這就是您要求的輸出。如果這不是你正在尋找的,請清楚地編輯你的問題,說明問題。 –

+1

我想在包含多個數據節點的集羣上運行它..我清楚地指定了「hadoop map reduce program using awk」 –