2

有沒有人有過使用HBaseStorage通過Pig在Dataproc上從Bigtable載入數據的經驗或成功?使用HBaseStorage從Bigtable通過Pig載入Dataproc

這是我試圖運行的一個非常簡單的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雲Dataproc控制檯
  3. 上Dataproc主(/opt/hbase-1.2.1)以下說明
  4. 安裝HBase的殼上https://cloud.google.com/bigtable/docs/installing-hbase-shell
  5. 添加的屬性到hbase-site.xml爲my_bt和BigtableConnection類
  6. 創建文件t.pig經由命令上述
  7. 調用豬列出內容: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
  8. 有以下錯誤指示BigtableConnecti上未找到類:

2017年3月21日15:30:48029 [JobControl作業控制] ERROR org.apache.hadoop.hbase.mapreduce.TableInputFormat - java.io.IOException的:拋出java.lang.ClassNotFoundException:COM .google.cloud.bigtable.hbase1_2.BigtableConnection

+0

我會建議使用陰影bigtable mapreduce jar,它具有所有的依賴關係喲你需要。轉到http://search.maven.org/#search%7Cga%7C1%7Cbigtable%20mapreduce,然後下載「shaded.jar」。 –

+0

看起來像',並且'由於缺少空間來分隔它們而自動附加到@SolomonDuskis的URL;你想訪問http://search.maven.org/#search%7Cga%7C1%7Cbigtable%20mapreduce來下載工件。 –

+0

我下載了shaded.jar並在提交豬作業時得到相同的錯誤。如果有幫助,我可以上傳運行測試時得到的輸出。 – EduBoom

回答

3

訣竅是獲得豬類路徑的所有依賴關係。使用所羅門指出的罐子,我創建了下列initialization action,下載兩個罐子,bigtable mapreduce jar和netty-tcnative-boringssl,並設置了豬類路徑。

#!/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;" 
    
+0

謝謝。我會試試:) – EduBoom

+0

pig-env.sh的加入確實有效。 但是HBaseStorage有BigTable客戶端API不支持的選項。 我沒有得到最小/最大時間戳選項的結果,但用-gte得到了結果。它接縫 - 不支持。 HBaseStorage使用RowFilter實現-gte和-lt,但BigTable的RowFilter實現不支持該功能。 我們在Pig作業中實際使用的是一個自定義加載程序,它可以創建Scan對象並執行setStartRow()和setStopRow()。我不知道這些是否被BigTable支持。我必須嘗試。 謝謝你的幫助。 愛德華多。 – EduBoom

+0

確實支持setStartRow()和setStopRow()。可以在https://github.com/GoogleCloudPlatform/cloud-bigtable-client在Cloud Bigtable客戶端庫中提出有關RowFilter問題的github問題 –