3 votes

la connexion jdbc de ruche donne une erreur de mémoire insuffisante

J'essaie d'exécuter un exemple de programme client hivejdbc mais il me donne une erreur de mémoire insuffisante.

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;

public class HiveJdbcClient {
  private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";

  /**
 * @param args
 * @throws SQLException
   */
  public static void main(String[] args) throws SQLException {
      try {
      Class.forName(driverName);
    } catch (ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      System.exit(1);
    }
    // "jdbc:hive://host:port/dbname"
    System.out.println("going to get connection");
    Connection con = DriverManager.getConnection("jdbc:hive://titan-edgenode.int.thomsonreuters.com:22/default", "", "");
    System.out.println("got connection!");
    Statement stmt = con.createStatement();
    ResultSet res;
    // show tables
    String sql = "show tables";
    System.out.println("Running: " + sql);
    res = stmt.executeQuery(sql);
    if (res.next()) {
      System.out.println(res.getString(1));
    }

  }
}

Voici le résultat que j'obtiens.

going to get connection
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:133)
    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(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at HiveJdbcClient.main(HiveJdbcClient.java:24)

Ce qui est intéressant dans cette erreur, c'est que je n'ai plus d'espace de stockage après avoir obtenu la connexion. C'est inhabituel, car l'obtention de la connexion elle-même ne nécessite pas beaucoup d'espace, puisque je n'exécute pas de requête ou autre.

Editar

Voici une autre variante de cette pile provenant d'un autre utilisateur (la modification de la taille maximale du tas n'a pas fait de différence notable) :

java.lang.OutOfMemoryError: Java heap space
at org.apache.thrift.transport.TSaslTransport.receiveSaslMessage(TSaslTransport.java:181)
at org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:288)
at org.apache.thrift.transport.TSaslClientTransport.open(TSaslClientTransport.java:37)
at org.apache.hive.jdbc.HiveConnection.openTransport(HiveConnection.java:190)
at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:163)
at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at [myapp]

0voto

Tarik Points 3304

Vous pourriez augmenter votre espace de tas. Utilisez l'argument de ligne de commande-Xms -Xmx. Si cela ne résout pas le problème, le pilote est peut-être défectueux.

0voto

Raven Points 429

J'ai pu contourner cette erreur en passant à une application x64. Win32 ne semblait jamais avoir assez de mémoire, quelle que soit la façon dont je configurais la taille maximale du tas pour java.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X