从命令行获取 oozie sqoop 操作的日志
Get logs for oozie sqoop action from command line
我有一个带有 sqoop 操作的 oozie 工作流,我希望从命令行获取这些 sqoop 操作的日志 (stdout)。
这是我认为可行的方法:
oozie job -info 0000002-170819062150496-oozie-oozi-W
打印出 job_ids 个动作:
------------------------------------------------------------------------------------------------------------------------------------
0000002-170819062150496-oozie-oozi-W@sqoop-import-shard_1 OK job_1503124774831_0013 SUCCEEDED -
------------------------------------------------------------------------------------------------------------------------------------
0000002-170819062150496-oozie-oozi-W@sqoop-import-shard_2 OK job_1503124774831_0014 SUCCEEDED -
------------------------------------------------------------------------------------------------------------------------------------
然后我使用:
mapred job -logs job_1503124774831_0013
但这只给出了 mapreduce 日志。我可以从 Hue
中看到的 Sqoop stdout 日志,例如处理的记录数,--last-value(在增量的情况下)不可用。
有没有办法得到它们?
编辑: 添加 sqoop 配置和工作流文件。
sqoop_import_config.txt
import
--connect
${connect}
--username
${username}
--password
${pwd}
--hive-delims-replacement
[=11=]1
--fields-terminated-by
[=11=]3
--null-string
\N
--null-non-string
\N
--target-dir
/data/${table}/${shard}
--query
SELECT ${columns} from ${table} WHERE $CONDITIONS
--split-by
id
--boundary-query
select min(id), max(id) from ${table}
--m
${numMappers}
--incremental
lastmodified
--last-value
${lastValue}
--check-column
updated_at
--merge-key
id
workflow.xml
<workflow-app name="${tableName}_${type}_Sqoop" xmlns="uri:oozie:workflow:0.5">
<credentials>
<credential name="hive2" type="hive2">
<property>
<name>hive2.jdbc.url</name>
<value>${hive2JdbcUrl}</value>
</property>
<property>
<name>hive2.server.principal</name>
<value>${hive2MetastorePrincipal}</value>
</property>
</credential>
</credentials>
<start to="sqoop-import-fork"/>
<kill name="Kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<fork name="sqoop-import-fork">
<path start="sqoop-import-shard_1"/>
<path start="sqoop-import-shard_2"/></fork>
<action name="sqoop-import-shard_1"> <sqoop xmlns="uri:oozie:sqoop-action:0.2"><arg>--options-file</arg> <arg>${tableName}_shard_1_import.txt</arg></sqoop> <ok to="sqoop-import-join"/> <error to="email-b1f2"/> </action>
<action name="sqoop-import-shard_2"> <sqoop xmlns="uri:oozie:sqoop-action:0.2"><arg>--options-file</arg> <arg>${tableName}_shard_2_import.txt</arg></sqoop> <ok to="sqoop-import-join"/> <error to="email-b1f2"/> </action>
<action name="move-data" cred="hive2">
. . .
在查看 mapred job help
后找到了获取标准输出日志的方法。
从 oozie 收到 job_id 后使用:
oozie job -info 0000002-170819062150496-oozie-oozi-W
使用以下方法获取作业尝试列表:
mapred job -list-attempt-ids <job-id> <task-type> <task-state>
- 任务类型的有效值为 REDUCE MAP。
- 任务状态的有效值为 运行、已完成
所以我 运行: mapred job -list-attempt-ids job_1503124774831_0022 MAP completed
这给了我 attempt_1503124774831_0022_m_000000_0
现在,我可以使用以下方法获取包含 sqoop 数据的尝试日志:
mapred job -logs job_1503124774831_0022 attempt_1503124774831_0022_m_000000_0
我有一个带有 sqoop 操作的 oozie 工作流,我希望从命令行获取这些 sqoop 操作的日志 (stdout)。
这是我认为可行的方法:
oozie job -info 0000002-170819062150496-oozie-oozi-W
打印出 job_ids 个动作:
------------------------------------------------------------------------------------------------------------------------------------
0000002-170819062150496-oozie-oozi-W@sqoop-import-shard_1 OK job_1503124774831_0013 SUCCEEDED -
------------------------------------------------------------------------------------------------------------------------------------
0000002-170819062150496-oozie-oozi-W@sqoop-import-shard_2 OK job_1503124774831_0014 SUCCEEDED -
------------------------------------------------------------------------------------------------------------------------------------
然后我使用:
mapred job -logs job_1503124774831_0013
但这只给出了 mapreduce 日志。我可以从 Hue
中看到的 Sqoop stdout 日志,例如处理的记录数,--last-value(在增量的情况下)不可用。
有没有办法得到它们?
编辑: 添加 sqoop 配置和工作流文件。
sqoop_import_config.txt
import
--connect
${connect}
--username
${username}
--password
${pwd}
--hive-delims-replacement
[=11=]1
--fields-terminated-by
[=11=]3
--null-string
\N
--null-non-string
\N
--target-dir
/data/${table}/${shard}
--query
SELECT ${columns} from ${table} WHERE $CONDITIONS
--split-by
id
--boundary-query
select min(id), max(id) from ${table}
--m
${numMappers}
--incremental
lastmodified
--last-value
${lastValue}
--check-column
updated_at
--merge-key
id
workflow.xml
<workflow-app name="${tableName}_${type}_Sqoop" xmlns="uri:oozie:workflow:0.5">
<credentials>
<credential name="hive2" type="hive2">
<property>
<name>hive2.jdbc.url</name>
<value>${hive2JdbcUrl}</value>
</property>
<property>
<name>hive2.server.principal</name>
<value>${hive2MetastorePrincipal}</value>
</property>
</credential>
</credentials>
<start to="sqoop-import-fork"/>
<kill name="Kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<fork name="sqoop-import-fork">
<path start="sqoop-import-shard_1"/>
<path start="sqoop-import-shard_2"/></fork>
<action name="sqoop-import-shard_1"> <sqoop xmlns="uri:oozie:sqoop-action:0.2"><arg>--options-file</arg> <arg>${tableName}_shard_1_import.txt</arg></sqoop> <ok to="sqoop-import-join"/> <error to="email-b1f2"/> </action>
<action name="sqoop-import-shard_2"> <sqoop xmlns="uri:oozie:sqoop-action:0.2"><arg>--options-file</arg> <arg>${tableName}_shard_2_import.txt</arg></sqoop> <ok to="sqoop-import-join"/> <error to="email-b1f2"/> </action>
<action name="move-data" cred="hive2">
. . .
在查看 mapred job help
后找到了获取标准输出日志的方法。
从 oozie 收到 job_id 后使用:
oozie job -info 0000002-170819062150496-oozie-oozi-W
使用以下方法获取作业尝试列表:
mapred job -list-attempt-ids <job-id> <task-type> <task-state>
- 任务类型的有效值为 REDUCE MAP。
- 任务状态的有效值为 运行、已完成
所以我 运行: mapred job -list-attempt-ids job_1503124774831_0022 MAP completed
这给了我 attempt_1503124774831_0022_m_000000_0
现在,我可以使用以下方法获取包含 sqoop 数据的尝试日志:
mapred job -logs job_1503124774831_0022 attempt_1503124774831_0022_m_000000_0