Sqoop 1.4.6环境安装配置以及Sqoop 导入导出mysql、hive、hive分区、hbase、增量导入、创建sqoop job
Sqoop是什么
Sqoop是一个用于在Hadoop和关系数据库之间传输数据的工具
将数据从RDBMS导入到HDFS
HDFS、Hive、HBase
从HDFS导出数据到RDBMS
使用MapReduce导入和导出数据,提供并行操作和容错
目标用户
系统管理员、数据库管理员
大数据分析师、大数据开发工程师等
1、 Sqoop 安装
安装 Sqoop 的前提是已经具备 Java 和 Hadoop、 Hive、 ZooKeeper、 HBase 的环境
1.1 下载并解压
链接:https://pan.baidu.com/s/1-i56m_mmLdKE_NqYpCzRhA
提取码:t2c3
1.上传安装包 sqoop-1.4.6-cdh5.14.2.tar.gz 到虚拟机中
2.解压 sqoop 安装包到指定目录 改名sqoop 方便使用
tar -zxvf sqoop-1.4.6-cdh5.14.2.tar.gz -C /opt
cd /opt/
mv sqoop-1.4.6-cdh5.14.2/ sqoop
3.配置环境变量
vi /etc/profile
添加:
export SQOOP_HOME=/opt/sqoop
export PATH=$SQOOP_HOME/bin:$PATH
让配置文件生效:
source /etc/profile
1.重命名配置文件
cd /opt/sqoop/conf
mv sqoop-env-template.sh sqoop-env.sh
2.修改配置文件
vi sqoop-env.sh
export HADOOP_COMMON_HOME=/opt/hadoop
export HADOOP_MAPRED_HOME=/opt/hadoop
export HIVE_HOME=/opt/hive
export ZOOKEEPER_HOME=/opt/zkpr
export ZOOCFGDIR=/opt/zkpr
export HBASE_HOME=/opt/hbase
1.3 拷贝 JDBC 驱动
拷贝 jdbc 驱动到 sqoop 的 lib 目录下, 驱动包下载链接:
链接:https://pan.baidu.com/s/1sKdK2VgHamMk_cRgJR-t5w
提取码:a2u1
cp /opt/hive/lib/mysql-connector-java-5.1.38.jar /opt/sqoop/lib/
1.4 验证 Sqoop
我们可以通过某一个 command 来验证 sqoop 配置是否正确:
sqoop help
1.5 测试 Sqoop 是否能够成功连接数据库
sqoop list-databases --connect \
jdbc:mysql://hadoop1:3306/ --username root --password ok
这里需要配置自己 mysql 数据库的连接信息
出现库名即为成功
2、 Sqoop 导入导出mysql、hive、hive分区、hbase、增量导入、创建sqoop job
*****使用sqoop从mysql导入到hdfs
sqoop import --connect jdbc:mysql://localhost:3306/库名 \
--driver com.mysql.jdbc.Driver \
--table 表名 \
--username 用户名 \
--password 密码 \
--target-dir 目标hdfs的路径 \
--m 3 3是MapReduce的数量
使用where语句
sqoop import --connect jdbc:mysql://localhost:3306/库名 \
--driver com.mysql.jdbc.Driver \
--table 表名 \
--where 条件语句 \
--username 用户名 \
--password 密码 \
--delete-target-dir \
--target-dir 目标hdfs的路径 \
--m 3 3是MapReduce的数量
指定列导入 使用columns过滤
sqoop import --connect jdbc:mysql://localhost:3306/库名 \
--driver com.mysql.jdbc.Driver \
--table 表名 \
--columns "列名,列名,..." \
--where 条件语句 \
--username 用户名 \
--password 密码 \
--delete-target-dir \
--target-dir 目标hdfs的路径 \
--m 3 3是MapReduce的数量
使用查询语句进行过滤
sqoop import --connect jdbc:mysql://localhost:3306/库名 \
--driver com.mysql.jdbc.Driver \
--query "select * from . where .. and \$CONDITIONS" \
--split-by oder_id \
--username 用户名 \
--password 密码 \
--delete-target-dir \
--target-dir 目标hdfs的路径 \
--m 3 3是MapReduce的数量
增量导入
sqoop import --connect jdbc:mysql://localhost:3306/库名 \
--driver com.mysql.jdbc.Driver \
--table 表名 \
--username 用户名 \
--password 密码 \
--incremental append \
--check-column 列名 \
--last-value '时间' \
--delete-target-dir \
--target-dir 目标hdfs的路径 \
--m 3 3是MapReduce的数量
创建job
sqoop job --create mysql2hdfs \
-- import \
--connect jdbc:mysql://localhost:3306/库名 \
--driver com.mysql.jdbc.Driver \
--table 表名 \
--username 用户名 \
--password 密码 \
--incremental append \
--check-column 列名 \
--last-value '0' \
--delete-target-dir \
--target-dir 目标hdfs的路径 \
--m 3 3是MapReduce的数量
*********查看job
sqoop job --list
执行job
sqoop job --exec mysql2hdfs
每次job执行成功之后都会修改 --last-value 值 将最后一次的最大值填充进去
这里的0 没有实际含义,只是为了保证第一次数据导入时值最小
每天可以定时执行
crontab -eDate
* 2 */1 * * sqoop job --exec mysql2hdfs
分 时 日
每天2点执行一次
--as-textfile 默认 指定导入时的文件格式
先拷贝2个jar包到sqoop/lib cp /opt/hive/lib/hive-common-1.1.0-cdh5.14.2.jar
cp /opt/hive/lib/hive-exec-shims* /sqoop/lib
先在hive中创建库 表不需要
create database if not exists 库名;
从MySQL导入数据到hive
sqoop import --connect jdbc:mysql://localhost:3306/库名 \
--driver com.mysql.jdbc.Driver \
--table 表名 \
--username 用户名 \
--password 密码 \
--hive-import \
--create-hive-table \
--hive-database 库名 \
--hive-table 表名 \
--m 3 3是MapReduce的数量
导入hive分区中
sqoop import --connect jdbc:mysql://localhost:3306/库名 \
--driver com.mysql.jdbc.Driver \
--username 用户名 \
--password 密码 \
--query "select 字段 from . where .. and \$CONDITIONS" \
--split-by oder_id \
--delete-target-dir \
--target-dir 目标hdfs的路径 \
--hive import \
--hive-database 库名 \
--hive-table 表名 \
--hive-partition-key " " \
--hive-partition-value " " \
--m 3 3是MapReduce的数量
注意:分区字段不能当成查询的字段导入表中
导入数据到HBASE
1、在HBASE中建表
create '表名','列簇名','列簇名'
2、sqoop导入
sqoop import --connect jdbc:mysql://localhost:3306/库名 \
--driver com.mysql.jdbc.Driver \
--split-by oder_id \
--username 用户名 \
--password 密码 \
--table 表名 \
--hbase-table hbase表名 \
--column-family 列簇名 \
--m 3
导出数据到mysql
mysql中建表
create table customer as select * from customer where 1=2; 拿表结构
导出数据到mysql
sqoop export --connect jdbc:mysql://localhost:3306/库名 \
--driver com.mysql.jdbc.Driver \
--username 用户名 \
--password 密码 \
--table hdfs中的表名 \
--export-dir /hdfs的路径 \
--input-fields-terminated-by '\001' \
--m 1
sqoop脚本
1、编写脚本 job_RDBMS2HDFS.opt
-----------------------------
import
--connect
jdbc:mysql://localhost:3306/库名
--driver
com.mysql.jdbc.Driver
--table
表名
--username
用户名
--password
密码
--target-dir
hdfs路径
--delete-target-dir
--m
3
--------------------------------
2.执行脚本
sqoop --options-file job_RDBMS2HDFS.job