Sqoop 1.4.6环境安装以及数据迁移hdfs、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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值