EagleBear2002 的博客

这里必须根绝一切犹豫,这里任何怯懦都无济于事

大数据分析-02-大数据平台

Hadoop

Hadoop 是一个开发和运行大规模数据分析程序的软件平台,隶属 Apache 的一个开源软件框架,在大量普通服务器组成的集群中对海量数据进行分布式计算。

主要模块:

  • Hadoop Common
  • Hadoop Distributed File System(HDFS)
  • Hadoop YARN
  • Hadoop MapReduce

Hadoop 计算过程

Hadoop 发展简史

  1. Hadoop 起源于 Apache Nutch,后者是一个开源的网络搜索擎,本身也是由 Lucene 项目的一部分。
  2. Nutch 项目开始于 2002 年,一个可工作的抓取工具和搜索系统很快浮出水面。
  3. 2004 年,Google 发表了论文,向全世界介绍了 MapReduce。
  4. 2005 年初,Nutch 的开发者在 Nutch 上有了一个可工作的 MapReduce 应用,到当年年中,所有主要的 Nutch 算法被移植到使用 MapReduce 和 NDFS 来运行。Nutch 中的 NDFS 和 MapReduce 实现的应用远不只是搜索领域。
  5. 在 2006 年 2 月,他们从 Nutch 转移出来成为一个独立的 Lucene 子项目,成为 Hadoop。
  6. 在 2008 年 2 月,雅虎宣布其搜索引擎产品部署在一个拥有 1 万个内核的 Hadoop 集群上。
  7. 2008 年 4 月,Hadoop 打破世界纪录,成为最快排序 1TB 数据的系统。运行在一个 910 节点的群集,Hadoop 在 209 秒内排序了 1TB 的数据(还不到三分半钟),击败了前一年的 297 秒冠军。同年 11 月,谷歌在报告中生成,它的 MapReduce 实现执行 1TB 数据的排序只用了 68 秒。在 2009 年 5 月,有报道宣称 Yahoo 的团队使用 Hadoop 对 1TB 的数据进行排序只花了 62 秒时间。

Hadoop 的作用与功能

Hadoop 采用了分布式存储方式,提高了读写速度,并扩大了存储容量。采用 MapReduce 来整合分布式文件系统上的数据,可保证分析和处理数据的高效。与此同时,Hadoop 还采用存储冗余数据的方式保证了数据的安全性。

Hadoop 中 HDFS 的高容错特性,以及它是基于 Java 语言开发的,这使得 Hadoop 可以部署在低廉的计算机集群中,同时不限于某个操作系统。Hadoop 中 HDFS 的数据管理能力,MapReduce 处理任务时的高效率,以及它的开源特性,使其在同类的分布式系统中大放异彩,并在众多行业和科研领域中被广泛采用。

MapReduce 和传统关系型数据库的比较

Hadoop 结论

二者互相融合是一种趋势

传统 RDBMS MapReduce
效率 低(通过排序和合并来重建数据库) 高(更新大部分数据库数据的效率高于 B 树的更新)
数据集特点 持续更新 数据被一次写入,多次读取
数据格式 结构化数据 非结构化或半结构化数据(避免规范化带来的非本地读问题)
应用领域 点查询、更新 批处理

Hadoop 的优点

Hadoop 是一个能够对大量数据进行分布式处理的软件框架,并且是以一种可靠、高效、可伸缩的方式进行处理的,具有以下优点:

  1. Hadoop 是可靠的:因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。
  2. Hadoop 是高效的:因为它以并行的方式工作,通过并行处理加快处理速度。
  3. Hadoop 是可伸缩的:能够处理 PB 级数据。
  4. Hadoop成本低:依赖于廉价服务器:因此它的成本比较低,任何人都可以使用。
  5. 运行在Linux 平台上:Hadoop 带有用 Java 语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。
  6. 支持多种编程语言:Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。

Hadoop 的生态圈

组件 描述
ZooKeeper 调度管理组件
Oozie 堆栈
Pig 对 MapReduce 进行抽象,可以理解为接口,被其他生态成员调用
Hive 类型于 SQL 的高级语言,直接在 Hadoop 上进行查询
Sqoop 迁移工具,主要进行迁移,数据集成
Flume Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume 支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume 提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
Mahout 提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序

Hadoop 体系结构

HDFS 和 MapReduce 是 Hadoop 的两大核心。而整个 Hadoop 的体系结构主要是通过 HDFS 来实现对分布式存储的底层支持的,并且它会通过 MapReduce 来实现对分布式并行任务处理的程序支持。

Hadoop 1 代架构 Hadoop 1 代 VS 2 代

Hadoop 开发流程

Hadoop 与分布式开发

MapReduce 计算模型非常适合在大量计算机组成的大规模集群上并行运行。每一个 map 任务和每一个 reduce 任务均可以同时运行于一个单独的计算节点上,可想而知,其运算效率是很高的。

并行计算过程:

  1. 数据分布存储
  2. 分布式并行计算
  3. 本地计算:是一种减少带宽消耗的方法
  4. 任务粒度:粒度下降,大的数据切分成小的数据,一个单位的数据尽量小于一个 Block 的大小,在一个节点上。
  5. 数据分割(Partition)
  6. 数据合并(Combine):可以理解成为是和 Reducer 一致的东西
  7. Reduce
  8. 任务管道

GFS 与 HDFS

  1. GFS:谷歌第一架马车
  2. name node 在 Hadoop 1.0 中进程崩溃会导致系统整个崩溃

HDFS 上的数据存储操作

  1. 适合大量的大文件
  2. 平均单个文件超过 500M
  3. 一次写入,多次读出
  4. 单个文件的内容不能被修改,除非在文件
  5. 末尾添加新的数据
  6. 可以做什么?
    1. 创建新文件
    2. 向文件末尾增加内容
    3. 删除一个文件
    4. 修改文件名
    5. 修改文件属性(如:拥有者)

HDFS 架构

  1. 使用了主从数据库
  2. Client 是用户访问数据的接口

HDFS 的冗余存储

HDFS 基本操作

  1. hadoop fs -ls /user/:显示 hdfs 指定路径下的文件和文件夹
  2. hadoop fs -putmy_file /data/:将本地文件上传到 hdfs
  3. hadoop fs -get /tmp/data/my_file:将 hdfs_上的文件下载到本地
  4. hadoop fs -cat /tmp/data/my_file:查着 dfs 中的文本文件内容
  5. hadoop fs -text /tmp/data/my_sequence_file:查着 dfs 中的 sequence 文件内容
  6. hadoop fs -rm /tmp/data/my_file:将 hdfs,上的文件删除

MapReduce

操作:Map、Reduce

数据流

按照管道的方式对数据流进程处理,将 Mapper 和 Reducer 放到单一节点上提高计算效率