0

In summary, what I tried to do is import an oracle table from a specific schema other than the one used by Sqoop for login. It works fine with tables in the schema Sqoop logon into, even for views referencing objects in other schema. However when I did it with option --table SCHEMA.TABLE_NAME it did't work at all. The error messages are as below:

14/12/18 08:01:20 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM ODS.ACCOUNT t WHERE 1=0
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at java.lang.reflect.Array.newArray(Native Method)
        at java.lang.reflect.Array.newInstance(Array.java:70)
        at oracle.jdbc.driver.BufferCache.get(BufferCache.java:226)
        at oracle.jdbc.driver.PhysicalConnection.getCharBuffer(PhysicalConnection.java:7698)
        at oracle.jdbc.driver.OracleStatement.prepareAccessors(OracleStatement.java:1013)
        at oracle.jdbc.driver.T4CTTIdcb.receiveCommon(T4CTTIdcb.java:277)
        at oracle.jdbc.driver.T4CTTIdcb.receive(T4CTTIdcb.java:146)
        at oracle.jdbc.driver.T4C8Oall.readDCB(T4C8Oall.java:916)
        at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:421)
        at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:227)
        at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
        at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:208)
        at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:886)
        at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1175)
        at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1296)
        at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3613)
        at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3657)
        at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1495)
        at org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:699)
        at org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:708)
        at org.apache.sqoop.manager.SqlManager.getColumnTypesForRawQuery(SqlManager.java:243)
        at org.apache.sqoop.manager.SqlManager.getColumnTypes(SqlManager.java:226)
        at org.apache.sqoop.manager.ConnManager.getColumnTypes(ConnManager.java:347)
        at org.apache.sqoop.orm.ClassWriter.getColumnTypes(ClassWriter.java:1298)
        at org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1110)
        at org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:96)
        at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:396)
        at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:506)
        at org.apache.sqoop.Sqoop.run(Sqoop.java:147)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
        at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183)
        at org.apache.sqoop.Sqoop.runTool(Sqoop.java:222)

The command I'm using is:

sqoop import --connect "jdbc:oracle:thin:@(description=(address=(protocol=tcp)(host=localhost)(port=1521))(connect_data=(service_name=ods)))" \
--username ods --password ods --table ODS.ACCOUNT  -m -1  --hive-import

Sqoop version: 1.4.4.2.1.1.0-385 JDBC: ojdbc6.jar Oracle: 11g

  • 1
    I don't think the "out of memory" error you are getting has much to do with the schema or login. Try increasing the Java heap, e.g. as explained [here](http://stackoverflow.com/questions/417152/how-do-i-set-javas-min-and-max-heap-size-through-environment-variables) – mustaccio Dec 18 '14 at 17:08
  • Me neither. The fact is if I created a view with underlying query then it works. But using "SCHEMA.TABLE_NAME" didn't. – Chris Chen Dec 18 '14 at 18:43

0 Answers0