Sqoop 1.4.6环境安装以及数据迁移hdfs、hive、hive分区、hbase、增量导入、创建sqoop job(定时执行脚本方法)

it2024-08-08  39

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
最新回复(0)