【发布时间】:2014-11-21 05:00:30
【问题描述】:
我使用的是 hive jdbc,但之后我才知道有 hive metastore java api (here),您可以通过它再次连接到 hive 并操作 hive 数据库。
但我想知道这两种方式之间到底有什么区别。
很抱歉,如果询问任何明显的问题,但任何信息都将受到高度赞赏。
【问题讨论】:
-
即使我也想了解其中的区别。
我使用的是 hive jdbc,但之后我才知道有 hive metastore java api (here),您可以通过它再次连接到 hive 并操作 hive 数据库。
但我想知道这两种方式之间到底有什么区别。
很抱歉,如果询问任何明显的问题,但任何信息都将受到高度赞赏。
【问题讨论】:
顾名思义,hive 中的元存储是 hive db 元数据的存储。 这个存储通常是一个 RDBMS。 Metastore api 支持与 RDBMS 交互以修补/调整元数据,而不是实际的 hive db/data。对于正常使用,您可能永远不想/不得不使用这些。我认为这些是为致力于创建工具集的人设计的使用 Metastore,而不是日常使用。
【讨论】:
据我了解,有两种方式可以连接到 Hive
现在,在早期版本的 hive 中,hiveserver2 曾经不太稳定,实际上它对多线程的支持也很有限。我想,那个领域的情况可能已经有所改善。
所以对于 JDBC api - 是的,它可以让您使用 JDBC 和 sql 进行通信。
对于 Metastore 连接,似乎有 2 个功能。
DDL -
对于 DDL,metastore API 派上用场,org.apache.hadoop.hive.metastore.HiveMetaStoreClient HiveMetaStoreClient 类可用于此目的
DML -
我发现在这方面有用的是 org.apache.hadoop.hive.ql.Driver https://hive.apache.org/javadocs/r0.13.1/api/ql/org/apache/hadoop/hive/ql/Driver.html hive.ql.Driver 类
这个类有一个名为run() 的方法,它允许您执行一条SQL 语句并返回结果。
例如你可以这样做
Driver driver = new Driver(hiveConf);
HiveMetaStoreClient client = new HiveMetaStoreClient(hiveConf);
SessionState.start(new CliSessionState(hiveConf));
driver.run("select * from employee);
// DDL example
client.dropTable(db, table);
【讨论】: