首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oozie Sqoop作业

Oozie Sqoop作业
EN

Stack Overflow用户
提问于 2013-06-04 06:36:53
回答 2查看 4.1K关注 0票数 3

我正在尝试将sqoop作业作为oozie操作来运行。我在jobtracker节点上有MySQL作为转移存储。我在某处读到oozie sqoop不能从import创建hive表。因此,我尝试将数据转储到hdfs中。这仍然是真的吗?

我查过分享库了。

我正在尝试从MS SQL数据库执行Sqoop。

当我运行sqoop命令时,它不需要shell中的元存储,它可以工作。

代码语言:javascript
复制
sqoop import --connect 'jdbc:sqlserver://host;username=sqoopimport;password=password;database=db1' --table t1--target-dir /user/root/sqoop-import/tmp/t1

当我尝试将其作为sqoop操作运行时,收到以下错误

代码语言:javascript
复制
    >>> Invoking Sqoop command line now >>>

2151 [main] WARN  org.apache.sqoop.tool.SqoopTool  - $SQOOP_CONF_DIR has not been set in the environment. Cannot check for additional configuration.
2259 [main] WARN  org.apache.sqoop.ConnFactory  - $SQOOP_CONF_DIR has not been set in the environment. Cannot check for additional configuration.
2285 [main] ERROR org.apache.sqoop.tool.BaseSqoopTool  - Got error creating database manager: java.io.IOException: No manager for connect string: 'jdbc:sqlserver://host;username=sqoopimport;password=password;database=db1'
at org.apache.sqoop.ConnFactory.getManager(ConnFactory.java:185)
at org.apache.sqoop.tool.BaseSqoopTool.init(BaseSqoopTool.java:217)
at org.apache.sqoop.tool.ImportTool.init(ImportTool.java:83)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:464)
at org.apache.sqoop.Sqoop.run(Sqoop.java:145)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:181)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:220)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:229)
at org.apache.sqoop.Sqoop.main(Sqoop.java:238)
at org.apache.oozie.action.hadoop.SqoopMain.runSqoopJob(SqoopMain.java:203)
at org.apache.oozie.action.hadoop.SqoopMain.run(SqoopMain.java:172)
at org.apache.oozie.action.hadoop.LauncherMain.run(LauncherMain.java:37)
at org.apache.oozie.action.hadoop.SqoopMain.main(SqoopMain.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:495)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:417)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:332)
at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
at org.apache.hadoop.mapred.Child.main(Child.java:262)

workflow.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<workflow-app xmlns="uri:oozie:workflow:0.2" name="sqoop-wf">
    <start to="sqoop-node"/>

    <action name="sqoop-node">
        <sqoop xmlns="uri:oozie:sqoop-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
             <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
                 <property>
             <name>oozie.use.system.libpath</name>
             <value>true</value>
           </property>
           <property>
             <name>oozie.libpath</name>
             <value>/user/oozie/share/lib/sqoop</value>
           </property>
            </configuration>
            <command>import --connect 'jdbc:sqlserver://host;username=sqoopimport;password=password;database=db1' --table t1--target-dir /user/root/sqoop-import/tmp/t1</command>
        </sqoop>
        <ok to="end"/>
        <error to="fail"/>
    </action>

    <kill name="fail">
        <message>Sqoop failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <end name="end"/>
</workflow-app>

我认为这是主要原因。我在共享库目录2285中有库主要错误org.apache.sqoop.tool.BaseSqoopTool - Got创建数据库管理器时出错: java.io.IOException:没有连接字符串的管理器:

我是不是漏掉了什么?任何帮助都是非常感谢的。

谢谢,Abhishek

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-22 22:20:01

当您使用shell (例如Bash或ZSH)执行Sqoop时,您需要手动转义参数,以便shell不会更改它们。在您的示例中,您将JDBC URL放在引号中,这样分号就不会被解释为命令的结尾。由于Oozie没有使用shell调用Sqoop,因此这些转义字符无效。因此,您应该删除在oozie工作流中为shell引入的转义。

例如:

代码语言:javascript
复制
<command>import --connect jdbc:sqlserver://host;username=sqoopimport;password=password;database=db1 --table t1--target-dir /user/root/sqoop-import/tmp/t1</command>

还请注意,建议在JDBC URL中使用参数--username和--password,而不要使用相同的命名属性。

票数 4
EN

Stack Overflow用户

发布于 2013-08-21 23:45:21

尝试在arguments>中提供--driver com.microsoft.jdbc.sqlserver.SQLServerDriver,同时确保类路径中存在MS SQL Server JDBC jar。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16906973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档