大数据基础知识(二):了解hadoop原理

  • Post author:
  • Post category:其他


Hadoop

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。

用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。

Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。

优点

Hadoop是一个能够对大量数据进行

分布式处理



软件

框架。 Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理。

Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新

分布处理

Hadoop 是高效的,因为它以并行的方式工作,通过

并行处理

加快处理速度。

Hadoop 还是可伸缩的,能够处理

PB

级数据。

此外,Hadoop 依赖于社区服务,因此它的成本比较低,任何人都可以使用。

Hadoop是一个能够让用户轻松架构和使用的

分布式计算

平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的

应用程序

。它主要有以下几个优点:


    1. 高可靠性

      。Hadoop按位存储和处理数据的能力值得人们信赖。


    2. 高扩展性

      。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。


    3. 高效性

      。Hadoop能够在节点之间动态地移动数据,并保证各个节点的

      动态平衡

      ,因此处理速度非常快。


    4. 高容错性

      。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。


    5. 低成本

      。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。

Hadoop带有用

Java

语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的

应用程序

也可以使用其他语言编写,比如

C++


hadoop大数据处理的意义

Hadoop得以在大数据处理应用中广泛应用得益于其自身在数据提取、变形和加载(ETL)方面上的天然优势。Hadoop的分布式架构,将大数据处理引擎尽可能的靠近存储,对例如像ETL这样的批处理操作相对合适,因为类似这样操作的批处理结果可以直接走向存储。Hadoop的MapReduce功能实现了将单个任务打碎,并将碎片任务(Map)发送到多个节点上,之后再以单个数据集的形式加载(Reduce)到数据仓库里。



核心架构

Hadoop 由许多元素构成。其最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。HDFS(对于本文)的上一层是

MapReduce

引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心。

HDFS

对外部客户机而言,

HDFS

就像一个传统的分级文件系统。可以创建、删除、移动或

重命名

文件,等等。但是 HDFS 的架构是基于一组特定的节点构建的(参见图 1),这是由它自身的特点决定的。这些节点包括 NameNode(仅一个),它在 HDFS 内部提供元数据服务;DataNode,它为 HDFS 提供存储块。由于仅存在一个 NameNode,因此这是 HDFS 的一个缺点(单点失败)。

存储在 HDFS 中的文件被分成块,然后将这些块复制到多个计算机中(DataNode)。这与传统的 RAID 架构大不相同。块的大小(通常为 64MB)和复制的块数量在创建文件时由客户机决定。NameNode 可以控制所有文件操作。HDFS 内部的所有通信都基于标准的

TCP/IP

协议。

NameNode

NameNode 是一个通常在

HDFS

实例中的单独机器上运行的

软件

。它负责管理文件系统

名称空间

和控制外部客户机的访问。NameNode 决定是否将文件映射到 DataNode 上的复制块上。对于最常见的 3 个复制块,第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上。注意,这里需要您了解集群架构。

实际的 I/O

事务

并没有经过 NameNode,只有表示 DataNode 和块的文件映射的元数据经过 NameNode。当外部客户机发送请求要求创建文件时,NameNode 会以块标识和该块的第一个副本的 DataNode IP 地址作为响应。这个 NameNode 还会通知其他将要接收该块的副本的 DataNode。

NameNode 在一个称为 FsImage 的文件中存储所有关于文件系统

名称空间

的信息。这个文件和一个包含所有事务的

记录文件

(这里是 EditLog)将存储在 NameNode 的本地文件系统上。FsImage 和 EditLog 文件也需要复制副本,以防文件损坏或 NameNode 系统丢失。

NameNode本身不可避免地具有SPOF(Single Point Of Failure)单点失效的风险,主备模式并不能解决这个问题,通过Hadoop Non-stop namenode才能实现100% uptime可用时间。

DataNode

DataNode 也是一个通常在

HDFS

实例中的单独机器上运行的软件。Hadoop 集群包含一个 NameNode 和大量 DataNode。DataNode 通常以机架的形式组织,机架通过一个

交换机

将所有系统连接起来。Hadoop 的一个假设是:机架内部

节点

之间的传输速度快于机架间节点的传输速度。

DataNode 响应来自 HDFS 客户机的读写请求。它们还响应来自 NameNode 的创建、删除和复制块的命令。NameNode 依赖来自每个 DataNode 的定期心跳(heartbeat)消息。每条消息都包含一个块报告,NameNode 可以根据这个报告验证块映射和其他文件系统元数据。如果 DataNode 不能发送心跳消息,NameNode 将采取修复措施,重新复制在该节点上丢失的块。





子项目

Hadoop Common: 在0.20及以前的版本中,包含HDFS、MapReduce和其他项目公共内容,从0.21开始HDFS和MapReduce被分离为独立的子项目,其余内容为Hadoop Common



HDFS


: Hadoop

分布式文件系统

(Distributed File System) - HDFS (Hadoop Distributed File System)



MapReduce




并行计算

框架,0.20前使用 org.apache.hadoop.mapred 旧接口,0.20版本开始引入org.apache.hadoop.mapreduce的新API


HBase

: 类似Google BigTable的分布式NoSQL列数据库。(

HBase



Avro

已经于2010年5月成为顶级 Apache 项目)



Hive


:数据仓库工具,由Facebook贡献。



Zookeeper


:分布式锁设施,提供类似Google Chubby的功能,由Facebook贡献。


Avro

:新的数据序列化格式与传输工具,将逐步取代Hadoop原有的IPC机制。


Pig:

大数据分析平台,为用户提供多种接口。

Ambari:Hadoop管理工具,可以快捷的监控、部署、管理集群。

Sqoop:于在HADOOP与传统的数据库间进行数据的传递。



HDFS流程图

—————————————————————————————



版权声明:本文为taczeng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。