安排和自动化sqoop导入/导出任务

gblwokeq  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(345)

我有一个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' 我一次又一次地重新运行同一个查询,分区ID从1变为96。所以我应该手动执行sqoop import命令96次。“orders”表包含数百万行,每行的partitionid从1到96。我需要从每个分区id中导入10001行到hdfs中。
有什么办法吗?如何自动化sqoop作业?

az31mfrm

az31mfrm1#

使用 crontab 用于调度目的。crontab文档可以在这里找到,也可以使用 man crontab 在终点站。
在shell脚本中添加sqoop import命令,并使用crontab执行这个shell脚本。

eqzww0vc

eqzww0vc2#

运行脚本:$./script.sh 20//----第20个条目

ramisetty@HadoopVMbox:~/ramu$ cat script.sh

# !/bin/bash

PART_ID=$1
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

相关问题