我有一个shell脚本
sqoop import \
-Dmapreduce.job.queuename=adhoc \
--connect jdbc:oracle:thin:secret@//secret \
--query "a select" \
--target-dir /apps/hive/warehouse/data.db/fair_usage \
--delete-target-dir \
-m 1 \
--fields-terminated-by '\t'
当我将它放入 sh 文件并运行它时,它就可以工作。但是当我尝试以 oozie 操作运行时,它失败了。我尝试同时使用 bash 操作和 sqoop 操作。这是Sqoop的动作。我还尝试使用
<command>import....</command>
标签运行 sqoop。
<action name="export_table" cred="hv_cred">
<sqoop xmlns="uri:oozie:sqoop-action:0.2">
<job-tracker>${JOB_TRACKER}</job-tracker>
<name-node>${NAME_NODE}</name-node>
<configuration>
<property>
<name>mapred.task.timeout</name>
<value>600000</value>
</property>
</configuration>
<arg>import</arg>
<arg>-Dmapreduce.job.queuename=adhoc</arg>
<arg>--connect</arg>
<arg>jdbc:oracle:thin:secret@//secret</arg>
<arg>--query</arg>
<arg>"a select"</arg>
<arg>--target-dir</arg>
<arg>/apps/hive/warehouse/data.db/fair_usage</arg>
<arg>--delete-target-dir</arg>
<arg>-m</arg>
<arg>1</arg>
<arg>--fields-terminated-by</arg>
<arg>'\t'</arg>
</sqoop>
<ok to="END"/>
<error to="KILL"/>
</action>
我得到的错误是 bash 的
Main class [org.apache.oozie.action.hadoop.ShellMain], exit code [1]
和 sqoop 的 [org.apache.oozie.action.hadoop.SqoopMain], exit code [1]
。
这并没有告诉我任何事情。当我查看日志时,我找不到任何有用的信息。 Stderr 仅有 30 行并且没有错误。 Syslog 较长,但也没有错误。
过了一段时间,新的东西出现了
Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143
编辑
我尝试再次通过 shell 操作运行脚本。有效。 sh 没有改变,所以我可能在工作流程文件中犯了一个错误。我还没有保存它的旧版本,所以不能说那个错误是什么。
外壳动作
<action name='export_table'>
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${JOB_TRACKER}</job-tracker>
<name-node>${NAME_NODE}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${QUEUE_NAME}</value>
</property>
</configuration>
<exec>bash/export_table.sh</exec>
<file>bash/export_table.sh#export_table.sh</file>
</shell>
<ok to="END"/>
<error to="KILL"/>
</action>
还是不知道为什么sqoop action不起作用
编辑2
几个月过去了,我收回了我的话。他妈的sqoop。同样的错误。
bash 中的语法引号不会作为参数文字传递
<arg>a select</arg>
...
<arg>\t</arg>
编辑:打开文档后https://oozie.apache.org/docs/4.0.0/DG_SqoopActionExtension.html
第一个参数可能是命令而不是第一个
<arg>
<command>import</command>
这个问题与工作流程或 sqoop 脚本本身无关,而是与我不知道的一些内部机制有关。也许缺少库?
当我在终端中运行脚本时,会生成一个java类。这个类似乎描述了hive表如何解析为oracle表或smth。当我启动 oozie 时,我需要将此自动生成的文件添加到根目录(具有协调器和工作流程的目录)。如果我不oozie失败。该死的东西甚至不会给出任何错误(
无论如何,将 java 类添加到 root 后,我可以从 shell 操作运行 sqoop。 Sqoop 动作仍然不起作用。我注意到的另一件事是,如果在 sqoop 中我使用的话,shell 操作将会执行
--export-dir /apps/hive/warehouse/db.db/table/
但是如果我尝试
--hcatalog-database db \
--hcatalog-table table \
在shell中,无论如何都会失败。它可能尝试将一些库添加到类路径中,但不能或不成功。