hive sqoop导出 postgresql精度丢失_Mysql 与 hadoop 数据同步(迁移),你需要知道 Sqoop...

上篇文章 Mysql 到 Hbase 数据如何实时同步,强大的 Streamsets 告诉你 我们说到了如何使用 Streamsets 来进行 mysql 到 hbase 的数据实时同步(迁移)。使用 Streamsets 的优点是部署简单,配置灵活,无需编写代码。

认真阅读上篇文章的朋友会发现,Streamsets 能够实时跟踪数据的变化,将数据同步更新到 hbase 中。但是对于历史数据(并且数据不改动的记录)的同步,文章中并没有提及到。当然,并不是因为 Streamsets 不能从事这些事情,而是笔者暂时没有使用它来进行历史数据的迁移。因此,对于历史数据的迁移,笔者今天来介绍另外一个工具 - Sqoop。相对于 Streamsets,大家应该更加熟悉 Sqoop。

如果你工作中需要将关系型数据库(Mysql、Oracle等等)中的数据同步到 hadoop(HDFS、hive、hbase) 中,或者将 hadoop 中的数据同步到关系型数据库中,那这篇文章应该能帮助到你。

注:Streamsets 以及 Sqoop 都属于数据同步、迁移方面比较流行的解决方案,类似的工具还有很多,比如 Datax、kettle 等等,从事数据方面工作的朋友可以去多多了解,找到适合自己工作场景的方案。

认识一下

Sqoop 的命名,仔细一看是不是有点像 sql 和 hadoop 两个词语的拼接产物。其实从它的命名来看也就很明显:它是用来将关系型数据库和 Hadoop 中的数据进行相互转移的工具,并且这种转换是双向的。看下图就能一目了然:

a2783ddb85c78270058de99434de9e6d.png

从关系型数据库到 hadoop 我们称之为 import,从 hadoop 到关系型数据库我们称之为 export。文章后面大家就会看到 "import"、"export" 对应命令的两个模式。

安装

对于 Sqoop 的安装,这里就不做介绍了,网上有很多的教程,因为是一个工具,所以安装起来也是很方便简单。需要注意的是 Sqoop 有两个大的版本:Sqoop1、Sqoop2。

b2f903cc9ec11f3193aab08255a7b100.png
1e92b537160238838225635f74007375.png

访问 Sqoop 官网 ,官网上的 1.4.x 的为 Sqoop1, 1.99.* 为 Sqoop2。

关于 Sqoop1 与 Sqoop2 的区别,通俗来讲就是:

  1. sqoop1 只是一个客户端工具,Sqoop2 加入了 Server 来集中化管理连接器
  2. Sqoop1 通过命令行来工作,工作方式单一,Sqoop2 则有更多的方式来工作,比如 REST api接口、Web 页
  3. Sqoop2 加入权限安全机制

对于笔者来说,Sqoop 就是一个同步工具,命令行足够满足工作需求,并且大部分数据同步都是在同一个局域网内部(也就没有数据安全之类问题),所以选择的是 Sqoop1(具体版本是 1.4.6)

框架原理

5f20e073b06a781650081772b09d02f8.png

通过上图可以看出, Sqoop Client 通过 shell 命令来使用 sqoop, sqoop 中的 Task Translater 将命令转换成 hadoop 中的 mapreduce 任务进行具体的数据操作。可以这样理解,例如 Mysql 中某个表数据同步到 hadoop 这个场景,Sqoop 会将表记录分成多份,每份分到各自 mapper 中去进行落地 hadoop(保证同步效率)。大家可能发现,其实这里的 mapreduce 没有 reduce,只有 map。

实操

了解了 Sqoop 是什么,能做什么以及大概的框架原理,接下来我们直接使用 Sqoop 命令来感受一下使用 Sqoop 是如何简单及有效。本文案例中的关系型数据库使用的是 mysql,oracle 以及其他使用 jdbc 连接的关系型数据库操作类似,差别不大。

运行 sqoop help 可以看到 Sqoop 提供了哪些操作,如下图

1a2b57d75bd2b1238d9dcb6161e71d69.png

这些操作其实都会一一对应到 sqoop bin 目录下的一个个可运行脚本文件,如果想了解细节,可以打开这些脚本进行查看

a8084f6927d649d350f077a5f9a75511.png

工作中一般常用的几个操作或者命令如下:

  1. list-databases : 查看有哪些数据库
  2. list-tables : 查看数据库中有哪些表
  3. import : 关系型数据库到 hadoop 数据同步
  4. export : hadoop 到关系型数据库数据同步
  5. version :查看 Sqoop 版本

列出数据库

sqoop list-databases --connect jdbc:mysql://192.168.1.123:3306/ --username root --password 12345678

列出表

sqoop list-databases --connect jdbc:mysql://192.168.1.123:3306/databasename --username root --password 12345678

mysql 到 hdfs

sqoop import--connect jdbc:mysql://192.168.1.123:3306/databasename--username root--password 12345678--table tablename--target-dir /hadoopDir/--fields-terminalted-by ''-m 1--check-column id--last-value num--incremental append

--connect : 数据库的 JDBC URL,后面的 databasename 想要连接的数据库名称

--table : 数据库表

--username : 数据库用户名

--password : 数据库密码

--target-dir : HDFS 目标目录

--fields-terminated-by :数据导入后每个字段之间的分隔符

-m :mapper 的并发数量

--check-column : 指定增量导入时的参考列,这里是 id (主键)

--last-value : 上一次导入的最后一个值

--incremental append :导入方式为增量

注意:工作中需要增量同步的场景下,我们就可以使用 --incremental append 以及 --last-value。比如这里我们使用 id 来作为参考列,如果上次同步到了 1000, 这次我们想只同步新的数据,就可以带上参数 --last-value 1000。

mysql 到 hive

使用 imort --create-hive-table

--create-hive-table -m 1 --connect jdbc:mysql://192.168.1.123:3306/databasename--username root --password 12345678 --table tablename--hive-import --hive-database databasename_hive --hive-overwrite --hive-table tablename_hive

mysql 到 hbase

hbase shellcreate_namespace 'database_tmp'create 'database_tmp:table_tmp','info'sqoop import --connect jdbc:mysql://192.168.1.123:3306/databasename--username 'root' --password '12345678' --table 'tablename' --hbase-table 'database_tmp:table_tmp' --hbase-row-key 'id' --column-family 'info'

首先进入 hbase shell,创建好 namespace 以及 数据库。databasetmp 位命名空间,tabletmp 为数据库。

hdfs 到 mysql

sqoop export--connect jdbc:mysql://192.168.1.123:3306/databasename--username root--password '12345678' --table tablename--m 1--export-dir /hadoopDir/--input-fields-terminated-by ''--columns="column1,column2"

--columns : 制定导出哪些列

hive 到 mysql

了解 hive 的朋友都知道,hive 的真实数据其实就是 hdfs 磁盘上的数据,所以 hive 到 mysql 的同步操作与 hdfs 到 mysql 的操作类似

hbase 到 mysql

目前 Sqoop 没有提供直接将 hbase 数据同步到 mysql 的操作

总结: 在 sql to hadoop 和 hadoop to sql 这种数据同步场景,Sqoop 是一个很有效且灵活的工具,大家不妨使用它来从事数据方面的工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Less配置环境

一、安装Sublime 插件 1.安装Less插件: ctrlshiftp>install Package>输入less按Enter 2.安装Less2CSS插件:ctrlshiftp>install Package>输入less2css按Enter 作用:当保存less文件的时候自动生成同名的css文件;当保存…

前端学习(2225):react之类定义组件

import React from react; import ReactDOM from react-dom;function Childcom() {let title < h2 > 我是副标题 < /h2>let weather "下雨"let isGo weather 下雨 ? "不出门" : "出门"return ( <div ><h1 > 函数式…

C#反序列化 “在分析完成之前就遇到流结尾”

在反序列化的时候&#xff0c;需要先把流的指针位置重新设置到0。 MemoryStream ms new MemoryStream();byte[] bitTemp 获取流;ms.Write(bitTemp, 0, bitTemp.Length);ms.Position 0;BinaryFormatter b new BinaryFormatter();ObjectTry objectTry (ObjectTry)b.Deseri…

clion 查看内容窗口_苹果电脑(macOS)查看 WiFi 密码的两种方法

WiFi 密码通常是第一次连接的时候输入一遍&#xff0c;之后当再次进入 WiFi 信号范围就会自动连接&#xff1b;在苹果的生态下&#xff0c;若果多个你有多个设备共用一个苹果 ID ,甚至只需要在其中一台设备上连接一次 WiFi &#xff0c;其他设备就可以自动连接此 WiFi。方便的同…

★《唐琅探案》后记【1】

【唐琅探案】相 遇。&#xff5b;短篇续文 新手尝试&#xff5d; 小序—— 首先必须承认自己太过于后知后觉了……明明是10年的片子&#xff0c;却到12年看得不亦乐乎。 很喜欢霍霍版的唐琅&#xff08;好吧总是被侦探秒杀&#xff09; 也许是还过年少天真、总认为爱情再伟大也…

C# 系统环境变量读取

读取TEMP环境变量Environment.GetEnvironmentVariable("TEMP")

前端学习(2226):react之组件

index.js import React from react; import ReactDOM from react-dom;function Childcom(props) {console.log(props)let title < h2 > 我是副标题 < /h2>let weather "下雨"let isGo weather 下雨 ? "不出门" : "出门"return…

ad证书服务器在ADgroup,ACS 5.x :根据AD组成员配置示例和Authorization命令的TACACS+认证...

本文提供配置根据用户的AD组成员和Authorization命令示例的TACACS认证思科安全访问控制系统(ACS) 5.x和以后。ACS使用Microsoft Active Directory (AD)&#xff0c;外部标识存储存储资源例如用户、机器、组和属性。尝试进行此配置之前&#xff0c;请确保满足以下要求&#xff1…

一年中最后一个月的最后一天说说_一年的最后一天说说

今天是2021的最后一天&#xff0c;让我们跟它说一声再见吧&#xff01;小编整理了一年的最后一天说说&#xff0c;希望你们喜欢&#xff01;1、2021年就要过去了!在这一年中、有期待、有开心、有悲伤&#xff0c;然而这一切的情绪都将随着元旦的到来化作记忆。让我们在2021年最…

Red5 修改RTMP监听端口和ip

conf/red5.properties # RTMPrtmp.host192.168.0.100 //监听IPrtmp.port1935 //监听端口

轻快的VIM(三):删除

这一节我们来看看删除&#xff0c;删除命令比较简单&#xff0c;不过要使删除更有效率 你需要配合我们第一节中讲的各种移动命令 字符删除 x 删除光标所在处字符 X 删除光标所在前字符 这里没有什么可注意的地方&#xff0c;但需要说明一下的是 通常情况…

xpath 取标签下所有文字内容_对Xpath 获取子标签下所有文本的方法详解

对Xpath 获取子标签下所有文本的方法详解在爬虫中遇见这种怎么办想提取名称&#xff0c; 但是 名称不在一个标签里使用xpath string()方法例如data.xpath("string(path)")path -- 你xpath提取的路径 这里提取到父标签string() 方法会提取子标签多有的文本内容。以上这…

Flex 获取时间戳、随机数

获取时间戳 new Date().getTime()获取随机数Math.random()

前端学习(2226):react之状态

index.js import React from react; import ReactDOM from react-dom;class Clock extends React.Component {constructor(props) {super(props)//状态 时间this.state {time: new Date().toLocaleTimeString()}console.log(this.state.time)}render() {return ( <div >…

python selenium与自动化

大学是学习过java&#xff0c;但是工作中没用&#xff0c;忘完了&#xff0c;而且哪怕以后有了机会&#xff0c;就是很不愿意去学这个语言&#xff0c;开始喜欢上了c#&#xff0c;但是随着学的升入&#xff0c;感觉.net太庞大了&#xff0c;要学习那么多&#xff0c;总感觉我学…

sevlet 注释initparams_servlet3.0注解配置学习笔记

使用WebServlet将一个继承于javax.servlet.http.HttpServlet的类定义为Servlet组件。WebServlet有很多的属性&#xff1a;asyncSupported&#xff1a;声明Servlet是否支持异步操作模式。description&#xff1a;   Servlet的描述。displayName&#xff1a; Servlet的显示名称…

rails4 ajax 例子,Ajax和Rails 4:创建实例变量并更新视图而不刷新

我有一个部分的coaching_notes索引和一个用于创建备注的表单。我想创建一个教练笔记&#xff0c;并进行部分更新而不刷新页面。我收到一个未知动作错误&#xff1a;CoachingNotesController无法找到show动作。如果我添加显示操作&#xff0c;我会收到缺少的模板错误。当我尝试从…

Red5 webapp配置

例&#xff1a;MyStream应用程序 访问地址&#xff1a;rtmp://localhost/MyStream webapps/MyStream/WEB-INF/red5-web.properties webapp.contextPath/MyStreamwebapp.virtualHosts*, localhost, localhost:8088, 127.0.0.1:8088webapps/MyStream/WEB-INF/red5-web.xml<?x…

前端学习(2227):react之状态二

import React from react; import ReactDOM from react-dom;class Clock extends React.Component {constructor(props) {super(props)//状态 时间this.state {time: new Date().toLocaleTimeString()}console.log(this.state.time)}render() {return ( <div ><h1 &g…

【引用】Json 定义与操作

Json定义&#xff1a; JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript&#xff08;Standard ECMA-262 3rd Edition - December 1999&#xff09;的一个子集。 JSON采用完全独立于语言的文本格式&#xff0c;但是也使用了类似于C语言家族的习惯…