2011-12-07 46 views
0

我有一個問題:我想提交一個配置文件目錄的作業,並且該目錄不在hadoop dfs中,hadoop是否有一些選項可以做到這一點?我想提交目錄如提交作業的jar文件,以便hadoop可以將作業和配置目錄分發到所有datanode。我發現當我使用這個命令時,-files選項似乎不起作用:bin/hadoop jar job.jar input output -files conf_dir。看來,文件選項只適用於hadoop流如何在hadoop mapreduce中提交配置文件目錄的作業?

回答

0

我想提交一個作業與配置文件的目錄和該目錄不在hadoop dfs,hadoop有一些選項來做到這一點?

使用--config選項指定配置文件的目錄。

我想提交像提交作業的jar文件這樣的目錄,以便hadoop可以將作業和配置目錄分發到所有datanode。

在作業提交之前,配置文件應該存在於所有守護進程啓動的節點中,因此在提交作業時分發它們是沒有意義的。要發送任何附加參數,請使用-D option。如果邊數很大,則使用DistributedCache分配數據並在映射器和縮減器中讀取它。

我發現使用這個命令時,-files選項似乎不起作用:bin/hadoop jar job.jar input output -files conf_dir。看起來-files選項只適用於hadoop流媒體。

-files選項採用逗號分隔的任何文件(不是目錄)和文件分佈到所有節點列表。框架不讀取這些文件,map和reduce任務中的代碼必須顯式讀取這些文件。

此外,根據Hadoop - The Definitive Guide

注意的是,在客戶端配置設置時,某些屬性沒有任何效果。對於 示例,如果在您的作業提交中,您將mapred.tasktracker.map.tasks.maximum設置爲 ,這意味着它會更改任務管理器運行的任務槽的數量,然後您會感到失望,因爲如果在任務跟蹤器的mapred-site.html文件中設置此屬性,則只能使用 。一般來說,你可以告訴組件 屬性應該在哪裏設置它的名字,所以mapred.task tracker.map.tasks.maximum以mapred.tasktracker開頭,這讓你知道它只能設置 爲tasktracker守護進程。然而,這不是一條硬性規定,因此在 中有些情況下,您可能需要藉助試錯法,甚至是閱讀源代碼。