你好,游客 登录
背景:
阅读新闻

艾叔:大数据存储技术

[日期:2019-07-21] 来源:  作者: [字体: ]

本文节选自艾叔即将出版的图书《Spark大数据编程实用教程》

前面介绍了大数据的开发过程大数据采集技术,如图1-1所示。

图 1-1大数据开发通用步骤图

本节介绍大数据存储的特点、分类和技术

1. 大数据存储的特点

大数据对存储系统的要求,和常规数据对存储的要求是不一样的,其特点包括:

  • 存储空间超出了单机的容量和一般分布式存储系统所支持的上限;

  • 数据集中记录的条数超出了传统数据库可处理的上限;

  • 网络带宽以及磁盘I/O的吞吐量超出了单机的上限;

  • 此外,按照常规方法,采用专用存储设备,由于规模小,总的经济成本还可以接受,但是,如果存储海量数据,需要的存储设备多,而专用设备的单位容量的存储代价昂贵,因此,采用专用设备来存储海量数据,在经济上会变得不可行。

2. 大数据存储分类

由于上述原因,从Google的GFS开始,近十几年来,出现了很多的大数据存储系统。

根据存储对象的类型,可以分为两类

  • 非结构化数据(即平时所说的文件)存储

  • 结构化数据(即数据库)存储

其中结构化数据存储根据技术特性又可以分为2类:

  • NoSQL数据库

  • NewSQL数据库

因此,加上非结构化数据的存储,大数据存储可分3类:

  • 分布式海量文件存储

  • NoSQL数据库

  • NewSQL数据库

每种存储对应的典型系统及技术要求,如图1-4所示。

图 1-4大数据存储技术图

3. 大数据存储技术

根据上图内容,掌握大数据存储技术可以分为两个层次:

1)使用者层次

第一,存储系统的基础架构和运行原理

一般来说,分布式存储系统的架构有主/从式和对等式两种,例如HDFS、Moosefs、HBase是典型的主从式架构,包括一个管理节点和多个数据存储节点。

这样的好处是,架构简单,设计和实现都可以简化,有利于构建稳定健壮的系统。

不好的是,管理节点是整个存储系统的单点,管理节点不可用会导致整个存储系统不可用。

当然,HDFS目前也提供了相应的HA机制,来提高管理节点的可用性。

而Gluster则是典型的对等式架构,任何一个节点不可用,都不会导致整个存储系统不可用,可用性很高。

不好的地方是,设计和实现复杂,在性能和可靠性上需要做更多的工作。存储系统的运行原理,因不同的系统而异,在此由于篇幅原因,不再多述;

第二,各存储系统的构建、基本命令、帮助文件和日志文件的查看等基本技能,如果要操作NewSQL数据库,还涉及SQL语言规范和使用

第三,如果要编写程序使用存储系统的话,相关技术还涉及:各存储系统的基本API函数,各功能实现的调用顺序等

此外,还需要掌握一门编程语言,如Java、Python、Scala等,具体的技术涉及语言与存储系统之间的调用机制,包括函数库直接调用,或通过第三方的thrift服务等进行调用等;

第四,对于一些高级使用方法,在缺乏资料的情况下,还需要阅读源码,搞清楚实现机制

我们在360联合实验室的项目中,对HDFS的可用性机制进行了研究,当时的HDFS并没有NameNode(管理节点)的热备机制,这是一个很大的隐患,一旦出现问题,在生产环境中是不可容忍的。

我们选择了当时Facebook提出的Avatrar技术方案。由于资料少,如何高效可靠地使用并不清楚,而这些操作又涉及文件系统中的元数据,一不小心就可能导致整个文件系统不可访问。

为此,我们深入分析了Avatrar的源码,深入理解其实现和运行机制,针对每种异常情况提出了对应的解决方案,得到了360方面的高度认可。

2)开发、设计者层次

第一,分布式系统设计和开发的相关基础

如网络编程接口、RPC调用、自定义消息及交互协议、进程间的同步、节点管理、系统扩展、节点可用性、故障恢复、各类异常的处理等;

第二,文件系统、数据库系统的理论基础和开发经验

如元数据管理、名字空间、数据分布、资源调度、数据冲突处理、数据模型、一致性保证、SQL语言处理引擎等;

第三,精通某一门开发语言

例如HBase是用Java开发的,Moosefs是C++开发的;

第四,除了语言自身的特性外,其它技术还涉及操作系统与I/O相关的接口

例如Moosefs支持Posix接口,需要了解这些接口的功能、参数和返回值以及实现机制等。

还有像CEPH文件系统,它有专门的内核模块,因此,开发者还需要熟悉Linux内核模块的开发,清楚Linux内核的运行机制、内部接口、使用方法、调试技术等,内核开发必须使用C语言,因此,掌握C语言是必须的;

第五,一个高性能存储系统,一定是软硬件结合

因此,需要掌握操作系统、硬件等底层机制,并结合开发语言的特性,将硬件性能利用到极致;

第六,如果是基于现有系统进行修改,需要对现有系统的运行、实现机制有深入理解,最主要的途径就是阅读其源码

我们在与中兴通讯合作项目中,实现了纠删码高性能编解码,并将其应用到分布式文件系统Moosefs上,替换原有的副本机制,这样可以在相同可靠性的情况下,大幅节约存储空间的。

我们当时的一个很重要的工作就是,阅读Moosefs的源码,深入理解其实现机制,由于Moosefs是通用文件系统,不像HDFS只支持有限的文件操作(例如,只支持数据的追加,不支持数据修改),因此,考虑的因素更多,设计和实现更复杂。

艾叔大数据系列

推荐:和艾叔一起学:Docker+Hadoop企业级项目实战

为何我自学大数据这么久,效果却不好呢?

什么样的数据可以称为“大数据”?

大数据开发的通用步骤

Python or Java? 真的没有那么重要

如何理解Scala的函数式编程

艾叔,我的两台虚拟机咋就通不了呢?

明明是按书上的步骤一步步来的,为什么还总出错?

艾叔:最全【大数据采集技术】总结


新公众号,没法留言,如果你想和艾叔交流的话,可扫码私信,咱们微信见

Ps:艾叔不是高手,也不是牛人,编程的道路上,走了很多弯路,也踩了很多坑,如果你也和艾叔当年一样,欢迎关注公众号

如果你觉得本文有用,分享给需要的人。

你的分享点赞,是对艾叔最大的支持和鼓励

收藏 推荐 打印 | 阅读:
相关新闻