大数据011——Sqoop

2023-05-16

1. Sqoop 概述

Sqoop是Hadoop和关系数据库服务器之间传送数据的一种工具。它是用来从关系数据库如:MySQL,Oracle到Hadoop的HDFS,并从Hadoop的文件系统导出数据到关系数据库。传统的应用管理系统,也就是与关系型数据库的使用RDBMS应用程序的交互,是产生大数据的来源之一。

当大数据存储器和分析器,如MapReduce, Hive, HBase, Cassandra, Pig等,Hadoop的生态系统等应运而生图片,它们需要一个工具来用的导入和导出的大数据驻留在其中的关系型数据库服务器进行交互。在这里,Sqoop占据着Hadoop生态系统提供关系数据库服务器和Hadoop HDFS之间的可行的互动。

Sqoop:“SQL 到 Hadoop 和 Hadoop 到SQL”,Sqoop是Hadoop和关系数据库服务器之间传送数据的一种工具。它是用来从关系数据库如MySQL,Oracle到Hadoop的HDFS从Hadoop文件系统导出数据到关系数据库。它是由Apache软件基金会提供。

2. Sqoop安装与部署

1)、下载tar包:Sqoop下载,上传至服务器并解压;

2)、配置Sqoop环境变量:

vim ~/.bash_profile

添加:

export SQOOP_HOME=/usr/sqoop-1.4.6.bin
PATH=$PATH:$SQOOP_HOME/bin

重新加载配置文件:

source ~/.bash_profile

3)、添加数据库连接驱动包:

cp mysql-connector-java-5.1.10.jar $SQOOP_HOME/lib

4)、$SQOOP_HOME/conf/目录下重命名文件:

mv sqoop-env-template.sh sqoop-env.sh

5)、修改$SQOOP_HOME/bin/configure-sqoop:

注释掉HCatalog,Accumulo检查(除非你准备使用HCatalog,Accumulo等HADOOP上的组件)

## Moved to be a runtime check in sqoop.
#if [ ! -d "${HCAT_HOME}" ]; then
# echo "Warning: $HCAT_HOME does not exist! HCatalog jobs willfail."
# echo 'Please set $HCAT_HOME to the root of your HCatalog installation.'
#fi
#if [ ! -d "${ACCUMULO_HOME}" ];then
# echo "Warning: $ACCUMULO_HOME does not exist! Accumulo imports willfail.“
# echo 'Please set $ACCUMULO_HOME to the root of your Accumuloinstallation.'
#fi   

6)、测试 sqoop version

[root@node01 ~]# sqoop version
19/01/15 22:10:08 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
Sqoop 1.4.6
git commit id c0c5a81723759fa575844a0a1eae8f510fa32c25
Compiled by root on Mon Apr 27 14:38:36 CST 2015

3. Sqoop 导入与导出

请提前开启Zookeeper集群、Hadoop集群、Yarn集群、HBase集群、mysql服务。

3.1 导入(import)参数

--append		将数据追加到HDFS上一个已存在的数据集上
--as-avrodatafile	将数据导入到Avro数据文件
--as-sequencefile	将数据导入到SequenceFile
--as-textfile	将数据导入到普通文本文件(默认)
--boundary-query <statement>	边界查询,用于创建分片(InputSplit)
--columns <col,col,col…>	从表中导出指定的一组列的数据
--delete-target-dir	如果指定目录存在,则先删除掉
--direct			使用直接导入模式(优化导入速度)
--direct-split-size <n>	分割输入stream的字节大小(在直接导入模式下)
--fetch-size <n>		从数据库中批量读取记录数
--inline-lob-limit <n>	设置内联的LOB对象的大小
-m,--num-mappers <n>	使用n个map任务并行导入数据
-e,--query <statement>	导入的查询语句
--split-by <column-name>	指定按照哪个列去分割数据
--table <table-name>	导入的源表表名
--target-dir <dir>	导入HDFS的目标路径
--warehouse-dir <dir>	HDFS存放表的根路径
--where <where clause>	指定导出时所使用的查询条件
-z,--compress	启用压缩
--compression-codec <c>	    指定Hadoop的codec方式(默认gzip)
--null-string <null-string>   如果指定列为字符串类型,使用指定字符串替换值为null的该类列的值
--null-non-string <null-string>如果指定列为非字符串类型,使用指定字符串替换值为null的该类列的值
--validate <class-name>	      启用数据副本验证功能,仅支持单表拷贝,可以指定验证使用的实现类
--validation-threshold <class-name>      指定验证门限所使用的类
--direct	使用直接导出模式(优化速度)

3.2 导出(export)参数

--export-dir <dir>			导出过程中HDFS源路径
--m,--num-mappers <n>			使用n个map任务并行导出
--table <table-name>			导出的目的表名称
--call <stored-proc-name>		导出数据调用的指定存储过程名
--update-key <col-name>			更新参考的列名称,多个列名使用逗号分隔
--update-mode <mode>			指定更新策略,包括:updateonly(默认)、allowinsert
--input-null-string <null-string>	使用指定字符串,替换字符串类型值为null的列
--input-null-non-string <null-string>	使用指定字符串,替换非字符串类型值为null的列
--staging-table <staging-table-name>	在数据导出到数据库之前,数据临时存放的表名称
--clear-staging-table	清除工作区中临时存放的数据
--batch	使用批量模式导出

3.3 将MySQL中的数据导入到HDFS/Hive/Hbase

3.3.1 MySQL 到 HDFS

sqoop import --connect jdbc:mysql://node01:3306/test --username root --password 123456 --table tb_user -m1 -target-dir hdfs://fzp/sqoop/myuser

查看数据:

[root@node01 ~]# hdfs dfs -get /sqoop/myuser /
get: `/myuser/_SUCCESS': File exists
get: `/myuser/part-m-00000': File exists
[root@node01 ~]# cat /myuser/part-m-00000 
1,zhangsan,19,男
2,李四,22,女
3,wangwu,33,男

3.3.1 MySQL 到 Hive

sqoop import --connect jdbc:mysql://node01:3306/test --username root --password 123456 --table tb_user --hive-import --hive-database mydb --hive-table myuser01 --create-hive-table --fields-terminated-by "," -m 1

注:由于使用Sqoop从MySQL导入数据到Hive需要指定target-dir,因此导入的是普通表而不能为外部表。

Hive参数:

--hive-import #必须参数,指定导入hive
--hive-database default #hive库名
--hive-table people #hive表名
--fields-terminated-by #hive的分隔符
--hive-overwrite #重写重复字段
--create-hive-table # ,但是表存在会出错。不建议使用这个参数,因为到导入的时候,会与我们的字段类型有出入。
--hive-partition-key “dt” #指定分区表的字段
--hive-partition-value “2018-08-08” #指定分区表的值
-m 1 : #设置只使用一个map进行数据迁移

查看数据:

hive> select * from myuser01;
OK
1	zhangsan	19	男
2	李四	22	女
3	wangwu	33	男
Time taken: 22.925 seconds, Fetched: 3 row(s)

3.3.1 MySQL 到 HBase

sqoop import --connect jdbc:mysql://node01:3306/test --username root --password 123456 --table tb_user --hbase-table myuser --column-family cf1 --hbase-row-key name --hbase-create-table -m 1

HBase参数:

--hbase-table #HBase表名
--hbase-create-table #帮创建好 HBase 表
--column-family cf1 #指定列族名
--hbase-row-key #指定rowkey对应mysql的键

查看数据:

hbase(main):008:0> scan 'myuser'
ROW                        COLUMN+CELL                                          
 wangwu                    column=cf1:age, timestamp=1547625803703, value=33 
 wangwu                    column=cf1:id, timestamp=1547625803703, value=3 
 wangwu                    column=cf1:sex, timestamp=1547625803703, value=\xE7\x94\xB7
 zhangsan                  column=cf1:age, timestamp=1547625803703, value=19 
 zhangsan                  column=cf1:id, timestamp=1547625803703, value=1  
 zhangsan                  column=cf1:sex, timestamp=1547625803703, value=\xE7\x94\xB7 
 \xE6\x9D\x8E\xE5\x9B\x9B  column=cf1:age, timestamp=1547625803703, value=22    
 \xE6\x9D\x8E\xE5\x9B\x9B  column=cf1:id, timestamp=1547625803703, value=2    
 \xE6\x9D\x8E\xE5\x9B\x9B   column=cf1:sex, timestamp=1547625803703, value=\xE5\xA5\xB3                                                       
3 row(s) in 0.1780 seconds

3.4 使用 Sqoop 将 HDFS/Hive/HBase 中的数据导出到MySQL

3.4.1 HDFS 到 MySQL

sqoop export --connect jdbc:mysql://node01:3306/test --username root --password 123456 --table tb_user --export-dir /sqoop/myuser

3.4.2 Hive 到 MySQL

sqoop export --connect jdbc:mysql://node01:3306/test --username root --password 123456 --table tb_user --export-dir /user/hive_1/warehouse/mydb.db/myuser01 --input-fields-terminated-by ',’

3.4.3 HBase 到 MySQL

目前sqoop没有办法把数据直接从Hbase导出到mysql。也可以通过Hive建立2个表,一个外部表是基于这个Hbase表的,另一个是单纯的基于hdfs的hive原生表,然后把外部表的数据导入到原生表(临时),然后通过hive将临时表里面的数据导出到mysql。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大数据011——Sqoop 的相关文章

  • ROS系统SLAM基础学习:运行gazebo仿真建立保存地图

    ROS系统SLAM基础学习 xff1a gazebo仿真建立保存地图 使用gmapping建立并保存地图使用hector slam建立并保存地图遇到的问题解决以及总结 软件版本Ubuntu16 04LTSROSkineticgazebo7
  • 软件安装时窗口出现在屏幕左上角而且拖不出来

    今天在安装MYSQL是出现如下问题 xff1a 安装助手出现在屏幕左上角而且拖不出来 xff0c 导致安装没办法完成 用一个很简单的方法解决了问题 xff1a 桌面空白处右键 xff0c 点屏幕分辨率 把方向改成纵向 xff0c 左上角的窗
  • DELL笔记本插入耳机没反应

    新入的戴尔燃7000 xff0c 上午因为CPU占用飙升 xff0c 关掉了笔记本上的几个自启动项 xff0c 下午插入耳机就无响应了 xff0c 耳机插进去 xff0c 还是外放 百度原因 xff0c 很多都提及了Realtek这一声卡驱
  • the server responded with a status of 404 (Not Found)

    使用ajax跳转方法时 xff0c 页面ctrl 43 shift 43 i调试报告了一个404错误 xff0c 说找不到方法 页面地址栏直接指向方法的地址跳转也是404 目标方法是新增的 xff0c 于是使用复制黏贴 xff0c 确定各处
  • select设置只读

    根据需求 xff0c 需要根据后台传来的参数 xff0c 动态设置select标签是否可以选择 xff0c 因此 xff0c 当判断某个select应当设为只读时 xff0c 使用 span class hljs variable span
  • java:程序包XXXX不存在

    使用idea导入maven项目 xff0c 编译时报错 xff1a java 程序包XXXX不存在 如图 xff1a 百度到的诸如右键libraries所在文件夹 xff0c 选择add to libraries 等方法没有作用 后来去查看
  • tomcat启动报错:java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.Lifec

    tomcat启动报错 xff1a java lang IllegalStateException ContainerBase addChild start org apache catalina Lifec 百度的结果一般都是让修改web
  • UE4 音乐的播放与停止--基于蓝图

    要实现的功能非常简单 xff1a 点击按钮 xff0c 播放音乐 这个功能非常基础 xff0c 就两步 xff1a 1 将音乐源文件拖到context文件夹中 注意 xff0c 这里的音乐文件必须是 wav格式的 2 在按钮的onclick
  • UnityEditor.BuildPlayerWindow+BuildMethodException

    unity3D安卓打包报错 xff1a UnityEditor BuildPlayerWindow 43 BuildMethodException 61 errors at UnityEditor BuildPlayerWindow 43
  • AI 入门怎么学?这份学习指南请收好!

    万事开头难 xff01 AI 入门对很多初学 AI 的同学来说是一大难题 搜集了一大堆入门资料 xff0c Python 数学 深度学习应有尽有 xff0c 但就是无从下手 xff0c 总是在第一章与放弃之间徘徊 那么 xff0c AI 应
  • 为什么越厉害的大厂,校招越不看重考试成绩?

    前几天赵同学告诉我 xff0c 他没有通过那家心仪的公司笔试 赵同学成绩不错 xff0c 每次都是专业前五 xff0c 但笔试中有一道 银行家算法实现 题 xff0c 他一点也没写出来 这就是大厂招聘不看重成绩单的原因 xff1a 招人是为
  • 我的2011——毕业之年的总结与彷徨

    题记 眼看2011即将成为过去 xff0c 难得在这最后的时刻 xff0c 抽点时间 xff0c 倒上一杯热茶 xff0c 回忆这一年的浮浮沉沉 这一年 xff0c 我和所有毕业生一样 xff0c 离开了呆了四年的大学校园 呆腻了校园的生活
  • centos安装anaconda教程

    1 更新yum 命令 xff1a sudo yum update 2 安装anaconda 2 1 查看anaconda对应python版本 我选的3 8版 Old package lists Anaconda documentation
  • Android布局 -- Navigation实现底部导航栏

    底部导航栏加页卡的切换 xff0c 很多App采用这种布局设计 xff0c 在以前的开发中 xff0c 需要自定义底部导航栏以及使用FragmentTransaction来管理Fragment的切换 xff0c 代码量较大 xff0c 而使
  • ViewModelProviders is deprecated

    原有的创建ViewModel的方法 xff1a viewModel 61 ViewModelProviders of this get ViewModel class 提示ViewModelProviders过时 改为 xff1a view
  • Android Fragment退出 返回上一个Fragment与直接退出

    例如应用底部有两个导航按钮A与B xff0c 刚进入的时候显示为第一个AFragment xff0c 点击B切换到BFragment 如果需求是在BFragment点击返回键回到AFragment xff0c 需要配置 app defaul
  • Android基础 -- 子线程可以修改UI吗?

    子线程可以修改UI吗 xff1f 为什么会产生这样的问题 xff0c 可能是因为在开发过程中遇到了 34 Only the original thread that created a view hierarchy can touch it
  • leetcode 417. 太平洋大西洋水流问题

    https leetcode cn com problems pacific atlantic water flow 思路是从海洋开始逆流 如果可以逆流到 就标记为1 然后检查两个海洋都可以逆流到的区域 DFS public List lt
  • Android模拟器检测常用方法

    在Android开发过程中 xff0c 防作弊一直是老生常谈的问题 xff0c 而模拟器的检测往往是防作弊中的重要一环 xff0c 接下来有关于模拟器的检测方法 xff0c 和大家进行一个简单的分享 1 传统的检测方法 传统的检测方法主要是
  • RecyclerView 隐藏部分分割线

    在项目中遇到复杂点的RecyclerView xff0c 可能会有隐藏部分分割线的需求 xff0c 例如item1和item3之间的分割线隐藏 xff0c item4和item5之间的分割线隐藏等 在看了文档里的ItemDecoration

随机推荐

  • 浅谈去中心化应用

    1 中心化应用 现在我们所使用的应用基本上都是中心化的应用 xff0c 什么是中心化应用呢 xff0c 举个栗子 xff0c 我们在天猫买东西的时候 xff0c 需要先付款给支付宝 xff0c 然后卖家发货 xff0c 我们确认收货之后 x
  • Java二分搜索树及其添加删除遍历

    对于树这种结构 xff0c 相信大家一定耳熟能详 xff0c 二叉树 二分搜索树 AVL树 红黑树 线段树 Trie等等 xff0c 但是对于树的应用以及编写一棵解决特定问题的树 xff0c 不少同学都会觉得不是一件简单的事情 xff0c
  • 游戏平台SDK设计和开发之旅——XSDK功能点梳理

    做游戏开发或者相关工作的同学 xff0c 可能都知道 xff0c 在游戏上线之前 xff0c 需要将游戏分发到各大渠道平台 xff0c 比如九游 xff0c 百度 xff0c 360 xff0c 华为等等 其中和技术相关的事情 xff0c
  • 谈谈 GitHub 开放私有仓库一事的影响

    GitHub 此次宣布免费开放私有仓库 xff0c 在我看来有以下几点影响 xff1a 缓和与同类产品间的竞争压力小部分个人项目由开源转闭源微软在技术社区中的企业形象进一步强化为未来的企业服务预热 下面根据以上几点 xff0c 我来简单谈下
  • 每天坚持刷 LeetCode 的人,究竟会变得有多强... 学习技巧都藏在这几个公众号里面了......

    信息爆炸时代 xff0c 与其每天被各种看过就忘的内容占据时间 xff0c 不如看点真正对你有价值的信息 xff0c 下面小编为你推荐几个高价值的公众号 xff0c 它们提供的信息能真正提高你生活的质量 人工智能爱好者社区 专注人工智能 机
  • 超酷炫!智能无人机中文教程重磅上线!

    前 言 对于大多数无人机爱好者来说 xff0c 能自己从头开始组装一台无人机 xff0c 之后加入 AI 算法 xff0c 能够航拍 xff0c 可以目标跟踪 xff0c 是心中的梦想 并且 xff0c 亲自从零开始完成复杂系统 xff0c
  • B 站硬件大佬又在 GitHub 上开源了一款神器...

    公众号关注 GitHubDaily 设为 星标 xff0c 每天带你逛 GitHub xff01 转自量子位 这次 xff0c 野生钢铁侠稚晖君带着他的硬核项目又来了 上次自制纯手工打造 AI 小电视 xff0c 播放量就超过 300 万
  • 用 C 语言来刷 LeetCode,网友直呼:那是真的牛批...

    公众号关注 GitHubDaily 设为 星标 xff0c 每天带你逛 GitHub xff01 大家好 xff0c 我是小 G 如果你是计算机科班出身 xff0c 那么 C 语言 xff0c 估计是你在初入编程时 xff0c 最早接触的编
  • 【pytorch torchvision源码解读系列—3】Inception V3

    框架中有一个非常重要且好用的包 xff1a torchvision xff0c 顾名思义这个包主要是关于计算机视觉cv的 这个包主要由3个子包组成 xff0c 分别是 xff1a torchvision datasets torchvisi
  • 【pytorch torchvision源码解读系列—5】DenseNet

    pytorch框架中有一个非常重要且好用的包 xff1a torchvision xff0c 顾名思义这个包主要是关于计算机视觉cv的 这个包主要由3个子包组成 xff0c 分别是 xff1a torchvision datasets to
  • Eclipse使用JDBC方式连接SQLServer2016

    Eclipse使用JDBC方式连接SQLServer2016 今天下午在查找很多JDBC连接SQL时发现大多数都是2012甚至更久以前的版本 xff0c 所以就此把步骤记录下来 xff0c 以免自己下次使用又忘记了 在连接的时候 xff0c
  • 魔改《自动化学报》Latex模板

    想用latex写一个中文文档 xff0c 看上了 自动化学报 的模板 xff0c 感觉不错 xff0c 下载下来在本地的tex live上编译 xff0c 报了一大串错 xff1b 上传到overleaf xff0c 还是报错 xff1b
  • TX2安装jetpack

    目前官网支持的下载为JetPack L4T 3 2 1 linux x64 b23和JetPack L4T 3 3 linux x64 b39 首先使用具有Ubuntu16 04的host主机 xff08 我使用的是个人笔记本 xff0c
  • TF-IDF算法

    TF IDF算法 TF IDF term frequency inverse document frequency 是一种用于信息检索与数据挖掘的常用加权技术 xff0c 常用于挖掘文章中的关键词 xff0c 而且算法简单高效 xff0c
  • 大数据009——MapReduce

    分布式离线计算框架MapReduce MapReduce是一种编程模型 Hadoop MapReduce采用Master slave 结构 只要按照其编程规范 xff0c 只需要编写少量的业务逻辑代码即可实现一个强大的海量数据并发处理程序
  • MapReduce实例——wordcount(单词统计)

    1 MR实例开发整体流程 最简单的MapReduce应用程序至少包含 3 个部分 xff1a 一个 Map 函数 一个 Reduce 函数和一个 main 函数 在运行一个mapreduce计算任务时候 xff0c 任务过程被分为两个阶段
  • MapReduce实例——好友推荐

    1 实例介绍 好友推荐算法在实际的社交环境中应用较多 xff0c 比如qq软件中的 你可能认识的好友 或者是Facebook中的好友推介 好友推荐功能简单的说是这样一个需求 xff0c 预测某两个人是否认识 xff0c 并推荐为好友 xff
  • Hadoop源码分析——JobClient

    1 MapReduce作业处理过程概述 当用户使用Hadoop的Mapreduce计算模型来进行处理问题时 xff0c 用户只需要定义所需的Mapper和Reduce处理函数 xff0c 还有可能包括的Combiner Comparator
  • 大数据010——Hive

    1 Hive 概述 Hive 是建立在 Hadoop 上的数据仓库基础构架 它提供了一系列的工具 xff0c 可以用来进行数据提取转化加载 xff08 ETL xff09 xff0c 这是一种可以存储 查询和分析存储在 Hadoop 中的大
  • 大数据011——Sqoop

    1 Sqoop 概述 Sqoop是Hadoop和关系数据库服务器之间传送数据的一种工具 它是用来从关系数据库如 xff1a MySQL xff0c Oracle到Hadoop的HDFS xff0c 并从Hadoop的文件系统导出数据到关系数