【问题标题】:Cannot connect from Titan to Google Bigtable via Hbase client无法通过 Hbase 客户端从 Titan 连接到 Google Bigtable
【发布时间】:2016-01-06 06:42:48
【问题描述】:

我正在尝试使用其 HBase 客户端通过 Google Cloud Bigtable 服务连接到带有 Hadoop 2(HBase 1.0.2 客户端)(在https://github.com/thinkaurelius/titan/wiki/Downloads 中提供)的 Titan 1.0.0。

通过关注this procedure,我可以从 GCE 实例中的 HBase shell 成功连接到 Bigtable。 hbase-site.xml是根据模板,我已经下载了ALPN_VERSION=8.1.5.v20150921的Bigtable jars(Oracle JDK SE 1.8.0_60)

<configuration>
  <property>
    <name>hbase.client.connection.impl</name>
    <value>com.google.cloud.bigtable.hbase1_0.BigtableConnection</value>
  </property>
  <property>
    <name>google.bigtable.cluster.name</name>
    <value>[YOUR-CLUSTER-ID]</value>
  </property>
  <property>
    <name>google.bigtable.project.id</name>
    <value>[YOUR-PROJECT-ID]</value>
  </property>
  <property>
    <name>google.bigtable.zone.name</name>
    <value>[YOUR-ZONE-NAME]</value>
  </property>
</configuration>

然后,我将hbase-site.xml 复制到titan-1.0.0-hadoop2/conf 目录,并将Bigtable jar 复制到titan-1.0.0-hadoop2/lib 文件夹。

然后,在titan-1.0.0-hadoop2 文件夹上,我运行./run/gremlin.sh 并启动控制台。

因此,当尝试使用 HBase 客户端创建连接时(配置为指向 Bigtable 集群)...

TitanGraph graph = TitanFactory.build().set("storage.backend", "hbase").open();

...我在 Gremlin 控制台中收到以下异常:

com.google.cloud.bigtable.hbase1_0.BigtableConnection cannot be cast to org.apache.hadoop.hbase.client.ClusterConnection

这是堆栈跟踪:

gremlin> TitanFactory.build().set("storage.backend", "hbase").open(); SLF4J:类路径包含多个 SLF4J 绑定。 SLF4J:在 [jar:file:/usr/lib/titan-1.0.0-hadoop2/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] 中找到绑定 SLF4J:在 [jar:file:/usr/lib/titan-1.0.0-hadoop2/lib/logback-classic-1.1.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] 中找到绑定 SLF4J:有关说明,请参见 http://www.slf4j.org/codes.html#multiple_bindings。 SLF4J:实际绑定的类型为 [org.slf4j.impl.Log4jLoggerFactory] 13:42:24 警告 org.apache.hadoop.util.NativeCodeLoader - 无法为您的平台加载 native-hadoop 库...在适用的情况下使用内置 java 类 13:42:25 警告 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager - getDeployment() 期间出现意外异常 java.lang.ClassCastException:com.google.cloud.bigtable.hbase1_0.BigtableConnection 无法转换为 org.apache.hadoop.hbase.client.ClusterConnection 在 org.apache.hadoop.hbase.client.HBaseAdmin.(HBaseAdmin.java:225) 在 com.thinkaurelius.titan.diskstorage.hbase.HConnection1_0.getAdmin(HConnection1_0.java:28) 在 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager.getAdminInterface(HBaseStoreManager.java:960) 在 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager.ensureTableExists(HBaseStoreManager.java:747) 在 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager.getLocalKeyPartition(HBaseStoreManager.java:556) 在 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager.getDeployment(HBaseStoreManager.java:347) 在 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager.getFeatures(HBaseStoreManager.java:389) 在 com.thinkaurelius.titan.graphdb.configuration.GraphDatabaseConfiguration.(GraphDatabaseConfiguration.java:1321) 在 com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:94) 在 com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:84) 在 com.thinkaurelius.titan.core.TitanFactory$Builder.open(TitanFactory.java:139) 在 com.thinkaurelius.titan.core.TitanFactory$Builder$open$0.call(未知来源) 在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:110) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:114) 在 groovysh_evaluate.run(groovysh_evaluate:3) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) 在 org.codehaus.groovy.tools.shell.Interpreter.evaluate(Interpreter.groovy:69) 在 org.codehaus.groovy.tools.shell.Groovysh.execute(Groovysh.groovy:185) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) 在 org.codehaus.groovy.tools.shell.Shell.leftShift(Shell.groovy:119) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) 在 org.codehaus.groovy.tools.shell.ShellRunner.work(ShellRunner.groovy:94) 在 org.codehaus.groovy.tools.shell.InteractiveShellRunner.super$2$work(InteractiveShellRunner.groovy) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) 在 groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324) 在 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1207) 在 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:130) 在 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuper0(ScriptBytecodeAdapter.java:150) 在 org.codehaus.groovy.tools.shell.InteractiveShellRunner.work(InteractiveShellRunner.groovy:123) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) 在 org.codehaus.groovy.tools.shell.ShellRunner.run(ShellRunner.groovy:58) 在 org.codehaus.groovy.tools.shell.InteractiveShellRunner.super$2$run(InteractiveShellRunner.groovy) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) 在 groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324) 在 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1207) 在 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:130) 在 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuper0(ScriptBytecodeAdapter.java:150) 在 org.codehaus.groovy.tools.shell.InteractiveShellRunner.run(InteractiveShellRunner.groovy:82) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) 在 org.apache.tinkerpop.gremlin.console.Console.(Console.groovy:144) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) 在 org.apache.tinkerpop.gremlin.console.Console.main(Console.groovy:303) 13:42:25 警告 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager - getDeployment() 期间出现意外异常 java.lang.ClassCastException:com.google.cloud.bigtable.hbase1_0.BigtableConnection 无法转换为 org.apache.hadoop.hbase.client.ClusterConnection 在 org.apache.hadoop.hbase.client.HBaseAdmin.(HBaseAdmin.java:225) 在 com.thinkaurelius.titan.diskstorage.hbase.HConnection1_0.getAdmin(HConnection1_0.java:28) 在 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager.getAdminInterface(HBaseStoreManager.java:960) 在 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager.ensureTableExists(HBaseStoreManager.java:747) 在 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager.getLocalKeyPartition(HBaseStoreManager.java:556) 在 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager.getDeployment(HBaseStoreManager.java:347) 在 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager.getFeatures(HBaseStoreManager.java:389) 在 com.thinkaurelius.titan.diskstorage.Backend.getStandaloneGlobalConfiguration(Backend.java:438) 在 com.thinkaurelius.titan.graphdb.configuration.GraphDatabaseConfiguration.(GraphDatabaseConfiguration.java:1322) 在 com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:94) 在 com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:84) 在 com.thinkaurelius.titan.core.TitanFactory$Builder.open(TitanFactory.java:139) 在 com.thinkaurelius.titan.core.TitanFactory$Builder$open$0.call(未知来源) 在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:110) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:114) 在 groovysh_evaluate.run(groovysh_evaluate:3) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) 在 org.codehaus.groovy.tools.shell.Interpreter.evaluate(Interpreter.groovy:69) 在 org.codehaus.groovy.tools.shell.Groovysh.execute(Groovysh.groovy:185) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) 在 org.codehaus.groovy.tools.shell.Shell.leftShift(Shell.groovy:119) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) 在 org.codehaus.groovy.tools.shell.ShellRunner.work(ShellRunner.groovy:94) 在 org.codehaus.groovy.tools.shell.InteractiveShellRunner.super$2$work(InteractiveShellRunner.groovy) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) 在 groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324) 在 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1207) 在 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:130) 在 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuper0(ScriptBytecodeAdapter.java:150) 在 org.codehaus.groovy.tools.shell.InteractiveShellRunner.work(InteractiveShellRunner.groovy:123) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) 在 org.codehaus.groovy.tools.shell.ShellRunner.run(ShellRunner.groovy:58) 在 org.codehaus.groovy.tools.shell.InteractiveShellRunner.super$2$run(InteractiveShellRunner.groovy) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) 在 groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324) 在 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1207) 在 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:130) 在 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuper0(ScriptBytecodeAdapter.java:150) 在 org.codehaus.groovy.tools.shell.InteractiveShellRunner.run(InteractiveShellRunner.groovy:82) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) 在 org.apache.tinkerpop.gremlin.console.Console.(Console.groovy:144) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) 在 org.apache.tinkerpop.gremlin.console.Console.main(Console.groovy:303) 13:42:25 警告 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager - getDeployment() 期间出现意外异常 java.lang.ClassCastException:com.google.cloud.bigtable.hbase1_0.BigtableConnection 无法转换为 org.apache.hadoop.hbase.client.ClusterConnection 在 org.apache.hadoop.hbase.client.HBaseAdmin.(HBaseAdmin.java:225) 在 com.thinkaurelius.titan.diskstorage.hbase.HConnection1_0.getAdmin(HConnection1_0.java:28) 在 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager.getAdminInterface(HBaseStoreManager.java:960) 在 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager.ensureTableExists(HBaseStoreManager.java:747) 在 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager.getLocalKeyPartition(HBaseStoreManager.java:556) 在 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager.getDeployment(HBaseStoreManager.java:347) 在 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager.getFeatures(HBaseStoreManager.java:389) 在 com.thinkaurelius.titan.diskstorage.common.AbstractStoreManager.getMetaDataSchema(AbstractStoreManager.java:44) 在 com.thinkaurelius.titan.diskstorage.hbase.HBaseKeyColumnValueStore.(HBaseKeyColumnValueStore.java:67) 在 com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager.openDatabase(HBaseStoreManager.java:446) 在 com.thinkaurelius.titan.diskstorage.keycolumnvalue.KeyColumnValueStoreManager.openDatabase(KeyColumnValueStoreManager.java:29) 在 com.thinkaurelius.titan.diskstorage.Backend.getStandaloneGlobalConfiguration(Backend.java:449) 在 com.thinkaurelius.titan.graphdb.configuration.GraphDatabaseConfiguration.(GraphDatabaseConfiguration.java:1322) 在 com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:94) 在 com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:84) 在 com.thinkaurelius.titan.core.TitanFactory$Builder.open(TitanFactory.java:139) 在 com.thinkaurelius.titan.core.TitanFactory$Builder$open$0.call(未知来源) 在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:110) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:114) 在 groovysh_evaluate.run(groovysh_evaluate:3) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) 在 org.codehaus.groovy.tools.shell.Interpreter.evaluate(Interpreter.groovy:69) 在 org.codehaus.groovy.tools.shell.Groovysh.execute(Groovysh.groovy:185) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) 在 org.codehaus.groovy.tools.shell.Shell.leftShift(Shell.groovy:119) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) 在 org.codehaus.groovy.tools.shell.ShellRunner.work(ShellRunner.groovy:94) 在 org.codehaus.groovy.tools.shell.InteractiveShellRunner.super$2$work(InteractiveShellRunner.groovy) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) 在 groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324) 在 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1207) 在 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:130) 在 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuper0(ScriptBytecodeAdapter.java:150) 在 org.codehaus.groovy.tools.shell.InteractiveShellRunner.work(InteractiveShellRunner.groovy:123) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) 在 org.codehaus.groovy.tools.shell.ShellRunner.run(ShellRunner.groovy:58) 在 org.codehaus.groovy.tools.shell.InteractiveShellRunner.super$2$run(InteractiveShellRunner.groovy) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) 在 groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324) 在 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1207) 在 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:130) 在 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuper0(ScriptBytecodeAdapter.java:150) 在 org.codehaus.groovy.tools.shell.InteractiveShellRunner.run(InteractiveShellRunner.groovy:82) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) 在 org.apache.tinkerpop.gremlin.console.Console.(Console.groovy:144) 在 org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:215) 在 org.apache.tinkerpop.gremlin.console.Console.main(Console.groovy:303) com.google.cloud.bigtable.hbase1_0.BigtableConnection 无法转换为 org.apache.hadoop.hbase.client.ClusterConnection

我在其他上下文中发现了具有相同例外的其他问题:Unable to connect to Google Bigtable using HBase REST api
那个补丁也能解决我在 Titan 中遇到的这个异常吗?

【问题讨论】:

  • 我的理解是Titan目前使用的是1.0之前的HBase。 Cloud Bigtable 至少需要 HBase 1.0 或更高版本。我也了解到正在进行更新。
  • 感谢莱斯沃格尔!我正在使用 Titan 1.0.0 和 Hadoop 2 分发版here,它实际上使用 HBase 1.0.2 客户端。我会很高兴有一个托管的 Google BigTable 集群作为 Titan 的后端!
  • 酷 - 这个周末我会花一些时间在这上面。希望您不介意我是否使用 Cloud Dataproc 进行设置?
  • 很高兴收到你的来信。当然,您可以使用 Dataproc 进行设置。
  • 这个周末没去,周五再试。

标签: hbase titan bigtable google-cloud-bigtable


【解决方案1】:
推荐的答案 Google Cloud

泰坦不再维护;但是,您可以将JanusGraph(Titan 的一个分支)与Google Cloud Bigtable 一起使用;有关详细信息,请参阅以下指南:

GitHub 托管 JanusGraph releases

【讨论】:

    猜你喜欢
    • 2017-12-24
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 2015-08-19
    • 1970-01-01
    相关资源
    最近更新 更多