각 매퍼의 HBase 테이블에 N 행을 일괄 적으로 삽입하려고합니다. 나는이 일을 두 가지 방법 중 currenly 알고 :MapReduce를 사용하여 HBase에 여러 행 삽입
- 는 Put 개체의 목록을 작성하고 HTable 인스턴스의
put(List<Put> puts)
방법을 사용하고 또한autoFlush
매개 변수를 사용하지 않도록해야합니다. - TableOutputFormat 클래스를 사용하고
context.write(rowKey, put)
메서드를 사용하십시오.
어느 것이 더 낫습니까?
hTable.put(putsList)
메서드를 사용하여 테이블에 데이터를 직접 입력하기 때문에 첫 번째 방법에서는 context.write()
이 필요하지 않습니다. 내 매퍼 클래스가 Class Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT>
까지 확장되어 있으므로 KEYOUT
과 VALUEOUT
에 어떤 클래스를 사용해야합니까?
두 번째 방법으로 context.write(rowKey, put)
N 번 전화해야합니다. Put
작업 목록에 context.write()
을 사용할 수있는 방법이 있습니까?
MapReduce를 사용하여 다른 방법이 있습니까?
미리 감사드립니다. 배치가 자연입니다
로() BufferedMutator과 자연 왜라고? 매퍼 수를 어떻게 지정합니까? 코드를 제안하는 경우에도 매퍼 수는 1이됩니다. –
setNumMapTasks 또는 conf.set ('mapred.map.tasks', 'numberofmappersyouwanttoset')을 사용하여 맵퍼의 수를 변경할 수 있지만 설정에 대한 제안은 있지만 맵퍼 인스턴스가 설정된다는 보장은 없습니다. 또한, inputsplits에 따라 다릅니다. –
lookat http://stackoverflow.com/questions/37239944/is-it-possible-to-run-multiple-mappers-on-one-node 제 정교한 대답을 참조하십시오 .. 질문을 자유롭게하십시오. –