ローカルLinuxでgzファイルを分割し、分割出力をディスクに書き込むことなく、解凍または圧縮ファイルの一部としてhdfsにアップロードできる状況を実装しようとしています。次のコマンドを試した後に問題が発生しました。
以下のコマンドは、私が望んでいないhdfsにアップロードできるローカルディスクに書き込みます。
zcat ./file.txt.gz | tail -n +2 | split -l 20 - file.part
hdfs dfs -copyFromLocal ./*file.part* /folder/in/hdfs/
私が望むものと同じことを達成することは可能ですか? :-
zcat ./file.txt.gz | tail -n +2 | split -l 20 | gzip -d | hdfs dfs -put - /folder/in/hdfs/file.part
答え1
分割を避けて直接実行できます。
number_of_files=5 # for you to determine
zcat ./file.txt.gz | for((i=0;i<5;i++)); do
head -n 20 | hdfs dfs -put - /folder/in/hdfs/file.part_$i
done