我们可以使用sqoop将表从配置单元数据源导入到配置单元数据源吗。
查询式-
sqoop import --connect jdbc:hive2://localhost:10000/default --driver org.apache.hive.jdbc.HiveDriver --username root --password root --table student1 -m 1 --target-dir hdfs://localhost:9000/user/dummy/hive2result
现在它抛出以下异常
15/07/19 19:50:18 ERROR manager.SqlManager: Error reading from database: java.sql.SQLException: Method not supported
java.sql.SQLException: Method not supported
at org.apache.hive.jdbc.HiveResultSetMetaData.isSigned(HiveResultSetMetaData.java:141)
at org.apache.sqoop.manager.SqlManager.getColumnInfoForRawQuery(SqlManager.java:290)
at org.apache.sqoop.manager.SqlManager.getColumnTypesForRawQuery(SqlManager.java:240)
at org.apache.sqoop.manager.SqlManager.getColumnTypes(SqlManager.java:226)
at org.apache.sqoop.manager.ConnManager.getColumnTypes(ConnManager.java:295)
at org.apache.sqoop.orm.ClassWriter.getColumnTypes(ClassWriter.java:1773)
at org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1578)
at org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:96)
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:478)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:601)
at org.apache.sqoop.Sqoop.run(Sqoop.java:143)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:179)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:218)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:227)
at org.apache.sqoop.Sqoop.main(Sqoop.java:236)
2条答案
按热度按时间e5nqia271#
sqoop不是将数据从一个配置单元示例传输到另一个配置单元示例的工具。似乎您的需求是将配置单元中的数据从一个集群传输到另一个集群。这可以使用hadoop distcp实现。sqoop本身的完整形式是sql到hadoop,反之亦然。
如果要将多个数据库和表从一个配置单元迁移到另一个配置单元示例,最好的方法是使用hadoop distcp传输数据并触发第二个配置单元示例中的ddl。如果你手边没有DDL,不用担心。只需转储metastore数据库。使用记事本或文本板打开转储文件用新的hdfs uri替换hdfs uri。将mysql转储导入第二个hive示例的metastore。刷新表格。下面的博客文章给出了一个例子https://amalgjose.wordpress.com/2013/10/11/migrating-hive-from-one-hadoop-cluster-to-another-cluster-2/
thtygnil2#
distcp将只适用于外部表。对于托管表(事务性),请使用导出-导入ddl。