千家信息网

hive连接hbase外部表错误怎么办

发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,这篇文章主要为大家展示了"hive连接hbase外部表错误怎么办",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"hive连接hbase外部表错误怎么办"这篇
千家信息网最后更新 2025年02月07日hive连接hbase外部表错误怎么办

这篇文章主要为大家展示了"hive连接hbase外部表错误怎么办",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"hive连接hbase外部表错误怎么办"这篇文章吧。

在hive中执行创建hbase的外部表,执行创建脚本:

hive> CREATE EXTERNAL TABLE hbase_userFace(id string, mobile string,name string)     > STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'     > WITH SERDEPROPERTIES("hbase.columns.mapping" = ":key,faces:mobile,faces:name")    > TBLPROPERTIES("hbase.table.name" = "userFace");

报错如下:

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:org.apache.hadoop.hbase.client.RetriesExhaustedException: Can't get the locations        at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.getRegionLocations(RpcRetryingCallerWithReadReplicas.java:312)        at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:153)        at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:61)        at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:200)        at org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.java:320)        at org.apache.hadoop.hbase.client.ClientScanner.nextScanner(ClientScanner.java:295)        at org.apache.hadoop.hbase.client.ClientScanner.initializeScannerInConstruction(ClientScanner.java:160)        at org.apache.hadoop.hbase.client.ClientScanner.(ClientScanner.java:155)        at org.apache.hadoop.hbase.client.HTable.getScanner(HTable.java:811)        at org.apache.hadoop.hbase.MetaTableAccessor.fullScan(MetaTableAccessor.java:602)        at org.apache.hadoop.hbase.MetaTableAccessor.tableExists(MetaTableAccessor.java:366)        at org.apache.hadoop.hbase.client.HBaseAdmin.tableExists(HBaseAdmin.java:303)        at org.apache.hadoop.hbase.client.HBaseAdmin.tableExists(HBaseAdmin.java:313)        at org.apache.hadoop.hive.hbase.HBaseStorageHandler.preCreateTable(HBaseStorageHandler.java:200)        at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.createTable(HiveMetaStoreClient.java:664)        at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.createTable(HiveMetaStoreClient.java:657)        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)        at java.lang.reflect.Method.invoke(Method.java:606)        at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.invoke(RetryingMetaStoreClient.java:156)        at com.sun.proxy.$Proxy8.createTable(Unknown Source)        at org.apache.hadoop.hive.ql.metadata.Hive.createTable(Hive.java:714)        at org.apache.hadoop.hive.ql.exec.DDLTask.createTable(DDLTask.java:4135)        at org.apache.hadoop.hive.ql.exec.DDLTask.execute(DDLTask.java:306)        at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:160)        at org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:88)        at org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1653)        at org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1412)        at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1195)        at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1059)        at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1049)        at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:213)        at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:165)        at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:376)        at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:736)        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:681)        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)        at java.lang.reflect.Method.invoke(Method.java:606)        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)        at org.apache.hadoop.util.RunJar.main(RunJar.java:136))

看错误应该是连不上hbase,hbase是用zookeeper管理的,进行如下测试:

1. 测试单节点hbase的连接

$ hive -hiveconf hbase.master=master:60000

进入hive的cli后,执行创建外部表的脚本,发现还是报错。

2. 测试集群hbase的连接

hive -hiveconf hbase.zookeeper.quorum=slave1,slave2,master,slave4,slave5,slave6,slave7

进入hive的cli后,执行创建外部表的脚本,发现创建成功。

由此可见,是hive读取hbase的zookeeper时出错了。查看hive-site.xml文件中,有个名为hive.zookeeper.quorum的property,复制一份改为hbase.zookeeper.quorum的属性。如下:

      hbase.zookeeper.quorum    slave1,slave2,master,slave4,slave5,slave6,slave7          

至此,问题解决,创建hbase外部表成功。

以上是"hive连接hbase外部表错误怎么办"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0