通過管道向 hadoop put 檔案

2021-08-30 11:52:12 字數 953 閱讀 8391

使用 hadoop file shell 可以方便地向 hdfs put 檔案,但是,該 shell 不支援從管道讀取資料並放到 hdfs 檔案中。它僅支援這樣的 put 命令:

cd $hadoop_home

bin/hadoop fs -put localfile $hdfsfile

bin/hadoop fs -put localfiles $hdfsdir

幸好,主流的 unix (linux,bsd等)都有乙個/dev/fd/目錄,可以用它實現從管道 put 檔案

cd $hadoop_home

if bin/hadoop fs -test -d $hdfsfile

then

echo "$hdfsfile is a directory" >&2

exit 1

ficat localfiles | bin/hadoop fs -put /dev/fd/0  $hdfsfile

if [[ "0 0" == $ ]]

then

echo success

else

bin/hadoop fs -rm $hdfsfile

echo failed >&2

fi

其中,使用 pipestatus 檢查錯誤 。

需要注意,使用/dev/fd/0put 檔案時,hdfsfile 必須事先不存在,並且不能是乙個目錄,如果hdfsfile實際上是乙個目錄,那麼,put 仍然正確執行,但是,hdfs 中的檔名將是hdfsfile/0

/dev/fd/ 中是程序所有已開啟的檔案描述符列表,例如 /dev/fd/0 代表標準輸入,/dev/fd/1 代表標準輸出,/dev/fd/2 代表標準錯誤輸出,等等,開啟 /dev/fd/n 相當於呼叫 dup(n) 。

父子程序通過管道通訊 命名管道

unix程式設計。建立了兩個命名管道,利用這兩個管道實現父子進城的通訊。即父程序可以像子程序傳送訊息,可以讀取子程序的訊息。子程序一樣。下面是全部原始碼。include include include include include include include include include i...

通過HTMLExtractor向HTML要資料

西安市國土資源資訊中心 李博 如何不斷擴充資料中心的資料規模,提公升資料探勘的價值,這是我們思考的問題,資料一方面來自於內部生產,一部分資料可以來自於網際網路,網際網路上的資料體量龐大,形態多樣,之前blog裡很多fmeer已經提出了方案,比如json,xml,正規表示式等等,但對於比較鬆散的htm...

使用lrzsz工具通過串列埠向開發板傳送檔案

最近在做乙個專案,開發板的網口不能使用,只好研究通過串列埠向開發板傳送檔案。發現了lrzsz這個軟體,配合teraterm串列埠工具,成功滿足了我的需求。交叉編譯出目標板執行的lrzsz程式 預先放入開發板的sd卡或者emmc中。解壓並進入到軟體包目錄 tar xf lrzsz 0.12 20.ta...