Невозможно подключиться к Bigtable для сканирования HTable-данных из-за жестко заданного управляемого = true в jar-клиентах hbase

hadoop apache-pig google-cloud-dataproc google-cloud-bigtable hbase-client

211 просмотра

2 ответа

Я работаю над пользовательской функцией загрузки для загрузки данных из Bigtable с помощью Pig на Dataproc. Я компилирую свой код Java, используя следующий список файлов JAR, которые я взял из Dataproc. Когда я запускаю следующий скрипт Pig, он терпит неудачу, когда пытается установить соединение с Bigtable.

Сообщение об ошибке:

Bigtable does not support managed connections.

Вопросы:

  1. Есть ли решение этой проблемы?
  2. Это известная проблема, и есть ли план для ее устранения или корректировки?
  3. Есть ли другой способ реализации мультисканирования как функции загрузки для Pig, который будет работать с Bigtable?

Подробности:

Jar-файлы:

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

Вот простой скрипт Pig, использующий мою пользовательскую функцию загрузки:

%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 создает список объектов Scan для выполнения нескольких сканирований на разных диапазонах данных в таблице events_sessions, определяемой временным диапазоном между gte и lt и sharded с SHARD_FIRST до SHARD_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» на «правда». Вы можете видеть из дорожки стека ниже, что мой код (MultiScanTableInputFormat) пытается инициализировать объект HTable, который вызывает getConnectionInternal (), который не предоставляет опцию для установки для управляемого значения false. Спустившись по трассировке стека, вы попадете в AbstractBigtableConnection, который не примет управляемый = истина и, следовательно, приведет к сбою соединения с Bigtable.

Вот трассировка стека, показывающая ошибку:

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
Автор: EduBoom Источник Размещён: 29.08.2019 09:37

Ответы (2)


1 плюс

Решение

Первоначальная проблема была вызвана использованием устаревших и устаревших клиентских jar-файлов и классов hbase.

Я обновил свой код для использования новейших jar-клиентов hbase, предоставленных Google, и первоначальная проблема была исправлена.

Я все еще застреваю с некоторой проблемой ZK, которую я все еще не выяснил, но это разговор для другого вопроса.

На это ответили!

Автор: EduBoom Размещён: 29.03.2017 06:31

0 плюса

Я столкнулся с тем же сообщением об ошибке:

Bigtable не поддерживает управляемые соединения.

Однако, согласно моим исследованиям, основная причина заключается в том, что класс HTableне может быть создан явно. После того, как изменили способ построения с HTableпомощью connection.getTable. Проблема решена.

Автор: user1530527 Размещён: 11.01.2019 03:24
Вопросы из категории :
32x32