1.1 大数据处理的基础技术
1.1.1 大数据相关概念
1.大数据特征
大数据(Big Data),无法在一定时间范围内通过常规软件工具对其内容进行抓取、管理和处理的数据集合。大数据具有4个特性,简称“4V”,具体如下。
· Volume(大量):数据量巨大,集中存储、计算已经无法处理巨大的数据量。
· Variety(多样):种类和来源多样化,例如日志、图片、视频、文档、地理位置等。
· Velocity(高速):分析处理速度快。能够做到海量数据的及时有效分析。
· Value(低价值密度):价值密度低,商业价值高。能够做到对大量的不相关信息进行复杂的深度分析,深挖价值。
2.大数据构成
大数据的构成一般包括结构化数据、非结构化数据和半结构化数据3类,具体说明如下。
(1)结构化数据
结构化数据具有固定的类型、结构、属性划分等信息。人们通常所了解的关系型数据库中所存放的数据信息,大多都是结构化数据,比如hd_user(用户信息表),拥有open_id(微信ID)、name(姓名)、mobile(手机号)、card_id(身份证号)、sex(性别)等基本属性。结构化数据通常是直接存储在数据库的表中,数据记录中的每一个属性对应表中的一个字段。
(2)非结构化数据
非结构化数据是没法采用统一的结构来表示的数据,比如常见的声音、图片、视频、文本文件、网页等信息。数据记录非常小时(比如KB级别),可考虑直接存储在数据库表中(整条记录映射到某一个列中),这样便于快速检索整条记录。当非结构化数据量较大时,通常考虑直接存放在文件系统中,数据库可用来存放相关数据的索引信息。
(3)半结构化数据
半结构化数据不仅具有一定的结构性,还具有一定的灵活可变性。比如常见的XML、HTML等数据,也属于半结构化数据的一种。半结构化数据可以考虑直接转换成结构化数据进行存放。依据数据记录的大小特点,选择适合的存储方式,这一点与非结构化数据存储类似。
一般而言,结构化数据仅占全部数据的20%以内,但这20%以内的数据浓缩了过去长时间以来企业在各个方面的数据需求,发展也相当成熟,即数据也具有所谓的“二八法则”,20%的数据具有80%的价值。那些不能完全数字化的文本文件、声音、图片、视频等信息就属于非结构化数据,非结构化数据中往往存在大量的、有价值的信息,特别是随着移动互联网、物联网、车联网的发展,非结构化数据正在以成倍的速度高速增长。
1.1.2 大数据处理流程
总体来说,人们一般将大数据处理的流程分为4大步骤,分别为大数据采集、大数据清洗和预处理、大数据统计分析和挖掘、结果可视化。
大数据处理流程如图1-1所示。
图1-1 大数据处理流程
1.大数据采集
大数据采集一般采用ETL(Extract(提取)、Transform(转换)、 Load(加载))工具负责将分布、异构数据源中的数据(如流数据、关系数据、平面数据以及其他非结构化数据等)抽取到临时文件或数据库中。
2.大数据清洗和预处理
数据采集好后,必然有不少的重复数据、无用数据甚至是脏数据,此时需要对数据进行简单的清洗和预处理,将不同来源的数据整合成一致的、适合数据分析算法和工具读取的数据(如数据去重、空值处理、异常值处理和归一化处理等),然后将这些数据存储至大型分布式数据库或者分布式存储集群当中。
3.大数据统计分析和挖掘
数据的统计分析需要用到工具来处理,比如SPSS、Python、R等工具,一些结构算法模型,进行分类汇总以满足不同的统计分析需求。
与统计分析不同的是,数据挖掘一般没有什么预先设定好的主题,主要在现有数据上面进行基于各种数据挖掘算法的计算,起到预测效果,实现一些高级别数据分析的需求。常见的数据挖掘十大算法为C4.5. K-Means、SVM、Apriori、EM、PageRank、AdaBoost、KNN、Naive Bayes、CART;常见的数据挖掘工具有Python的Scikit-Learn、Hadoop的Mahout、Spark的MLlib等。
4.结果可视化
大数据分析的使用者除了大数据分析专家外,还有普通的业务人员等,但是两者对于大数据分析最基本的要求都是一样的,即可视化分析。可视化分析不仅可以直观地呈现出大数据的特征,还可以被读者轻松地接受,形同看图说话一样,简单明了,一目了然。
1.1.3 大数据处理基础技术
1.分布式计算
分布式计算,是相对于集中式计算而言的,将需要进行大量计算的项目数据分割成若干个小块,由分布式系统中多台计算机节点分别计算,再将计算结果进行合并,并得出统一的数据结论。分布式计算的目的是对海量的数据进行分析,如从网联汽车的海量报文数据中分析出车辆的异常,从淘宝“双十一”的数据中实时计算出各地区消费者的消费行为等。
SETI@home是比较具有代表性的分布式计算项目,该项目是由美国加州大学伯克利分校创立的,一项利用全球联网的计算机共同搜寻地外文明(SETI)的科学实验计划,一般通过互联网来传输数据,再利用世界各地成千上万志愿者的计算机的闲置计算能力,来分析地外无线电信号,搜索外星生命迹象。该项目数据基数很大,有着千万级的数据量,已有百余万的志愿者通过运行一个可以免费下载的程序,并分析从射电望远镜传来的数据来加入到这个项目中。
2.分布式文件系统
分布式文件系统,是将数据分散地存放在多台独立的设备上,它采用可扩展的系统结构,用多台存储服务器来分担存储的负荷,利用元数据定位数据在服务器中的存储位置。其特点是具有较高的系统可靠性、可用性、可扩展性和存储效率。分布式文件的系统结构如图1-2所示。
图1-2 分布式文件系统
分布式文件系统包括4种关键技术,分别为:
· 元数据管理技术。
· 系统弹性扩展技术。
· 存储层级内的优化技术。
· 针对应用和负载的存储优化技术。
3.分布式数据库
分布式数据库的基本思想,是将原来集中式数据库中的数据分散地存放至通过网络连接的多个数据存储节点上,从而获得更大的存储空间和更高的并发量。
分布式数据库系统,可以通过多个异构、位置分布、跨网络的计算机节点组成。每台计算机节点中都可以包含有数据库管理系统的一份完整的或部分副本,并且具有自己局部的数据库。多台计算机节点,利用高速计算机网络将物理上分散的多个数据存储单元相互连接起来,共同构建一个完整的、全局的、逻辑上集中的和物理上分布的大型数据库系统。
适用于大数据存储的分布式数据库具有以下3大特征,简称“三高”。
· 高可扩展性:指分布式数据库具有高可扩展性,能够动态地增添存储节点,以实现存储容量的线性扩展。
· 高并发性:指分布式数据库能及时响应大规模用户的读与写请求,能够对海量数据进行随机的读与写操作。
· 高可用性:指分布式数据库提供容错机制,能够实现数据库数据冗余备份,保证数据和服务的高度可靠性。
4.数据库与数据仓库
数据库和数据仓库在概念上有很多相似之处,但是也有本质上的差别。
· 数据仓库(Data Warehouse):是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。
· 数据库:是按照一定数据结构来组织、存储和管理数据的数据集合。
数据仓库所在层面比数据库更高,换句话说就是一个数据仓库可以通过不同类型的数据库实现。图1-3从结构设计、存储内容、冗余程度和使用目的四个方面展示了数据库与数据仓库的差异。
图1-3 数据库与数据仓库的差异
5.云计算与虚拟化
(1)云计算
云计算(Cloud Computing)是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态、易扩展且虚拟化的资源,其中云只是网络、互联网的一种比喻说法。目前广为接受的是美国国家标准与技术研究院(NIST)给出的定义:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源(网络、服务器、存储、应用软件、服务等)共享池,这些资源能够被快速的提供,只需要投入非常少的管理工作,或者与服务供应商进行很少的交互。
(2)KVM虚拟机
KVM(Kernel-based Virtual Machine)虚拟机是开源Linux原生的全虚拟化解决方案,它基于X86硬件的虚拟化扩展(Intel VT或者AMD-V技术)。KVM是基于CPU辅助的全虚拟化方案,需要CPU虚拟特性的支持。一个KVM虚拟机,即一个Linux QEMU-KVM进程,与其他Linux进程一样被Linux进程调度器调度;KVM虚拟机包括虚拟内存、虚拟CPU和虚拟I/O设备,其中内存和CPU的虚拟化由KVM内核模块负责实现,I/O设备的虚拟化由QEMU负责实现;KVM客户机系统的内存是QEMU-KVM进程的地址空间的一部分;KVM虚拟机的vCPU作为线程运行在QEMU-KVM进程的上下文中。
(3)云计算和虚拟化的关系
云计算仅仅是一个概念,而不是一种具体技术,但虚拟化却是一种具体技术。虚拟化是指把硬件资源虚拟化,实现隔离性、可扩展性、安全性、资源可充分利用等。两者看似不相关,背后却有着千丝万缕的关系。虚拟化一般是将物理的实体,通过软件模式,形成若干虚拟存在的系统,其真实运作还是在实体上,只是划分了若干区域或者时域;而云计算的基础是虚拟化,但虚拟化仅仅是云计算的一部分,云计算是在虚拟化出若干资源池以后的应用。
(4)常见虚拟化产品
· VMWare:全球桌面到数据中心虚拟化解决方案的领导厂商,在虚拟化和云计算基础架构领域处于全球领先地位,所提供的经客户验证的解决方案可通过降低复杂性以及更灵活、敏捷的交付服务来提高IT效率,该厂商总部设在美国加州。
· VirtualBox:该虚拟化软件由德国Innotek公司开发,由Sun Microsystems公司出品的软件,在Sun Microsystems公司被Oracle公司(甲骨文公司)收购后正式更名成Oracle VM VirtualBox。Innotek以GNU General Public License(GPL)释放出VirtualBox,并提供二进制版本及OSE版本的代码。
· OpenStack:一个由美国国家航空航天局NASA和Rackspace(全球三大云计算中心之一,1998年成立)合作研发并发起的项目,是一个开源的云计算平台,由来自世界各地云计算开发及技术人员共同创建OpenStack项目。
· Docker:一个开源的引擎,可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器,通过容器可以在生产环境中批量地部署,包括VMWare、OpenStack集群和其他基础的应用平台。