2010-07-02 5 views
0

2 개의 bzip2'ed 파일을 병합하고 싶습니다. 나는이 파일을 Hadoop 입력 파일로 사용하려고하는데, 손상된 블록에 대한 에러가 발생한다. (이 파일은 올바르게 압축 해제되었다.) cat file1.bzip2 file2.bzip2 > out.bzip2이 작동하는 것처럼 보였다.2 개의 bzip2'ed 파일을 병합하는 방법은 무엇입니까?

2 개의 bzip2'ed 파일을 압축 해제하지 않고 병합하는 가장 좋은 방법은 무엇입니까?

답변

2

연결된 bzip 처리는 트렁크에서 고정되어 있거나 https://issues.apache.org/jira/browse/HADOOP-4012이어야합니다. 예를 들면 다음과 같습니다. https://issues.apache.org/jira/browse/MAPREDUCE-477?focusedCommentId=12871993&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_12871993 최근 버전의 Hadoop을 실행하고 있어야 정상적으로 작동합니다.

+0

Bzipped 파일은 올바르게 분할되어 있지만 연결된 파일에서지도 작업을 실행하는 방법을 여전히 파악할 수 없습니다. (하지만 모두 압축 해제 한 후'cat'을 입력하면 큰 입력 파일이 압축됩니다.) – wlk

1

둘 다 새 bz2로 압축 할 수 있습니까? 2 개의 아카이브 내용을 얻으려면 3 회의 압축을 풀어야하지만 시나리오에서는 사용할 수 있습니다.

+0

bzip2가 똑똑하고 1 압축 풀기가 필요할 경우 훨씬 좋은 아이디어입니다. – wlk

0

당신은 필요가 없습니다 것 하둡 입력으로 그들을 사용하는 파일을 병합 할 수 있습니다

  • file_name* 고려 - 패턴;
  • file_name_1,file_name_2 - 입력 목록

하둡이 처리합니다.

그렇지 않으면 Hadoop의 스트리밍을 사용하여 압축을 풀어서 병합 할 수 있습니다.

FILES_LIST="'ls -m template*.bz2'"

INPUT_FILE="'echo $FILES_LIST | tr -d ' ' '"

내부 ' 인용 부호가 달라야한다 :

당신은 같은 패턴으로 파일 목록을 생성 할 수 있습니다. CLI를 통해 $INPUT_FILE을 변수로 스크립트에 전달할 수 있습니다.

또한 CombineFileInputFormat 클래스를 InputFormat으로 간주합니다.

+1

시도해 보았습니다.하지만 문제는 1MB의 압축 파일을 수천 개씩 가지고 있고로드하지 않으려 고 할 때 발생합니다 HDFS로 전송할 수 있지만로드 할 수있는 하나의 큰 파일이 있어야합니다. – wlk

+0

'lbzcat 부분 * | lbzcat -z> output_file' –

+0

내 마지막 코멘트는 파일을 병합하지만 hadoop은 나중에 완전히 읽을 수 없습니다. –

관련 문제