36

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

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

scp test.txt username@masternode:/folderName/

すでにキーを使用してSSH接続を設定しています。したがって、これを行うためにパスワードは必要ありません。

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

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

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

ありがとう

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

4

5 に答える 5

41

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

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

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

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

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

于 2012-06-30T00:40:16.360 に答える
10

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

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

#> hadoop fs -fs masternode:8020 -put test.bin hadoopFolderName/
于 2012-06-30T12:44:39.633 に答える
2

HadoopはいくつかのRESTインターフェースを提供します。HoopWebHDFSを確認してください。非Hadoop環境からそれらを使用して、ファイルをマスターにコピーせずにファイルをコピーできるはずです。

于 2012-06-30T01:27:10.437 に答える
1

パイプを作成し、パイプを使用して転送を行います。このように、ファイルはローカルに保存されません。

mkfifo transfer_pipe

scp remote_file transfer_pipe| hdfs dfs -put transfer_pipe <hdfs_path>
于 2021-09-15T05:47:52.037 に答える
0

(未テスト)

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

于 2016-02-23T10:14:21.730 に答える