2013-04-15 2 views
1

HFileOutputFormat을 사용하여 CSV 파일을 hbase 테이블에 대량로드합니다. job.setNumReduceTasks (0)를 사용하여 맵핑하고 작업량을 줄이지 않습니다. 하지만 나는이 감속기가 HFileOutputFormat 때문에 시작된 것인지 감속기가 작동 하는지를 볼 수있었습니다.
이전에는 감속기가 실행되지 않은 동일한 작업에 대해 TableOutputFormat을 사용했습니다. 나는 최근에 HFileOutputFormat을 사용하기 위해 맵 작업을 리팩토링했지만,이 변경 후에는 감속기가 작동하는 것을 볼 수 있습니다.HFileOutputFormat이 감속기를 시작합니까?

둘째, 이전에 TableOutputFormat을 사용하지 못했던 감속기에서 아래 오류가 발생했습니다.이 또한 HFileOutputFormat과 관련이 있습니까?

오류 : java.lang.ClassNotFoundException가 : com.google.common.base.Preconditions

답변

2

는 HFileOutputFormat는 참으로가 (필요한 HFiles에 대한) 작업을 줄이기 시작합니다.

오류가 발생합니다. Hadoop은 HFiles를 생성하기 위해 Google의 Guava 라이브러리가 필요합니다. Hadoop에서이 라이브러리를 찾을 수있는 가장 쉬운 방법은 $HBASE_HOME/lib/에서 $HADOOP_HOME/lib/으로 복사하는 것입니다. guava-<version>.jar을 찾으십시오.

+0

감사 HBase를 테이블

맵리 듀스 작업을 통해 HBase를 대량로드 데이터를 준비하는 샘플 코드를 찾기에서 지역의 수와 같다! 그것은 효과가있다! :) – RGC

+0

이 [post] (http://stackoverflow.com/questions/8750764/what-is-the-fastest-way-to-bulk-load-data-into)의 팁을 사용하여 MR 업무를 최적화하려고합니다. -hbase - 프로그래밍 방식으로). 나는 csv 파일을 읽고 각 행 (레코드)을 hbase 테이블에로드하는 맵 작업 만있다. 성능은 향상되었지만 여전히 효율적이지 않다고 생각합니다. 3 백만 레코드를로드하는 데 약 10 분이 걸립니다. 당신은 U가 분당 2.5M을로드 할 수 있다고 언급했습니다. 테이블 영역을 미리 분할했습니다. 내가 할 수있는 다른 것들이 최대 효율을 달성 할 수 있을까요? 데이터 압축? 제발 조언 – RGC

+0

mapoutput뿐만 아니라 hfile을 압축하려고했습니다. 그 dint는 성능 향상을 보여줍니다. 와트에 대한 조언이 없거나 1 분 이내에 수백만 데이터를로드해야 할 수도 있습니다. 키를 만들고 context.write (immutablerow, put)를 호출하는 것 이외에 무거운 처리를하지 마십시오. 나는 그지도가 약 3-4 분내에 완성되었고, (HFileOutputFormat에 의해 호출 된) 감속기가 6-7 분 정도 걸렸고, 완전한 벌크로드는 플래시처럼 완료되었다는 것을 알아 차렸다. – RGC

0

예, 우리가 Reducers의 수를 0으로 설정하더라도, HFileOutputFormat은이 파일을 HTable과 호환되도록 매퍼 출력을 정렬하고 병합하는 감속기 작업을 시작합니다. 감속기의 수는 here

관련 문제