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

2020-07-24 16:54:33 浏览数 (1)

Sqoop

  • 第一章 Sqoop是什么
    • 介绍
    • 架构
  • 第二章 Sqoop安装
  • 第三章 Sqoop操作
    • 连接操作
      • 连接参数
    • 导入操作
      • 导入参数
    • 操作操作
      • 导出参数

第一章 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安装

单机版安装步骤:

代码语言:javascript复制
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

连接操作

连接参数

代码语言:javascript复制
# 直连,连接一次就会失效
sqoop list-databases -connect jdbc:mysql://node1:3306/ -username root -password 123 

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

导入操作

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

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

导入参数

演示案例

代码语言:javascript复制
# 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

操作操作

导出参数

演示案例

代码语言:javascript复制
# 导出到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

0 人点赞