sqoop详解(安装&导入&导出&job)

Sqoop

Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

安装

下载软件

  1. 上传安装包sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz到虚拟机中

  2. 软件到指定目录

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
  1. 配置环境变量
	vim /etc/profile
	export SQOOP_HOME=/usr/local/LinuxApp/sqoop1.4.7;
	export PATH=$PATH:$SQOOP_HOME/bin
	export SQOOP_HOME
	#保存退出
	source /etc/profile
  1. 修改配置文件(conf目录下)
cp sqoop-env-template.sh sqoop-env.sh
  1. 修改配置文件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
  1. 拷贝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

注意:

  1. 要么外层使用单引号,内层使用双引号,$ CONDITIONS的 $ 符号不用转义, 要么外层使用双引号,那么内层使用单引号,然后 $ CONDITIONS的 $ 符号需要转义
  2. 自定义的SQL语句中必须带有 WHERE $CONDITIONS
  3. 必须要有 --split-by
  4. 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

有问题请留言!!

发布了27 篇原创文章 · 获赞 1 · 访问量 1313

猜你喜欢

转载自blog.csdn.net/Sakitaf/article/details/104680439