海量数据的分布式存储
① 在大数量级的数据存储上,比较靠谱的分布式文件存储有哪些
一、 Ceph
Ceph最早起源于Sage就读博士期间的工作、成果于2004年发表,并随后贡献给开源社区。经过多年的发展之后,已得到众多云计算和存储厂商的支持,成为应用最广泛的开源分布式存储平台。
二、 GFS
GFS是google的分布式文件存储系统,是专为存储海量搜索数据而设计的,2003年提出,是闭源的分布式文件系统。适用于大量的顺序读取和顺序追加,如大文件的读写。注重大文件的持续稳定带宽,而不是单次读写的延迟。
三、 HDFS
HDFS(Hadoop Distributed File System),是一个适合运行在通用硬件(commodity hardware)上的分布式文件系统,是Hadoop的核心子项目,是基于流数据模式访问和处理超大文件的需求而开发的。该系统仿效了谷歌文件系统(GFS),是GFS的一个简化和开源版本。
② 澶ф暟鎹镄勫瓨鍌ㄥ拰绠$悊涓昏佸寘𨰾鍝鍑犳柟闱㈢殑鍏抽敭鎶链锛
澶ф暟鎹鍦ㄥ瓨鍌ㄥ拰绠$悊镞剁敤鍒扮殑鍏抽敭鎶链涓昏佸寘𨰾锛
- 鍒嗗竷寮忓瓨鍌ㄦ妧链锛氩侣adoop镄凥DFS锛岃兘澶熷皢鏁版嵁鍒嗘暎鍦板瓨鍌ㄥ湪澶氢釜鑺傜偣涓婏纴浠庤屽疄鐜板规捣閲忔暟鎹镄勫勭悊銆
- 鍒嗗竷寮忚$畻妗嗘灦锛氩侣adoop镄凪apRece锛岃兘澶熷湪澶ч噺璁$畻链洪泦缇や笂骞惰屽湴澶勭悊澶ф暟鎹锛屽疄鐜板ぇ鏁版嵁镄勫揩阃熷垎鏋愩
- 鏁版嵁鎸栨帢鍜屾満鍣ㄥ︿範绠楁硶锛氩ぇ鏁版嵁镄勬寲鎺桦拰鍒嗘瀽闇瑕佷緷璧栦簬楂樻晥镄勬暟鎹鎸栨帢鍜屾満鍣ㄥ︿範绠楁硶锛屽係cikit-learn銆乀ensorFlow绛夈
- 鏁版嵁铡嬬缉鎶链锛氩ぇ鏁版嵁镄勫瓨鍌ㄥ拰绠$悊闇瑕佹秷钥楀ぇ閲忕殑瀛桦偍绌洪棿鍜岃$畻璧勬簮锛屽洜姝ら渶瑕佷娇鐢ㄦ暟鎹铡嬬缉鎶链𨱒ュ噺灏忔暟鎹镄勫ぇ灏忥纴鎻愰珮鏁版嵁瀛桦偍鍜屽勭悊镄勬晥鐜囥
浠ヤ笂杩欎簺鍏抽敭鎶链鏋勬垚浜嗗ぇ鏁版嵁瀛桦偍鍜岀$悊镄勫熀纭锛岄氲繃杩欎簺鎶链镄勭粨钖埚簲鐢锛屽彲浠ュ疄鐜版捣閲忔暟鎹镄勫勭悊鍜屽垎鏋愶纴涓虹幇浠d俊鎭鍖栫ぞ浼氭彁渚涘己澶х殑鎶链鏀鎸併
③ 海量分布式存储系统Doris原理概述
Doris( https://github.com/itisaid/Doris )是一个海量分布式 KV 存储系统,其设计目 标是支持中等规模高可用可伸缩的 KV 存储集群。
Doris可以实现海量存储,线性伸缩、平滑扩容,自动容错、故障转移,高并发,且运维成本低。部署规模,建议部署4-100+台服务器。
Doris采用两层架构,Client 和 DataServer+Store。
有四个核心组件,Client、DataServer、Store、Administration。
应用程序通过Client SDK进行Doris的访问,
每台服务器上部署一个Data Sever做服务器的管理,每台服务器上有自己的存储Store,整个集群的数据存储,每台机器独立部署。数据通过路由选择写入到不同的机器中。
Administration为管理中心,提供配置、管理和监控。
config指,应用程序启动一个Data Server,在启动时要配置管理中心的ip地址,通关管理中心。管理中心会修改配置项感知到集群中加了新机器,对新机器管理,扩容等。待机器处于可用状态,将该机器的配置项通知给KV Client。从而KV Client进行新的路由选择。
扩容、下线机器等的控制台界面通过Management管理。
Monitor监控机器是否正常。
client写数据,绑定产品的namespace(逻辑隔离),构成新key,路由到具体机器上读写。
路由解析算法是设计的一个关键点,决定集群的管理方式,也决定了集群扩容的复杂性和难度。
Doris的算法类似redis,有桶的概念,key映射到1w个虚拟节点,虚拟节点在映射到物理节点。
由于Doris设计时,用于4-100+规模的集群。因此,Doris分了1w个虚拟节点,当服务器超过100会导致负载不均衡,1000会更差,相当于每一个集群上有10个虚拟节点,虚拟节点会有10%的影响。
扩容时,需要调节虚拟节点指向新的位置。具体过程为,暴利轮询新节点添加后,一个服务器上应该承载的虚拟节点个数,将超出的虚拟节点迁移到新机器即可。如上图左图有2个物理节点,扩容后,有3个物理节点,变为右图。
为了保证高可用。doris所有服务分成2个组,两组服务器对等。两个group是可以有不同数量的服务器。
写操作时,client的路由算法在两个group分别选2个服务器,分别(同时)写入,两个服务器全部返回后,再继续向下进行。读操作时,从两个服务器随机选一个读。这样,提高可用性,数据持久性,不会丢失。
集群管理的重要角色Config Server,有一个功能是负责发现故障服务器。
发现故障的方式有2种:
节点失效分为:瞬间失效、临时失效、永久失效
应用服务器向服务器写,如果写失败,为 瞬间失效 。接着应用服务器进行3次重试。3次都失败,通知管理服务器,进行服务的失效判断。
管理服务器再写一次,如果写成功,认为是客户端自己通信通信问题。如果写入失败,判断为 临时失效 ,通知所有client,服务器失效,不要写,也不读。
如果2小时恢复,则节点为临时失效。如果2小时没有恢复,认为是 永久失效 。
如图,如果节点2失效,进入临时失效阶段。
如图,节点2临时失效2个小时还未恢复,判定为永久失效。进入永久失效的恢复。
设计中,有临时日志节点(备份节点),有空白节点。实际使用中没有节点3空白节点。原因:1 自动迁移有风险,还是需要手动迁移。2 几年宕机1台,一直有一个空白节点standby浪费。一般晚上报警失效也没有事情,第二天,找机器扩容即可。认为24小时之内,同样编号的2台机器连续down掉,概率很低。
物理节点分成2个group,写的时候,向2个group同时写。当其中一个group扩容机器时,该group上的所有节点进入临时失效状态。停止读写,将数据迁移到新的服务器上。
由于是虚拟节点的映射在调整,所以迁移是按照虚拟节点调整。为了迁移方便,虚拟节点物理化,一个虚拟节点对应一个文件。迁移时其实就是拷贝文件。这时,如果group1有节点失效也会出现不一致,但是,通常扩容的过程很快,因为,是scp拷贝文件,瓶颈为网络带宽,通常几十T数据,几分钟迁移完成,十来分钟进行数据恢复。
④ Hadoop到底是什么玩意
Hadoop到底是个啥?
答:Hadoop是基于廉价设备利用集群的威力对海量数据进行安全存储和高效计算的分布式存储和分析框架,Hadoop本身是一个庞大的项目家族,其核心 家族或者底层是HDFS和MapRece,HDFS和MapRece分别用来实现对海量数据的存储和分析,其它的项目,例如Hive、HBase 等都是基于HDFS和MapRece,是为了解决特定类型的大数据处理问题而提出的子项目,使用Hive、HBase等子项目可以在更高的抽象的基础上更简单的编写分布式大数据处理程序。Hadoop的其它子项目还包括Common, Avro, Pig, ZooKeeper, Sqoop, Oozie 等,随着时间的推移一些新的子项目会被加入进来,一些关注度不高的项目会被移除Hadoop家族,所以Hadoop是一个充满活力的系统。
Apache Hadoop: 是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapRece分布式计算的软件架构。
Apache Hive: 是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MapRece统计,不必开发专门的MapRece应用,十分适合数据仓库的统计分析。
ApachePig: 是一个基于Hadoop的大规模数据分析工具,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapRece运算。
ApacheHBase: 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
Apache Sqoop: 是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
Apache Zookeeper: 是一个为分布式应用所设计的分布的、开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布式服务 ApacheMahout:是基于Hadoop的机器学习和数据挖掘的一个分布式框架。Mahout用MapRece实现了部分数据挖掘算法,解决了并行挖掘的问题。
ApacheCassandra:是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存简单格式数据,集Google BigTable的数据模型与AmazonDynamo的完全分布式的架构于一身 Apache Avro: 是一个数据序列化系统,设计用于支持数据密集型,大批量数据交换的应用。Avro是新的数据序列化格式与传输工具,将逐步取代Hadoop原有的IPC机制 ApacheAmbari: 是一种基于Web的工具,支持Hadoop集群的供应、管理和监控。
ApacheChukwa: 是一个开源的用于监控大型分布式系统的数据收集系统,它可以将各种各样类型的数据收集成适合 Hadoop 处理的文件保存在 HDFS 中供Hadoop 进行各种 MapRece 操作。
ApacheHama: 是一个基于HDFS的BSP(Bulk Synchronous Parallel)并行计算框架, Hama可用于包括图、矩阵和网络算法在内的大规模、大数据计算。
ApacheFlume: 是一个分布的、可靠的、高可用的海量日志聚合的系统,可用于日志数据收集,日志数据处理,日志数据传输。
ApacheGiraph: 是一个可伸缩的分布式迭代图处理系统, 基于Hadoop平台,灵感来自 BSP (bulk synchronous parallel) 和Google 的 Pregel。
ApacheOozie: 是一个工作流引擎服务器, 用于管理和协调运行在Hadoop平台上(HDFS、Pig和MapRece)的任务。
ApacheCrunch: 是基于Google的FlumeJava库编写的Java库,用于创建MapRece程序。与Hive,Pig类似,Crunch提供了用于实现如连接数据、执行聚合和排序记录等常见任务的模式库 ApacheWhirr: 是一套运行于云服务的类库(包括Hadoop),可提供高度的互补性。Whirr学支持Amazon EC2和Rackspace的服务。
ApacheBigtop: 是一个对Hadoop及其周边生态进行打包,分发和测试的工具。
ApacheHCatalog: 是基于Hadoop的数据表和存储管理,实现中央的元数据和模式管理,跨越Hadoop和RDBMS,利用Pig和Hive提供关系视图。
ClouderaHue: 是一个基于WEB的监控和管理系统,实现对HDFS,MapRece/YARN, HBase, Hive, Pig的web化操作和管理。