赞
踩
大数据是指无法在一定时间内用常规软件工具对其内容进行抓取、管理和处理的数据集合。是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。
时效性
数据在某一时间段内具有对决策有价值的属性,也就是说,同一信息在不同的时间具有很大的性质上的差异,这个差异就是数据的时效性。信息的时效性决定了决策在哪些时间内有效。
不可变性
已产生的数据不会改变,大数据的变化可看作是新数据条目的产生,而不是对现有条目的更新。
大数据时代给以往的技术带来了新的挑战,由于传统的分布式架构存在弊端:无法实现大数据的计算要求,所以产生了新的分布式计算架构,基于 Hadoop 集群的分布式计算。
传统分布式计算 | 新的分布式计算 - Hadoop | |
---|---|---|
计算方式 | 将数据复制到计算节点 | 在不同数据节点并行计算 |
可处理数据量 | 小数据量 | 大数据量 |
CPU性能限制 | 受CPU限制较大 | 受单台设备限制小 |
提升计算能力 | 提升单台机器计算能力 | 扩展低成本服务器集群 |
Hadoop 就是一个开源分布式系统架构
Hadoop 是由 Java 语言编写的,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架,其核心是 HDFS 与 MapReduce,主要包括以下三部分:
Hadoop 是目前处理海量数据的首选架构,它能够非常快的完成大数据计算的任务,且对硬件要求相对较低,已逐渐发展成为一个完善的 Hadoop 生态圈。
大数据存储:分布式存储
日志处理:擅长日志分析
ETL:数据抽取到 Oracle、MYSQL、DB2、mongdb 等主流数据库
机器学习:Apache Mahout 项目
搜索引擎:Hadoop + lucene 实现
数据挖掘:精准内容推送,个性化广告推荐
Hadoop是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式
Hadoop 起源于搜索引擎 Apache Nutch
Hadoop 发行版本
Hadoop 发展时间线
2003-2004 年,Google 发表了 GFS 和 MapReduce 两篇论文,受此启发的 Doug Cutting 等人用 2 年的业余时间实现了 DFS 和 MapReduce 机制,使 Nutch 性能飙升。
2005 年,Hadoop 作为 Lucene 的子项目 Nutch 的一部分正式引入 Apache 基金会。
2006 年 2 月,Hadoop 被分离出来,成为一套完整独立的软件,并起名为 Hadoop 。
2008 年 1 月,Hadoop 成为 Apache 顶级项目,同年 4 月,Hadoop 打破世界纪录,成为最快的 1TB 数据排序系统,在 900 个节点上用时 209 秒。
Hadoop 名字不是一个缩写,而是一个生造出来的词。是 Hadoop 之父 Doug Cutting 以儿子的毛绒玩具象命名的。
1. 高可靠性
多副本机制,容错高。能自动维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。当丢失一个节点时,系统会自动将工作重定向到数据的另一个副本,并在不中断的情况下继续处理。
2. 高扩展性
伸缩性强,可以根据需要添加新节点,而不需要更改现有的数据分布,也不需要更改作业和应用程序。
3. 低成本
Hadoop 可通过普通廉价的机器组成服务器集群来分发以及处理数据,以至于成本很低,当然这是相对于传统单机作业而言。
4. 无共享架构
可在不同系统的主机上运行,且不同机器上的不同分块的数据处理相互不干扰。
5. 开源社区活跃
社区活跃、参与者众多。实际工作中遇到的问题可以在社区得到很好的解决。
在许多场景下,Hadoop 能够被视为 RDBMS(关系型数据库管理系统)的一种补充。两个系统之间的对比如下表所示。Hadoop 很适合那些需要分析(尤其是自主分析)整个数据集的问题,以批处理的方式进行,而 RDBMS 适合于点查询和更新。Hadoop 适合数据被一次写入和多次读取的应用,而 RDBMS 适合持续更新的数据集。
RDBMS | HADOOP | |
---|---|---|
格式 | 写数据时要求 | 读数据时要求 |
速度 | 读数据速度快 | 写数据速度快 |
更新 | 多次读写 | 一次写入、多次读取 |
数据类型 | 结构化数据 | 结构化、半结构化、非架构化 |
数据大小 | GB | TB |
数据处理 | 有限的处理能力 | 强大的处理能力 |
应用场景 | 交互式OLAP分析 ACID事务处理 企业业务系统 | 处理非结构化数据 海量数据存储和计算 |
Hadoop 自出现以后,得到快速发展,大量与其相关的应用也被开发出来,共同服务于 Hadoop 工程。现在 Hadoop 已经成为一个庞大的架构系统,只要是与大数据相关的,都会出现 Hadoop 的身影。这些相关组件系统与 Hadoop 一起构成 Hadoop 生态圈,如图所示。
Hadoop 的核心包括用于分布式存储的 HDFS、用于分布式计算得 MapReduce,以及用于分布式资源管理的 YARN。
Impala: 开源的查询引擎。与 Hive 相同的元数据,SQL语法,ODBC 驱动程序和用户接口,可以直接在 HDFS 上提供快速交互式 SQL 查询。Impala 不再使用缓慢的 Hive + MapReduce 批处理,而是通过与商用并行关系数据库中类似的分布式查询引擎。
Presto:分布式的查询引擎,本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。Presto 的查询速度比 Hive 快 5-10 倍。
Hive:建立在 Hadoop 之上的数据仓库基础框架,可以将结构化的数据文件映射为一张数据库表,并定义了一种类 SQL 语言(HQL),让不熟悉 MapReduce 的开发人员也能编写数据查询语句来对大数据进行分析统计操作。Hive 的出现极大地降低了大数据技术的学习门槛,同时提高了开发效率。
Pig:基于 Hadoop 的大规模数据分析平台,它有一套叫做 Pig Latin 的类 SQL 语言,该语言的编译器会把类 SQL 的数据分析请求转换成一系列经过优化处理的 MapReduce 运算,处理的对象是 HDFS 上的文件。
在数据应用中,通常会有不同系统间的数据迁移操作。在 Hadoop 生态圈中,Sqoop 和 Flume 框架可以很好地解决不同系统间的数据收集和传输。
Sqoop:一款开源的工具,主要用在关系型数据库、数据仓库和 Hadoop 之间进行数据迁移。在实际应用中,可以使用 Sqoop 完成关系型数据库到 HDFS 、Hive 等框架的数据导入导出操作。
Flume:Cloudera 提供的一个高可用、高可靠、分布式的框架,主要用于分布式海量日志数据的高效搜集、聚合和传输。Flume 支持在日志系统中定制各类数据发送方,用于收集数据,同时 Flume 提供对数据进行简单处理并写入各种数据接收方的能力。
HBase:在 Hadoop 生态圈中,HBase 提供了 NoSQL 数据库的功能,用于满足大数据应用中快速随机访问大数据量(PB 量级)数据并及时响应用户的需求。
HBase 是建立在 HDFS 上的面向列的 NoSQL 数据库,可以对大规模数据进行随机、实时读/写访问。HBase 具有可伸缩、高可靠、高性能的特点。
目前,机器学习已经发展成为一个热门话题,Hadoop 生态圈中提供了 Mahout 库来完成机器学习功能。
Mahout 提供了一些可扩展的机器学习领域经典算法的实现,目的是帮助开发人员方便快捷地开发智能应用程序。Mahout 是一个机器学习和数据挖掘库,包括聚类、分类、推荐引擎(协同过滤)等数据挖掘方法,用户可以通过调用算法包来缩短编程时间。
Ambari:是一种基于 Web 的工具,支持 Apache Hadoop 集群的供应、管理和监控。Ambari 已支持大多数 Hadoop 组件,包括 HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop 和 Hcatalog 等。
HCatalog:Hadoop 的表存储管理工具。它将 Hive Metastore 的表格数据公开给其他 Hadoop 应用程序。使得具有不同数据处理工具(Pig,MapReduce)的用户能够轻松将数据写入网格。它确保用户不必担心数据存储在何处或以何种格式存储。
ZooKeeper:在 Hadoop 生态圈中,使用 ZooKeeper 框架来解决分布式环境下的数据管理问题,比如统一命名、状态同步和配置同步等。Hadoop 的大多数组件都依赖于 ZooKeeper,比如 HBase 的高可用就是通过 ZooKeeper 来实现的。
大数据实际应用中,通常会遇到多个作业协同完成一个业务分析的场景。这就需要一个能合理管理作业调度的框架,在 Hadoop 生态圈中,由 Oozie 负责解决任务调度问题。
Ooize 是一个工作流引擎,是基于 Hadoop 的调度器,可以调度 MapReduce、Pig、Hive、Spark 等不同类型的单一或者具有依赖性的作业。当一个作业中需要调度几个作业时,就可以使用 Ooize 将任务串联,再通过 Oozie 调度整个任务进程。
Hadoop 框架包括三个部分:分布式文件系统 HDFS、分布式计算框架 MapReduce、资源管理系统 YARN。
HDFS (Hadoop Distributed File System)是谷歌 GFS 的克隆版,是对谷歌 2003 年 10 月发表的 GFS 论文的开源实现。作为大数据领域的数据存储,HDFS 的设计目标就是提供一个具有高可靠性、高容错性、高吞吐量以及能运行在通用硬件上的分布式文件存储系统。
HDFS 的设计思想是将数据文件以指定的大小切分成数据块,将数据块以多副本的方式存储在多台机器上。这样的设计使 HDFS 可以更方便地做数据负载均衡以及容错,而且数据文件的切分、数据负载均衡和容错这些功能对用户都是透明的,用户在使用的时候,可以把 HDFS 当作普通的本地文件系统使用。
MapReduce 是 Hadoop 的核心计算框架,用于 PB 量级数据的并行计算。MapReduce 是一种简化应用程序开发的编程模型,模型中主要包括 Map(映射)和Reduce(规约)两项核心操作。MapReduce 编程模型为应用开发者隐藏了系统层实现细节,允许用户不必关注并行计算底层实现,只需按照 MapReduce API 的编程模型即可实现相应业务逻辑的开发。
当启动一个 MapReduce 任务时,作业会将输入的数据集切分成若干独立的数据块,由 Map 端将数据映射成需要的键值对类型,然后对 Map 的输出进行排序,再把结果输入 Reduce 端;Reduce 端接收 Map 端传过来的键值对类型的数据,根据不同键分组,对每一组键相同的数据进行处理,得到新的键值对并输出,这就是 MapReduce 的核心思想。通常 MapReduce 任务的输入和输出都是使用 HDFS 进行存储,也就是说,MapReduce 处理数据的大部分场景都存储在 HDFS 上。
YARN(Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器。在 Hadoop 1.x 版本中还没有 YARN,它的出现解决了 Hadoop 1.x 版本中 MapReduce 架构中 JobTracker 负载压力过大的问题,它将 JobTracker 的资源管理和作业调度拆分成两个独立的服务,分别为全局的资源管理器(ResourceManager)和每个应用程序特有的 ApplicationMaster。其中,ResourceManager 负责整个系统的资源管理和分配,而 ApplicationMaster 负责单个应用程序的管理。
YARN 是随着 Hadoop 的不断发展而催生的新框架,它的引入不仅解决了JobTracker 负载压力过大的问题,同时也解决了 Hadoop 1.x 中只能运行 MapReduce 作业的限制。YARN 作为一个通用的资源管理系统,允许在其上运行各种不同类型的作业,比如 MapReduce、Spark、Tez 等。
YARN 的引入,为 Hadoop 集群在利用率、资源统一管理和数据共享等方面带来了极大地提升。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。