无法通过 thrift 获取配置单元远程 Metastore table 信息
Unable to get the hive remote metastore table information over thrift
我可以使用以下程序获取本地 mysql 元存储设置中的元存储 table 信息。
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 MetaStoreTest {
public static void main(String[] args) throws Exception {
Connection conn = null;
try {
HiveConf conf = new HiveConf();
conf.addResource(new Path("/home/hadoop/hive-0.12.0/conf/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));
}
}
finally {
if (conn != null) {
conn.close();
}
}
}
}
目前正在尝试使用上述程序从远程元存储中获取元存储 tables,使用 thrift.In 我当前的配置单元-site.xml 我有这些参数,
hive.metastore.uris = thrift://host1:9083, thrift://host2:9083
hive.metastore.local = false
没有参数:
javax.jdo.option.ConnectionDriverName, javax.jdo.option.ConnectionUserName, javax.jdo.option.ConnectionPassword
那么,我如何通过 thrift 协议获取元table 信息。我在 host2 上 运行ning 上面的代码。请提出建议。
另外,当我 运行 上面的代码时,它会显示关于 :
的信息
METASTORE_CONNECTION_DRIVER as derby connection embedded driver,
METASTORECONNECTURLKEY as jdbc:mysql://<host name>/<database name>?createDatabaseIfNotExist=true,
METASTORE_CONNECTION_USER_NAME as "APP" and
METASTOREPWD as "mine"
替换这部分代码 :
conf.addResource(new Path("/home/hadoop/hive-0.12.0/conf/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));
与下面 :
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://host2:3306/metastore", "urusername", "urpassword");
[注意:根据您的设置相应地更改 Metastore 数据库名称、用户和密码。]
现在 :
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("show tables");
while (rs.next()) {
System.out.println("Tables:" +rs.getString(1));
}
看看你是否获得了 Metastore table 名称。
我可以使用以下程序获取本地 mysql 元存储设置中的元存储 table 信息。
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 MetaStoreTest {
public static void main(String[] args) throws Exception {
Connection conn = null;
try {
HiveConf conf = new HiveConf();
conf.addResource(new Path("/home/hadoop/hive-0.12.0/conf/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));
}
}
finally {
if (conn != null) {
conn.close();
}
}
}
}
目前正在尝试使用上述程序从远程元存储中获取元存储 tables,使用 thrift.In 我当前的配置单元-site.xml 我有这些参数,
hive.metastore.uris = thrift://host1:9083, thrift://host2:9083
hive.metastore.local = false
没有参数:
javax.jdo.option.ConnectionDriverName, javax.jdo.option.ConnectionUserName, javax.jdo.option.ConnectionPassword
那么,我如何通过 thrift 协议获取元table 信息。我在 host2 上 运行ning 上面的代码。请提出建议。
另外,当我 运行 上面的代码时,它会显示关于 :
的信息METASTORE_CONNECTION_DRIVER as derby connection embedded driver,
METASTORECONNECTURLKEY as jdbc:mysql://<host name>/<database name>?createDatabaseIfNotExist=true,
METASTORE_CONNECTION_USER_NAME as "APP" and
METASTOREPWD as "mine"
替换这部分代码 :
conf.addResource(new Path("/home/hadoop/hive-0.12.0/conf/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));
与下面 :
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://host2:3306/metastore", "urusername", "urpassword");
[注意:根据您的设置相应地更改 Metastore 数据库名称、用户和密码。]
现在 :
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("show tables");
while (rs.next()) {
System.out.println("Tables:" +rs.getString(1));
}
看看你是否获得了 Metastore table 名称。