복붙노트

[HADOOP] hadoop의 새로운 디렉토리에서 .gz 파일의 압축을 해제하는 방법은 무엇입니까?

HADOOP

hadoop의 새로운 디렉토리에서 .gz 파일의 압축을 해제하는 방법은 무엇입니까?

나는 hdfs에있는 폴더에 .gz 파일들을 가지고있다. 나는이 모든 .gz 파일을 hdfs의 새 폴더에 압축을 풀고 싶습니다. 어떻게해야합니까?

해결법

  1. ==============================

    1.나는 그것을 3 가지 다른 방법으로 성취 할 수 있다고 생각할 수 있습니다.

    나는 그것을 3 가지 다른 방법으로 성취 할 수 있다고 생각할 수 있습니다.

  2. ==============================

    2.필자의 경우, 내용을 잘 모르기 때문에 파이프를 압축 해제하고 싶지 않았습니다. 대신 zip 파일의 모든 파일을 HDFS에 압축을 넣었 으면합니다.

    필자의 경우, 내용을 잘 모르기 때문에 파이프를 압축 해제하고 싶지 않았습니다. 대신 zip 파일의 모든 파일을 HDFS에 압축을 넣었 으면합니다.

    나는 간단한 bash 스크립트를 만들었다. 댓글은 당신에게 무슨 일이 일어나는지에 대한 단서를 제공해야합니다. 아래에는 간단한 설명이 나와 있습니다.

    #!/bin/bash
    
    workdir=/tmp/unziphdfs/
    cd $workdir
    
    # get all zip files in a folder
    zips=$(hadoop fs -ls /yourpath/*.zip | awk '{print $8}')
    for hdfsfile in $zips
    do
        echo $hdfsfile
    
        # copy to temp folder to unpack
        hdfs dfs -copyToLocal $hdfsfile $workdir
    
        hdfsdir=$(dirname "$hdfsfile")
        zipname=$(basename "$hdfsfile")
    
        # unpack locally and remove
        unzip $zipname
        rm -rf $zipname
    
        # copy files back to hdfs
        files=$(ls $workdir)
        for file in $files; do
           hdfs dfs -copyFromLocal $file $hdfsdir
           rm -rf $file
        done
    
        # optionally remove the zip file from hdfs?
        # hadoop fs -rm -skipTrash $hdfsfile
    done
    

    필자는 /mypath/*/*.zip을 사용하여 각 zip 파일의 하위 디렉토리 구조로 작업하도록했습니다.

    행운을 빕니다 :)

  3. ==============================

    3.텍스트 파일을 압축했다면, hadoop fs -text는 다른 일반적인 압축 형식 (snappy, lzo)과 함께 gzip을 지원합니다.

    텍스트 파일을 압축했다면, hadoop fs -text는 다른 일반적인 압축 형식 (snappy, lzo)과 함께 gzip을 지원합니다.

    hadoop fs -text /tmp/a.gz | hadoop fs -put - /tmp/uncompressed_a
    
  4. ==============================

    4.하이브 (텍스트 데이터라고 가정)를 사용하여이를 수행 할 수 있습니다.

    하이브 (텍스트 데이터라고 가정)를 사용하여이를 수행 할 수 있습니다.

    create external table source (t str) location '<directory_with_gz_files>';
    create external table target (t str) location '<target_dir>';
    insert into table target select * from source;
    

    데이터는 새로운 파일 세트로 압축 해제됩니다.

    이름을 변경하지 않고 실행중인 노드에 저장 영역이 충분한 경우이 작업을 수행 할 수 있습니다.

    hadoop fs -get <your_source_directory> <directory_name>
    It will create a directory where you run hadoop command. cd to it and gunzip all the files
    cd ..
    hadoop fs -moveFromLocal <directory_name> <target_hdfs_path>
    
  5. ==============================

    5.Hadoop의 FileUtil 클래스에는 unTar () 및 unZip () 메소드가 있습니다. unTar () 메서드는 .tar.gz 및 .tgz 파일에서도 작동합니다. 불행하게도 그들은 로컬 파일 시스템의 파일들에 대해서만 작업을합니다. 같은 클래스의 copy () 메소드 중 하나를 사용하여 사용해야하는 분산 파일 시스템에서 복사해야합니다.

    Hadoop의 FileUtil 클래스에는 unTar () 및 unZip () 메소드가 있습니다. unTar () 메서드는 .tar.gz 및 .tgz 파일에서도 작동합니다. 불행하게도 그들은 로컬 파일 시스템의 파일들에 대해서만 작업을합니다. 같은 클래스의 copy () 메소드 중 하나를 사용하여 사용해야하는 분산 파일 시스템에서 복사해야합니다.

  6. from https://stackoverflow.com/questions/34573279/how-to-unzip-gz-files-in-a-new-directory-in-hadoop by cc-by-sa and MIT license