我的用例:
在mysql db中创建逐日小时表。我需要使用Sqoop每天将它们移动到HDFS并使用Impala处理HDFS数据。
如何编写shell脚本或作业,只是为了定期将新创建的表数据移动到HDFS(现有文件系统)?
今天是2016年1月3日,当我今天运行我的工作时,2016年1月2日数据应该从mysql移动到HDFS,每天应该移动前一天的数据。 每天我需要在此HDFS群集上运行我的Impala查询并生成报告 如何使用Impala处理整个数据并生成报告?
答案 0 :(得分:1)
Sqoop支持增量导入:http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_incremental_imports
Sqoop-import
可以使用最后修改的时间戳或始终增加的行ID来决定要导入的行。您需要提供--last-value
参数。您可以在作业之间存储最后一个值,也可以在运行作业之前从Impala数据库中检索它。
答案 1 :(得分:1)
最好的方法是获取带有2个参数的shell脚本。 1将是表的名称,而其他将是hdfs路径,因为这些将是您的方案中唯一更改的2个因素。下面是您可以放入.sh并在bash中运行的示例脚本。
!/bin/bash TABLENAME=${^^1} HDFSPATH=${^^2} NOW=$(date +"%m-%d-%Y-%H-%M-%S") sqoop --import --connect jdbc:db2://mystsrem:60000/SCHEMA \ --username username \ --password-file password \ --query "select * from ${TABLENAME} \$CONDITIONS" \ -m 1 \ --delete-target-dir \ --target-dir ${HDFSPATH} \ --fetch-size 30000 \ --class-name ${TABLENAME} \ --fields-terminated-by '\01' \ --lines-terminated-by '\n' \ --escaped-by '\' \ --verbose &> logonly/${TABLENAME}_import_${NOW}.log
OPTIONAL: 如果你需要导入hive表
- hive-drop-import-delims \ --hive-import \ --hive-overwrite \ --hive-table HiveSchema。$ {TABLENAME}