安装并使用sqoop
目录
安装
1.解压
tar -xvf sqoop-1.4.2.bin__hadoop-2.0.0-alpha.tar.gz -C /opt/software/
2.重命名,配置环境
#SQOOP_HOME
export SQOOP_HOME=/opt/software/sqoop
export PATH=$SQOOP_HOME/bin:$PATH
mv sqoop-1.4.2.bin__hadoop-2.0.0-alpha/ sqoop
3. 配置sqoop-env.sh
export HADOOP_COMMON_HOME=/opt/software/hadoop2.7
export HADOOP_MAPRED_HOME=/opt/software/hadoop2.7
export HIVE_HOME=/opt/software/hive
4 拷贝mysql驱动包
cp /opt/software/hive/lib/mysql-connector-java-5.1.38.jar /opt/software/sqoop/lib
5 验证sqoop配置是否正确
bin/sqoop help
6连接mysql
sqoop list-databases --connect jdbc:mysql://master:3306/ --username root --password 123456
以上安装成功
实操
1.Sqoop导入
1. 导入数据 :从非大数据集群向大数据集群中传输数据
在mysql里面建库建表方便使用
导入hdfs
全量导入
bin/sqoop import \
--connect jdbc:mysql://master:3306/school?charset-utf-8 \
--username root \
--password 000000 \
--table stu \
--target-dir /user/hive/warehouse/sqooptest \
//--delete-target-dir \ //自行选择
--num-mappers 1 \
//--fields-terminated-by '\t'
//查询导入
//自定义的查询导入 $CONDITIONS 传递参数 保证写出顺序
--query 'select name,sex from stu where id <=1 and $CONDITIONS;'
查询导入
(where 过滤和query查询)
版本不支持原因 ,把--table stu 删掉就好了
成功
mysql导入hive
bin/sqoop import \
--connect jdbc:mysql://master:3306/school?charset-utf8 \
--username root \
--password 123456 \
--table stu \
--hive-import \
--hive-table school.stu \
--hive-overwrite -m 1
//分隔符--fields-terminated-by ',' \
//没有就创建,有的话会报错
--hive-create-table
发现报错,删掉,重跑
hive查询,导入成功
$sqoop export (generic-agrs)(export-args)
增量导入
仅导入新添加的表中的行的技术
- --check-columns指定列
- --incremental :mode
append追加,对大于last-value指定的值之后的记录进行追加导入
sqoop import \
--connect jdbc:mysql://master:3306/school \
--username root \
--password 000000 \
--table stu \
--target-dir /user/hive/warehouse/sqooptest \
--incremental append \
--check-column id \
--last-value 4
lastmodified :最后的修改时间,追加last-value指定的日期之后的记录
lastmodified模式:
append 附加
merge-key 合并 (该模式是进行一次完整的mapreduce操作)
//更新id为1的字段
update stu set name="ccc" where id =1;
//这条数据时间更新为更新数据时的系统时间
sqoop import \
--connect jdbc:mysql://master:3306/school \
--username root \
--password 000000 \
--table stu \
--target-dir /user/hive/warehouse/sqooptest \
--incremental lastmodifiedresult \
--check-column id \
--last-value "2019-05-28 18:42:06" \
--m 1 \
--merge-key id
- --last-value:value
sqoop import \
--connect jdbc:mysql://master:3306/school \
--username root \
--password 000000 \
--table stu \
--target-dir /user/hive/warehouse/sqooptest \
--incremental lastmodified \
--check-column id \
--last-value 5 \
--m 1 \
--apend
lastmodified模式处理增量时,会将大于等于last-value值的数据当作增量处理
自从上次导入后的最大值(大于指定的值)(也可以自己设定)
bin/sqoop import \
--connect jdbc:mysql://master:3306/school?charset-utf8 \
--username root \
--password 123456 \
--table stu \
--hive-import \
--hive-table school.stu \
--hive-overwrite -m 1
2 .Sqoop导出export
其中的目标表/数据自己准备
默认操作:
将文件中的数据使用 insert 语句插入到表中
Hdfs导入mysql
bin/sqoop import \
--connect jdbc:mysql://master:3306/school?charset-utf8 \
--username root \
--password 123456 \
--table student \
--export-dir /user/hive/warehouse/sqooptest/student
--fields-terminated-by '\t'
更新模式:
Sqoop将生成update替换数据库现有记录的语句
--update-key :根据某个字段进行更新(可以指定多个字段,用逗号隔开)
bin/sqoop import \
--connect jdbc:mysql://master:3306/school?charset-utf8 \
--username root \
--password 123456 \
--table student \
--export-dir /user/hive/warehouse/sqooptest/student
--update-key id \
--update-mode updateonly \
--updatemod:指定 updateonly 默认模式,仅更新已存在数据记录,不插入新纪录
bin/sqoop import \
--connect jdbc:mysql://master:3306/school?charset-utf8 \
--username root \
--password 123456 \
--table student \
--export-dir /user/hive/warehouse/sqooptest/student
--update-key id \
--update-mode allowinsert \
调用模式:
为每一条记录创建一个储存过程调用
3.Sqoop Job作业
1.语法
$sqoop job (generic-agrs)(export-args)
[--[subtool-name](subtool-args)]
2.创建
sqoop job --create itcastjob -- import --connect jdbc:mysql://master:3306/school \
--username root \
--password 000000 \
--target-dir /user/hive/warehouse/sqooptest3 \
--table student \
--m 1
3.验证
sqoop job --list
4.检查
sqoop job --show itcastjob
5.执行
sqoop job --exec itcastjob
6.免密执行
存在如下配置(sqoop-site.xml)
bin/sqoop import \
--connect jdbc:mysql://master:3306/school?charset-utf8 \
--username root \
--password-file /input/sqoop/pwd/itcastmysql.pwd \
--target-dir /user/hive/warehouse/sqooptest3 \
--table student \