私はhadoop Hive 0.9.0および1.1.2とnetbeansを使用しましたが、このエラーが発生し、この問題を解決できません。コードを作成してください:
public class Hive_test {
private static String driverName = "org.Apache.hadoop.Hive.jdbc.HiveDriver";
@SuppressWarnings("CallToThreadDumpStack")
public static void main(String[] args) throws SQLException {
try {
Class.forName(driverName);
} catch (ClassNotFoundException e){
e.printStackTrace();
System.exit(1);
}
System.out.println("commencer la connexion");
Connection con = DriverManager.getConnection("jdbc:Hive://localhost:10000/default",""," ");
Statement stmt = con.createStatement();
ResultSet res = stmt.executeQuery("select * from STATE");
while (res.next()){
System.out.println(String.valueOf(res.getInt(1)) + "\t" + res.getString(2));
System.out.println("sql terminer");
}
}
以下のエラー。
error :
commencer la connexion
Exception in thread "main" Java.lang.OutOfMemoryError: Java heap space
at org.Apache.thrift.protocol.TBinaryProtocol.readStringBody(TBinaryProtocol.Java:353)
at org.Apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.Java:215)
at org.Apache.thrift.TServiceClient.receiveBase(TServiceClient.Java:69)
at org.Apache.hadoop.Hive.service.ThriftHive$Client.recv_execute(ThriftHive.Java:116)
at org.Apache.hadoop.Hive.service.ThriftHive$Client.execute(ThriftHive.Java:103)
at org.Apache.hadoop.Hive.jdbc.HiveStatement.executeQuery(HiveStatement.Java:192)
at org.Apache.hadoop.Hive.jdbc.HiveStatement.execute(HiveStatement.Java:132)
at org.Apache.hadoop.Hive.jdbc.HiveConnection.configureConnection(HiveConnection.Java:132)
at org.Apache.hadoop.Hive.jdbc.HiveConnection.<init>(HiveConnection.Java:122)
at org.Apache.hadoop.Hive.jdbc.HiveDriver.connect(HiveDriver.Java:106)
at Java.sql.DriverManager.getConnection(DriverManager.Java:571)
at Java.sql.DriverManager.getConnection(DriverManager.Java:215)
at Hive.Hive_test.main(Hive_test.Java:22)
Hiveでコンテナーのヒープサイズを設定し、このエラーを解決できます。
Hadoop MapReduceフレームワーク上で動作するほとんどのツールは、ジョブのこれらのHadoopレベル設定を調整する方法を提供します。 Hiveでこれを行うには複数の方法があります。これらの3つをここに示します。
1)Hiveコマンドラインを介して直接渡します:
Hive -hiveconf mapreduce.map.memory.mb=4096 -hiveconf mapreduce.reduce.memory.mb=5120 -e "select count(*) from test_table;"
2)Hiveを呼び出す前にENV変数を設定します。
export Hive_OPTS="-hiveconf mapreduce.map.memory.mb=4096 -hiveconf mapreduce.reduce.memory.mb=5120"
3)Hive CLI内で「set」コマンドを使用します。
Hive> set mapreduce.map.memory.mb=4096;
Hive> set mapreduce.reduce.memory.mb=5120;
Hive> select count(*) from test_table;
まあ、私の場合、Java.opts
にもメモリを設定する必要があります
set mapreduce.map.memory.mb=4096;
set mapreduce.map.Java.opts=-Xmx3686m;
set mapreduce.reduce.memory.mb=4096;
set mapreduce.reduce.Java.opts=-Xmx3686m;