生成されたらすぐにデータを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のローカルディスク上のファイルのローカルコピーをスキップする方法です。
ありがとう
言い換えれば、私はできるようにいくつかのコマンドをパイプしたい
これを試してください(未テスト):
cat test.txt | ssh username@masternode "hadoop dfs -put - hadoopFoldername/"
私は同様のトリックを使用してディレクトリをコピーしました:
tar cf - . | ssh remote "(cd /destination && tar xvf -)"
これにより、local -tar
の出力がremote -tar
の入力に送信されます。
データを生成したノードは、これにより各クラスターノード(名前ノードとすべてのデータノード)に到達できます。
データ接続がある場合は、データが生成されたマシンからhadoop fs -putコマンドを実行するだけです(hadoopバイナリもインストールされていると仮定):
#> hadoop fs -fs masternode:8020 -put test.bin hadoopFolderName/
(未テスト)
データを作成するノードはインターネットにアクセスできるため、おそらくhadoopクライアントノードソフトウェアをインストールし、クラスターに追加することができます-通常のhadoop fs -putの後、一時ノードを切断して削除します-その後、hadoopシステムはhadoopクラスター内でファイルブロックのレプリケーションを自動的に作成します