0
AWSのHadoop hdfsにアップロードしたいローカルデータファイル(csv)があります。最初にリモートサーバーにファイルをアップロードしてからHDFSにファイルをコピーする必要はありません。だから私はthis postの後にCLIで1つのライナーを作成しました。リモートファイルをhadoopに入れて圧縮と圧縮解除を追加する
ここでは、処理を高速化して帯域幅を節約するために、各ファイルを(ローカルで)圧縮し、アップロードし、圧縮解除して(リモートサーバー上で)HDFSに入れることができると考えました。
私のpiplineに圧縮と伸張を追加するにはどうすればよいですか?
次は私の現在のスクリプトです:いくつかの実験の後
#! /bin/bash
DATA_FOLDER="~/data"
for fpath in $DATA_FOLDER/*; do
fname=`basename "$fpath"`
#echo $fname
cat $DATA_FOLDER/$fname | ssh namenode ". ~/.bash_profile; hdfs dfs -put - /data/ShenXianNongShangHang/$fname"
echo "Copied \"$fpath\" to HDFS."
done
UPDATE
、私は次の解決策を考え出した:
#! /bin/bash
DATA_FOLDER="/path/to/local/data/folder"
REMOTE_TEMP_FOLDER="/linux/system/path/to/temp/folder/to/save/compressed /file" # you should have created it
REMOTE_HDFS_DATA_FOLDER="hdfs/data/folder"
for fpath in $DATA_FOLDER/*; do
fname=`basename "$fpath"`
# Keep the original file and create a compressed copy
gzip -c $DATA_FOLDER/$fname > $fname.gz
echo "Compressed \"$fname\" and created a local copy."
# Upload compressed the file to remote server
scp $fname.gz namenode:$REMOTE_TEMP_FOLDER/$fname.gz
echo "Uploaded \"$fname\" to the namenode:$REMOTE_TEMP_FOLDER."
# Delete the local copy of the compressed file
rm $fname.gz
echo "Deleted local copy of \"$fname.gz\"."
# Decompress file and put in HDFS on the remote server
# Each csv data file will be placed in its own directory (creating Hive external table requires it)
ssh namenode ". ~/.bash_profile; hdfs dfs -mkdir $REMOTE_HDFS_DATA_FOLDER/$fname.dir"
ssh namenode ". ~/.bash_profile; gunzip -c $REMOTE_TEMP_FOLDER/$fname.gz | hdfs dfs -put - $REMOTE_HDFS_DATA_FOLDER/$fname.dir/$fname"
echo "Copied \"$fname\" to HDFS."
ssh namenode ". ~/.bash_profile; hdfs dfs -ls -h $REMOTE_HDFS_DATA_FOLDER/$fname.dir/$fname"
# Remove the compressed copy on the remote server
ssh namenode "rm $REMOTE_TEMP_FOLDER/$fname.gz"
echo "Deleted remote copy of \"$fname.gz\"."
done
ガット・エラー "〜/ .bash_profileの;のgzip -d $ fnameのHDFS DFS -put /データ/ ShenXianNongShangHang/$のfnameを。": 'GZIP:をstatできません:cache_db-cache_db -4-10-17_del_saacntxn.csv(cache_db-cache_db-4-10-17_del_saacntxn.csv):「cache_db-cache_db-4-10-17_del_saacntxn.csv」が私の「fname」であるファイルやディレクトリはありません。 – panc
また、 '$ fname'がリモートサーバ上に存在しないので、' gzip -d $ fname'がリモートサーバ上でどのように実行されるのか理解できません。 – panc
ええ私は私の答えをテストする時間がなかったので、あなたのソリューションを見つけたようだと私はコメントしたかった。私は後でこれを試してみるかもしれません...パイプとawkを使ってこれを行うことが可能かどうかを見てください。 –