安排和自动化 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
我有一个 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