从mysql向HBase+Phoenix迁移数据的心得总结

* 转载请注明出处 - yosql473 - 格物致知,经世致用

mysql -> HBase + Phoenix

1.总体方案有哪些?

  1)通过Sqoop直接从服务器(JDBC方式)抽取数据到HBase中

  因为数据量非常大,因此优先考虑用Sqoop和MR抽取。

  使用Sqoop抽取数据有一个问题,就是Phoenix插入的数据和HBase插入的数据是不同的:

  例如,使用Phoenix插入这么一条数据:

  upsert into tb_collector_log_143 values ( '2018-07-02 18:34:52_c37b03789c5e43ddb800ff90c27e5a44','2182a29047f3435885fc3fb9f7212189','server','server','2018-07-02 18:34:52','2018-07-02 18:34:52','8a5381604b4443ecb1b73d362f756483','c37b03789c5e43ddb800ff90c27e5a44','0560337357604a258a19adb8cc8849c6','2018-07-02 18:34:52','1','02','117.61.15.14:45067','4da7408331794910aa3523b6a9741df5');

  在HBase中“2018-07-02 18:34:52”这个字段值(在phoenix中是date类型)就是字节码“\x80\x00\x01d\x5CF\xA8\xE0“:

  2018-07-02 18:34:52_c37b03789c5e43ddb800ff90c27e5a44 column=0:OPERATER_DATE, timestamp=1541250071138, value=\x80\x00\x01d\x5CF\xA8\xE0

  因此如果直接向HBase put数据,也会出现Phoenix无法识别的问题。经过反复的验证,发现只有Phoenix的字符串类型(varchar和char)才能保持HBase中直接存储这个值。

  * 因此,为了让在Phoenix中插入字符串“aaa"与在HBase中插入”aaa"等价,被插入的这个字段只能是char或者是varchar类型。 这也就意味着使用Sqoop直接从原服务器抽取数据,新的表结构只能是全字符串类型。这也就意味着原来的JDBC的查询可能会遭遇不顺,因为期望被迁移的表有int和date等字段,如果JDBC对字段类型不一致的查询不兼容的话,这事就不太好说。

  2)通过MapReduce进行批量插入。

  如果直接跑SQL文件效率会非常低,因为是一条一条插入的,先不说导入数据的过程,即使开高并发,服务器上的数据也难以导出成sql文件。因此PASS掉导出文件的方式,只能是直接抽取。

       

  其他:在之前的实验中,我曾用12W条记录的upsert插入sql文件进行插入,结果在插入5W+行的时候发生了堆溢出。这说明使用$SQOOP/bin/psql.py xxx.sql的命令时会在Jvm跑一个进程,每个运行脚本的插入数有限制。

  因此可以考虑通过MapReduce进行批量的插入过程,但其实只需要Map任务就可以了,相当于自己写了一个特殊的Sqoop的实例,满足这种特殊的数据抽取需求。

 

2.几个核心的点:

1)服务器上的数据怎么导出

刚才分析过了,只能通过Sqoop或者手码MR程序

2)数据如何导入HBase,并且使得Phoenix能够顺利识别?

一种方法是全部字段使用字符串,然后使用HBase的put

一种方法是走Phoenix进行插入,这么插入就必须写MR了

3)rowkey怎么设计?

rowkey是Phoenix表的主键,而且根据HBase的特性,Phoenix表按照主键自动排序,这样就存在一个问题,如何设计rowkey?

注意:一般将时间作为rowkey的排在最前面的指标,如果不这么做,数据就完全按照ID分散了。在ID为随机值的情况下,本来紧挨在一起的(按照时间)的数据完全分散,因此这个地方特别需要注意。

因此我将 `<CRETAE_TIME>_<DATA_ID>`做为rowkey,这对于范围查询是非常好的设计。

 

3.MySQL(未优化)和Phoenix(未优化)的性能查询测试

PS:其实HBase的查询性能,在数据量为百万时,与中型数据库Mysql是持平的,可能Mysql还会更优秀一些。但当数据到达千万的级别的时候,HBase的查询优势就非常明显了。

1)11W+条数据的测试:

1.1) 非rowkey查询

从50000行左右随机抽取一个ID:

不使用rowkey(相当于不使用一级索引)进行查询:

如果采用rowkey进行模糊匹配:

 

 

1.2)基于rowkey的查询(基于CRETAE_TIME和ID字段)

从70000行左右随机抽取一个ID和CREATE_TIME,因为我设计的rowkey是”<CREATE_TIME>_<ID>"的格式:

 2).百万级别数据量测试

通过Sqoop 从mysql向HBase迁移100W条数据(单Map Task)的时间为:

269.6587 seconds (0 bytes/sec) 不到5分钟 

机器配置: 3G 全伪分布式 , Hadoop HBase Zookeeper主从全在一台机器上

 

MySQL:

HBase(Phoneix):

2.1)非rowkey的查询

 

 

 2.2) rowkey查询

 

  

 

转载于:https://www.cnblogs.com/yosql473/p/9900596.html

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

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

相关文章

玩转异步 JS :async/await 简明教程(附视频下载)

课程介绍 在软件开发领域&#xff0c;简洁的代码 > 容易阅读的代码 > 容易维护的代码&#xff0c;而 ES2017 中的 async/await 特性能让我们编写出相比回调地狱和 Promise 链式调用更直观、更容易理解的代码&#xff0c;await 关键字接收一个 Promise&#xff0c;等待代码…

分享轮子-flutter下拉刷新上拉加载

flutter下拉上拉组件轮子 什么是flutter? 首先说下flutter,估计这个应该挺多人没听过flutter这个框架,它是一个google推出的跨平台的移动应用UI框架,和React Native是同样的目的,支持三大平台:Android,Ios,还有一个是google新出的系统,忘了叫什么...本人React Native也是用过…

(8)Python判断结构

转载于:https://www.cnblogs.com/hankleo/p/9170325.html

History of program(1950-2020)

1957年 约翰巴科斯&#xff08;John Backus&#xff09;创建了是全世界第一套高阶语言&#xff1a;FORTRAN。 John Backus1959年 葛丽丝霍普&#xff08;Grace Hopper&#xff09;创造了现代第一个编译器A-0 系统&#xff0c;以及商用电脑编程语言“COBOL”&#xff0c;被誉为C…

关于 Nuxt 集成ueditor的一些坑(包括图片上传)前端部分

最近公司接了一个项目&#xff0c;里面用到富文本编辑器&#xff0c;刚开始用的是vue-quill-editor&#xff0c;这个编辑器轻量、好用。最重要的是它有专门正对nuxt的版本&#xff0c;很容易配置&#xff0c;可以放心使用&#xff0c;不用担心bug之类的&#xff0c;遇到问题&am…

*Codeforces989D. A Shade of Moonlight

数轴上$n \leq 100000$个不重叠的云&#xff0c;给坐标&#xff0c;长度都是$l$&#xff0c;有些云速度1&#xff0c;有些云速度-1&#xff0c;风速记为$w$&#xff0c;问在风速不大于$w_{max}$时&#xff0c;有几对云可能在0相遇。每一对云单独考虑。 多动一不动--相对运动。假…

undefined reference 问题各种情况分析

扒自网友文章 关于undefined reference这样的问题&#xff0c;大家其实经常会遇到&#xff0c;在此&#xff0c;我以详细地示例给出常见错误的各种原因以及解决方法&#xff0c;希望对初学者有所帮助。 1. 链接时缺失了相关目标文件&#xff08;.o&#xff09; 测试代码如下&a…

2018-2019-1 20165203 《信息安全系统设计基础》第六周学习总结

2018-2019-1 20165203 《信息安全系统设计基础》第六周学习总结 教材学习内容总结 重要知识点 I/O&#xff1a;在主存和外部设备&#xff08;例如磁盘存储器、终端和网络&#xff09;之间复制数据的过程。输入操作&#xff1a;从I/O设备复制数据到主存。输出操作&#xff1a;从…

linux 使用VI命令怎么删除输入内容,linux系统vi编辑器常用命令及使用方法。

在linux系统中编辑文档我们常用到vi编辑器。vi编辑器&#xff0c;通常称之为vi,是一种广泛存在于各种UNIX和Linux系统中的文本编辑程序。它的功能十分强大&#xff0c;但是命令繁多&#xff0c;不容易掌握&#xff0c;它可以执行输出、删除、查找、替换、块操作等众多文本操作&…

在react中使用svg的各种骚姿势

开头先抛个可供参考的项目ts-react-webpack4, 或脚手架steamer-react-ts 优势 SVG可被非常多的工具读取和修改(比如vscode)不失真, 放大缩小图像都很清晰SVG文件是纯粹的XML, 也是一种DOM结构使用方便, 设计软件可以直接导出 兼容性 上一张兼容性图表, 或到caniuse.com查看 …

3.2自定义方法

方法是类的一种行为&#xff0c;方会使我们的代码容易修改&#xff0c;方便阅读&#xff0c;实现封装和重用。比如前面使用的很多.net定义好的类的方法&#xff0c;当然我们也可以自定义方法。 3.2.1定义方法 语法&#xff1a; 访问修饰符 返回类型 方法名(参数列表) &#xff…

[Electron]仿写一个课堂随机点名小项目

自从前几个月下了抖音&#xff0c;无聊闲暇时就打会打开抖音&#xff0c;因为打开它有种莫名其妙打开了全世界的感觉... 无意中看到这个小视频&#xff1a;随机点名 于是仿写了一个课堂点名小项目&#xff0c;算是对Electron的一个简单的认识&#xff0c;有时间再深入。 项目…

linux redis安装使用,linux安装redis

Linux(CentOS)中Redis介绍、安装、使用【一篇就够】2018-05-13 13:36:16 sjmz30071360 阅读数 1590更多分类专栏&#xff1a; redis版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循CC 4.0 BY-SA版权协议&#xff0c;转载请附上原文出处链接和本声明。一、介绍Redis is…

用three.js写一个简单的3D射门游戏

这个小游戏很简单&#xff0c;一共由3个部分构成。1个平面&#xff08;球场&#xff09;&#xff0c;1个球体&#xff08;足球&#xff09;还有一个立方体&#xff08;球门&#xff09;。 上个图给你们感受一下简陋的画风&#xff08;掘金最高上传5M图片&#xff0c;原来图片都…

100份Spring面试问答-最终名单(PDF下载)

上次更新时间&#xff1a;2019年2月11日 这是有关Spring框架的一些最重要问题的摘要&#xff0c;在面试或面试测试过程中可能会要求您回答这些问题&#xff01; 您无需担心下一次面试的机会&#xff0c;因为Java Code Geeks在这里为您服务&#xff01; 您可能会被问到的大多数…

3.1 unittest简介

3.1 unittest简介 前言 熟悉java的应该都清楚常见的单元测试框架Junit和TestNG。python里面也有单元测试框架-unittest,相当于是一个python版的junit。python里面的单元测试框架除了unittest&#xff0c;还有一个pytest框架&#xff0c;这个用的比较少&#xff0c;后面有空再继…

织梦其他模型使用联动类型地区联动

官方模型的联动类型只能模型是在【独立模型】或者官方默认的【分类信息】模型下使用&#xff0c;其他模型下使用无效&#xff0c;我们来让联动类型支持所有模型。 添加联动地区类型字段 内容模型管理 - 文章模型(或者其他模型) - 添加新字段 字段名称 和 数据类型 千万别搞错了…

使用IntelliJ IDEA进行热部署

最近&#xff0c;在PrimeFaces论坛PrimeFaces IDE Poll中进行了投票&#xff0c;以投票赞成用于开发PrimeFaces应用程序的最佳IDE。 最多人投票支持NetBeans。 NetBeans和Eclipse是免费的IDE。 我最喜欢的IDE IntelliJ IDEA Ultimate不是免费的&#xff0c;我认为这就是为什么在…

创梦天地关嵩:借力腾讯云,打造文娱新生态——云+未来峰会回顾

欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 今年腾讯云未来峰会主题的关键词是“焕启”&#xff0c;这是包含无限希望的两个字&#xff0c;让人倍感振奋。“焕启”是什么意思&#xff1f;在我的理解中&#xff0c;“焕启”本身就是激活&#xff0c;激…

【缓存清理工具】缓存清理软件_电脑缓存清理软件

产品介绍 有很多种比如来自网页和windows等,缓存如果不经常清理会使你的机器运行速度变慢&#xff0c;缓存清理工具可以帮你最多程度的清理垃圾文件而且速度也很快&#xff0c;有了它的帮助让你爱机清理彻底&#xff0c;运行更加顺畅&#xff01;主要能清理&#xff1a;所有应…