0%

Sqoop搭建和配置

项目主页

项目主页:http://sqoop.apache.org/

下载地址:http://mirrors.hust.edu.cn/apache/sqoop/1.4.6/

这里我们选择sqoop,不是当前最新的sqoop2,可以直接下载bin-hadoop-2XX的,由于平台的hadoop2.6,所以需要选择2.X版本的sqoop,否则数据导入会出错,同时在下载mysql驱动的时候,选择最新版本的jar包,在之前的版本里面有bug,会导致导入数据到hadoop失败

安装

下载完成之后,解压到指定目录,增加系统环境变量:HADOOP_COMMON_HOMEHADOOP_MAPRED_HOME,这里全部指向hadoop的安装根目录,将sqoopbin目录添加到PATH里面去即可全局使用

导入数据配置

这里使用增量导入到hdfs,因为需要spark读取数据进行处理,所以需要添加保存模式--save-parquet,示例配置:

1
2
3
#!/bin/bash

sqoop import --options-file options.txt --connect jdbc:mysql://192.168.1.118:3306/user --table user_aliyun --target-dir /user --append --as-parquetfile -z --check-column user_id --last-value 1 --incremental append

这里将服务器192.168.1.118数据库useruser_aliyun表导入到HDFS文件系统,属于增量式,并且导入的数据保持数据表原有结构,spark可以直接读取处理,主键是user_id,每次都会检测是否需要导入,options.txt文件是配置,内容如下:

1
2
3
4
5
6
-m
1
--username
xxxxxx
--password
oooooo

这里只复制一份数据,在使用--as-parquetfile的时候,未使用--append参数(该参数是在已经存在的hdfs才有效,否则会报错),hdfs目的路径必须是二级的,详情请参考http://kitesdk.org/docs/1.0.0/URIs.html#hdfs,因为使用这种模式的时候底层就是kitesdk实现的,需要符合其路径规则

导出数据配置

导出数据配置使用export参数设置,其余的参考官方文档即可

任务模式

如果需要增量模式的话,必须在job模式下使用,参数如下:

1
2
3
4
5
--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.
--delete <job-id> Delete a saved job.
--exec <job-id> Given a job defined with --create, run the saved job.
--show <job-id> Show the parameters for a saved job.
--list List all saved jobs

示例如下:

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
2
3
4
5
6
7
8
9
10
#!/bin/bash

DIR=/home/admin/sqoop_task/log
TASK_LOG=`date '+%Y%m%d%H%M%S'`.log

nohup sqoop job --exec account_info_job -- --username admin --password admin >> $DIR/$TASK_LOG &

CRONTAB_LOG=$DIR/crontab.log
echo 'account_info_job'>> $CRONTAB_LOG
echo `date '+%Y-%m-%d %T'`>> $CRONTAB_LOG

添加定时任务crontab -e:

0 1 * * * /home/admin/sqoop_task/cron_job-account_info.sh

每天凌晨1点执行脚本