使用 Sqoop 将数据从 MS-SQL 服务器写入 HDFS

Posted

技术标签:

【中文标题】使用 Sqoop 将数据从 MS-SQL 服务器写入 HDFS【英文标题】:Wrting Data from MS-SQL server to HDFS using Sqoop 【发布时间】:2014-02-06 12:04:32 【问题描述】:

我正在使用 talend open studio,我的工作包括 sqoop 和 hdfsoutput。 我正在尝试使用 sqoop 将数据从 ms-SQL 服务器推送到 hadoop hdfs 我已经设置了配置。但是当我运行作业时出现以下错误

14/02/06 16:23:12 INFO tool.CodeGenTool: Beginning code generation
14/02/06 16:23:13 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM [Resource_Dim] AS t WHERE 1=0
14/02/06 16:23:13 INFO orm.CompilationManager: $HADOOP_MAPRED_HOME is not set
14/02/06 16:23:13 ERROR orm.CompilationManager: It seems as though you are running sqoop with a JRE.
14/02/06 16:23:13 ERROR orm.CompilationManager: Sqoop requires a JDK that can compile Java code.
14/02/06 16:23:13 ERROR orm.CompilationManager: Please install a JDK and set $JAVA_HOME to use it.
14/02/06 16:23:13 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Could not start Java compiler.
                at org.apache.sqoop.orm.CompilationManager.compile(CompilationManager.java:176)
                at org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:83)
                at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:390)
                at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:476)
                at org.apache.sqoop.Sqoop.run(Sqoop.java:145)
                at sampleproj.sqoopconnect_0_1.SqoopConnect.tSqoopImport_1Process(SqoopConnect.java:435)
                at sampleproj.sqoopconnect_0_1.SqoopConnect.tLibraryLoad_1Process(SqoopConnect.java:357)
                at sampleproj.sqoopconnect_0_1.SqoopConnect.runJobInTOS(SqoopConnect.java:877)
                at sampleproj.sqoopconnect_0_1.SqoopConnect.main(SqoopConnect.java:743)

Exception in component tSqoopImport_1
java.lang.Exception: The Sqoop import job has failed
                at sampleproj.sqoopconnect_0_1.SqoopConnect.tSqoopImport_1Process(SqoopConnect.java:437)
                at sampleproj.sqoopconnect_0_1.SqoopConnect.tLibraryLoad_1Process(SqoopConnect.java:357)
                at sampleproj.sqoopconnect_0_1.SqoopConnect.runJobInTOS(SqoopConnect.java:877)
                at sampleproj.sqoopconnect_0_1.SqoopConnect.main(SqoopConnect.java:743)

JDK 安装在系统中而不是 jre 我仍然收到上述错误。我尝试使用 sqoop 命令行运行相同的东西并且我能够成功运行该作业。 但是当我使用 talend 运行时,会显示上述错误。请指导如何解决此错误。 我正在使用 CDH4.5 和 Talend Open Studio For BigData 5.3.1

【问题讨论】:

"echo $JAVA_HOME" 是什么意思? 另外,这个问题似乎与It seems as though you are running sqoop with a JRE - But JAVA_HOME set to JDK重复 【参考方案1】:

在 Talend Studio 的 Preferences 中,Java Path 设置为 JRE ,只是将该路径从 JRE 更改为 JDK ,这解决了我的问题。

谢谢, 巴格万特·博比

【讨论】:

以上是关于使用 Sqoop 将数据从 MS-SQL 服务器写入 HDFS的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQOOP 和 FLUME 将数据从 RDBMS 移动到 Hadoop

使用 sqoop 将数据从 oracle 导入到 hdfs

使用 sqoop 将数据从 CSV 导入 Avro 表的命令

如何从Oracle到hive

如何使用 Sqoop 从 RDBMS 将数据导入本地文件系统,而不是 HDFS?

无法使用 Sqoop 将数据从 Vertica 导入 Cassandra