web-dev-qa-db-ja.com

リモートファイルをローカルディスクにコピーせずにhadoopに配置する

生成されたらすぐにデータをhadoopに入れるシェルスクリプトを書いています。マスターノードにsshし、そこにあるフォルダーにファイルをコピーしてから、それらをhadoopに入れることができます。マスターノードのローカルディスクにファイルをコピーするのを取り除くシェルコマンドを探しています。私が必要とするものをよりよく説明するために、ここでこれまでに私が持っているものを見つけることができます:

1)ファイルをマスターノードのローカルディスクにコピーします。

scp test.txt username@masternode:/folderName/

キーを使用してSSH接続を既にセットアップしています。そのため、これを行うためにパスワードは必要ありません。

2)sshを使用してhadoop putコマンドをリモートで実行できます。

ssh username@masternode "hadoop dfs -put /folderName/test.txt hadoopFolderName/"

私が探しているのは、これら2つのステップを1つにパイプ/結合し、masterNodeのローカルディスク上のファイルのローカルコピーをスキップする方法です。

ありがとう

言い換えれば、私はできるようにいくつかのコマンドをパイプしたい

34
reza

これを試してください(未テスト):

cat test.txt | ssh username@masternode "hadoop dfs -put - hadoopFoldername/"

私は同様のトリックを使用してディレクトリをコピーしました:

tar cf - . | ssh remote "(cd /destination && tar xvf -)"

これにより、local -tarの出力がremote -tarの入力に送信されます。

39
sarnold

データを生成したノードは、これにより各クラスターノード(名前ノードとすべてのデータノード)に到達できます。

データ接続がある場合は、データが生成されたマシンからhadoop fs -putコマンドを実行するだけです(hadoopバイナリもインストールされていると仮定):

#> hadoop fs -fs masternode:8020 -put test.bin hadoopFolderName/
10
Chris White

Hadoopには、RESTインターフェイスがいくつかあります。 Hoop および WebHDFS を確認してください。ファイルをコピーせずにファイルをコピーできるはずです非Hadoop環境からそれらを使用するマスター。

2
Praveen Sripati

(未テスト)

データを作成するノードはインターネットにアクセスできるため、おそらくhadoopクライアントノードソフトウェアをインストールし、クラスターに追加することができます-通常のhadoop fs -putの後、一時ノードを切断して削除します-その後、hadoopシステムはhadoopクラスター内でファイルブロックのレプリケーションを自動的に作成します

0
serup