[HADOOP] Hadoop : HDFS에서 파일을 압축 하시겠습니까?
HADOOPHadoop : HDFS에서 파일을 압축 하시겠습니까?
최근 Hadoop에서 LZO 압축을 설정했습니다. HDFS에서 파일을 압축하는 가장 쉬운 방법은 무엇입니까? 파일을 압축 한 다음 원본을 삭제하고 싶습니다. IdentityMapper와 LZO 압축을 사용하는 IdentityReducer로 MR 작업을 생성해야합니까?
해결법
-
==============================
1.필자가 말한 것처럼 Identity 매퍼를 사용하는 MapReduce 작업을 작성하는 것이 좋습니다. 그 동안 데이터를 시퀀스 파일에 기록하여 성능 로딩을 개선하는 것이 좋습니다. 시퀀스 파일을 블록 레벨 및 레코드 레벨 압축으로 저장할 수도 있습니다. Yo는 두 가지 유형의 레코드에 모두 최적화되어 있으므로 어떤 것이 가장 잘 작동하는지 확인해야합니다.
필자가 말한 것처럼 Identity 매퍼를 사용하는 MapReduce 작업을 작성하는 것이 좋습니다. 그 동안 데이터를 시퀀스 파일에 기록하여 성능 로딩을 개선하는 것이 좋습니다. 시퀀스 파일을 블록 레벨 및 레코드 레벨 압축으로 저장할 수도 있습니다. Yo는 두 가지 유형의 레코드에 모두 최적화되어 있으므로 어떤 것이 가장 잘 작동하는지 확인해야합니다.
-
==============================
2.필자는 파일을 압축하기 위해 Hadoop Streaming 작업을 작성하는 것이 오버 헤드가 적습니다.
필자는 파일을 압축하기 위해 Hadoop Streaming 작업을 작성하는 것이 오버 헤드가 적습니다.
이것은 내가 실행하는 명령입니다.
hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-0.20.2-cdh3u2.jar \ -Dmapred.output.compress=true \ -Dmapred.compress.map.output=true \ -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \ -Dmapred.reduce.tasks=0 \ -input <input-path> \ -output $OUTPUT \ -mapper "cut -f 2"
또한 일반적으로 무언가가 잘못 될 경우 임시 폴더에 출력을 숨길 것입니다.
OUTPUT=/tmp/hdfs-gzip-`basename $1`-$RANDOM
한 가지 더 말하지만 스트리밍 작업에 감속기를 지정하지는 않지만 확실히 할 수 있습니다. 그것은 큰 파일로 오랜 시간이 걸릴 수있는 모든 라인을 강제로 정렬합니다. 분할자를 재정 의하여이 문제를 해결할 수있는 방법이있을 수 있지만 그 사실을 파악하는 것을 괴롭히지 않았습니다. 불행한 점은 잠재적으로 HDFS 블록을 효율적으로 사용하지 않는 많은 작은 파일로 끝날 가능성이 있다는 것입니다. 하둡 아카이브를 살펴 보는 이유 중 하나입니다.
-
==============================
3.Jeff Wu의 스트리밍 명령과 압축 된 파일의 연결은 압축 된 단일 파일을 제공합니다. 비 자바 매퍼가 스트리밍 작업에 전달되고 입력 형식이 텍스트 스트리밍 인 경우 값이 아닌 키만 출력됩니다.
Jeff Wu의 스트리밍 명령과 압축 된 파일의 연결은 압축 된 단일 파일을 제공합니다. 비 자바 매퍼가 스트리밍 작업에 전달되고 입력 형식이 텍스트 스트리밍 인 경우 값이 아닌 키만 출력됩니다.
hadoop jar contrib/streaming/hadoop-streaming-1.0.3.jar \ -Dmapred.reduce.tasks=0 \ -Dmapred.output.compress=true \ -Dmapred.compress.map.output=true \ -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \ -input filename \ -output /filename \ -mapper /bin/cat \ -inputformat org.apache.hadoop.mapred.TextInputFormat \ -outputformat org.apache.hadoop.mapred.TextOutputFormat hadoop fs -cat /path/part* | hadoop fs -put - /path/compressed.gz
-
==============================
4.이것이 제가 사용했던 것입니다 :
이것이 제가 사용했던 것입니다 :
/* * Pig script to compress a directory * input: hdfs input directory to compress * hdfs output directory * * */ set output.compression.enabled true; set output.compression.codec org.apache.hadoop.io.compress.BZip2Codec; --comma seperated list of hdfs directories to compress input0 = LOAD '$IN_DIR' USING PigStorage(); --single output directory STORE input0 INTO '$OUT_DIR' USING PigStorage();
LZO가 아니기 때문에 약간 느릴 수 있습니다.
-
==============================
5.@Chra 평판 문제로 인해 논평 할 수 없습니다.
@Chra 평판 문제로 인해 논평 할 수 없습니다.
다음은 한 명령의 모든 것입니다. 두 번째 명령을 사용하는 대신 하나의 압축 파일로 직접 줄일 수 있습니다
hadoop jar share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar \ -Dmapred.reduce.tasks=1 \ -Dmapred.output.compress=true \ -Dmapred.compress.map.output=true \ -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.BZip2Codec \ -input /input/raw_file \ -output /archives/ \ -mapper /bin/cat \ -reducer /bin/cat \ -inputformat org.apache.hadoop.mapred.TextInputFormat \ -outputformat org.apache.hadoop.mapred.TextOutputFormat
따라서 하나의 압축 파일 만 있으면 많은 공간을 확보 할 수 있습니다.
예를 들어, 내가 10MB의 4 파일을 가지고 있다고 가정 해 봅니다 (일반 텍스트, JSON 형식)
지도 만 650KB의 4 파일을 제공합니다. 매핑하고 줄이면 1.05 MB의 파일이 하나 있습니다.
-
==============================
6.나는 이것이 오래된 쓰레드라는 것을 알고 있지만이 쓰레드를 따르는 사람 (나 같은)이 다음의 2 가지 메소드 중 하나가 각 행의 끝에 탭 (\ t) 문자를 준다는 것을 아는 것이 유용 할 것이다.
나는 이것이 오래된 쓰레드라는 것을 알고 있지만이 쓰레드를 따르는 사람 (나 같은)이 다음의 2 가지 메소드 중 하나가 각 행의 끝에 탭 (\ t) 문자를 준다는 것을 아는 것이 유용 할 것이다.
hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-0.20.2-cdh3u2.jar \ -Dmapred.output.compress=true \ -Dmapred.compress.map.output=true \ -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \ -Dmapred.reduce.tasks=0 \ -input <input-path> \ -output $OUTPUT \ -mapper "cut -f 2" hadoop jar share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar \ -Dmapred.reduce.tasks=1 \ -Dmapred.output.compress=true \ -Dmapred.compress.map.output=true \ -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.BZip2Codec \ -input /input/raw_file \ -output /archives/ \ -mapper /bin/cat \ -reducer /bin/cat \ -inputformat org.apache.hadoop.mapred.TextInputFormat \ -outputformat org.apache.hadoop.mapred.TextOutputFormat
이 hadoop-streaming.jar에서 각 줄의 끝에 x'09를 추가하고 수정 사항을 찾았으며 다음 두 매개 변수를 사용하여 구분 기호를 다시 지정해야합니다 (내 경우에는 그렇습니다).
-Dstream.map.output.field.separator=, \ -Dmapred.textoutputformat.separator=, \
실행할 전체 명령
hadoop jar <HADOOP_HOME>/jars/hadoop-streaming-2.6.0-cdh5.4.11.jar \ -Dmapred.reduce.tasks=1 \ -Dmapred.output.compress=true \ -Dmapred.compress.map.output=true \ -Dstream.map.output.field.separator=, \ -Dmapred.textoutputformat.separator=, \ -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.Lz4Codec \ -input file:////home/admin.kopparapu/accenture/File1_PII_Phone_part3.csv \ -output file:///home/admin.kopparapu/accenture/part3 \ -mapper /bin/cat \ -reducer /bin/cat \ -inputformat org.apache.hadoop.mapred.TextInputFormat \ -outputformat org.apache.hadoop.mapred.TextOutputFormat
-
==============================
7.단일 파일을 압축하면 공간을 절약 할 수 있지만 압축 해제는 단일 Map 작업으로 순차적으로 수행해야하므로 Hadoop의 기능을 사용하여 파일을 처리 할 수는 없습니다. 파일이 많다면 Hadoop Archive가 있지만 어떤 종류의 압축도 포함되어 있는지 잘 모르겠습니다. 내가 생각할 수있는 압축의 주요 사용 사례는 Reduces (네트워크 I / O에 저장)로 보내지는 Maps의 출력을 압축하는 것입니다.
단일 파일을 압축하면 공간을 절약 할 수 있지만 압축 해제는 단일 Map 작업으로 순차적으로 수행해야하므로 Hadoop의 기능을 사용하여 파일을 처리 할 수는 없습니다. 파일이 많다면 Hadoop Archive가 있지만 어떤 종류의 압축도 포함되어 있는지 잘 모르겠습니다. 내가 생각할 수있는 압축의 주요 사용 사례는 Reduces (네트워크 I / O에 저장)로 보내지는 Maps의 출력을 압축하는 것입니다.
아, 귀하의 질문에 더 답변을, 당신은 아마 하나의지도 작업에 의해 전체 파일을 읽었는지 확인하기 위해 자신의 RecordReader 및 / 또는 InputFormat을 구현해야하며, 또한 올바른 압축 해제 필터를 사용했습니다.
from https://stackoverflow.com/questions/7153087/hadoop-compress-file-in-hdfs by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] hadoop에서 단일 레코드로 파일 읽기 (0) | 2019.05.29 |
---|---|
[HADOOP] Java webapp에 내장 된 클라이언트에 대해 hadoop 시스템 사용자 설정 (0) | 2019.05.29 |
[HADOOP] hdfs에서 권한이 거부되었습니다. (0) | 2019.05.29 |
[HADOOP] Hadoop java.io.IOException : Mkdirs가 / some / path를 생성하지 못했습니다. (0) | 2019.05.29 |
[HADOOP] Hadoop DistributedCache는 더 이상 사용되지 않습니다 - 선호하는 API는 무엇입니까? (0) | 2019.05.29 |