大数据是指在一定时间内无法用常规软件工具对其内容进行抓取、处理、分析和管理的数据集合。
大数据一般会涉及两种以上的数据形式,数据量通常是100TB以上的高速、实时数据流,或者从每年增长速度快的小数据开始。
大数据有4个特性,简称4V:Volume(规模性)、Variety(多样性)、Velocity(高速性)、Value(价值性)。
大数据分为结构化数据、非结构化数据和半结构化数据三种。
大数据的存储、处理与分析依赖于分布式计算机系统,理解分布式系统基本理论对掌握以Hadoop为代表的计算机分布式系统体系架构、MapReduce分布式计算框架以及HDFS分布式文件系统有重要帮助。
分布式计算机系统是指由多台分散的、硬件自治的计算机,经过互联的网络连接而形成的系统,系统的处理和控制功能分布在各个计算机上。
一般而言,大数据处理流程可分为四步:数据采集、数据清洗与预处理、数据统计分析和挖掘、结果可视化。
数据的采集一般采用 ETL(Extract-Transform-Load)工具。
统计分析需要使用工具(如SPSS工具、一些结构算法模型)来进行分类汇总。
比较典型的算法有用于聚类的Kmeans、用于统计学习的SVM和用于分类的NaiveBayes,主要使用的工具有Hadoop的Mahout等。
分布式计算是相对于集中式计算而言的,它将需要进行大量计算的项目数据分割成小块,由分布式系统中多台计算机节点分别计算,再合并计算结果并得出统一的数据结论。
分布式程序可以基于通用的并行分布式程序开发接口进行设计,例如MPI、Corba、OpenMP、MapReduce和Spark等。
SETI@home是比较有代表性的分布式计算项目。该项目通过互联网进行数据传输,利用世界各地志愿者计算机的闲置计算能力,分析地外无线电信号,搜索外星生命迹象。他们通过运行一个免费程序下载并分析从射电望远镜传来的数据。
由于计算需要拆分在多个计算机上并行运行,也会出现一致性、数据完整性、通信、容灾、任务调度等一系列问题。
术语“分布式计算(Distributed Computing)”与“并行计算(Parallel Computing)”没有特别明确的区别,同一个系统可能同时被特指为“并行的(Parallel)”和“分布式的(Distributed)”。
一个典型的分布式系统中的各处理器是以并行的形式运作的,可以称为并行分布式计算(Parallel Distributed Computing)。此时,并行计算也可能以分布式计算的一种密集形式出现,而分布式计算也可能以并行计算的一种较松散形式出现。不过,可利用下列标准粗略地将“并行系统”与“分布式系统”区分开:
(1)若所有的处理器共享内存,共享的内存可以让多个处理器彼此交换信息,是并行计算。
(2)若每个处理器都有其独享的内存(分布式内存),数据交换通过处理器跨网络完成信息传递,则为分布式计算或分布式并行计算。
分布式文件系统是将数据分散存储在多台独立的设备上,采用可扩展的系统结构,多台存储服务器分担存储负荷,利用元数据定位数据在服务器中的存储位置,具有较高的系统可靠性、可用性和存取效率,并且易于扩展。
分布式文件系统利用分布式技术将标准X86服务器的本地HDD、SSD等存储介质组织成一个大规模存储资源池,同时,对上层的应用和虚拟机提供工业界标准的SCSI、i SCSI和对象访问接口,进而打造一个虚拟的分布式统一存储产品。
常见的分布式存储系统有谷歌的GFS系统、Hadoop的HDFS系统、加州大学圣克鲁兹分校提出的Ceph系统等。
分布式文件系统的关键技术有:
元数据管理、系统高可扩展技术、存储层级内的优化技术、针对应用和负载的存储优化技术
集中式元数据管理采用单一的元数据服务器框架,实现简单,但是存在单点故障等问题。
分布式元数据管理则将元数据分散在多个节点上,解决了元数据服务器的性能瓶颈等问题,并提高了元数据管理的可扩展性,但实现较为复杂,并引入了元数据一致性的问题。
可以通过在线算法组织数据,建立无元数据服务器的分布式架构,但是该架构实现复杂,而且很难保证数据一致性,文件目录遍历操作的效率低下,缺乏文件系统全局监控管理功能。
实现存储系统的高可扩展性需要解决元数据的分配和数据的透明迁移两个方面的问题。元数据的分配主要通过静态子树划分技术实现,透明迁移则侧重数据迁移算法的优化。
从性能和成本两个角度对存储层次进行优化,数据访问局部性原理是进行这两方面优化的重要依据,通常采用多层不同性价比的存储器件组成存储层次结构。
针对应用和负载来优化存储,就是将数据存储与应用耦合,简化或扩展分布式文件系统的功能,根据特定应用、特定负载、特定的计算模型对文件系统进行定制和深度优化,使应用达到最佳性能。
分布式数据库的基本思想是将原来集中式数据库中的数据分散存储到多个通过网络连接的数据存储节点上,以获取更大的存储容量和更高的并发访问量。
为了快速处理海量的数据,分布式数据库系统在数据压缩和读写方面进行了优化,并行加载技术和行列压缩存储技术是两种常用技术。
并行加载技术利用并行数据流引擎,数据加载完全并行,并且可以直接通过SQL语句对外部表进行操作。
行列压缩存储技术的压缩表通过利用空闲的CPU资源而减少I/O资源占用,除了支持主流的行存储模式外,还支持列存储模式。
如果常用的查询中只取表中少量字段,则列模式效率更高;如果需要取表中的大量字段,则行模式效率更高。
数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。
数据库是按照一定数据结构来组织、存储和管理数据的数据集合。
数据仓库所在层面比数据库更高,换言之,一个数据仓库可以采用不同种类的数据库实现。
两者差异,可以用以下几点:
(1)在结构设计上,数据库主要面向事务设计,数据仓库主要面向主题设计。所谓面向主题设计,是指数据仓库中的数据按照一定的主题域进行组织;
(2)在存储内容上,数据库一般存储的是在线数据,对数据的变更历史往往不存储,而数据仓库一般存储的是历史数据,以支持分析决策;
(3)在冗余上,数据库设计尽量避免冗余以维持高效快速的存取,数据仓库往往有意引入冗余;
(4)在使用目的上,数据库的引入是为了捕获和存取数据,数据仓库是为了分析数据。
在大数据处理分析方面,往往沿着从非结构数据中抽取特定结构化数据存储在关系数据库中,再从关系数据库抽取数据形成数据仓库,以支持最终的决策与分析从而体现大数据的价值。
云计算是硬件资源的虚拟化,而大数据是海量数据的高效处理,云计算作为计算资源的底层,支撑着上层的大数据存储和处理。
云计算(Cloud Computing)是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态、易扩展且虚拟化的资源。
云是网络、互联网的一种比喻说法。
云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络、服务器、存储、应用软件和服务)。用户只需投入较少的管理工作,或与服务供应商进行轻量级的交互,就能快速获取这些资源。
虚拟化一般是指将物理的实体,通过软件模式,形成若干虚拟存在的系统,其实际运作还是在实体上,只是划分了若干区域或者时域。
虚拟化大致分为四类:内存虚拟化、网络虚拟化、存储虚拟化、服务器虚拟化。
内存虚拟化:是指利用虚拟化技术实现对计算机内存的管理。从上层应用来看,内存虚拟化系统使得其具有连续可用的内存,即一个连续而完整的地址空间。从物理层来看,通常被分割成多个物理内存碎片。内存虚拟化的作用更多的是满足对内存的分配,对必要的数据进行交换。
存储虚拟化:存储虚拟化是将存储资源的逻辑视图和物理存储分离,从而为系统提供无缝的资源管理。由于存储标准化程度低,存储兼容是必须要考虑的一个问题,如果存储虚拟化技术源自不同的厂商,那么,就会增加后续升级和更新的难度。
网络虚拟化:网络虚拟化是利用软件从物理网络元素中分离网络的一种方式,网络虚拟化与其他形式的虚拟化有很多共同之处。网络虚拟化也面临着技术挑战,网络设备和服务器不同,一般需要执行高I/O任务,在数据处理方面往往有专用的硬件模块。
服务器虚拟化:服务器虚拟化是将服务器的CPU、内存、磁盘等硬件集中管理,通过集中式的动态按需分配,提高资源的利用率。
KVM(Kernel-based Virtual Machine)虚拟机是开源Linux原生的全虚拟化解决方案,它基于X86硬件的虚拟化扩展(Intel VT或者AMD-V技术)。在KVM中,虚拟机被实现为常规的Linux进程,由标准Linux调度程序进行调度;而虚拟机的每个虚拟CPU则被实现为一个常规的Linux进程。这使得KMV能够使用Linux 内核的已有功能。
云计算是个概念,而不是具体技术。虚拟化是一种具体技术,指把硬件资源虚拟化,实现隔离性、可扩展性、安全性、资源可充分利用等。
云计算的基础是虚拟化,但虚拟化只是云计算的一部分,云计算是在虚拟化出若干资源池以后的应用。
云计算的原理更多的是利用了虚拟化,但是虚拟化并不仅仅只服务云计算。
VMware、VirtualBox、OpenStack、Docker。
Hadoop是一个集合了大数据不同阶段(架构、采集、存储、计算处理和可视化等)技术的生态系统。
Hadoop的核心是Yarn、HDFS和MapReduce。
HDFS是Hadoop体系中数据存储管理的基础,它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量数据访问能力,适合带有大型数据集的应用程序。HDFS提供了一次写入多次读取的机制,数据以块的形式,同时分布在集群的不同物理机器上。HDFS的架构是基于一组特定的节点构建的,这是由它自身的特点决定的。这些节点包括NameNode(仅一个),在HDFS内部提供元数据服务;若干个DataNode为HDFS提供存储块。
MapReduce是一种分布式计算模型,用于大数据计算,它屏蔽了分布式计算框架细节,将计算抽象成Map和Reduce两部分。其中,Map对数据集上的独立元素进行指定的操作,生成键-值对形式的中间结果;Reduce则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce非常适合在大量计算机组成的分布式并行环境里进行数据处理。
HBase是一个建立在HDFS之上,面向列的针对结构化数据的可伸缩、高可靠、高性能、分布式数据库。HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。
HBase利用HDFS作为其文件存储系统,并利用MapReduce来处理HBase中的海量数据,利用Zookeeper提供协同服务。
Zookeeper是一个为分布式应用提供协同服务的软件,提供包括配置维护、域名服务、分布式同步、组服务等功能,用于解决分布式环境下的数据管理问题。Hadoop的许多组件依赖于Zookeeper,用于管理Hadoop操作。Zoo Keeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
Hive是基于Hadoop的一个数据仓库工具,Hive使用类SQL的HiveQL来实现数据查询,并将HQL转化为在Hadoop上执行的MapReduce任务。Hive用于离线数据分析,可让不熟悉MapReduce的开发人员,使用HQL实现数据查询分析,降低了大数据处理的应用门槛。Hive本质上是基于HDFS的应用程序,其数据都存储在Hadoop兼容的文件系统(如Amazon S3、HDFS)中。
Hive可以将结构化的数据文件映射为一张数据库表,并且提供简单的SQL查询功能,具有学习成本低,快速实现简单的MapReduce统计的优点,十分适合数据仓库的统计分析。
Pig是由Yahoo!提供的开源软件,设计动机是提供一种基于MapReduce的ad-hoc(计算在Query时发生)数据分析工具。Pig定义了一种叫做Pig Latin的数据流语言,是MapReduce编程复杂性的抽象,其编译器将Pig Latin翻译成MapReduce程序序列,将脚本转换为MapReduce任务在Hadoop上执行。
Sqoop是SQL-to-Hadoop的缩写,是一个Apache项目,主要用于传统数据库和Hadoop之间传输数据,可以将一个关系型数据库(如MySQL、Oracle、Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导入到关系型数据库中。Sqoop利用数据库技术描述数据架构,并充分利用了MapReduce的并行化和容错性。
Flume是一个可扩展、适合复杂环境的海量日志收集系统,当然也可以用于收集其他类型数据。
Mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。
Oozie是一个可扩展的工作体系,集成于Hadoop的堆栈,用于协调多个MapReduce作业的执行,它能够管理一个复杂的系统,基于外部事件来执行。
Yarn是下一代MapReduce,即MR V2,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的。Yarn是一个通用的运行时框架,用户可以在该运行环境中运行自己编写的计算框架。
Mesos是一个资源统一管理和调度的平台,同样支持MapRedcue、Steaming等多种运算框架。Mesos作为数据中心的内核,其设计原则是资源分配和任务调度的分离,为大量不同类型的负载提供可靠服务。
Tachyon是以内存为中心的分布式文件系统,拥有高性能和容错能力,并具有类Java的文件API、插件式的底层文件系统、兼容Hadoop MapReduce和Apache Spark等特点,能够为集群框架(如Spark、MapReduce)提供可靠的内存级速度的文件共享服务。
Tez是Apache开源的支持DAG作业的计算框架,它直接源于MapReduce框架,核心思想是将Map和Reduce两个操作进一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output,Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等,这些分解后的元操作可以任意灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的DAG作业。
Spark提供了一个更快、更通用的数据处理平台。和Hadoop相比,Spark可以让程序在内存中运行时速度提升100倍,或者在磁盘上运行时速度提升10倍。
Apache Giraph是一个可伸缩的分布式迭代图处理系统,基于Hadoop平台。
MLlib是一个机器学习库,它提供了各种各样的算法,这些算法在集群上针对分类、回归、聚类、协同过滤等。MLlib是Spark对常用的机器学习算法的实现库,同时包括相关的测试和数据生成器。
Spark Streaming支持对流数据的实时处理,以“微批”的方式对实时数据进行计算,它是构建在Spark上处理Stream数据的框架,基本原理是将Stream数据分成小的片段,以类似Batch(批量处理)的方式来处理每个片断数据。
它主要用于处理活跃的流式数据。活跃的流式数据在Web网站应用中非常常见,包括网站的点击量、用户访问内容、搜索内容等。
Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的处理。
Apache Phoenix是HBase的SQL驱动,Phoenix使得Hbase支持通过JDBC的方式进行访问,并将SQL查询转换成HBase的扫描和相应的动作。
Kylin是一个开源的分布式分析引擎,它提供Hadoop之上的SQL查询接口及多维分析(Online Analytical Processing,OLAP)能力以支持大规模数据,能够处理TB乃至PB级别的分析任务,能够在亚秒级查询巨大的Hive表,并支持高并发。
Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、Bone CP、Proxool和JBoss Data Source。
Superset是Airbnb开源的数据挖掘平台,与Druid深度结合,可快速地分析大数据。
Storm是一个分布式实时大数据处理系统,用于在容错和水平可扩展方法中处理大量数据,它是一个流数据框架,具有较高的摄取率。类似于Hadoop,Apache Storm是用Java和Clojure编写的。
目前很多企业都提供了大数据解决方案,典型有Cloudera、Hortonworks、MapR和FusionInsight等。
在Hadoop生态系统中,规模最大、知名度最高的是Cloudera,它既是公司的名字,也代表Hadoop的一种解决方案。Cloudera可以为开源Hadoop提供支持,同时将数据处理框架延伸到一个全面的“企业数据中心”范畴,这个数据中心可以作为管理企业所有数据的中心点,它可以作为目标数据仓库、高效的数据平台、或现有数据仓库的ETL来源。
Hortonworks数据管理解决方案使组织可以实施下一代现代化数据架构。Hortonworks是基于Apache Hadoop开发的,可以从云的边缘以及内部来对数据资产进行管理,无论数据是静态还是动态的。
MapR是一个比现有Hadoop分布式文件系统还要快三倍的产品,并且也是开源的。MapR配备了快照,并号称不会出现单节点故障,且与现有HDFS的API兼容,因此非常容易替换原有的系统。MapR使Hadoop变为一个速度更快、可靠性更高、更易于管理、使用更加方便的分布式计算服务和存储平台,并扩大了Hadoop的使用范围和方式。MapR包含了开源社区的许多流行工具和功能,例如HBase、Hive以及和Apache Hadoop兼容的API。
华为FusionInsight大数据平台,能够帮助企业快速构建海量数据信息处理系统,通过对企业内部和外部的巨量信息数据实时与非实时的分析挖掘,发现全新价值点和企业商机。FusionInsight是完全开放的大数据平台,可运行在开放的X86架构服务器上,它以海量数据处理引擎和实时数据处理引擎为核心,并针对金融和运营商等数据密集型行业的运行维护及应用开发等需求,打造了敏捷、智慧、可信的平台软件和建模中间件,让企业可以更快、更准、更稳地从各类繁杂无序的海量数据中发现价值。
FusionInsight解决方案由四个子产品FusionInsight HD、FusionInsight MPPDB、FusionInsight Miner、FusionInsight Farmer和一个操作运维系统FusionInsight Manager构成。
云上大数据解决方案主要有阿里云与亚马逊云。
国内大数据发展还面临诸多问题,主要表现在如下几个方面:
大量政府数据存在“不愿开、不敢开、不能开、不会开”的问题,而已开放的数据也因格式标准缺失无法进行关联融合,成为“开放的孤岛”。
“裸奔”的大数据时代
数据分析在数据处理过程中占据十分重要的位置,随着时代的发展,数据分析会逐渐成为大数据技术的核心。大数据的价值体现在通过对大规模数据集合的智能处理获取有用的信息。
大数据强调数据的实时性,因而对数据处理也要体现出实时性,如在线个性化推荐、股票交易处理、实时路况信息等数据处理时间要求在分钟甚至秒级。
HDFS的存储策略是把大数据文件分块并存储在不同的计算机节点(Nodes),通过NameNode管理文件分块存储信息(即文件的元信息)。
HDFS采用了典型的Master/Slave系统架构,一个HDFS集群通常包含一个NameNode节点和若干个DataNodes节点。一个文件被分成了一个或者多个数据块,并存储在一组DataNode上,DataNode节点可分布在不同的机架。NameNode执行文件系统的名字空间打开、关闭、重命名文件或目录等操作,同时负责管理数据块到具体DataNode节点的映射。在NameNode的统一调度下,DataNode负责处理文件系统客户端的读/写请求,完成数据块的创建、删除和复制。
HDFS基于流式数据访问、存储和处理超大文件,其特点可归纳如下:
1.存储数据较大
目前在实际应用中,已经利用HDFS来存储管理PB(Peta Byte)级数据。
2.支持流式数据访问
HDFS设计的思路为“一次写入,多次读取”。数据源生成数据集后,就会被复制分发到不同的存储节点,用于响应数据分析任务的请求。
3.支持多硬件平台
Hadoop可以运行在廉价、异构的商用硬件集群上,并且在HDFS设计时充分考虑了数据的可靠性、安全性及高可用性,以应对高发的节点故障问题。
4.数据一致性高
应用程序采用“一次写入,多次读取”的数据访问策略,支持追加,不支持多次修改,降低了造成数据不一致性的可能性。
5.有效预防硬件失效
HDFS的设计要有效预防硬件异常,并具有自动恢复数据的能力。
6.支持移动计算
计算与存储采取就近的原则,从而降低网络负载,减少网络拥塞。
HDFS在处理一些特定问题上也存在着一定的局限性,并不适用所有情况,主要表现在以下三个方面:
1.不适合低延迟的数据访问
HDFS是为了处理大型数据集任务,主要针对高数据吞吐设计的,会产生高时间延迟代价。
2.无法高效地存储大量小文件
HDFS采用主从架构来存储数据,需要用到NameNode来管理文件系统的元数据,以响应请求,返回文件位置等。为了快速响应文件请求,元数据存储在主节点的内存中,文件系统所能存储的文件总数受限于NameNode的内存容量。小文件数量过大,容易造成内存不足,导致系统错误。
3.不支持多用户写入以及任意修改文件
在HDFS中,一个文件同时只能被一个用户写入,而且写操作总是将数据添加在文件末尾,并不支持多个用户对同一文件的写操作,也不支持在文件的任意位置进行修改。
大规模Hadoop集群节点分布在不同的机架上,HDFS采用机架感知技术来改进数据的可靠性、可用性和网络带宽的利用率。
通过机架感知,NameNode可确定每个DataNode所属的机架ID,HDFS会把副本放在不同的机架上。如下图所示,第一个副本B1在本地机器,第二个副本B2在远端机架,第三个副本B3看之前的两个副本是否在同一机架,如果是则选择其他机架,否则选择和第一个副本B1相同机架的不同节点,第四个及以上,随机选择副本存放位置。
HDFS系统的机架感知策略的优势是防止由于某个机架失效导致数据丢失,并允许读取数据时充分利用多个机架的带宽。
其中,Rack1、Rack2表示机柜标识号,D1、D2、D3表示所在机柜中的DataNode节点主机的编号。即同一主机的两个数据块的距离为0;同一机架不同主机上的两个数据块的距离为2;不同机架主机上的数据块距离为4。
安全模式是HDFS所处的一种特殊状态。在安全模式下,用户只能读数据而不能删除、修改数据。NameNode主节点启动后,HDFS首先进入安全模式,DataNode则在启动时会向NameNode汇报可用的数据块状态等。只有当整个系统达到安全标准时,HDFS才会离开安全模式。
由于HDFS文件数据库的描述信息由NameNode节点集中管理,一旦NameNode出现故障,集群就无法获取文件块的位置,也就无法通过DataNode上的数据块来重建文件,导致整个文件系统中的文件全部丢失。为了保证文件的安全性,HDFS提供备份NameNode元数据和增加Secondary NameNode节点两种基本方案。
Java抽象类org.apache.hadoop.fs.File System定义了Hadoop的一个文件系统接口。该类是一个抽象类,通过以下两个方法可以创建File System实例。
文件系统的一致性模型描述了文件读/写的数据可见性。为了提高性能,HDFS牺牲了部分POSIX标准定义的操作系统应该为应用程序提供的接口标准请求,文件被创建之后,在文件系统的命名空间中是可见的,但写入文件的内容并不保证能被看见。只有写入的数据超过一个块的数据,其他读取者才能看见该块。总之,当前正在被写入的块,其他读取者是不可见的。不过,HDFS提供一个sync()方法来强制所有的缓存与数据节点同步。在sync()返回成功后,HDFS能保证文件中直至写入的最后的数据对所有读取者都是可见且一致的。
I/O操作过程中难免会出现数据丢失或脏数据的情况,数据传输的量越大,出错的机率越高。
HDFS通过计算出CRC32校验和的方式保证数据完整性。HDFS会在每次读写固定字节长度时就计算一次校验和。
NoSQL(Not Only SQL),意即“不仅仅是SQL”。NoSQL的拥护者提倡运用非关系型的数据存储作为大数据存储的重要补充。NoSQL数据库适用于数据模型比较简单、IT系统需要更强的灵活性、对数据库性能要求较高且不需要高度的数据一致性等场景。NoSQL数据库具有如下四大分类:
键值存储数据库会使用一个特定的键和一个指针指向特定数据的哈希表。常见的键值存储数据库有Tokyo Cabinet / Tyrant、Berkeley DB、Memcache DB、Redis等。Key/Value模型简单、易部署,但是只对部分值进行查询或更新时,Key/Value效率较低。
列存储数据库通常用来应对分布式存储的海量数据,如HBase、Cassandra、Riak等。列存储数据库通过键指向多个列,而这些列是由列族来安排的。列存储数据库可以理解为通过列族来组织的多维数据表。
Hbase 数据表包含行键、列族、时间戳。
文档型数据库同键值存储数据块类似,其数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值存储数据库的升级版,允许键值嵌套。而且文档型数据库比键值存储数据库的查询效率更高。常见的文档型数据库有MongoDB、Couch DB、Sequoia DB等。
与其他行列以及刚性结构的SQL数据库不同,图结构的数据库是使用灵活的图模型,并且能够扩展到多个服务器上,如Neo4J、Info Grid、Infinite Graph等。
MapReduce是一个用于大规模数据集的并行处理的分布式计算的编程框架。MapReduce将一个数据处理过程拆分为Map和Reduce两部分:Map是映射,负责数据的过滤分发;Reduce是规约,负责数据的计算归并。开发人员只需通过编写map和reduce函数,不需要考虑分布式计算框架内部的运行机制,即可在Hadoop集群上实现分布式运算。MapReduce可以帮助开发人员将精力集中在业务逻辑的开发上,分布式计算的复杂性交由框架来处理。
使用 JAVA 编写的流程:
(1)编写Hadoop中org.apache.hadoop.mapreduce.Mapper类的子类,并实现map方法;
(2)编写Hadoop中org.apache.hadoop.mapreduce.Reducer类的子类,并实现reduce方法;
(3)编写main程序,设置MapReduce程序的配置,并指定任务的Map程序类(第一步的Java类)、Reduce程序类等(第二步的Java类),指定输入/输出文件及格式,提交任务等;
(4)将(1)~(3)的类文件与Hadoop自带的包打包为jar文件,并分发到Hadoop集群的任意节点;
(5)运行main程序,任务自动在Hadoop集群上运行;
(6)到指定文件夹查看计算结果。
流数据采集工具:Flume
数据传输工具:Sqoop
数据接入工具:Kafka
数据流通常被视为一个随时间延续而无限增长的动态数据集合,是一组顺序、大量、快速、连续到达的数据序列。通过对流数据处理,可以进行卫星云图监测、股市走向分析、网络攻击判断、传感器实时信号分析。流数据具有实时到达、不受系统控制、规模宏大、不易重复获取等特点,因此,要求流数据的采集系统有较好的实时性、可靠性和安全性。而Apache Flume是一种分布式、具有高可靠和高可用性的数据采集系统,可从多个不同类型、不同来源的数据流汇集到集中式数据存储系统中。
Apache Sqoop是一个开源的数据库导入/导出工具,允许用户将关系型数据库中的数据导入Hadoop的HDFS文件系统,或将数据从Hadoop导入到关系型数据库。Sqoop整合了Hive、Hbase和Oozie,通过MapReduce任务来传输数据,具有高并发性和高可靠性的特点。
Apache Kafka是一个分布式流媒体平台,允许发布和订阅记录流,可用于在不同系统之间传递数据。
Kafka整体架构比较新颖,更适合异构集群,其逻辑结构如下图所示。在消息保存时,Kafka根据Topic(发布到Kafka集群的消息都有一个类别,这个类别被称为Topic)进行分类,发送消息者称为Producer,消息接受者称为Consumer。不同Topic的消息在物理上是分开存储的,但在逻辑上,用户只需指定消息的Topic即可生成或消费数据而不必关心数据存于何处。Kafka中主要有Producer、Broker、Consumer三种角色。
数据库的广泛使用积累了大量历史数据,人们已不再满足于仅用数据库对业务数据进行操作和管理,而是更加注重对这些历史数据进行各种分析以辅助决策。
数据仓库综合和合并了多维空间的数据,涉及数据清理、数据集成和数据变换等技术。数据仓库提供联机分析处理(Online Analytical Processing,OLAP)工具,用于各种粒度的多维数据的交互分析。构造数据仓库和OLAP已经成为知识发现和数据挖掘的基本步骤。
不准确地说,数据仓库也是一种数据库,它与操作性数据库进行分开维护。按照数据仓库系统构造方面的领头设计师William H.Inmon的说法,数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)以及反映历史变化(Time Variant)的数据集合,用于支持管理决策。
数据仓库体系结构通常包含四个层次:数据源、数据存储和管理、数据服务及数据应用。
为了区分,这里把数据库称为操作性数据库。操作性数据库的主要任务是执行联机事务和查询处理,这种系统称为联机事务处理(Online Transaction Processing,OLTP)系统,它涵盖了企业组织机构大部分的日常操作,如购物、注册、记账等。数据仓库系统则是在数据分析和决策方面为用户和决策者提供服务,以特定的主题和格式来组织和提供数据,从而满足不同用户的需求,因此这种系统称为联机分析处理(Online Analytical Processing,OLAP)系统。
数据仓库和OLAP工具是基于多维数据模型的,该模型以数据立方体(Cube)的形式来观察和分析数据。
区别于关系数据模型中的二维表,数据立方体是一个多维的数据模型,类似于一个超立方体。它允许从多个维度来对数据建模,并提供多维的视角观察数据。
数据立方体由维和事实定义。
一般来说,维是透视图或一个组织想要记录的实体。例如,对于一个记录商店数据的数据仓库来说,涉及的维有时间、商品、分店和地点等。这些维使得商店能够记录商品的月销售量、销售商品的分店和地点。每一个维都有一个表与之相关联,该表称为维表,维表对维进行进一步的描述和说明。例如,商品的维表可以包含商品名称、商品所在分店和商品类型等属性,维表可以由用户或专家设定,或者根据数据分布自动产生和调整。
在通常情况下,多维数据模型会围绕某个中心主题来构建,该主题被称为事实,事实是用数值来度量的。事实表包括事实的名称或度量,以及每个相关维表的关键字。例如,对于上述记录商店数据的数据仓库来说,其事实表包括营业金额、商品的销售量和总预算等。
例如,某销售公司的其中一个分店的销售数据表,如下图所示,分店的销售按照时间维(按季度组织)和商品维(按所售商品的类型组织)表示。
下面从三维角度观察销售数据,如下图所示,添加一个分店地址维,从时间、商品类型和分店地址来观察数据。
从概念上讲,这些数据也能够以三维数据立方体的形式来表示。如果需要四维的数据,可以在上表的基础上再多添加一个供应商维度。虽然不能直观地去想象,但是可以把四维的数据看作是三维数据的序列。例如,供应商1对应一个三维数据立方体,供应商2对应另一个三维数据立方体……以此类推,就可以把任意n维数据立方体看作是n-1维数据立方体的序列。
需要注意的是,数据立方体只是对多维数据存储的一种抽象,数据的实际物理存储方式并不等同于它的逻辑表示。
在数据库设计中,通常使用的是实体—联系数据模型,数据的组织由实体的集合和实体之间的联系组成,这种数据模型适用于联机事务处理。然而,对于数据仓库的联机分析处理,则需要使用简明、面向主题的数据模型。目前最流行的数据仓库数据模型是多维数据模型。这种模型常用的模式有三种,分别是星形模式、雪花模式、事实星座模式。
对这三种模式的定义,将用到一种基于SQL的数据挖掘查询语言(Data Mining Query Language, DMQL)。DMQL包括定义数据仓库的语言原语。数据仓库可以使用两种原语进行定义,一种是立方体定义,一种是维定义。
立方体定义语句具有如下语法形式:
define cube
维定义语句具有如下语法形式:
define dimension < dimension_name> as (
星形模式包括:
(1)一个大的、包含大量数据且不含冗余的中心表(事实表);
(2)一组小的附属维表。
雪花模式是对星形模式的扩展,如上图所示。在雪花模式中,某些维表被规范化,进一步分解到附加表(维表)中。从而使得模式图形变成类似于雪花的形状。从上图中可以看到,location表被进一步细分出city维,item表被进一步细分出supplier维。
在复杂的应用场景下,一个数据仓库可能会由多个主题构成,因此会包含多个事实表,而同一个维表可以被多个事实表所共享,这种模式可以看作是星形模式的汇集,因而被称为事实星座模式。
如上图所示,图中包含两张事实表,分别是Sales表和Shipping表,Sales表的定义与星形模式中的相同。Shipping表有五个维或关键字:time_key,item_key,shipper_key,from_location,to_location。两个度量:dollars_cost和units_shipped。在事实星座模式中,事实表是能够共享维表的,例如,Sales表和Shipping表共享time、item和location三个维表。
数据挖掘,就是从海量数据中发现隐含的、不平凡的、具有价值的规律或模式。
基于对数据的分析,可以对数据之间的关联进行抽取和整理,构建合理的模型来提供决策支持。
数据挖掘常用方法有:
分类分析:分类是指按照某种分类模型将具有相同特征的数据对象划分为同一类。
聚类分析:聚类分析是一种创建数据对象集合的方法,这种数据集合也称为簇(Cluster),聚类分析力求使得同簇成员尽可能相似,异簇成员尽可能相异。聚类分析与数据分类是两种不同的方法,在数据分类中,数据对象被分配到预定义的类中,但在聚类分析的过程中,类本身是没有预先创建的,甚至类的数量也是未知,而是在聚类过程中逐渐形成,并加以度量的,在聚类结束前每个数据点都不一定被稳定分配到某个聚类中。用术语进行解释,聚类分析的过程是属于无监督的学习方法,而分类过程则属于有监督学习的方法。
聚类分析的方法有:
关联分析:关联分析是指找出多个事物之间具有的规律性(关联)。
时序模式分析:时序模式分析反映的是属性在时间上的特征,属性在时间维度上如何变化,时序模式分析试图在这些历史数据中找到重复概率较高的模式,从而可以利用已知的数据预测未来的值。
偏差分析:偏差分析是指关注数据库中的异常点,因为对管理者来说,这些异常点往往是更需要给予关注的。譬如,大学生成绩评价中,某几个学生数据偏离于其他聚类,这些学生往往有偏科严重的情况,需要关注。
数据挖掘的处理流程:
(1)问题的定义:要明确问题的目标,制定挖掘计划,这个问题决定了需要采用的数据分析方法,是采用聚类分析方法还是关联分析方法,或者是采用时序模式分析的方法。
(2)数据的获取与预处理:明确了问题之后,就要对任务所涉及的数据对象(目标数据)进行数据采集,得到与挖掘任务相关的数据集。
(3)建模:这一阶段的主要任务是应用各种建模技术,选择最适合的模型,对其进行参数校准调优。
(4)模型评价与分析:一般而言,通过上述步骤,可以得到一系列的分析结果和模型,它们可能是对业务问题从不同侧面进行的描述,需要对这些模型进行评估和分析,才能得到支持业务决策所需要的信息,如果发现模型与实际数据应用有较大偏差,则还需要返回上面的步骤进行调整。
Spark是一种基于内存的、用以实现高效集群计算的平台。准确地讲,Spark是一个大数据并行计算框架,是对广泛使用的MapReduce计算模型的扩展。Spark有着自己的生态系统,但同时兼容HDFS、Hive等分布式存储系统,可以完美融入Hadoop的生态圈中,代替MapReduce去执行更为高效的分布式计算。两者的区别下图所示,基于MapReduce的计算引擎通常会将中间结果输出到磁盘上进行存储和容错;而Spark则是将中间结果尽量保存在内存中以减少底层存储系统的I/O,以提高计算速度。
大数据安全与隐私面临以下挑战:
1.基础设施安全:基础设施安全主要体现在分布式计算和数据存储的保护方面。
2.数据管理安全:数据管理安全是指针对分布式可扩展数据集的数据存储、审计和溯源安全方案。
3.数据隐私
4.安全验证和监控:多数大数据系统数据来源广泛,可能存在攻击者篡改或伪造数据源,甚至提供恶意输入的风险,这对输入数据的验证和过滤技术提出了挑战。
传统的密码技术分为对称密码和非对称密码两大类。
对称密码的特征是加密密钥和解密密钥相同。
非对称密码(公钥密码体制)的特征是加密密钥与解密密钥不同,而且很难从一个推出另一个。
基础设施安全:大数据部件的整体安全防护、认证和租户等安全特性,包括身份认证、访问控制、数据加密、日志审计和多租户安全等技术方向。
数据管理安全:负责数据在采集、存储和分发使用过程的安全保障,包括数据生命周期管理、数据水印、数据溯源、访问校验、细颗粒度访问控制、完整性保护和数据管理安全策略等技术方向。
隐私保护:支撑数据隐私保护的合法性原则、透明原则、数据主体参与原则、目的限制原则、最小化原则、准确原则、安全原则和可追溯原则,包括匿名化/假名化、隐私还原管理、隐私策略管理、校验与监控和隐私风险识别等技术方向。
安全分析:利用大数据分析做安全态势感知,实现威胁的检测、响应和防御,包括智能监测、威胁预测、智能响应和可视化分析等技术方向。
数据运营安全:通过运营管理策略,实现安全合规、风险管控和安全合作等。
华为大数据安全解决方案在大数据基础设施安全、数据管理安全、数据分析和隐私保护等方面提供支撑。
基础设施安全可采用包括数字签名、消息认证、身份认证等认证技术。
还可以通过访问控制确保基础设施安全。
认证、访问控制和审计共同保障计算机系统的安全。
公钥基础设施主要包括认证机构、证书库、密钥备份和PKI应用接口系统。
数据管理安全可以通过数据溯源技术、数字水印技术实现。
大数据平台中的安全策略管理主要涵盖三个部分:一是对安全密钥、口令保护进行统一定义与设置;二是对安全规则进行集中管理、集中修订和集中更新,从而实现统一的安全策略实施;三是安全管理员可以在中央控制端进行全系统的监控。
大数据平台的数据完整性要求在数据传输和存储过程中,确保数据不被未授权的用户篡改或在篡改后能够被迅速发现。大数据平台的完整性保护,主要包含数据库关系完整性保护和数据完整性保护。
数据脱敏用于保护大数据平台中的敏感数据,主要涉及加解密算法的安全、加密密钥的安全、存储安全、传输安全以及数据脱敏后密文数据的搜索安全等。
用于大数据平台敏感数据的加解密算法应该选择业界标准算法。
一个密钥在其生命周期中会经历多种不同的状态,包含密钥生成、分发、使用、存储、更新、备份和销毁。密钥在其生命周期的各个阶段,都应满足一些基本的安全要求,以保障自身的安全性。
在不同存储或打印场景,对敏感数据(例如,口令、银行账号、身份证号、通信内容、加密算法、金额、IV值或密钥信息等)进行限制或保护处理,避免因为敏感数据泄露而导致大数据平台不安全或用户隐私受到威胁。
对非信任网络之间传输中的敏感数据进行安全保护,防止敏感数据在传输过程中被嗅探或窃取。
数据脱敏后的密文数据是以乱码的形式存在的,其失去了可搜索的特性。为了实现对密文的搜索,一般情况下需要先将所有密文数据载入到内存,然后对内存中的密文数据进行解密,最后再采用基于明文的搜索技术对解密后的密文进行搜索。
在大数据平台中实现直接对密文进行快速搜索的方法变得非常重要。基于关键词索引的密文搜索技术是目前流行的一种方法,它可以在不解密的情况下直接对密文进行搜索。
大数据安全分析是利用大数据相关技术采集流量、日志和事件,通过基于行为和内容的异常检测方法,发现高级/未知威胁和DDoS攻击。
DDoS全称分布式拒绝服务。攻击者以瘫痪网络服务为直接目的,以耗尽网络设施(服务器、防火墙、IPS和路由器接口)性能为手段,利用网络中分布的傀儡主机向目标设施发送恶意攻击流量。由于傀儡主机数量巨大,所以DDoS攻击产生的流量经常会达到服务器甚至是电信级网络设备的性能上限。同时,由于傀儡主机呈现多地区分布的特点,导致攻击难以溯源,无法准确防范。
攻击检测大数据平台支持功能如下:
(1)现网数据样本清洗和管理;
(2)样本数据的信息关联和扩展;
(3)样本流数据统计;
(4)流统计时序数据的存储和检索;
(5)实际流量估计;
(6)在线异常流检测基于机器学习的异常流检测模型训练。
智能的DDoS攻击检测系统框架主要包含以下内容:
(1)数据加工层:数据采集,主要进行海量IPFIX/Netstream数据的加工,补齐DNS、GIS等信息;
(2)数据分析层:在线检测系统和离线训练系统,主要通过大数据技术,对信息聚合分析,进行攻击检测。对攻击源、受害网络主机进行初步筛选,并通过机器学习训练模型,更智能地发现未知攻击,支持相关商业智能分析;
(3)数据呈现层:商业智能,主要根据攻击事件、攻击源、受害网络主机等信息,基于多种维度合并排序,生成客户化数据;
(4)用户感知层:Web用户界面,主要根据客户化数据进行图形化显示。
大数据系统服务商不一定能够很严密地保证用户隐私。用户数据,在系统管理方看来,基本都是明文。所以,采用传统加密技术的大数据系统实际上无法确保用户数据的隐私安全,这是目前大数据系统数据安全的一个亟需解决问题。
内容关联密钥技术是一种新的云计算安全技术。该加密算法按照原始待加密明文中数据的重要性(针对文件应用的重要性),将数据中数据量小但重要性或信息含量较高的那一部分数据抽取出来,作为原始待加密明文的密钥;而将待加密明文中剩余的那些数据量较大但重要性较低的部分,经过一定处理(如数据填充以保证文件的完整性)后作为算法的密文。