簡體   English   中英

無法連接到Google Cloud Bigtable實例

[英]Unable to connect to Google Cloud Bigtable instance

我正在嘗試使用HBase API連接到Google Cloud Bigtable實例。 我正在使用Java 1.8。 我遵循以下教程:

https://cloud.google.com/bigtable/docs/samples-java-hello https://cloud.google.com/bigtable/docs/using-maven

但是由於某種原因,我無法連接到此Bigtable實例。 我正在使用有效的ProjectID和InstanceID,但仍然無法連接。 請在下面找到例外:

java.lang.IllegalStateException: Could not find an appropriate constructor for com.google.cloud.bigtable.hbase1_2.BigtableConnection
    at com.google.cloud.bigtable.hbase.BigtableConfiguration.connect(BigtableConfiguration.java:88)
    at com.google.cloud.bigtable.hbase.BigtableConfiguration.connect(BigtableConfiguration.java:72)
    at com.kp.sensor.iot.IOTSensorPull.makeConnection(IOTSensorPull.java:149)
    at com.kp.sensor.iot.IOTSensorPull.populateTemperature(IOTSensorPull.java:159)
    at com.kp.sensor.iot.IOTSensorPull.readMessagesFromRFIDSub(IOTSensorPull.java:126)
    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.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
    at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
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 com.google.cloud.bigtable.hbase.BigtableConfiguration.connect(BigtableConfiguration.java:85)
    ... 18 more
Caused by: java.lang.NoSuchMethodError: com.google.cloud.bigtable.config.BigtableOptions$Builder.setInstanceId(Ljava/lang/String;)Lcom/google/cloud/bigtable/config/BigtableOptions$Builder;
    at com.google.cloud.bigtable.hbase.BigtableOptionsFactory.fromConfiguration(BigtableOptionsFactory.java:244)
    at org.apache.hadoop.hbase.client.AbstractBigtableConnection.<init>(AbstractBigtableConnection.java:129)
    at org.apache.hadoop.hbase.client.AbstractBigtableConnection.<init>(AbstractBigtableConnection.java:104)
    at com.google.cloud.bigtable.hbase1_2.BigtableConnection.<init>(BigtableConnection.java:50)

以下是我的Maven依賴項:

<dependency>
    <groupId>com.google.cloud.bigtable</groupId>
    <artifactId>bigtable-hbase-1.2</artifactId>
    <version>0.9.4</version>
</dependency>

<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-client</artifactId>
    <version>1.1.5</version>
</dependency>

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-tcnative-boringssl-static</artifactId>
    <version>1.1.33.Fork19</version>
</dependency>

由於這是一個Spring-boot應用程序,因此還存在其他依賴項。

同樣,在這種情況下,ProjectID和InstanceID具有相同的值。

有人可以讓我知道這里可能是什么問題嗎?

對於它的價值,我的org.apache.hbase版本是1.2.4。我還懷疑由於您的項目ID等於實例ID,因此您指的是ProjectID別名,而不是實際的基礎名稱,因為我認為這是自動分配? 我在使用Project別名的其他地方遇到了問題,而Google似乎希望底層ID。 但是查看異常似乎不是問題所在...

實際上,我認為我發現了這背后的另一個原因,它可能更相關:我注意到,當bigtable-hbase-1.2-0.9.4.jar不在精確的位置'/ com / google / cloud / bigtable / bigtable-hbase-1.2 / 0.9.4 / bigtable-hbase-1.2-0.9.4.jar'會出現此問題,因為代碼似乎檢查版本號1.2(基於父文件夾?)

就我而言,這似乎與該API的Bigtable-Dataflow部分有關,而與一般的Bigtable API(即POM.xml中的bigtable-hbase-dataflow)無關。 Bigtable API的通用部分似乎並不在乎JAR的位置。

我在Google的VM上進行測試時碰到了這一點,為了簡化起見,我將所有JAR都轉儲到一個目錄中。 盡管它適用於我的本地機器,但Eclipse在啟動代碼之前正確地構建了所有依賴關系路徑,因此它對於通用的Bigtable功能很好地起作用,但是對於Bigtable-Dataflow功能卻不能起作用。 我將.JAR放在正確的路徑上后,問題就消失了。

我猜錯是從這里來的嗎?
https://github.com/GoogleCloudPlatform/cloud-bigtable-client/blob/master/bigtable-hbase-parent/bigtable-hbase/src/main/java/com/google/cloud/bigtable/hbase/BigtableConfiguration.java# L43

抄送:@ solomon-duskis

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM