在准备学习大数据之前,我一直很好奇什么是大数据?每天的公众号推送、博客文章很多都和大数据相关联。在深入学习之后,才算初窥门径。
什么是大数据?
用非常通俗的话来说,就是指巨量数据的集合,这些数据集合无法在一定时间范围内用常规方法或者单台机器进行处理。最直观的就是淘宝双十一订单数据产生,在双十一这一天的每时每分都有上万的订单,巅峰值可能达到几十万笔,这些订单有的来自于手机端、有的来自于网页端、有的来自于天猫超市、有的来自于专营店等。 现在如果要统计分析这上千亿的订单数据,好让商户作出更好的决策,在非常短的时间和单个或几个机器上处理可能吗?答案肯定是否定的。所以通过这个例子不难发现大数据具有以下特点:
① 大量性。在大数据中,一个文件的级别至少是几十,几百GB以上,远超常规文件的大小。
② 快速性。数据产生的速率、变更频率在短时间中的变化非常快。
③ 多样性。数据类型、来源多样化,可以把这些数据的类型分为结构化、半结构化和非结构化的数据。
④ 易变性。伴随数据快速性,数据流还呈现波动、不稳定的特征,都会随着日、季节或者特定事件的触发出现周期性峰值,就如双十一的订单数据、微博关于某个明星的热搜等等。
⑤ 准确性。不同方式、渠道收集的数据在质量上也会有很大的差异,从而造成数据分析和输出结果的错误程度和可信度在很大程度上取决于数据质量的高低。
⑥ 复杂性。体现在对数据的管理和操作,比如如何进行抽取、转换、加载、连接、关联以把握数据内部有用信息就越具有挑战性。
在Hadoop出现之前,为了解决数据量大、分析的问题,一般解决的方法,将这些数据分到多个硬盘容量大的硬盘中,然后同时读取,统一进行计算处理。使用这种方法,就有很多的问题,包括硬件中数据复制如何解决、如何从不同的硬盘中读取数据。所以Hadoop就随之而生,解决了这些复杂问题,使数据的处理更加简洁。
什么是Hadoop?
按照官网的介绍,Hadoop能在计算机集群上使用简单的计算模型来分布式处理大量的数据集。可以看出Hadoop是一个适合大数据的分布式存储和计算的平台。是公认的一套行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力。具有高容错、高可靠性、高扩展性等特点。特别适合写一次,多次读的场景。
但是Hadoop并不是值一个具体的框架和组件,而是一个分布式存储和计算的平台,从Hadoop体系总独立出去并成为Apache顶级项目有很多,例如:
2010年5月— Avro脱离Hadoop项目,成为Apache顶级项目。
2010年5月— HBase脱离Hadoop项目,成为Apache顶级项目。
2010年9月— Hive( Facebook) 脱离Hadoop,成为Apache顶级项目。
2010年9月— Pig脱离Hadoop,成为Apache顶级项目。
2011年1月— ZooKeeper 脱离Hadoop,成为Apache顶级项目。
从这里就可以看出Hadoop的强大地位。
Hadoop的生态体系
在这个生态体系中可以大致分为两类:数据存储和数据应用。其中ZooKeeper属于一个横跨Hadoop的组件,主要是用来实现分布式锁,是Hadoop 2.x系列才有的。
数据存储
1)HDFS
Hadoop的核心之一,作为一款分布式文件存储系统,HDFS非常适合存储大文件。而且它的设计初衷就是可以在非常低廉的计算机上实现高容错、流式数据访问。用户通过HDFS的终端命令可以操作其中的文件和目录,如同操作本地文件系统(如Linux)中的文件一样。用户也可以通过HDFS API或者MapReduce来编程访问其中的文件数据。
2) Hbase
Hbase作为一个结构化数据库。数据都是存储在HDFS上。它介于NoSql和RDBMS之间,仅能通过主键(RowKey)和主键的Range来检索数据,仅支持单行事务,和Hadoop一样,Hbase的目标主要是依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。
数据应用
1)MapReduce
作为一个分布式运算程序的编程框架,MapReduce适合离线数据计算,Spark对应的升级版。MapReduce核心功能就是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。在MapReduce中充分借鉴了分而治之的思想,将一个数据处理过程拆分为主要的Map(映射)与Reduce(化简)两步。用户不懂分布式计算框架的内部运行机制,只要能用Map和Reduce的思想描述清楚要处理的问题,即编写Map()和Reduce函数就能轻松地使问题的计算实现分布式,并在Hadoop上运行。
2)Storm
Storm是一个分布式实时大数据处理系统。Storm设计用于容错和水平可扩展方法中处理大量数据。它是一个流数据框架,具有最高的提取率。虽然Storm是无状态的,它通过ZooKeeper管理分布式环境和集群状态。可以并行地对实时数据执行各种操作。
3)Hive
本质上是一个语言转换工具,而并不是一个数据库。Hive将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务执行。Hive的优点是学习成本低,可以通过类SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。
4)MaHout
MapHout提供了一些经典的机器学习算法,旨在帮助开发人员更加方便地快捷地创建只能应用程序,其中包括了许多实现,例如聚类、分类、推荐引擎、频繁子项挖局等等。它本质其实还是一个MapReduce.