我正在分析Hadoop MapReduce作業中的大量文件,輸入文件爲.txt格式。我的映射器和我的reducer都是用Python編寫的。如何使外部參考表或數據庫可用於Hadoop MapReduce作業?
但是,我的映射器模塊需要訪問外部csv文件的內容,該文件基本上只是一個大表,用於查找映射器正在執行的轉換的參考值。
到目前爲止,我只是讓映射器從本地目錄加載文件到內存中,使其成爲Python變量。由於該文件非常大,但是(數千行和列),需要相對較長的時間來加載(大約10秒,對我來說太長了)。問題是Hadoop似乎爲每個新的輸入文件重新執行mapper-script,或者它將大的輸入文件分割成更小的文件,導致我的csv文件不必要的重複加載到內存中,文件被處理。
有沒有辦法讓Hadoop只加載一次文件,並以某種方式使其「全局」可用?谷歌的名字像Hive,Pig,sqlite都出現了,但我從來沒有看到任何例子來檢查這些實際上是否有用於此目的。
基本上,我只需要某種數據庫或字典以便在運行Hadoop作業時快速訪問。我的參考表的格式不一定是CSV,我非常靈活地將數據轉換爲不同的格式。