Sqoop
Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
安装
下载软件
-
上传安装包sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz到虚拟机中
-
软件到指定目录
tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop
- 配置环境变量
vim /etc/profile
export SQOOP_HOME=/usr/local/LinuxApp/sqoop1.4.7;
export PATH=$PATH:$SQOOP_HOME/bin
export SQOOP_HOME
#保存退出
source /etc/profile
- 修改配置文件(conf目录下)
cp sqoop-env-template.sh sqoop-env.sh
- 修改配置文件sqoop-env.sh
#hadoop的路径
export HADOOP_COMMON_HOME=/opt/module/hadoop
#hadoop
export HADOOP_MAPRED_HOME=/opt/module/hadoop
#hbase
export HBASE_HOME=/opt/module/hbase
#hive
export HIVE_HOME=/opt/module/hive
#zookeeper
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10/
export ZOOCFGDIR=$ZOOKEEPER_HOME/conf
- 拷贝JDBC驱动sqoop的lib目录下
cp mysql-connector-java-6.1.2 -bin.jar /sqoop/lib
测试
sqoop version
可以输出版本说明安装成功
导入
import args参数详解
参数名称 | 参数作用 |
---|---|
- -connect< jdbc-url > | JDBC连接符: jdbc:mysql://node1:3306 |
- -hadoop-mapred-home < dir > | 指定$HADOOP_MAPRED_HOME路径 conf中指定后无需设置 |
- -dirver | JDBC驱动器类 比如com.mysql.jdbc.Driver |
- -username | 数据库用户 |
- -password | 数据库密码 |
- -password-alias < password-alias > | Credential provider password alias |
- -password-file | 设置用于存放认证的密码信息文件的路径 |
- -table | 导出的表名 |
- -where | 查询条件和table配合 |
- -target-dir | 设置hdfs中存储目录 |
- -m,- -num-mappers | 启动Map Task数目 默认为1 |
- -e,- -query | 设置SQL语句 |
- -fields-terminated-by | 分割符 |
- -verbose | 日志 |
- -append | 将数据追加到HDFS上一个已存在的数据集上 |
导入数据到HDFS
–warehouse-dir 先在指定目录下创建一个表名的文件夹
导入整张表
sqoop import
--connect jdbc:node1://hadoop1:3306/LightseaBlue #mysql
--username root
--password a
--table project #指定表
--target-dir /user/hadoop11/my_help_keyword1 #指定文件位置
--fields-terminated-by '\t' #存储分割符
--m 2 #任务数
按Where条件导入
sqoop import
--connect jdbc:mysql://node1:3306/LightseaBlue
--username root --password a --table project
--where "name='project1' " #注意中间的条件用单引号
--target-dir /LightseaBlue/Test1
--m 1
查看指定的列
sqoop import
--connect jdbc:mysql://node1:3306/LightseaBlue
--username root
--password a
--table project
--target-dir /LightseaBlue/Test2
--columns name #指定列名
使用sql语句
sqoop import --connect jdbc:mysql://node1:3306/LightseaBlue
--username root --password a
--target-dir /LightseaBlue/Test3
--query "select id from project where \$CONDITIONS and name='project1'"
--split-by id
注意:
- 要么外层使用单引号,内层使用双引号,$ CONDITIONS的 $ 符号不用转义, 要么外层使用双引号,那么内层使用单引号,然后 $ CONDITIONS的 $ 符号需要转义
- 自定义的SQL语句中必须带有 WHERE $CONDITIONS
- 必须要有 --split-by
- query不能和–table同时出现
导入MYSQL数据到Hive
Sqoop会自动创建对应的Hive表,但是hive-database 需要手动创建
Sqoop 导入关系型数据到 hive 的过程是先导入到 hdfs,然后再 load 进入 hive
sqoop import
--connect jdbc:mysql://node1:3306/LightseaBlue
--username root
--password a
--table project
--hive-import #指定导入到hive
--hive-overwrite #覆盖导入
--create-hive-table #自动创建hive表
--delete-target-dir #删除中间结果数据
--hive-database LightseaBlue #hive的库
--hive-table new_project #hive的表
导入到Habase
sqoop import
--connect jdbc:mysql://node1:3306/mysql
--username root
--password a
--table help_keyword
--hbase-table new_help_keyword
--column-family person
--hbase-row-key help_keyword_id
增量导入
–incremental append --check-column 检查的字段 --last-value 起始字段
向HDFS中增量导入
sqoop import
--connect jdbc:mysql://node1:3306/LightseaBlue
--username root --password a
--table project
--incremental append
--check-column id
--last-value 2
向Hive中增量导入
sqoop import
--connect jdbc:mysql://node1:3306/LightseaBlue
--username root --password a
--table project
--hive-import --hive-database LightseaBlue
--hive-table new_project
--incremental append
--check-column id
--last-value 6
导出
export args参数详解
参数 | 作用 |
---|---|
- -columnscol1,col2,… | 导出表的哪几列 |
- -direct | 加快导出速度 |
- -export-dir | 从HDFS的哪个目录导出 |
-m | 指定任务数 |
- -table | 指定导出的表 |
- -input-enclosed-by < char > | 对字段值前后加上指定字符 |
- -input-escaped-by < char > | 对含有转移符的字段做转义处理 |
- -input-fields-terminated-by < char > | 字段之间的分隔符 |
- -input-lines-terminated-by < char > | 行之间的分隔符 |
- -input-optionally-enclosed-by < char > | 给带有双引号或单引号的字段前后加上指定字符 |
从HDFS导出到Mysql
sqoop export
--connectjdbc:mysql://node1:3306/LightseaBlue --username root
--password a
--table likeTable #目标表 (需要提前建好)
--export-dir /user/hive/warehouse/lightseablue.db/userlike #数据在HDFS上的位置
--input-fields-terminated-by '\t' -- #数据按什么分割
--defalt-character-set=utf-8;
作业(JOB)
job args参数详解
参数 | 作用 |
---|---|
–create | 创建job参数 |
–delete | 删除一个job |
–exec | 执行一个job |
–list | 显示job列表 |
–meta-connect | 用来连接metastore服务 |
–show | 显示一个job |
–verbose | 打印命令运行时的详细信息 |
创建Job作业
sqoop job
--create job1
-- import --connect jdbc:mysql://node1:3306/LightseaBlue
--username root
--password a
--table project
--target-dir /LightseaBlue/job1
-m 1
--direct
创建增量导入Job作业
sqoop job
--create job2
-- import
--connect jdbc:mysql://node1:3306/LightseaBlue
--username root
--password a
--table project
--target-dir /LightseaBlue/job1
-m 1
--incremental append
--check-column id
--last-value 9
有问题请留言!!