设为首页 - 加入收藏
您的当前位置:主页 > 教程 > 数据库 > 正文

HBase 和 Cassandra的浅谈

来源:未知 编辑:足球投注app万博 时间:2017-12-11
足球投注app万博,万博体育娱乐有限公司是一家在线娱乐游戏的主营的综合性民营企业.依托于精干务实的管理核心团队,万博体育app主营娱乐产品的技术开发与运营配套服务等.

  关于hbase和cassandra的切磋,次要从多个方面来说,从最根基的一步步往深切的说,从最根基的摆设运维,到支撑特征,利用功能以及各自的劣势;

  先从比力宏不雅的角度阐发,HBase是基于Google的bigtable的论文实现的列式数据库,cap理论中更倾向于强调c(副本数据分歧性)和p(分区容错性)。而Cassandra是号称dynamo 加上 bigtable(数据模子)的实现,cap中强调a(可用性) 和 p。并且底层都是利用lsm-tree 来做存储引擎的焦点数据布局;

  HBase根基上就是bigtable的开源实现,对标的bigtable的chubby(分布式锁办事)HBase有对应的zookeeper,HBase用regionserver办理region里的数据,现实上的数据副本容错的机制是交付给底层的分布式文件系统hdfs,类比bigtable的gfs,HBase有hmaster做元消息办理。Cassandra正在架构上更多自创了dynamo,一种完全的区核心对等的分布式数据库,她的每个节点维护一份元消息,每一个节点正在集群中的身份完全一样。

  纯真的就摆设和运维hbase以及Cassandra来说,摆设hbase前,需要摆设的组件有zookeeper,hdfs,然后才是hbase。对应的Cassandra就比力简单良多,编译完成一个jar包,单台办事器启动一个Cassandra历程即可。

  正在摆设hbase的时候,可能需要规划好,哪些机械跑hmaser,rs,zk,hdfs的相关历程等, 还有可能为了集群的机能,还要事后规划很多多少少个rs。本人人工去摆设这么一个hbase集群仍是比力麻烦的,更别提本人维护(阿里云ApsaraDB-HBase你值得具有)。

  Cassandra摆设的时候比力简单,一个tar包搞定,因为cassandra数据落当地皮,需要报酬的设置装备摆设一些参数好比能否需要虚拟节点(vnode)以及几多vnode;需要基于营业的场景选择特定的key的放置策略(partitioner),这个放置策略的选择以及一些参数的设置装备摆设需要必然的门槛。

  简单总结下:摆设运维的话,hbase依赖组件多,摆设麻烦一点,可是相关材料良多,降低了难度;cassandra摆设依赖少,可是设置装备摆设参数多,相关材料较少。

  出格是利用云HBase完全避免了摆设形成的各类麻烦,比手工摆设运维任何大数据数据库都便利太多。

  从上述特征来看,各个数据库各有所长,可是有各自的适合场景,若是营业对数据分歧性要求比力苛刻,那么HBase可能更合适,终究C 仍是存正在必然的问题,好比删除数据可能复现;C保举放置策略用Random以及Murmur3等体例,如许把key打散的很随机,以此做节点负载平衡,如许做scan营业本人的需求数据,可能数据库要全集群都拜候,当然能够利用OrderPreserving 和 ByteOrdered能够不消全集群都拜候,可是负载不是很平均,HBase这点却支撑的不错;就易用性来说,Cassandra做的仍是不错的,正在数据库内部供给cql,一品种sql的语句。HBase仍是次要JAVA API/Thrift的接口支撑,可是后续HBase这方面该当会提高,前段时间的HBase 2017 Asia 阿里也引见了sql on HBase。

  后续正在易用性这一块HBase该当是越来越好,会填补上正在易用性这一块的欠缺。试想下,若是Nosql都支撑大部门的SQL的功能和语法,那是多完满的工作。

  本小结就 HBase 和 C*正在部门相关特征长进行细一步的阐发对比,大要对比的部门选择为:分歧性;sharding体例;用户利用体例;数据复制;

  一般的分歧性正在这里是指副本数据的分歧性,我们常用的是3副本用来做冗余。HBase的话次要是依赖底层的HDFS来支撑副本冗余,一次写入被regionserver收到当前,发送给底层的HDFS,而HDFS会对应的给这个数据正在整个文件系统里面写多份;这里是多份副本全数写完成才会前往。读数据的话,正在底层HDFS的处置是读次要的这份数据就能够,由于多份数据都是一样的(一般环境)。

  C正在建表的时候会指定表的副本数(常见3副本),一次数据写入,会基于当前表的副本数以及节点的snitch策略来找到需要写的数据节点,发出多份请求(3份),然后基于传送的写入级别期待对应的响应数即可,好比A,B,C三个副本,QUORUM级别写入,可能存正在的环境是,A,B成功C写入失败(无论是收集仍是节点跪了),那么这个时候3个副本现实上是不分歧的。可是这里对于 C 来说,她能忍。并且若是你读的级别是QUORUM能够读到最新的数据,可是若是你用ONE级别去读数据,那么存正在读到老数据的风险,可是C 存正在这种环境(当然这里先不考虑C 内部的机制本人修回副本数据)。

  C *因为不克不及包管副天职歧性,本人提出了几种体例来做填补:1.读修复;2.Hinted-Handoff;3.Anti-entropy repair ;可是各类机制的引入也不是很完满的处理问题,此外还响应的会引入一些问题,好比利用1的话,那些读不到的数据存正在一曲数据不分歧的风险;利用3的体例去进行全量/增量数据对比,会耗损良多物理资本,影响正在线办事的请求,这是正在线办事不克不及忍耐的。

  这种环境下来看,HBase的读写以及数据分歧性模子是比力简单的。简单就是美,这对具体的营业场景进行适配也是很nice的一面,若是一个数据库的模子过于复杂,营业方拿来用也需要很高的门槛。

  HBase 的各个regionserver 正在最后担任的region,是能够正在最后的建表时候,能够做预分派,也能够让hbase本人做这件工作,那么每个regionserver就会担任响应的region的数据的读写等。对于呈现热点region的环境的话,hbase本人支撑region的split操做,将热点region一分为二。

  C* 不支撑所谓的热点数据spli region的功能,那么对于这种环境的话,她做了一个事后设置,输入的数据做hash打散,也就是我们晓得的分歧性hash,她内部支撑4种hash策略,Murmur3,Random,OrderPreserving等,此中,前2种是做了随机的hash,OrderPreserving 是雷同字典序的体例,最后无论是利用vnode的体例仍是initial_tokne的体例报酬设置节点token,来一个请求,计较随机hash能够把key比力随机打散到集群中的某个节点,通过snitch 和 keyspace 副本体例找到落得节点消息,由于前面的随机hash能够报酬是比力随机的,那么这现实上能够理解为一种负载平衡。可是若是是OrderPreserving 这种体例,现实上就会有问题;呈现热点也没法子;

  并且我们晓得随机hash若是要做scan,现实上是很蛋疼的,根基上所有节点都要操做。字典序能够避免操做所有的数据节点,从这点看,HBase仍是占点劣势。

  HBase现正在供给给用户次要是JAVA/THrift/REST的接口,大要的操做也就是CRUD操做;这些利用仍是不是具有亲和性。好比我现正在要往表“table”里面写一条数据,rowkey是“test” 列是“cn1” cn2,value是“value1”, value2那么我需要进行下面的操做:

  可是对于C 而言,支撑2种体例,1.THrift;2.CQL;thrift我们就不会商了,次要引见CQL,这是一品种sql的言语,次要用于操做C,那么通样写一条数据cql是:

  一般数据复制,有全量数据复制和增量数据复制2个环境,次要是为了集群的高可用做铺垫,全量复制的时候,有的利用copytble的体例,这边比力简单,可是由于是mr做批量读取写入(我们之前就是用这种体例导Cassandra的数据),可是会比力耗时,由于每次请求一个收集来回;也有基于snapshot做复制的体例,这种体例会好点;增量复制的话,利用的是复制Hlog的体例,这是一种异步的复制体例,正在zk记实checkpoint,复制完log当前点窜checkpoint的问位置。

  C 的数据复制,也取2种方案,可是都是需要时正在Network的拓扑设置装备摆设下,同cluster的分歧dc情况下的操做,全量复制是一种叫做rebuild的体例,间接拖数据的stream,雷同C 做节点启动bootstrap的过程,C* 的增量复制 供给了2种体例:EACH_QUORUM,LOCAL_QUORUM 前者是同步写从备,后者是写当地,前往client,远端能否成功不care;对于这个而言的话,异步存正在丢数据的风险,同步正在跨region以及并发量大的环境下,请求失败率会很高。可是,上面的体例是需要摆设正在同clsuter下面的分歧dc,分歧cluster没有处理方案。此外对于同步和异步方案之间没有一种折中的体例,终究有的场景对机能要求高,同步复制影响线上写成功的概率,异步复制会丢数据。可是阿里HBase正在这方面去做了一个同步异步并存的体例,同步异步共存复制。

  通过上述 的描述以及各自的功能特征的对比,我们能够获得HBase 和 C 对比,2种产物各有所长,此中HBase对数据分歧性要求更高,C响应的强调可用性。且现阶段C 的接口比力有亲和性,可是HBase 和 Hadoop系统天然的无缝对接,这是C 还有点欠缺的。C *也利用了各自体例去填补欠缺,可是现实上数据分歧性上做的仍是和这种强分歧的系统差把火,而HBase正在可用性上所做的工做现实上小我感觉能够做的更好,亲和性以及易用性这些工作现实上HBase也正在唱工做。

  因为篇幅限制,还有一些此外内容没有写进来,接下来会一步步补齐的。接下来会就Compaction策略的对比,索引实现的对比进行阐发。

  为了便利大师彼此交换进修,建立了一个公家号同名微信群:《大数据和云计较手艺交换群》,人数曾经1500+,欢送大师加下面我的微信,我拉大师进群,自正在交换。前往搜狐,查看更多

相关文章:

相关推荐:

网友评论:

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片

足球投注app万博 - 娱乐享你所想 联系QQ:498872301 邮箱:498872301@qq.com

Copyright © 2012-2017 足球投注app万博 版权所有

Top