2013-08-05 48 views
0

我正在試驗一個名爲vowpal wabbit的機器學習包。 爲了我們的Hadoop集羣上運行vowpal wabbit,它建議做:將hive中「select」的輸出作爲Hadoop jar輸入文件的輸入

hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.0.0-mr1-cdh4.3.0.jar \ 
    -Dmapred.job.name="vw allreduce $in_directory" \ 
    -Dmapred.map.tasks.speculative.execution=true \ 
    -Dmapred.reduce.tasks=0 \ 
    -Dmapred.child.java.opts="-Xmx100m" \ 
    -Dmapred.task.timeout=600000000 \ 
    -Dmapred.job.map.memory.mb=1000 \ 
    -input <in_directory> \ 
    -output <out_directory> \ 
    -file /home/produser/vowpal_wabbit/vowpalwabbit/vw \ 
    -file /usr/lib64/libboost_program_options.so.5 \ 
    -file /lib64/libz.so.1 \ 
    -file /home/produser/vowpal_wabbit/cluster/runvw-yarn.sh \ 
    -mapper /home/produser/vowpal_wabbit/cluster/runvw-yarn.sh \ 
    -reducer NONE 

其中runvw-yarn.sh,作爲一個映射,將每臺機器上調用vowpal wabbit的命令與儲存在其上的數據塊

我在傳遞數據之前必須重新格式化數據。我嘗試使用hive查詢從網格中選擇數據,重新格式化數據,然後將其傳遞給「hadoop jar」命令。但我不想將重新格式化的數據存儲在我們的羣集上以浪費空間。所以我不知道在「hadoop jar」命令中的「-input」選項後應該放什麼。

所以我的問題是,有沒有辦法在「-input」命令之後加入「stdin」之類的東西? 在我選擇數據之後,我應該在哪裏將「hadoop jar」命令放入我的配置單元查詢中?

P.S.我發現「配置單元 - 服務jar」,它看起來像hadoop jar類似,這在這裏有幫助嗎?

謝謝!幾周前我剛開始學習hadoop和hive,所以如果你有更好的設計或解決方案,請隨時告訴我。我可以改寫每一件事。

+0

您可以存儲重新格式化的數據並在作業完成後刪除它?我認爲hadoop不能支持你所說的「stdin」,因爲它是一個本地的「stdin」,但map reduce任務可能會在其他節點上運行。 – zsxwing

回答

0

看來你會運行兩輪Mapreduce:第一個是Hive查詢,第二個是MapReduce流。就我而言,要使用多輪Mapreduce作業,我們總是需要在回合之間寫入/讀取/讀取hdfs。這就是爲什麼MapReduce總是被稱爲批處理操作的原因。

所以,你的問題的答案是NO。