我想在一個hadoop流式作業中使用CPython,它需要訪問保存在hadoop文件系統中的面向行文件的補充信息。通過「補充」我的意思是這個文件是除了通過標準輸入提供的信息。補充文件足夠大,我不能將它寫入內存並解析出行尾字符。是否有一種特別優雅的方式(或庫)一次處理一行文件?從CPython內部一次處理hdfs文件數據的最佳方法(不使用stdin)?
感謝,
的setjmp
我想在一個hadoop流式作業中使用CPython,它需要訪問保存在hadoop文件系統中的面向行文件的補充信息。通過「補充」我的意思是這個文件是除了通過標準輸入提供的信息。補充文件足夠大,我不能將它寫入內存並解析出行尾字符。是否有一種特別優雅的方式(或庫)一次處理一行文件?從CPython內部一次處理hdfs文件數據的最佳方法(不使用stdin)?
感謝,
的setjmp
退房this documentation for Streaming使用Hadoop中數據流的作業Hadoop Distributed Cache。您首先將文件上傳到hdfs,然後在運行作業之前告訴Hadoop將其複製到任意位置,然後在作業的工作目錄中方便地放置符號鏈接。然後,您可以使用python的open()
來讀取for line in f
或其他任何文件。
分佈式緩存是推送文件(開箱即用)作爲資源利用的最有效方式。您不僅希望從流程中打開hdfs文件,因爲每個任務都會嘗試通過網絡流式傳輸文件...使用分佈式緩存,即使在同一節點上運行多個任務,也會下載一個副本。
首先,在運行作業時將-files hdfs://NN:9000/user/sup.txt#sup.txt
添加到您的命令行參數中。
然後:
for line in open('sup.txt'):
# do stuff
你在找這個?
http://pydoop.sourceforge.net/docs/api_docs/hdfs_api.html#module-pydoop.hdfs
with pydoop.hdfs.open("supplementary", "r") as supplementary:
for line in supplementary:
# process line
請注意,我將鏈接更改爲文檔並稍微更新了我的答案。我引用了舊版本的文檔。它應該是最新的。 – 2011-12-19 03:21:17