Sqoop——将关系数据库数据与hadoop数据进行转换的工具

第一章 Sqoop是什么

介绍

  • Apache Sqoop(TM)是一种旨在Apache Hadoop和结构化数据存储(例如关系数据库)之间高效传输批量数据的工具 (将关系数据库(oracle、mysql、postgresql等)数据与hadoop数据进行转换的工具)。

  • Sqoop于2012年3月成功地从孵化器毕业,现在是Apache的顶级项目

  • 最新的稳定版本是1.4.7。Sqoop2的最新版本为1.99.7。请注意,1.99.7与1.4.7不兼容且功能不完整,因此不适用于生产部署。

  • 版本:(两个版本完全不兼容,sqoop1使用最多)
    sqoop1:1.4.x
    sqoop2:1.99.x

  • 同类产品
    DataX:阿里顶级数据交换工具

  • 官网:http://sqoop.apache.org/

架构

sqoop架构非常简单,是hadoop生态系统的架构最简单的框架。
sqoop1由client端直接接入hadoop,任务通过解析生成对应的maprecue执行

在这里插入图片描述

Sqoop的输入输出/导入导出是相对于文件系统HDFS的, 因此HDFS的导入导出如图1,图2

图1 导入
在这里插入图片描述

图2 导出
在这里插入图片描述


第二章 Sqoop安装

单机版安装步骤:

1、解压, 移动到相关目录( 软件及mysql驱动在底部分享 )
mv sqoop-env-template.sh sqoop-env.sh

2、配置环境变量 
export SQOOP_HOME=/XX/sqoop.xx
source /etc/profile

3、添加数据库驱动包
cp mysql-connector-java-5.1.10.jar /sqoop-install-path/lib

4、重命名配置文件,修改配置内容(1)
注意: 如果前缀和这个文档中的命名一致的话就不需要指定环境变量了, 如hive 和 hbase
mv sqoop-env-template.sh sqoop-env.sh
-----------------------------------------------------
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/opt/chy/hadoop

#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/opt/chy/hadoop
-----------------------------------------------------



5、修改配置configure-sqoop(2 )
注意: 去掉未安装服务相关内容;例如(HBase、HCatalog、Accumulo),这样做是运行sqoop命令出现的警告
#if [ ! -d "${HBASE_HOME}" ]; then
#  echo "Error: $HBASE_HOME does not exist!"
#  echo 'Please set $HBASE_HOME to the root of your HBase installation.'
#  exit 1

6、测试
sqoop version (3)
# 连接后的效果(4,5),可以看到mysql数据库中的已经被sqoop连接
sqoop list-databases -connect jdbc:mysql://node1:3306/ -username root -password 123 


# 技巧: 连接mysql速度慢怎么办?
# 解决: 取消名称检测,提升访问速度
vim /etc/my.cnf
------------------
skip-name-resolve

sqoop list-databases -connect jdbc:mysql://47.97.169.52:3307/ -username root -password root
图1
在这里插入图片描述
图2
在这里插入图片描述
图3
在这里插入图片描述

图4
在这里插入图片描述
图5
在这里插入图片描述


第三章 Sqoop操作

在sqoop的docs目录下,打开index,html即可查看官网内容
file:///F://spoop/sqoop-1.4.7.bin__hadoop-2.6.0/docs/SqoopUserGuide.html#_literal_sqoop_export_literal

连接操作

连接参数

# 直连,连接一次就会失效
sqoop list-databases -connect jdbc:mysql://node1:3306/ -username root -password 123 

# 通过自定义配置文件连接, 将需要导入或导出的参数写在配置文件汇总
sqoop --options-file 自定义文件

在这里插入图片描述

导入操作

前提:因为要使用MapReduce框架所以需要启动DN和RM

# mr程序一直处于阻塞状态需要查看nodemanager是否启动成功
## 启动NM
start-yarn.sh
##勿忘记启动resourcemanager
yarn-daemon.sh start resourcemanager
## 8032 端口,resourcemanager

导入参数

在这里插入图片描述
演示案例

# 1. 编写自定义启动文件
[root@node4 sqoop]# vim option 
## 插入指定字段书写方式
------------------------------
import
--connect
jdbc:mysql://node1:3307/result_db
--username
root
--password
root
--as-textfile
--columns
id,browser_name
--table
dimension_browser
--delete-target-dir
-m
1
--target-dir
/sqoop/data
------------------------------

## 插入sql语句方式
------------------------------
import
--connect
jdbc:mysql://node1:3307/result_db
--username
root
--password
root
--as-textfile
--delete-target-dir
-m
1
--target-dir
/sqoop/data
-e
select * from dimension_browser where $CONDITIONS
------------------------------

## 将数据导入到hive中
------------------------------
import
--connect
jdbc:mysql://47.97.169.52:3307/result_db
--username
root
--password
root
--as-textfile
--query
'select * from dimension_browser where $CONDITIONS'
--delete-target-dir
--target-dir
/sqoop/tmp
-m
1
--hive-import
--create-hive-table
--hive-table
browser
----------------------注意: 这里如果无法自动建表,则需要我们在hive中创建对应的表,然后通过load data inpath '/sqoop/tmp/part-m-00000' into table browser;导入到hive数据中------------------------------




# 注意
## $CONDITIONS: -e情况下必须添加,类似mybatis的动态查询
## 在有条写的情况下格式 select * from dimension_browser where $CONDITIONS where id>20
# 3.运行测试
[root@node4 sqoop]# sqoop --options-file option
# 查看是否导入成功?是否生成了相关的文件,1
# 通过hive查看文件的内容,2

导入时出现异常的解决: ERROR hive.HiveConfig: Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly.

图1
在这里插入图片描述
图2
在这里插入图片描述

操作操作

导出参数

在这里插入图片描述

演示案例

# 导出到mysql
export
--connect
jdbc:mysql://node01:3307/test
--username
root
--password
123
-m
1
--columns
id,browser_name,browser_version
--export-dir
/sqoop/data
--table
h_browser


# 导出到mysql 指定分隔符(导入同理)
export
--connect
jdbc:mysql://node01:3307/test
--username
root
--password
123
-m
1
--columns
id,browser_name,browser_version
--export-dir
/sqoop/data
--table
h_browser
--input-fields-terminated-by
分隔符( eg: 逗号,顿号,^A.,\t..)

注意:
1.需要被导出的hdfs目录下有数据 ,即需要结合导入一起使用
2.导出数据到mysql时, 需要在mysql创建对应的表 (字段类型名称要匹配)


链接:https://pan.baidu.com/s/1P_BndD3_bmafHI_7tTVwPA
点赞私聊获取提取码哦~~~
提取码:u7tb
复制这段内容后打开百度网盘手机App,操作更方便哦

发布了175 篇原创文章 · 获赞 787 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/qq_43371556/article/details/103213582