Используйте HBaseStorage для загрузки из Bigtable через Pig на Dataproc

У кого-нибудь есть опыт или удалось загрузить данные из Bigtable через Pig на Dataproc с помощью HBaseStorage?

Вот очень простой скрипт Pig, который я пытаюсь запустить. Он завершается с ошибкой, указывающей, что не может найти класс BigtableConnection, и мне интересно, какие настройки мне не хватает для успешной загрузки данных из Bigtable.

raw = LOAD 'hbase://my_hbase_table'
       USING org.apache.pig.backend.hadoop.hbase.HBaseStorage(
       'cf:*', '-minTimestamp 1490104800000 -maxTimestamp 1490105100000 -loadKey true -limit 5')
       AS (key:chararray, data);

DUMP raw;

Шаги, которые я выполнил, чтобы настроить мой кластер:

  1. Запущен кластер Bigtable (my_bt); создал и заполнил my_hbase_table
  2. Запущен кластер Dataproc (my_dp) через cloud.google.com Консоль Cloud Dataproc
  3. Установлена ​​оболочка HBase на главном сервере Dataproc (/opt/hbase-1.2.1), следуя инструкциям на https://cloud.google.com/bigtable/docs/installing-hbase-shell
  4. Добавлены свойства в hbase-site.xml для классов my_bt и BigtableConnection
  5. Созданный файл t.pig с содержанием, указанным выше
  6. Вызов свиньи с помощью команды: gcloud beta dataproc jobs submit pig --cluster my_dp --file t.pig --jars /opt/hbase-1.2.1/lib/bigtable/bigtable-hbase-1.2-0.9.5.1.jar
  7. Получил следующую ошибку, указывающую, что класс BigtableConnection не найден:

2017-03-21 15: 30: 48,029 [JobControl] ОШИБКА org.apache.hadoop.hbase.mapreduce.TableInputFormat - java.io.IOException: java.lang.ClassNotFoundException: com.google.cloud.bigtable.hbase1_2.BigtableConnection

1 ответ

Решение

Хитрость заключается в получении всех зависимостей от пути к классу свиньи. Используя jar-файлы, на которые указывает Соломон, я создал следующее действие инициализации, которое загружает два jar-файла, bigtable mapreduce jar и netty-tcnative-boringssl, и устанавливает classpath pig.

#!/bin/bash
# Initialization action to set up pig for use with cloud bigtable
mkdir -p /opt/pig/lib/

curl http://repo1.maven.org/maven2/io/netty/netty-tcnative-boringssl-static/1.1.33.Fork19/netty-tcnative-boringssl-static-1.1.33.Fork19.jar \
    -f -o /opt/pig/lib/netty-tcnative-boringssl-static-1.1.33.Fork19.jar

curl http://repo1.maven.org/maven2/com/google/cloud/bigtable/bigtable-hbase-mapreduce/0.9.5.1/bigtable-hbase-mapreduce-0.9.5.1-shaded.jar \
    -f -o /opt/pig/lib/bigtable-hbase-mapreduce-0.9.5.1-shaded.jar

cat >>/etc/pig/conf/pig-env.sh <<EOF
#!/bin/bash

for f in /opt/pig/lib/*.jar; do
  if [ -z "\${PIG_CLASSPATH}" ]; then
    export PIG_CLASSPATH="\${f}"
  else
    export PIG_CLASSPATH="\${PIG_CLASSPATH}:\${f}"
  fi  
done
EOF

Затем вы можете передать в Bigtable конфигурации обычными способами:

  • Через hbase-site.xml
  • Указание свойств при отправке работы:

    PROPERTIES='hbase.client.connection.impl='
    PROPERTIES+='com.google.cloud.bigtable.hbase1_2.BigtableConnection'
    PROPERTIES+=',google.bigtable.instance.id=MY_INSTANCE'
    PROPERTIES+=',google.bigtable.project.id=MY_PROJECT'
    
    gcloud dataproc jobs submit pig --cluster MY_DATAPROC_CLUSTER \
        --properties="${PROPERTIES}"  \
        -e "f =  LOAD 'hbase://MY_TABLE' 
             USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('cf:*','-loadKey true') 
             AS (key:chararray, data); 
        DUMP f;"
    
Другие вопросы по тегам