安排和自动化 sqoop import/export 任务

schedule and automate sqoop import/export tasks

我有一个 sqoop 作业需要将数据从 oracle 导入到 hdfs。

我使用的 sqoop 查询是
sqoop import --connect jdbc:oracle:thin:@hostname:port/service --username sqoop --password sqoop --query "SELECT * FROM ORDERS WHERE orderdate = To_date('10/08/2013', 'mm/dd/yyyy') AND partitionid = '1' AND rownum < 10001 AND $CONDITIONS" --target-dir /test1 --fields-terminated-by '\t'

我一次又一次地重新运行相同的查询,将 partitionid 从 1 更改为 96。所以我应该手动执行 sqoop 导入命令 96 次。 table 'ORDERS' 包含数百万行,每行都有一个从 1 到 96 的 partitionid。我需要从每个 partitionid 导入 10001 行到 hdfs。

有什么办法吗?如何自动化 sqoop 作业?

使用 crontab 进行日程安排。可以找到 Crontab 文档 here 或者您可以在终端中使用 man crontab

在 shell 脚本中添加您的 sqoop 导入命令并使用 crontab 执行此 shell 脚本。

运行 script : $ ./script.sh 20 //------ 对于第 20 个条目

ramisetty@HadoopVMbox:~/ramu$ cat script.sh
#!/bin/bash

PART_ID=
TARGET_DIR_ID=$PART_ID
echo "PART_ID:" $PART_ID  "TARGET_DIR_ID: "$TARGET_DIR_ID
sqoop import --connect jdbc:oracle:thin:@hostname:port/service --username sqoop --password sqoop --query "SELECT * FROM ORDERS WHERE orderdate = To_date('10/08/2013', 'mm/dd/yyyy') AND partitionid = '$PART_ID' AND rownum < 10001 AND $CONDITIONS" --target-dir /test/$TARGET_DIR_ID --fields-terminated-by '\t'

对于所有 1 到 96 - 单发

ramisetty@HadoopVMbox:~/ramu$ cat script_for_all.sh
#!/bin/bash

for part_id in {1..96};
do
 PART_ID=$part_id
 TARGET_DIR_ID=$PART_ID
 echo "PART_ID:" $PART_ID  "TARGET_DIR_ID: "$TARGET_DIR_ID
 sqoop import --connect jdbc:oracle:thin:@hostname:port/service --username sqoop --password sqoop --query "SELECT * FROM ORDERS WHERE orderdate = To_date('10/08/2013', 'mm/dd/yyyy') AND partitionid = '$PART_ID' AND rownum < 10001 AND $CONDITIONS" --target-dir /test/$TARGET_DIR_ID --fields-terminated-by '\t'
done