sqoop+crontab(mysql表定期导入到hive)

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

执行命令

sqoop job --create todbincrementjob -- import \
--connect jdbc:mysql://xx.xx.xx.xx:3306/iepdb \
--username xxxxx_iep \
--password-file /user/train/password.file \ 
--target-dir /tmp/mysqldb/hs_xxx_report \
--table hs_xxx_report \
--fields-terminated-by "\t" \
--lines-terminated-by "\n" \
--null-string '\\N' \
--null-non-string '\\N' \
--incremental append \
--as-parquetfile \
--compress \
--compression-codec org.apache.hadoop.io.compress.SnappyCodec \
--check-column id \
--last-value 1 \
-m 1

sqoop job --create todbincrementjob – import --connect jdbc:mysql://xx.xx.xx.xx:3306/iepdb --username xxx_iep --password-file /tmp/pwd/14mysql.pwd --target-dir /tmp/mysqldb/hs_xxx_report --table hs_forecast_report --fields-terminated-by “\t” --lines-terminated-by “\n” --null-string ‘\N’ --null-non-string ‘\N’ \ --incremental append --as-parquetfile --compress --compression-codec org.apache.hadoop.io.compress.SnappyCodec --check-column id --last-value 1 -m 1
其中:
–password-file指定hdfs上存放的密码,不要本地
–target-dir 指定hdfs上结果目录
—table 指定mysql表名
–fields-terminated-by “\t” \ 指定列分隔符,即制表符
–lines-terminated-by “\n” \ 指定行分隔符,及换行符
–split-by id \ 指定分割的字段
–null-string ‘\N’ \ 指定string类型到hive里的值为NULL
–null-non-string ‘\N’ \ 指定非string类型到hive里的值为NULL
–incremental append\(这里只能监测到增量,不能监测到删除) --incremental lastmodified
–as-parquetfile \指定数据按照parquetfile存储
–compress 这个属性 是 开启压缩功能
–compression-codec 这个属性是 指定压缩的压缩码 本次是SnappyCodec
–check-column id
–last-value 1
以上3个参数组合使用做增量
-m,–num-mappers n 使用n个map任务并行导入数据 拆分字段默认是主键,如果主键是int,m可以设置大一些,如果不是,将m设为1
创建完成后,执行这个job:sqoop job -exec todbincrementjob
创建job保存,尤其适合增量导入,因为–last-value在后续增量导入中会自动改变,此值保留在已保存的job中,后续导入将用新值继续导入比上次导入更新的行。

删除这个job:sqoop job -delete todbincrementjob
查看所有job:sqoop job -list
sqoop job --show myjob

注意:# echo -n ‘xxxxx密码xxx’> 14mysql.pwd
vi不行,一定要echo -n

/home/bigdata/xxx_test/下创建
timermysqltohdfs.cron //定时任务
timermysqltohdfs.sh //脚本文件
timermysqltohdfs.log //日志文件

$ cat 14mysql.pwd
xxxxxx密码xxxxxx
$ cat timermysqltohdfs.cron
*/5 * * * * /bin/bash /home/bigdata/xxx_test/timermysqltohdfs.sh >> /home/bigdata/xxx_test/timermysqltohdfs.log 2>&1
$ cat timermysqltohdfs.sh
#!
#!/bin/sh
current_time=$(date +%Y%m%d%H%M%S)
echo $current_time >> /home/bigdata/xxx_test/timermysqltohdfs.log
echo ............................>> /home/bigdata/xxx_test/timermysqltohdfs.log

#表同步

sqoop job -exec todbincrementjob

crontab命令添加到系统crontab timermysqltohdfs.cron
查看crontab列表 crontab -l

注:bigdata用户下执行,遇到权限问题,/user目录无法访问,会抛出异常
故上述文件夹创建、命令执行都在root下进行

创建hive表映射结果结构化文件
location方式加载数据
这个目录可能不仅hive要用,也可能其他地方也要用,那么建表时最好建成外部表!

另一种方式稍有不同,可以参考这个文档:https://blog.csdn.net/sl1992/article/details/53887108

猜你喜欢

转载自blog.csdn.net/qq_30552441/article/details/94137350