1

데이터로드에서 돼지를 사용하여 Bigtable에서 데이터를로드하기 위해 사용자 정의로드 함수를 사용하고 있습니다. 내가 Dataproc에서 잡은 jar 파일의 다음 목록을 사용하여 자바 코드를 컴파일한다. 다음 돼지 스크립트를 실행하면 Bigtable과의 연결을 시도 할 때 실패합니다.Bigtable에 연결하여 하드 코드로 인해 HTable 데이터를 검색 할 수 없습니다. hbase 클라이언트 jar에서 managed = true

오류 메시지는 다음과 같습니다

Bigtable does not support managed connections. 

질문 :

  1. 작업이 문제에 대한 주위 있습니까?
  2. 알려진 문제입니까? 수정하거나 조정할 계획이 있습니까?
  3. Bigtable에서 사용할 수있는 Pig의로드 함수로 다중 스캔을 구현하는 다른 방법이 있습니까?

세부 사항 :

Jar 파일 :

%default gte   '2017-03-23T18:00Z' 
%default lt   '2017-03-23T18:05Z' 
%default SHARD_FIRST '00' 
%default SHARD_LAST '25' 
%default GTE_SHARD '$gte\_$SHARD_FIRST' 
%default LT_SHARD '$lt\_$SHARD_LAST' 
raw = LOAD 'hbase://events_sessions' 
     USING com.eduboom.pig.load.HBaseMultiScanLoader('$GTE_SHARD', '$LT_SHARD', 'event:*') 
     AS (es_key:chararray, event_array); 
DUMP raw; 

내 사용자 정의로드 기능 HBaseMultiScanLoader이 검사 목록을 만듭니다 :

hadoop-common-2.7.3.jar 
hbase-client-1.2.2.jar 
hbase-common-1.2.2.jar 
hbase-protocol-1.2.2.jar 
hbase-server-1.2.2.jar 
pig-0.16.0-core-h2.jar 

여기 내 사용자 지정로드 기능을 사용하여 간단한 돼지 스크립트입니다 테이블에서 서로 다른 범위의 데이터에서 여러 스캔을 수행하는 객체 events_sessions 시간 범위 b로 결정 gte와 lt 사이에 있고 SHARD_FIRST에서 SHARD_LAST까지 sharded.

HBaseMultiScanLoader는 org.apache.pig.LoadFunc를 확장하므로 Pig 스크립트에서로드 함수로 사용할 수 있습니다. 돼지가 내 스크립트를 실행하면 LoadFunc.getInputFormat()이 호출됩니다. getInputFormat()을 구현하면 org.apache.hadoop.mapreduce.InputFormat을 확장하는 내 사용자 정의 클래스 인 MultiScanTableInputFormat의 인스턴스가 반환됩니다. MultiScanTableInputFormat은 org.apache.hadoop.hbase.client.HTable 객체를 초기화하여 테이블에 대한 연결을 초기화합니다.

hbase-client 소스 코드를 살펴보면 org.apache.hadoop.hbase.client.ConnectionManager.getConnectionInternal()이 org.apache.hadoop.hbase.client.ConnectionManager.createConnection()을 속성과 함께 호출하는 것을 볼 수 있습니다. "관리되는"하드 코딩 된 "사실". 아래의 스택 트랙에서 내 코드 (MultiScanTableInputFormat)가 관리 대상을 false로 설정하는 옵션을 제공하지 않는 getConnectionInternal()을 호출하는 HTable 객체를 초기화하려고합니다. 스택 트레이스를 내려감에 따라 AbstractBigtableConnection을 얻게되고 managed = true를 받아들이지 않고 Bigtable과의 연결이 실패하게됩니다. 원래 문제는 오래된 사용되지 HBase와 클라이언트 항아리와 클래스의 사용에 의해 발생 된

2017-03-24 23:06:44,890 [JobControl] ERROR com.turner.hbase.mapreduce.MultiScanTableInputFormat - java.io.IOException: java.lang.reflect.InvocationTargetException 
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:240) 
    at org.apache.hadoop.hbase.client.ConnectionManager.createConnection(ConnectionManager.java:431) 
    at org.apache.hadoop.hbase.client.ConnectionManager.createConnection(ConnectionManager.java:424) 
    at org.apache.hadoop.hbase.client.ConnectionManager.getConnectionInternal(ConnectionManager.java:302) 
    at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:185) 
    at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:151) 
    at com.eduboom.hbase.mapreduce.MultiScanTableInputFormat.setConf(Unknown Source) 
    at com.eduboom.pig.load.HBaseMultiScanLoader.getInputFormat(Unknown Source) 
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigInputFormat.getSplits(PigInputFormat.java:264) 
    at org.apache.hadoop.mapreduce.JobSubmitter.writeNewSplits(JobSubmitter.java:301) 
    at org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:318) 
    at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:196) 
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290) 
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:422) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698) 
    at org.apache.hadoop.mapreduce.Job.submit(Job.java:1287) 
    at org.apache.hadoop.mapreduce.lib.jobcontrol.ControlledJob.submit(ControlledJob.java:335) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.apache.pig.backend.hadoop23.PigJobControl.submit(PigJobControl.java:128) 
    at org.apache.pig.backend.hadoop23.PigJobControl.run(PigJobControl.java:194) 
    at java.lang.Thread.run(Thread.java:745) 
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher$1.run(MapReduceLauncher.java:276) 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:238) 
    ... 26 more 
Caused by: java.lang.IllegalArgumentException: Bigtable does not support managed connections. 
    at org.apache.hadoop.hbase.client.AbstractBigtableConnection.<init>(AbstractBigtableConnection.java:123) 
    at com.google.cloud.bigtable.hbase1_2.BigtableConnection.<init>(BigtableConnection.java:55) 
    ... 31 more 
+0

MultiScanTableInputFormat.setConf가 사용되지 않는 HTable (Configuration) 생성자를 호출하는 것처럼 보입니다. 대신 ConnectionFactory # createConnection (Configuration)을 호출하고 Connection # getTable (TableName)을 호출하여 Table 인스턴스를 검색하십시오. 다음 문서는 이전 HBase 버전에서 Cloud Bigtable/HBase 1.2로 변경되었습니다. https://cloud.google.com/bigtable/docs/hbase-api-changes –

+0

감사합니다. 최신 패키지를 사용하도록 코드를 조정하고 있습니다. – EduBoom

+0

지금 새 라이브러리를 사용하고 있지만 분할이 실패합니다. job_1489760783427_0051 raw MAP_ONLY 메시지 : org.apache.pig.backend.executionengine.ExecException : 오류 2118 : 위치가 인 org.apache에서 가져올 수 없습니다. org.apache.hadoop.hbase.client.HRegionLocator.getStartEndKeys에서 ... (HRegionLocator : pig.backend.hadoop.executionengine.mapReduceLayer.PigInputFormat.getSplits (PigInputFormat.java:279) ... 는에 의해 발생. java : 122) at com.turner.hbase.mapreduce.MultiScanTableInputFormat.getSplits (알 수없는 출처) 나는 계속 파고 갈 것이지만, 무엇이 잘못되었다는 것을 알고 있다면 공유하십시오. – EduBoom

답변

1

:

다음은 오류를 표시하는 스택 추적입니다.

Google에서 제공 한 최신 hbase 클라이언트 항아리를 사용하도록 코드를 업데이트했으며 원래 문제가 해결되었습니다.

나는 아직 이해하지 못했지만, 다른 질문에 대한 대화입니다.

이 답변을드립니다.