我正在尝试在嵌入式模式下试验Apache Drill 1.4并尝试连接到在EMR上运行的Hive - Drill正在EMR之外的服务器上运行。
我有一些基本问题需要澄清,有些配置问题需要解决。
这是我到目前为止所拥有的 -
运行AWS EMR集群。 运行Drill Embedded服务器。
根据有关为Hive配置存储插件的文档https://drill.apache.org/docs/hive-storage-plugin/,我对是否使用Remote Metastore或Embedded Metastore感到困惑。 有什么区别?
接下来,我的EMR集群正在运行,这就是hive-site.xml的样子 -
<property>
<name>hive.metastore.uris</name>
<value>thrift://ec2-XX-XX-XX-XX.compute-1.amazonaws.com:9083</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://ec2-XX-XX-XX-XX.compute-1.amazonaws.com:3306/hive?createDatabaseIfNotExist=true</value>
<description>username to use against metastore database</description>
</property>
还有其他属性,如MySQL用户名和密码等,但我想这些在这里很重要。
我应该使用哪一个连接到Hive?我试图将这两个放在存储插件中,但Drill并不接受它。
我试过的存储插件看起来像这样 -
{
"type": "hive",
"enabled": true,
"configProps": {
"hive.metastore.uris": "thrift://ec2-XX-XX-XX-XX.compute-1.amazonaws.com:9083",
"fs.default.name": "hdfs://ec2-XX-XX-XX-XX.compute-1.amazonaws.com/",
"hive.metastore.sasl.enabled": "false"
}
}
和
{
"type": "hive",
"enabled": true,
"configProps": {
"hive.metastore.uris": "thrift://ec2-XX-XX-XX-XX.compute-1.amazonaws.com:9083",
"javax.jdo.option.ConnectionURL": "jdbc:derby:ec2-XX-XX-XX-XX.compute-1.amazonaws.com;databaseName=data;create=true",
"hive.metastore.warehouse.dir": "/user/hive/warehouse",
"fs.default.name": "file:///",
"hive.metastore.sasl.enabled": "false"
}
}
如果你可以引导我进行设置,那将会很有帮助。 谢谢!
答案 0 :(得分:2)
是否使用远程Metastore或嵌入式Metastore?
嵌入模式:建议仅用于测试或实验目的。在此模式下,Metastore使用Derby数据库,数据库和Metastore服务都是嵌入在主HiveServer进程中。当您启动HiveServer进程时,两者都是为您启动的。
远程模式:Hive Metastore服务在其自己的JVM进程中运行。 HiveServer2,HCatalog和其他进程通过Thrift网络API(通过hive.metastore.uris属性配置)与之通信。 Metastore服务通过JDBC与Metastore数据库通信(通过javax.jdo.option.ConnectionURL属性配置)。这应该用于生产。
您正在使用class
存储Hive的元数据。因此,Drill需要MySQL
&amp; javax.jdo.option.ConnectionUserName
也可以创建连接。
示例配置单元插件(远程模式):
javax.jdo.option.ConnectionPassword
&LT; ---&GT; :可以从{
"type": "hive",
"enabled": true,
"configProps": {
"hive.metastore.uris":<--->,
"javax.jdo.option.ConnectionURL":<--->,
"javax.jdo.option.ConnectionDriverName":<--->,
"javax.jdo.option.ConnectionUserName":<--->,
"javax.jdo.option.ConnectionPassword":<--->,
"hive.metastore.warehouse.dir":<--->,
"fs.default.name":<--->
}
}
获取。
答案 1 :(得分:1)
我遇到了几个问题 -
hive --service metastore
时,我看到驱动程序名称不正确且driver class com.mysql.jdbc.Driver not found
的错误 - 所以我必须按照Step 2 here中的说明下载MySQL Connector驱动程序。 MySql可以连接后,Metastore可以连接到数据库:错误是mysql Database initialization failed; direct SQL is disabled
,但是
初始表需要存在。所以必须创建表
在这里完成了一个命令 - Getting MissingTableException: Required table missing VERSION when starting hive on mysql
转到 $ HIVE_HOME并在schematool上运行initschema选项:
bin/schematool -dbType mysql -initSchema
确保已清理了要移动此Metastore的mysql数据库。 Hive不需要表格或模式或表格。
之后,Metastore能够连接到外部数据库。现在,Hive已启动并运行远程Metastore。
现在我在新的EC2主机中托管了Drill(嵌入式)以连接到这个Metastore,它就像一个魅力!
curl -X POST -H "Content-Type: application/json" -d '{"name":"hive", "config": { "type": "hive", "enabled": true, "configProps": { "hive.metastore.uris":"thrift://ip-XX.XX.XX.XX.ec2.internal:9083", "javax.jdo.option.ConnectionURL":"jdbc:mysql://ip-XX.XX.XX.XX:3306/hive?createDatabaseIfNotExist=true", "javax.jdo.option.ConnectionDriverName":"com.mysql.jdbc.Driver", "javax.jdo.option.ConnectionUserName":"root", "javax.jdo.option.ConnectionPassword":"blah", "hive.metastore.warehouse.dir":"/user/hive/warehouse", "fs.default.name":"hdfs://ip-XX.XX.XX.XX.ec2.internal:8020" }}}' http://localhost:8047/storage/hive.json