项目主页
项目主页:http://sqoop.apache.org/
下载地址:http://mirrors.hust.edu.cn/apache/sqoop/1.4.6/
这里我们选择sqoop,不是当前最新的sqoop2,可以直接下载bin-hadoop-2XX的,由于平台的hadoop是2.6,所以需要选择2.X版本的sqoop,否则数据导入会出错,同时在下载mysql驱动的时候,选择最新版本的jar包,在之前的版本里面有bug,会导致导入数据到hadoop失败
安装
下载完成之后,解压到指定目录,增加系统环境变量:HADOOP_COMMON_HOME和HADOOP_MAPRED_HOME,这里全部指向hadoop的安装根目录,将sqoop的bin目录添加到PATH里面去即可全局使用
导入数据配置
这里使用增量导入到hdfs,因为需要spark读取数据进行处理,所以需要添加保存模式--save-parquet,示例配置:
1 | #!/bin/bash |
这里将服务器192.168.1.118数据库user的user_aliyun表导入到HDFS文件系统,属于增量式,并且导入的数据保持数据表原有结构,spark可以直接读取处理,主键是user_id,每次都会检测是否需要导入,options.txt文件是配置,内容如下:
1 | -m |
这里只复制一份数据,在使用--as-parquetfile的时候,未使用--append参数(该参数是在已经存在的hdfs才有效,否则会报错),hdfs目的路径必须是二级的,详情请参考http://kitesdk.org/docs/1.0.0/URIs.html#hdfs,因为使用这种模式的时候底层就是kitesdk实现的,需要符合其路径规则
导出数据配置
导出数据配置使用export参数设置,其余的参考官方文档即可
任务模式
如果需要增量模式的话,必须在job模式下使用,参数如下:
1 | --create <job-id> Define a new saved job with the specified job-id (name). A second Sqoop command-line, separated by a -- should be specified; this defines the saved job. |
示例如下:
1 | sqoop job --create tt_news_list_job -- import --connect "jdbc:mysql://192.168.1.118:3306/datas?useUnicode=true&characterEncoding=utf-8" --table tt_news_list --target-dir /mysql/tt_news_list --as-parquetfile --check-column nId --incremental append --last-value 0 -m 1 |
这个job在会增量同步数据,主键是nId,执行的时候sqoop job --exec tt_news_list_job -- --username xxxxxx --password oooooo,注意在job里面不要写密码,否则每次执行的时候都需要数据库的密码,在执行的时候最佳到命令参数后面即可执行不需要输入密码,然后再把执行命令放到crontab里面做定时任务
系统定时任务
首先需要创建job任务,然后在cron里面定期执行job即可,cron_job-account_info.sh示例如下:
1 | #!/bin/bash |
添加定时任务crontab -e:
0 1 * * * /home/admin/sqoop_task/cron_job-account_info.sh
每天凌晨1点执行脚本