场景
传统型缺点,分布式存储。把传统型数据库数据迁移。
Sqoop安装部署
1)下载安装包
2)解压
tar -zxvf .tar
3)修改配置
vi sqoop-env.sh
export HADOOP_COMMON_HOME=/root/hd/hadoop-2.8.4
export HADOOP_MAPRED_HOME=/root/hd/hadoop-2.8.4
export HIVE_HOME=/root/hd/hive
export ZOOCFGDIR=/root/hd/zookeeper-3.4.10/conf
4)发送mysql驱动到lib下
5)检测是否安装成功 bin/sqoop help
import
1、数据从mysql中导入到hdfs当中
bin/sqoop import --connect jdbc:mysql://bigdata:3306/sq --username hive --password hive --table user --target-dir /sqoop/datas --delete-target-dir --num-mappers 1 --fields-terminated-by '\t'
注:在集群中运行,需要提前在mysql中设置权限
grant all privileges on *.* to root@'%' identified by "password";
flush privileges;
2、数据mysql中导入到hdfs当中进行筛选
bin/sqoop import --connect jdbc:mysql://bigdata:3306/sq --username hive --password hive --target-dir /sqoop/selectdemo --delete-target-dir --num-mappers 1 --fields-terminated-by '\t' --query 'select * from user where id =1 and $CONDITIONS'
注:$CONDITIONS笔记:并行的方式导入结果,每个maptask需要执行SQL查询语句的副本,结果会根据sqoop推测的边界条件分区。
where必须包含$CONDITIONS。这样每个sqoop程序都会被替换为一个独立的条件。
用于在多个num-mappers的时候做优化
3、通过where筛选
bin/sqoop import --connect jdbc:mysql://bigdata:3306/sq --username hive --password hive --target-dir /sqoop/selectdemo --delete-target-dir --num-mappers 1 --fields-terminated-by '\t' --table user --where 'id=2'
4、mysql导入到hive中
需要先创建hive表
过程:先从mysql表移动到hdfs,再从hdfs剪切到hive中,所以运行过程中会产生错误:
ERROR tool.ImportTool: Import failed: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://192.168.1.9:9000/user/terry/user already exists
需要先删除
问题:hiveconf
解决:
vi ~/.bash_profile
export HADOOP_CLASSPATH=$HADOOP_CLASSPASS:/Library/bigdata/apache-hive-2.3.0-bin/lib/*
cp hive/lib/hive-common-3.0.0.jar sqoop/lib/
bin/sqoop import --connect jdbc:mysql://bigdata:3306/sq --username hive - -password hive --table user --num-mappers 1 --hive-import --fields-terminated-by "\t" --hive-overwrite --hive-table user_sqoop
export
需求:hive/hdfs的数据导出到mysql
1、根据hive中的表创建mysql表
删除表中原有数据
truncate table user1;
2、编写sqoop启动命令
bin/sqoop export --connect jdbc:mysql://bigdata:3306/sq --username hive --password hive --table user1 --num-mappers 1 --export-dir /user/hive/warehouse/user_sqoop --input-fields-terminated-by '\t'
Sqoop打包脚本的使用
1)创建文件夹
mkdir sqoopjob
2)创建文件脚本
vi sqoop_job.opt
export
--connect jdbc:mysql://bigdata:3306/sq
--username
hive
--password
hive
--table
user1
--num-mappers
1
--export-dir
/user/hive/warehouse/user_sqoop
--input-fields-terminated-by
"\t"
注意:一行命令 一行值
3)执行脚本文件
bin/sqoop --options-file /root/sqoopjob/job_hdfs2mysql.opt
sqoop常用命令
命令 | 说明 |
---|---|
–import | 将数据导入到集群 |
–export | 将集群数据导出 |
–codegen | 将某数据库中表生成javaBean并打包为jar |
–eval | 查看sql执行结果 |
–create-hive-table | 创建hive表 |
–import-all-tables | 导入某个数据库中所有表到hdfs中 |
–list-tables | 列出某个数据库下的所有表 |
–merge | 将hdfs中不同目录下的数据合并在一起 |
–version V | 查看sqoop版本 |
–help | 查看帮助信息 |
sqoop常用参数
参数 | 说明 |
---|---|
–connect | 连接关系型数据库URL |
–connectionmanager | 指定连接管理类 |
–driver | JDBC的driver class |
–username | 连接数据库的用户名 |
–password | 连接数据库的密码 |
–verbose | 在控制台中打印详细信息 |
–help | 查看帮助 |
–hive-import | 将关系型数据库导入到hive表中 |
–hive-overwrite | 覆盖掉hive表中已存在的数据 |
–create-hive-table | 创建hive表 |
–hive-table | 接入已有的hive表 |
–table | 指定关系型数据库的表名 |