Zug*_*alt 1 java hadoop hive jdbc
我有一个运行在默认端口10000上的hive服务器启动:hive --service hiveserver
我然后使用Hive JDBC Client连接到它的java程序(教程!):
Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/default", "", "");
Run Code Online (Sandbox Code Playgroud)
该教程运行并testhivedrivertable在默认数据库上创建一个表并对其进行描述.这工作正常,我的蜂巢服务记录了一堆东西.
然后我尝试将shell打开到同一个DB,通过hive -p 10000它获取shell但是我看不到java程序创建的表(并且java程序也看不到我在shell中创建的表).此外,当我在hive shell中运行命令时,控制台中没有显示任何内容,所以我很确定我正在与另一个hive实例进行通信.
如何让hive shell与java JDBC驱动程序相同的数据库进行交互?!
小智 8
你正在和同一个Hive实例交谈; 不幸的是,不一样的Metastore.
Hive Metastore是一个存储有关您的Hive表的元数据的数据库(例如,表名,列名和类型,表位置,正在使用的存储处理程序,表中的桶数,如果有的话则排序列,如果有的话则分区列等等). ).创建表时,此Metastore将使用与新表相关的信息进行更新,当您在该表上发出查询时,该表将被查询.
然而,Hive创始人的一个重要考虑因素是让它易于开箱即用.这促使他们默认使用嵌入式Derby数据库作为Metastore.这不需要设置,但副作用是数据库的范围在单个CLI调用或单个JDBC客户端上下文中.因此,Hive元数据不会在客户端的多个调用或客户端的多个调用中持久存在.这就是你所见证的.
您应该迁移到使用独立的Metastore,它将在多个Hive客户端之间保留数据.MySQL和PostGres是很受欢迎的选择.Cloudera有一篇关于配置Hive和MySQL以使用MySQL Metastore的文章.它可以在这里找到.
| 归档时间: |
|
| 查看次数: |
5903 次 |
| 最近记录: |