IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Sqoop导入与导出数据 -> 正文阅读

[大数据]Sqoop导入与导出数据

1、Sqoop部署

基础环境:hadoop完全分布式集群、hive、zookeeper、hbase

1.1、下载安装包

官网下载安装包:官网链接地址
将下载好的安装包上传至Linux,解压并修改名称
在这里插入图片描述

1.2、修改配置文件

进入Sqoop的conf目录下
复制文件并重命名
cp sqoop-env-template.sh sqoop-env.sh
修改sqoop-env.sh文件,并添加如下内容,具体路径应灵活修改

export HADOOP_COMMON_HOME=/usr/local/soft/hadoop-2.7.6
export HADOOP_MAPRED_HOME=/usr/local/soft/hadoop-2.7.6/share/hadoop/mapreduce
export HBASE_HOME=/usr/local/soft/hbase-1.4.6
export HIVE_HOME=/usr/local/soft/hive-1.2.1
export ZOOCFGDIR=/usr/local/soft/zookeeper-3.4.6/conf
export ZOOKEEPER_HOME=/usr/local/soft/zookeeper-3.4.6

在这里插入图片描述
进入Sqoop的bin目录下
vim configure-sqoop 修改配置文件,注释掉没用的内容(就是为了去掉警告信息)
注释掉以下内容
在这里插入图片描述

1.3、将Sqoop添加环境变量

vim /etc/profile
将sqoop的目录加入环境变量
在这里插入图片描述

1.4、添加mysql连接驱动

将mysql连接驱动复制到Sqoop的lib目录下
cp /usr/local/soft/hive-1.2.1/lib/mysql-connector-java-5.1.49.jar /usr/local/soft/sqoop-1.4.7/lib/

测试

  • 打印Sqoop版本
  • 测试MySQL连通性
    sqoop list-databases -connect jdbc:mysql://master:3306?useSSL=false -username root -password 123456
    在这里插入图片描述
    出现上图结果表示测试成功

2、导入数据

从传统的关系型数据库导入到HDFS、Hive、HBASE

2.1、将MySQL的数据导入HDFS

2.1.1、数据准备:

在MySQL中创建student数据库,并执行student.sql脚本导入数据
执行source /root/data/student.sql导入student数据
在这里插入图片描述

2.1.2、编写脚本

编写脚本文件保存为MySQLToHDFS.conf
–m 指定map任务数
–target-dir 指定HDFS的存储位置
–fields-terminated-by 指定HDFS上存储文件的字段分割符

import
--connect
jdbc:mysql://master:3306/student?useSSL=false
--username
root
--password
123456
--table
student
--m
2
--split-by
age
--target-dir
/sqoop/data/student
--fields-terminated-by
','

2.1.3、执行脚本

需在写的脚本位置执行
sqoop --options-file MySQLToHDFS.conf
查看HDFS中的数据,导入成功
在这里插入图片描述
注意事项:
1、–m 表示指定生成多少个Map任务,不是越多越好,因为MySQL Server的承载能力有限
2、当指定的Map任务数>1,那么需要结合--split-by参数,指定分割键,以确定每个map任务到底读取哪一部分数据,最好指定数值型的列,最好指定主键(或者分布均匀的列=>避免每个map任务处理的数据量差别过大)
3、如果指定的分割键数据分布不均,可能导致Map端“数据倾斜”问题
4、分割的键最好指定数值型的,而且字段的类型为int、bigint这样的数值型
5、编写脚本的时候,注意:例如:--username参数,参数值不能和参数名同一行
6、运行的时候会报错InterruptedException,hadoop2.7.6自带的问题,忽略即可
7、实际上sqoop在读取mysql数据的时候,用的是JDBC的方式,所以当数据量大的时候,效率不是很高
8、sqoop底层通过MapReduce完成数据导入导出,只需要Map任务,不需要Reduce任务
9、每个Map任务会生成一个文件

2.2、将MySQL数据导入到Hive

在执行MapReduce任务的时候
先会将MySQL的数据导出来并在HDFS上找个目录临时存放,默认为:/user/用户名/表名
然后再将数据加载到Hive中,加载完成后,会将临时存放的目录删除

2.2.1、数据准备

在MySQL所创建student数据库中,执行score.sql脚本导入数据
执行source /root/data/score.sql导入score数据
在这里插入图片描述

2.2.2、编写脚本

编写脚本文件,并保存为MySQLToHive.conf
–fields-terminated-by 字段分割符
–lines-terminated-by 行分隔符
–hive-import 将表导入Hive
–hive-overwrite 覆盖写入表
–delete-target-dir 如果存在目标文件夹就删除
--hive-database 指定Hive中的数据库,Hive中需要创建此数据库,否则可能会出错

import 
--connect
jdbc:mysql://master:3306/student?useSSL=false
--username
root
--password
123456
--table
score
--fields-terminated-by
"\t"
--lines-terminated-by
"\n"
--m
3
--split-by
student_id
--hive-import
--hive-overwrite
--create-hive-table
--hive-database
testsqoop
--hive-table
score
--delete-target-dir

2.2.3、执行脚本

执行脚本前需

  • 将HADOOP_CLASSPATH加入环境变量中
    加入如下内容
    export HADOOP_CLASSPATH=$HADOOP_HOME/lib:$HIVE_HOME/lib/*
    并source /etc/profile

  • 将hive-site.xml放入SQOOP_HOME/conf/
    cp /usr/local/soft/hive-1.2.1/conf/hive-site.xml /usr/local/soft/sqoop-1.4.7/conf/

执行脚本
sqoop --options-file MySQLToHive.conf
进入hive查看导入的表数据,导入成功如图
在这里插入图片描述

2.3、将MySQL数据导入HBASE

2.3.1、数据准备

将MySQL中的student数据导入hbase中

2.3.2、编写脚本

将脚本保存为MySQLToHBase.conf

–hbase-row-key 指定hbase的行键
–column-family 指定hbase的列簇
–hbase-table 指定hbase的表,hbase上的表需存在,并且有所指定的列簇

import 
--connect 
jdbc:mysql://master:3306/student?useSSL=false
--username 
root 
--password 
123456
--table 
student
--hbase-table 
stu
--hbase-row-key 
id 
--m 
1
--column-family 
cf

2.3.3、执行脚本

sqoop --options-file MySQLToHBase.conf
进入Hbase查看结果,成功如下图
在这里插入图片描述

3、导出数据

3.1、将HDFS上的数据导入MySQL

3.1.1、数据准备

sqoop从MySQL中导出的数据
在这里插入图片描述

3.1.2、编写脚本

编写脚本并保存为HDFSToMySQL.conf
&characterEncoding=utf8如果HDFS上的数据导入MySQL中乱码在jdbc后添加字符集
–columns 指定列名
–export-dir 指定HDFS上的(需要导出的位置)存储位置

export
--connect
jdbc:mysql://master:3306/student?useSSL=false&characterEncoding=utf8
--username
root
--password
123456
--table
student
-m
1
--columns
id,name,age,gender,clazz
--export-dir
/sqoop/data/student/
--fields-terminated-by 
','

3.1.3、执行脚本

首先清空MySQL中的数据
执行脚本
sqoop --options-file HDFSToMySQL.conf
成功如下图
在这里插入图片描述

4、–direct参数

加上这个参数,可以在导出MySQL数据的时候,使用MySQL提供的导出工具mysqldump,加快导出速度,提高效率
但是需要将master上的/usr/bin/mysqldump分发至 node1、node2的/usr/bin目录下
如果不做上述操作,将会出现如下错误
在这里插入图片描述
在master上执行

scp /usr/bin/mysqldump node1:/usr/bin/
scp /usr/bin/mysqldump node2:/usr/bin/

再次执行脚本就不会出错了
在这里插入图片描述
在这里插入图片描述

4.1、e参数的使用示例

import 
--connect 
jdbc:mysql://master:3306/student 
--username 
root 
--password 
123456 
--fields-terminated-by 
"\t" 
--lines-terminated-by 
"\n" 
--m 
2 
--split-by 
student_id 
--e 
"select * from score where student_id=1500100011 and $CONDITIONS" 
--target-dir 
/testQ 
--hive-import 
--hive-overwrite 
--create-hive-table 
--hive-database 
testsqoop 
--hive-table 
score2
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 12:05:45  更:2021-12-07 12:08:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:34:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码