복붙노트

[HADOOP] Hadoop 내에서 여러 파일을 하나로 병합

HADOOP

Hadoop 내에서 여러 파일을 하나로 병합

필자는 로컬 파일 시스템을 사용하거나 맵핑을 작성하지 않고 하나의 파일에 병합하려는 여러 개의 작은 파일을 입력 디렉토리에 넣습니다. hadoof fs 명령이나 돼지를 사용하여 할 수있는 방법이 있습니까?

감사!

해결법

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

    1.그리드의 모든 것을 유지하려면 맵퍼를 사용하여 압축을 추가하십시오 (기본적으로 멍청한 점).

    그리드의 모든 것을 유지하려면 맵퍼를 사용하여 압축을 추가하십시오 (기본적으로 멍청한 점).

    hadoop jar \
        $HADOOP_PREFIX/share/hadoop/tools/lib/hadoop-streaming.jar \<br>
        -Dmapred.reduce.tasks=1 \
        -Dmapred.job.queue.name=$QUEUE \
        -input "$INPUT" \
        -output "$OUTPUT" \
        -mapper cat \
        -reducer cat
    

    압축 추가를 원한다면   -Dmapred.output.compress = true \ -Dmapred.output.compression.codec = org.apache.hadoop.io.compress.GzipCodec

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

    2.

    hadoop fs -getmerge <dir_of_input_files> <mergedsinglefile>
    
  3. ==============================

    3.좋아 ... 나는 hadoop fs 명령을 사용하는 방법을 알아 냈다.

    좋아 ... 나는 hadoop fs 명령을 사용하는 방법을 알아 냈다.

    hadoop fs -cat [dir]/* | hadoop fs -put - [destination file]
    

    나는 그것을 시험 할 때 일했다 ... 어떤 함정이라도 생각할 수 있는가?

    감사!

  4. ==============================

    4.HDFS를 로컬 디렉토리에 마운트하도록 퓨즈를 설정하면 마운트 된 파일 시스템이 출력 될 수 있습니다.

    HDFS를 로컬 디렉토리에 마운트하도록 퓨즈를 설정하면 마운트 된 파일 시스템이 출력 될 수 있습니다.

    예를 들어, 우리의 HDFS를 / mnt / hdfs에 로컬로 마운트했습니다. 다음 명령을 실행하면 효과가 있습니다.

    hadoop fs -getmerge /reports/some_output /mnt/hdfs/reports/some_output.txt
    

    물론 퓨즈를 사용하여 HDFS를 로컬 디렉토리에 마운트하는 다른 이유가 있지만 이는 우리에게 좋은 부작용이었습니다.

  5. ==============================

    5.HDFS 0.21에 새로 추가 된 HDFSConcat 도구를 사용하면 복사 비용을 들이지 않고이 작업을 수행 할 수 있습니다.

    HDFS 0.21에 새로 추가 된 HDFSConcat 도구를 사용하면 복사 비용을 들이지 않고이 작업을 수행 할 수 있습니다.

  6. ==============================

    6.Hortonworks 클러스터에서 작업 중이고 HDFS 위치에있는 여러 파일을 단일 파일로 병합하려면 단일 reducer를 실행하는 'hadoop-streaming-2.7.1.2.3.2.0-2950.jar'jar를 실행하고 병합 된 파일을 HDFS 출력 위치에 저장합니다.

    Hortonworks 클러스터에서 작업 중이고 HDFS 위치에있는 여러 파일을 단일 파일로 병합하려면 단일 reducer를 실행하는 'hadoop-streaming-2.7.1.2.3.2.0-2950.jar'jar를 실행하고 병합 된 파일을 HDFS 출력 위치에 저장합니다.

    $ hadoop jar /usr/hdp/2.3.2.0-2950/hadoop-mapreduce/hadoop-streaming-2.7.1.2.3.2.0-2950.jar \

    -Dmapred.reduce.tasks=1 \
    -input "/hdfs/input/dir" \
    -output "/hdfs/output/dir" \
    -mapper cat \
    -reducer cat
    

    이 병을에서 다운로드 할 수 있습니다. 하프 스트리밍 항아리 가져 오기

    스파크 작업을 작성하고 여러 RDD 생성 및 성능 병목 현상을 피하기 위해 병합 된 파일을 얻으려면 RDD를 변환하기 전에이 코드를 사용하십시오

    sc.textFile ( "hdfs : //...../part*) .coalesce (1) .saveAsTextFile ("hdfs : //...../filename)

    이렇게하면 모든 파트 파일을 하나로 병합하고 hdfs 위치에 다시 저장합니다.

  7. ==============================

    7.Apache Pig 관점에서이 문제를 해결하기 위해,

    Apache Pig 관점에서이 문제를 해결하기 위해,

    Pig를 통해 동일한 스키마의 두 파일을 병합하려면 UNION 명령을 사용할 수 있습니다.

     A = load 'tmp/file1' Using PigStorage('\t') as ....(schema1)
     B = load 'tmp/file2' Using PigStorage('\t') as ....(schema1) 
     C = UNION A,B
     store C into 'tmp/fileoutput' Using PigStorage('\t')
    
  8. ==============================

    8.모든 솔루션은

    모든 솔루션은

    hadoop fs -cat [dir]/* > tmp_local_file  
    hadoop fs -copyFromLocal tmp_local_file 
    

    로컬 m / c I / O가 데이터 전송의 중요한 경로에 있다는 것을 의미합니다.

  9. from https://stackoverflow.com/questions/3548259/merging-multiple-files-into-one-within-hadoop by cc-by-sa and MIT license