로컬 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