`

Hadoop学习分享----入门概要介绍

 
阅读更多

一、什么是Hadoop?


  • 基于2003年google发表Map/Reduce 和 Google File System(GFS)论文研发。
  • 用java实现的HDFS(Hadoop分布式文件系统)+Map/Reduce(并行编程计算处理框架)。
  • 对大量数据进行分布式处理的软件框架。

 

二、Hadoop的优势


 1、高可靠性:

HDFS假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。MapReduce的任务监控保证了分布式处理的可靠性。

2、高效性:

Hadoop (M/R)是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。

3、高扩展性:

Hadoop可以扩展至数千个节点,对数据持续增长,数据量特别巨大的需求很合适。

4、低成本:

Hadoop是开源项目,而且不仅从软件上节约成本,硬件上的要求也不高。Hadoop生态群活跃,其周边开源项目丰富,HBase, Hive,Impala等等基础开源项目众多。

三、Hadoop的不足


1、不适合低延迟数据访问,不适合做实时数据分析。

2、无法高效存储大量小文件。

3、不支持多用户写入及任意修改文件。

四、Hadoop的两大核心子项目介绍


 (一)、HDFS简介

提供一个高效可用的分布式文件系统,具体如下:

1、可以创建、删除、移动或重命名文件,等等。
2、采用多个备份,保证单节点出现故障是,数据不会丢失。
3、是一个抽象的文件系统,实际的文件数据是分布在多个节点上。

 

HDFS的结构:



<1>、NameNode和Secondary NameNode介绍

NameNode:

  • 负责管理文件系统名称空间(Namespace)和控制外部客户机的访问。
  • 维护文件系统树(filesystem tree)以及文件树中所有的文件和文件目录信息的元数据(metadata)。
  • 是hadoop守护进程中最重要的一个,位于HDFS的主端,它跟踪文件如何被分割成文件块,而这些块又被哪些节点存储,以及分布式文件系统的整体运行状态是否正常。

Secondary NameNode:

  • 是一个用来监控HDFS状态的辅助后台程序。就想NameNode一样,每个集群都有一个Secondary  NameNode,并且部署在一个单独的服务器上。Secondary  NameNode不同于NameNode,它不接受或者记录任何实时的数据变化,但是,它会与NameNode进行通信,以便定期地保存HDFS元数据的快照。由于NameNode是单点的,通过Secondary  NameNode的快照功能,可以将NameNode的宕机时间和数据损失降低到最小。同时,如果NameNode发生问题,Secondary  NameNode可以及时地作为备用NameNode使用。


NameNode维护以上管理信息的四个重要的物理文件:

  • fsimage:二进制文件,存储HDFS的文件和目录元数据。格式如下:
  • edits:作为NameNode的变更日志,记录fsimage的变更信息,如创建/删除目录,创建/删除文件,修改权限,修改namespace/diskspace限额等。
  • fstime:记录最近一次checkpoint的时间,作为Secondary NameNode判断当前是否需要进行checkpoint的依据。
  • VERSION:记录namspaceID,作为整个namespace的唯一标识,DataNode也保存这个标识,在每次DataNode连接NameNode时都要检查,不一致的DataNode会被拒绝连接。

NameNode和secondary Namenode:

为什么会用这样的交互机制?

原因:

1.fsimage是存于硬盘的元数据检查点,Hadoop不会对每个文件操作都写出到fsimage,这样是很慢的,但是每个文件操作都会在提交后运行前先写入edits编辑日志,这样在namenode出现故障后,就会将fsimage和edits编辑日志结合读入内存,重建元数据信息。

 2.为了避免edits编辑日志的无限制扩大,secondary namenode 就回按照时间阈值(比如1小时)或者按大小阈值(edits编辑日志文件大小超过64M,这些参数都可以设置)“周期性”的读取namenode中的edits和fsimage重构fsimage检查点,同时在namenode中进行edits的滚动,来解决这个问题。

<2>、DataNode介绍

  • 提供数据存储空间,保存HDFS中的数据信息,它管理的是数据块(Block) 。
  • 响应来自 HDFS 客户端的读写请求,
  • 响应来自 NameNode 的创建、删除和复制块的命令。

当一个Datanode启动时,它会扫描本地文件系统,产生一个这些本地文件对应的所有HDFS数据块的列表,然后作为报告发送到Namenode,这个报告就是块状态报告。


<3>、Client介绍

  • 代表用户与namenode和datanode交互来访问整个文件系统。客户端提供了一些列的文件系统接口,因此我们在编程时,几乎无须知道datanode和namenode,即可完成我们所需要的功能。

<4>、Namenode,Datanode,Client之间的通信

  • Namenode,Datanode,Client之间的通信都是建立在TCP/IP的基础之上的。当Client要执行一个写入的操作的时候,命令不是马上就发送到Namenode,Client首先在本机上临时文件夹中缓存这些数据,当临时文件夹中的数据块达到了设定的Block的值(默认是64M)时,Client便会通知Namenode,Namenode便响应Client的RPC请求,将文件名插入文件系统中并且在Datanode中找到一块存放该数据的block,同时将该Datanode及对应的数据块信息告诉Client,Client便把这些本地临时文件夹中的数据块写入指定的数据节点。



(二)、Map/Reduce和计算任务框架介绍

<一>、Map/Reduce介绍

  • 提供了一套并发处理数据的接口
  • Map 函数接受一组数据并将其转换为一个键/值对列表,输入域中的每个元素对应一个键/值对。
  • Reduce 函数接受 Map 函数生成的列表,然后根据它们的键(为每个键生成一个键/值对)缩小键/值对列表。

 

执行计算流程图:


  • Map/Reduce的本质是用户需编程提供两个以Key/value方式操作的函数:

          f(map) ~ input_data    list (k1,v1)

          f(reduce) ~  (k1,list(v1))   result_data

  • Map/Reduce系统提供的隐藏操作有:

         将map结果list(k1,v1)重新分发,使同一个k1对应的数据(k1,list(v1))定向到同一个计算单元reducer。

 

例子:我们想要统计每个员工每天在开会上平均要花费多少时间。数据内容:employee, date, meeting_time。

  • 如果用sql,maybe:select employee, avg(meeting_time) from tablename group by employee.
  • 如果用map/reduce programming,maybe:map过程,把数据按<employee, meeting_time>分发;reduce过程,对同一个employee的meeting_time求平均,并输出<employee, avg(meeting_time)>




<二>、JobTracker和TaskTracker介绍:

JobTracker介绍:

JobTracker后台程序用来连接应用程序与Hadoop。用户代码提交到集群以后,由JobTracker决定哪个文件将被处理,并且为不同的task分配节点。同时,它还监控所有的task,一旦某个task失败了,JobTracker就会自动重新开启这个task,在大多数情况下这个task会被放在不用的节点上。每个Hadoop集群只有一个JobTracker,一般运行在集群的Master节点上。


TaskTracker介绍:

TaskTracker与负责存储数据的DataNode相结合,其处理结构上也遵循主/从架构。JobTracker位于主节点,统领 MapReduce工作;而TaskTrackers位于从节点,独立管理各自的task。每个TaskTracker负责独立执行具体的task,而 JobTracker负责分配task。虽然每个从节点仅有一个唯一的一个TaskTracker,但是每个TaskTracker可以产生多个java 虚拟机(JVM),用于并行处理多个map以及reduce任务。TaskTracker的一个重要职责就是与JobTracker交互。如果 JobTracker无法准时地获取TaskTracker提交的信息,JobTracker就判定TaskTracker已经崩溃,并将任务分配给其他 节点处理。







  

五、Hadoop其他重要子项目


 1、Hbase

  • Google Bigtable的开源实现
  • 列式数据库
  • 可集群化
  • 可以使用shell、web、api等多种方式访问,通过api函数对数据库进行操作
  • 适合高读写(insert)的场景:大量数据向数据库中写入,读出
  • HQL查询语言:Hbase Query Language
  • NoSQL的典型代表产品

2、Hive 蜂巢

  • 数据仓库工具,可以把hadoop下的原始结构化数据变成Hive中的表
  • 支持一种与SQL几乎完全相同的语言。除了不支持更新、索引和事务,几乎SQL的其它特征都能支持
  • 可以看成是从SQL到Map-Reduce的映射器
  • 提供shell,JDBC/ODBC,Thrift,Web等接口

3、Zookeeper动物园管理员:通信协调软件:Hbase数据节点之间的协调

  • Google Chubby的开源实现
  • 用于协调分布式系统上的各种服务。例如确认消息是否准确到达,,防止单点失效,处理负载均衡等
  • 应用场景:Hbase,实现Namenode自动切换
  • 工作原理:领导者,跟随者以及选举过程

4、Avro鹰

  • 数据序列化工具,由Hadoop的创始人Doug Cutting主持开发
  • 如:java中产生数据,存入磁盘,需要先序列化
  • 用于支持大批量数据交换的应用。支持二进制序列化方式,可以便捷,快速地处理大量数据
  • 动态语言友好,Avro提供的机制使动态语言可以方便地处理Avro数据
  • Thrift接口

5、Cassandra(没落于hbase)

  • NoSQL,分布式的Key-Value型数据库,由Facebook贡献给apache
  • 与Hbase类似,也是借鉴Google Bigtable的思想体系
  • 只有顺序写,没有随机写的设计,满足高负荷轻型的性能需求
分享到:
评论

相关推荐

    Hadoop的体系介绍

    hadoop的体系介绍:1,hadoop的快速入门;2,分布式的系统概述;3,离线分析系统概述;

    Hadoop-HDFS.xmind

    hadoop-hdfs快速入门 内容概要:HDFS是Apache Hadoop中的分布式文件系统,用于处理大规模数据集。它通过数据局部性原理减少网络传输,提高了系统效率;同时提供数据备份和自我修复机制,确保数据安全性和可靠性。 ...

    大数据开发的概要介绍与分析

    **书籍推荐**:《大数据原理与应用》、《Hadoop权威指南》、《Spark快速大数据分析》等书籍,从理论到实践,系统介绍了大数据技术栈的核心组件和应用案例,是深入学习的优质选择。 ### 技能树构建 1. **基础技能**...

    10G的python数据分析与挖掘实战学习视频

    内容概要:10G的Python数据分析与挖掘实战学习视频,包括了Python3数据科学入门与实战,大数据入门到实战篇(Hadoop2.80),Python3实战Spark大数据分析及调度,数据分析与数据挖掘高级实战案例 适合人群:具备一定...

    python量化投资学习视频.txt

    内容概要:5G的python量化投资学习学习,包括了Python数字货币量化投资课程,大数据入门到实战篇(Hadoop2.80),Python3实战Spark大数据分析及调度,数据分析与数据挖掘高级实战案例 适合人群:具备一定编程基础,...

    java的概要介绍与分析

    对于初学者,有大量的入门教程和在线课程,如Oracle官方教程、Codecademy和W3Schools等,它们提供了Java编程的基本概念、语法和常用API的介绍。 对于希望深入学习Java的开发者,有专业的书籍和高级课程可供选择。...

    大数据技术知识点概要

    对林子雨老师的大数据原理与应用课程的总结,基本是个人的理解,包括了对各个术语的解释。帮助读者入门大数据。

    Hbase中文文档

    1. 入门 1.1. 介绍 1.2. 快速开始 2. 配置 2.1. Java 2.2. 操作系统 2.3. Hadoop 2.4. HBase运行模式:单机和分布式 2.5. ZooKeeper 2.6. 配置文件 2.7. 配置示例 2.8. 重要配置 2.9. Bloom Filter 3. 升级 3.1. 从...

    Scala容器的核心编程.pdf

    JAVA 程序设计师的 SCALA 入门教学, 此教学将对 Scala 语言以及编译器做一个简易介绍。设定的读者为具有程设经验且想要看 Scala 功能概要的人。内文假设读者有着基本、特别是 Java 上的对象导向程设知识。

Global site tag (gtag.js) - Google Analytics