由于hbase客户端JAR中的硬编码managed=true,因此无法连接到bigtable来扫描htable数据

cwxwcias  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(532)

我正在使用dataproc上的pig从bigtable加载数据。我使用下面从dataproc获取的jar文件列表编译java代码。当我运行下面的pig脚本时,它尝试与bigtable建立连接时失败。
错误消息是:

  1. Bigtable does not support managed connections.

问题:
有解决这个问题的办法吗?
这是一个已知的问题,是否有计划来修复或调整?
有没有一种不同的方法来实现多重扫描作为pig的加载函数,它将与bigtable一起工作?
细节:
jar文件:

  1. hadoop-common-2.7.3.jar
  2. hbase-client-1.2.2.jar
  3. hbase-common-1.2.2.jar
  4. hbase-protocol-1.2.2.jar
  5. hbase-server-1.2.2.jar
  6. pig-0.16.0-core-h2.jar

下面是一个使用自定义加载函数的简单pig脚本:

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

我的自定义加载函数hbasemultiscanloader创建一个扫描对象列表,以便对表events\u sessions中的不同数据范围执行多个扫描,这些数据范围由gte和lt之间的时间范围确定,并由shard\u first到shard\u last进行分片。
hbasemultiscanloader扩展了org.apache.pig.loadfunc,因此可以在pig脚本中用作加载函数。当pig运行我的脚本时,它调用loadfunc.getinputformat()。getinputformat()的实现返回自定义类multiscantableinputformat的示例,该类扩展org.apache.hadoop.mapreduce.inputformat。multiscantableinputformat初始化org.apache.hadoop.hbase.client.htable对象以初始化到表的连接。
深入研究hbase客户端源代码,我看到org.apache.hadoop.hbase.client.connectionmanager.getconnectioninternal()调用org.apache.hadoop.hbase.client.connectionmanager.createconnection(),属性“managed”硬编码为“true”。您可以从下面的堆栈轨迹中看到,我的代码(multiscantableinputformat)尝试初始化一个htable对象,该对象调用getconnectioninternal(),而getconnectioninternal()不提供将managed设置为false的选项。沿着堆栈跟踪,您将得到abstractbigtableconnection,它将不接受managed=true,因此导致到bigtable的连接失败。
下面是显示错误的堆栈跟踪:

  1. 2017-03-24 23:06:44,890 [JobControl] ERROR com.turner.hbase.mapreduce.MultiScanTableInputFormat - java.io.IOException: java.lang.reflect.InvocationTargetException
  2. at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:240)
  3. at org.apache.hadoop.hbase.client.ConnectionManager.createConnection(ConnectionManager.java:431)
  4. at org.apache.hadoop.hbase.client.ConnectionManager.createConnection(ConnectionManager.java:424)
  5. at org.apache.hadoop.hbase.client.ConnectionManager.getConnectionInternal(ConnectionManager.java:302)
  6. at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:185)
  7. at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:151)
  8. at com.eduboom.hbase.mapreduce.MultiScanTableInputFormat.setConf(Unknown Source)
  9. at com.eduboom.pig.load.HBaseMultiScanLoader.getInputFormat(Unknown Source)
  10. at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigInputFormat.getSplits(PigInputFormat.java:264)
  11. at org.apache.hadoop.mapreduce.JobSubmitter.writeNewSplits(JobSubmitter.java:301)
  12. at org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:318)
  13. at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:196)
  14. at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)
  15. at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)
  16. at java.security.AccessController.doPrivileged(Native Method)
  17. at javax.security.auth.Subject.doAs(Subject.java:422)
  18. at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698)
  19. at org.apache.hadoop.mapreduce.Job.submit(Job.java:1287)
  20. at org.apache.hadoop.mapreduce.lib.jobcontrol.ControlledJob.submit(ControlledJob.java:335)
  21. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  22. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  23. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  24. at java.lang.reflect.Method.invoke(Method.java:498)
  25. at org.apache.pig.backend.hadoop23.PigJobControl.submit(PigJobControl.java:128)
  26. at org.apache.pig.backend.hadoop23.PigJobControl.run(PigJobControl.java:194)
  27. at java.lang.Thread.run(Thread.java:745)
  28. at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher$1.run(MapReduceLauncher.java:276)
  29. Caused by: java.lang.reflect.InvocationTargetException
  30. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  31. at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  32. at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  33. at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  34. at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:238)
  35. ... 26 more
  36. Caused by: java.lang.IllegalArgumentException: Bigtable does not support managed connections.
  37. at org.apache.hadoop.hbase.client.AbstractBigtableConnection.<init>(AbstractBigtableConnection.java:123)
  38. at com.google.cloud.bigtable.hbase1_2.BigtableConnection.<init>(BigtableConnection.java:55)
  39. ... 31 more
hjqgdpho

hjqgdpho1#

我遇到了相同的错误消息:
bigtable不支持托管连接。
然而,根据我的研究,根本原因是 HTable 无法显式构造。改变了施工方式后 HTableconnection.getTable . 问题解决了。

1rhkuytd

1rhkuytd2#

最初的问题是由于使用过时和不推荐使用的hbase客户机jar和类造成的。
我更新了代码,使用了google提供的最新hbase客户端jar,原来的问题得到了解决。
我仍然会遇到一些zk问题,我仍然没有弄清楚,但这是一个不同的问题的对话。
这一个已经回答了!

相关问题