我想使用Java代码连接MetaStore。我不知道如何在Hive-Site.xml文件中设置配置设置,以及将Hive-Site.xml文件发布到何处。请帮忙。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
public class HiveMetastoreJDBCTest {
public static void main(String[] args) throws Exception {
Connection conn = null;
try {
HiveConf conf = new HiveConf();
conf.addResource(new Path("file:///path/to/hive-site.xml"));
Class.forName(conf.getVar(ConfVars.METASTORE_CONNECTION_DRIVER));
conn = DriverManager.getConnection(
conf.getVar(ConfVars.METASTORECONNECTURLKEY),
conf.getVar(ConfVars.METASTORE_CONNECTION_USER_NAME),
conf.getVar(ConfVars.METASTOREPWD));
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(
"select t.tbl_name, s.location from tbls t " +
"join sds s on t.sd_id = s.sd_id");
while (rs.next()) {
System.out.println(rs.getString(1) + " : " + rs.getString(2));
}
}
}
}
最佳答案
将这些行添加到 hive-site.xml 中:
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hiveuser</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hivepass</value>
</property>
在
jdbc:mysql://localhost:3306/hive
中,3306
是您的默认mysql端口。 hive
是我们的Hive Metastore的mysql数据库名称。将
hiveuser
更改为您的mysql配置单元用户名,并将hivepass
更改为您的mysql配置单元密码。如果尚未在mysql中为hive metastore创建数据库,请在终端中执行此步骤:
mysql -u root -p
输入您的mysql根密码。
mysql> create database hive;
mysql> create user 'hiveuser'@'%' IDENTIFIED BY 'hivepass';
mysql> GRANT all on *.* to 'hiveuser'@localhost identified by 'hivepass';
mysql> flush privileges;
在这里,
hiveuser
和hivepass
分别是您为配置单元metastore提供的用户名和密码。