2011-07-22 339 views
0

我正在分析Hadoop MapReduce作業中的大量文件,輸入文件爲.txt格式。我的映射器和我的reducer都是用Python編寫的。如何使外部參考表或數據庫可用於Hadoop MapReduce作業?

但是,我的映射器模塊需要訪問外部csv文件的內容,該文件基本上只是一個大表,用於查找映射器正在執行的轉換的參考值。

到目前爲止,我只是讓映射器從本地目錄加載文件到內存中,使其成爲Python變量。由於該文件非常大,但是(數千行和列),需要相對較長的時間來加載(大約10秒,對我來說太長了)。問題是Hadoop似乎爲每個新的輸入文件重新執行mapper-script,或者它將大的輸入文件分割成更小的文件,導致我的csv文件不必要的重複加載到內存中,文件被處理。

有沒有辦法讓Hadoop只加載一次文件,並以某種方式使其「全局」可用?谷歌的名字像Hive,Pig,sqlite都出現了,但我從來沒有看到任何例子來檢查這些實際上是否有用於此目的。

基本上,我只需要某種數據庫或字典以便在運行Hadoop作業時快速訪問。我的參考表的格式不一定是CSV,我非常靈活地將數據轉換爲不同的格式。

回答

0

是的,看看你的hadoop流命令行的-files option。這將會把你已經加載到HDFS中的文件緩存到每個tasktracker節點的本地副本上,併爲每個映射器和reducer任務的CWD建立一個軟鏈接。

如果您有需要捆綁工作的罐子,還有-archives選項。

0

你也許應該看看Sqoop。它將數據從數據庫導入到HDFS中,以便您可以使用Map Reduce處理它。

相關問題