Sqoop 1.4.6环境安装配置以及Sqoop 导入导出mysql、hive、hive分区、hbase、增量导入、创建sqoop job
Sqoop是什么Sqoop是一个用于在Hadoop和关系数据库之间传输数据的工具1、 Sqoop 安装2、 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