Hive-site.xml に関しては、私のテスト マシンからのサンプルです。これは、localhost にインストールされた MySql サーバーでハイブ メタストアをセットアップするためのものです。
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value>
<description>metadata is stored in a MySQL server</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>MySQL JDBC driver class</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>user name for connecting to mysql server </description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>password for connecting to mysql server </description>
</property>
</configuration>
<system_path>/apache-hive-x.xx.x-bin/conf
ディレクトリ内に配置する必要があるこのファイル
このファイルをJavaで使用する方法についてはあまり考えていません。しかし、Javaコードで接続文字列を指定することで、以下のようにすることができます
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class WriteToHive {
private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
static Connection con;
static Statement stmt;
public WriteToHive() throws SQLException, ClassNotFoundException, Exception {
try {
Class.forName(driverName);
} catch (ClassNotFoundException e){
e.printStackTrace();
throw new ClassNotFoundException("No JDBC Hive Driver found");
//System.exit(1);
} catch (Exception e) {
e.printStackTrace();
throw new Exception(e);
//System.exit(1);
}
con = DriverManager.getConnection("jdbc:hive://localhost:10000/rajen","","");
stmt = con.createStatement();
}
public static void main(String[] args) throws SQLException {
try {
Class.forName(driverName);
} catch (ClassNotFoundException e){
e.printStackTrace();
System.exit(1);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
con = DriverManager.getConnection("jdbc:hive://localhost:10000/rajen","","");
stmt = con.createStatement();
//Connection con = DriverManager.getConnection("jdbc:hive://","","");
String tableName = "company_mas_hive_eclipse_trial";
ResultSet res = stmt.executeQuery("use rajen");
String sql = "DROP TABLE IF EXISTS " + tableName;
System.out.println("Running: " + sql);
res = stmt.executeQuery(sql);
sql = "CREATE TABLE IF NOT EXISTS rajen.company_mas_hive_eclipse_trial (" +
"Name string," +
"dateofincorporation string," +
"country string)" +
"ROW FORMAT DELIMITED FIELDS TERMINATED BY \",\"";
System.out.println("Running: " + sql);
res = stmt.executeQuery(sql);
sql = "show tables '" + tableName + "'";
System.out.println("Running: " + sql);
res = stmt.executeQuery(sql);
if (res.next()){
System.out.println(res.getString(1));
}
sql = "describe " + tableName;
System.out.println("Running: " + sql);
res = stmt.executeQuery(sql);
System.out.println("=========================================");
while (res.next()) {
System.out.println(res.getString(1) + "\t" + res.getString(2));
}
System.out.println("=========================================");
// load data into table
// NOTE: filepath has to be local to the hive server
// NOTE: /tmp/a.txt is a ctrl-A separated file with two fields per line
String filepath = "/home/seo/Refrence_Doc/sampledata/companymas"; //"/rajen/companymas";
sql = "load data local inpath '" + filepath + "' into table " + tableName;
System.out.println("Running: " + sql);
res = stmt.executeQuery(sql);
// load data into table
// NOTE: filepath has to be local to the hive server
// NOTE: /tmp/a.txt is a ctrl-A separated file with two fields per line
filepath = "/rajen/companymas";
sql = "load data inpath '" + filepath + "' into table " + tableName;
System.out.println("Running: " + sql);
//res = stmt.executeQuery(sql);
// select * query
sql = "select * from " + tableName;
System.out.println("Running: " + sql);
res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(String.valueOf(res.getString(1)) + "\t" + res.getString(2));
}
// regular hive query
sql = "select count(*) from " + tableName;
System.out.println("Running: " + sql);
res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(res.getString(1));
}
}
public void createTable(String def, String dbname) throws SQLException{
@SuppressWarnings("unused")
ResultSet res = stmt.executeQuery("use " + dbname);
stmt.executeQuery(def);
}
public static void loadData(String filepath, String tableName) throws SQLException{
stmt.executeQuery("load data local inpath '" + filepath + "' into table " + tableName);
}
}