我正在crceating一个sqoop作业,它将被安排在oozie中,以便将每日数据加载到hive中。我想根据日期作为参数向配置单元中进行增量加载,该参数将传递给sqoop作业在研究了很多之后,我找不到一种方法将参数传递给sqoop作业
9jyewag01#
下面的解决方案来自apachesqoop食谱。保留上次导入的值问题增量导入是您经常使用的一个很好的功能。承担起记住最后一次进口价值的责任是一件麻烦事。解决方案您可以利用内置的sqoop元存储,它允许您保存所有参数以供以后重用。可以使用以下命令创建简单的增量导入作业:
sqoop job \ --create visits 3.3. Preserving the Last Imported Value | 27 -- import \ --connect jdbc:mysql://mysql.example.com/sqoop \ --username sqoop \ --password sqoop \ --table visits \ --incremental append \ --check-column id \ --last-value 0
然后从 --exec parameter :
--exec parameter
sqoop job --exec visits
讨论sqoop元存储是sqoop的一个强大部分,它允许您保留作业定义并随时轻松地运行它们。每个保存的作业都有一个用于引用的逻辑名称。您可以使用 --list 参数:
--list
sqoop job --list
可以删除不再需要的旧作业定义 --delete 参数,例如:
--delete
sqoop job --delete visits
最后,还可以使用 --show parameter ,例如:
--show parameter
sqoop job --show visits
输出 --show 命令将以属性的形式出现。不幸的是,sqoop当前无法重建用于创建已保存作业的命令行。内置sqoop元存储最重要的好处是与增量导入结合使用。在每个成功的增量作业之后,sqoop将自动将最后一个导入的值序列化回metastore。这样,用户不需要记住每次执行后最后导入的值;一切都是自动处理的。
--show
ac1kyiln2#
您可以通过两个阶段来传递日期:工作流协调员在coordinator中,您可以将日期传递给工作流,该工作流作为 <property> ,如下所示:
<property>
<coordinator-app name="schedule" frequency="${coord:days(1)}" start="2015-01-01T00:00Z" end="2025-01-01T00:00Z" timezone="Etc/UTC" xmlns="uri:oozie:coordinator:0.2"> ... <action> <workflow> <app-path>${nameNode}/your/workflow.xml</app-path> <configuration> <property> <name>workflow_date</name> <value>${coord:formatTime(coord:nominalTime(), 'yyyyMMdd')}</value> </property> </configuration> </workflow> </action> ... </coordinator-app>
工作流到sqoop在工作流中,可以使用 ${workflow_date} 变量,如下所示:
${workflow_date}
<sqoop xmlns="uri:oozie:sqoop-action:0.2"> ... <command>import --connect jdbc:connect:string:here --table tablename --target-dir /your/import/dir/${workflow_date}/ -m 1</command> ... </sqoop>
2条答案
按热度按时间9jyewag01#
下面的解决方案来自apachesqoop食谱。
保留上次导入的值
问题
增量导入是您经常使用的一个很好的功能。承担起记住最后一次进口价值的责任是一件麻烦事。
解决方案
您可以利用内置的sqoop元存储,它允许您保存所有参数以供以后重用。可以使用以下命令创建简单的增量导入作业:
然后从
--exec parameter
:讨论
sqoop元存储是sqoop的一个强大部分,它允许您保留作业定义并随时轻松地运行它们。每个保存的作业都有一个用于引用的逻辑名称。您可以使用
--list
参数:可以删除不再需要的旧作业定义
--delete
参数,例如:最后,还可以使用
--show parameter
,例如:输出
--show
命令将以属性的形式出现。不幸的是,sqoop当前无法重建用于创建已保存作业的命令行。内置sqoop元存储最重要的好处是与增量导入结合使用。在每个成功的增量作业之后,sqoop将自动将最后一个导入的值序列化回metastore。这样,用户不需要记住每次执行后最后导入的值;一切都是自动处理的。
ac1kyiln2#
您可以通过两个阶段来传递日期:
工作流协调员
在coordinator中,您可以将日期传递给工作流,该工作流作为
<property>
,如下所示:工作流到sqoop
在工作流中,可以使用
${workflow_date}
变量,如下所示: