Hadoop项目背景简介

  • 2003-2004年,Google公开了部分GFS个Mapreduce思想的细节,以此为基础Doug Cutting等人用了2年的业余时间,实现了DFS和Mapreduce机制,一个微缩版:Nutch
  • 名字来源于Doug Cutting儿子的玩具大象
  • Hadoop于2005年秋天作为Lucene的子项目Nutch的一不分正式引入Apahce基金会。2006年3月份,Map-Reduce和Nutch Distributed File System(NDFS)分别被纳入称为Hadoop的项目

Hadoop之父

Hadoop之父是Doug Cutting,关于他的介绍就不罗列了,大家网上搜索下都能找到,总结下:

  1. 他就职于Yahoo期间,开发了Hadoop项目。而Hadoop项目是根据Google发布3篇的学术论文研究而来,既《Google File System》、《Google MapReduce 》、《Google BigTable》。
  2. 大名鼎鼎的Lucene、Nutch也是他弄出来的。
  3. 他目前在Cloudera公司担任首席架构师工作。

官方网站

http://hadoop.apache.org/

Hadoop六大模块

  • Hadoop Common: 支持其他Hadoop模块的实用常用程序。
  • Hadoop Distributed File System (HDFS™): 一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。
  • Hadoop YARN: 作业调度和集群资源管理的框架。
  • Hadoop MapReduce:基于yarn系统,用于并行处理大型数据集。
  • Hadoop Ozone: 用于Hadoop的对象存储。
  • Hadoop Submarine:Hadoop的机器学习引擎

Apache的其他Hadoop相关项目

  • Ambari™: 一个基于web的工具,用于配置、管理和监视Apache Hadoop集群。
  • Avro™: 一种数据序列化系统。
  • Cassandra™: 一套开源分布式NoSQL数据库系统。
  • Chukwa™: 用于管理大型分布式系统的数据收集系统。
  • HBase™: 一个可伸缩的分布式数据库,支持大表的结构化数据存储。
  • Hive™: 一种数据仓库基础设施,提供数据摘要和特殊查询。
  • Mahout™: 一个可伸缩的机器学习和数据挖掘库。
  • Pig™: 用于并行计算的高级数据流语言和执行框架。
  • Spark™: Hadoop数据的快速通用计算引擎。Spark提供了一个简单而富有表现力的编程模型,支持广泛的应用程序,包括ETL、机器学习、流处理和图形计算。
  • Tez™: 针对Hadoop数据处理应用程序的新分布式执行框架,它提供了一个强大而灵活的引擎来执行任意的DAG任务来处理批处理和交互用例的数据。
  • ZooKeeper™: 分布式应用程序的高性能协调服务。

Hadoop-HDFS

存储模型

  • 将文件线性切割成块(Block)
  • Block分散存储在集群节点中
  • 单个文件Block大小一致,文件于文件可以不一致
  • Block可以设置副本数,副本散在不同节点中
  • 文件上传可以设置Block大小和副本数
  • 已上传的文件Block副本数可以调整,大小不变
  • 只支持一次写入多次读取,同一时刻只能有一个写入者
  • 可以用append追加数据

架构模型

  • 文件元数据MetaData,文件数据(元数据和数据本身)

    • 元数据,描述文件的,例如文件大小多大,所述者信息等
    • 数据本身
  • (主)NameNode节点保存文件元数据
  • (从)DataNode节点保存文件Block数据
  • DataNode与NameNode保持心跳,提交Block列表(这里的心跳指的是DataNode会周期性的给NameNode提交数据包,报告DataNode节点状态以及Block列表)
  • HdfsClient与NameNode交互元数据信息
  • HdfsClient与DataNode交互文件Block数据

HDFS架构图


简单介绍下这个HDFS架构图,后面会详细介绍读写流程,所以这里只是带大家简单理解下。

  • 最底层是DataNode,用于存储具体的数据,在往上是NameNode,用于存储数据的元信息。
  • 读数据:HDFSClient(Client)先发请求,去NameNode中查找文件元信息,看看这个文件都存储在哪些DataNode节点上,NameNode把这个数据存储的节点信息告知HDFSClient后,HDFSClient去各个DataNode上拿数据。
  • 写数据:HDFSClient(Client)先发请求,去NameNode中查找文件元信息,NameNode会看看哪些节点存活,可以写到哪些节点上,然后NameNode把这些信息发送给HDFSClient,HDFSClient将数据直接存储到这些节点上。等到文件全部写入完成后,文件才可用(这里要特别说明一点,并不是把数据直接发到NameNode上,由NameNode进行存储分发)

HDFS设计思想


例如一个文件50GB,按照64MB切块的话,切成若干个64MB大小的块。这些块是有副本概念,例如block1,会在不同的Server节点上都有其副本。右上角是描述清单,也就是所谓的原数据,存在NameNode进程中去,其中block1:node1,node2,node3,表示block1的位置信息。

HDFS优点

  1. 高容错性

    • 数据自动保存多个副本
    • 副本丢失后,自动恢复
  2. 适合批处理
    • 移动计算而非移动数据
    • 数据位置暴漏给计算框架(Block偏移量)
  3. 适合大数据处理
    • GB、TB、PB数据
    • 百万规模以上的文件数量
    • 10K+节点
  4. 可构建在廉价机器上
    • 通过多副本,提升可靠性
    • 提供了容错和恢复机制

HDFS缺点

  1. 低延迟数据访问

    • 比如毫秒级
    • 低延迟与高吞吐率
  2. 小文件存储
    • 占用NameNode大量内存
    • 寻找时间超过读取时间
  3. 并发写入、文件随机修改
    • 一个文件只能有一个写入者
    • 仅支持append追加

Hadoop架构中的角色

NameNode(NN)

  • 基于内存存储
  • 主要功能:
    • 接受客户端的读写服务
    • 收集DataNode汇报的Block列表信息
  • NameNode保存metadata信息包括
    • 文件大小,时间
    • Block列表,Block偏移量,位置信息
    • Block每个副本位置(由DataNode上报)

DataNode(DN)

  • 本地磁盘目录存储数据(Block),文件形式
  • 同时存储Block的元数据信息文件(这里的元数据非NameNode源数据文件,只是DataNode这个角色为这个Block块创建的小的元数据文件,具体存的是对Block的校验和,例如MD5,哈希值等,以保证合并数据时数据的完整性。)
  • 启动DataNode时会向NameNode汇报Block信息
  • 通过向NameNode发送心跳保持联系(3秒一次),如果NameNode10分钟没有收到DataNode心跳,则认为已经lost,并copy其上的Block到其他的DataNode上

Secondary NameNode(SNN)

  • 为NameNode上的数据创建周期性检查点的节点
  • 周期性地下载当前NameNode fsimage和edit logs文件,将edit logs和fsimage文件合并为一个新的fsimage文件然后上传到NameNode中
  • 它不是要取代掉NameNode也不是NameNode的备份

后记

下次,我们将详细介绍HDFS读写流程,敬请期待。
(转发请注明出处:http://www.cnblogs.com/zhangyongli2011/ 如发现有错,请留言,谢谢)

大数据系列文章-Hadoop基础介绍(一)的更多相关文章

  1. 大数据系列文章-Hadoop的HDFS读写流程(二)

    在介绍HDFS读写流程时,先介绍下Block副本放置策略. Block副本放置策略 第一个副本:放置在上传文件的DataNode:如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点. 第二 ...

  2. 大数据系列之Hadoop框架

    Hadoop框架中,有很多优秀的工具,帮助我们解决工作中的问题. Hadoop的位置 从上图可以看出,越往右,实时性越高,越往上,涉及到算法等越多. 越往上,越往右就越火…… Hadoop框架中一些简 ...

  3. 【大数据系列】hadoop核心组件-MapReduce

    一.引入 hadoop的分布式计算框架(MapReduce是离线计算框架) 二.MapReduce设计理念 移动计算,而不是移动数据. Input HDFS先进行处理切成数据块(split)   ma ...

  4. 【大数据系列】hadoop单机模式安装

    一.添加用户和用户组 adduser hadoop 将hadoop用户添加进sudo用户组 sudo usermod -G sudo hadoop 或者 visudo 二.安装jdk 具体操作参考:c ...

  5. 【大数据系列】hadoop集群的配置

    一.hadoop的配置文件分类 1.只读类型的默认文件 core-default.xml     hdfs-default.xml    mapred-default.xml   mapred-que ...

  6. 大数据系列之Hadoop分布式集群部署

    本节目的:搭建Hadoop分布式集群环境 环境准备 LZ用OS X系统 ,安装两台Linux虚拟机,Linux系统用的是CentOS6.5:Master Ip:10.211.55.3 ,Slave ...

  7. 【大数据系列】hadoop上传文件报错_COPYING_ could only be replicated to 0 nodes

    使用hadoop上传文件 hdfs dfs -put  XXX 17/12/08 17:00:39 WARN hdfs.DFSClient: DataStreamer Exception org.ap ...

  8. 【大数据系列】hadoop命令指导官方文档翻译

    Hadoop Commands Guide Overview Shell Options Generic Options User Commands archive checknative class ...

  9. 【大数据系列】hadoop集群设置官方文档翻译

    Hadoop Cluster Setup Purpose Prerequisites Installation Configuring Hadoop in Non-Secure Mode Config ...

随机推荐

  1. EV录屏 --- 免费无水印,集视频录制与直播功能于一身的桌面录屏软件, 支持录屏涂鸦、实时按键显示、视频体积压缩等实用功能

    https://www.ieway.cn/index.html 免费无水印,集视频录制与直播功能于一身的桌面录屏软件,支持录屏涂鸦.实时按键显示.视频体积压缩等实用功能 EVCapture 3.9.7 ...

  2. CentOS6非root用户下安装及配置CDH5.3.0

    #install lsb packagesudo yum install -y redhat-lsb #install net-tools package sudo yum install -y ne ...

  3. Intelij idea 中文字体渲染异常解决方法

    当 Font 选择的字体无法渲染时,则尝试使用该选项所选择的字体渲染.

  4. git解决error: The following untracked working tree files would be overwritten by checkout

    在IDEA中进行分支切换时,出现如此错误,导致无法正常切换:error: The following untracked working tree files would be overwritten ...

  5. shell中的shift左移参数命令

    shift命令用于对参数的向左移动,通常用于在不知道传入参数个数的情况下依次遍历每个参数,然后进行相应的处理(常见与Linux中各种程序的启动脚本).在扫描处理脚本程序的参数时,经常要用到shift命 ...

  6. oracle 高级用法, DECODE 排序, OVER(PARTITION BY X ORDER BY Y DESC) 开窗函数

    场景 01 (IN 语句 排序 decode() 函数): 1,我们在查询中会经常使用这样的用法, select * from table_name t where t.id in (1, 3, 7, ...

  7. 华为交换机trunk端口更改access提示:Error: Please renew the default configurations.

    现象: 华为交换机接口由原来 trunk 接口更改 access 提示 Error: Please renew the default configurations. 解决方法: 在交换机视图模式下, ...

  8. Git GUI,Git Bash,Git CMD之间的区别

    Git GUI,Git Bash,Git CMD之间的区别 Git Bash: Bash,Unix shell的一种,Linux与Mac OS X v10.4都将它作为默认shell.Git Bash ...

  9. C++构造和解析JSON

    JSON是一种轻量级的数据交互格式,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率,实际项目中经常用到,相比xml有很多优点,问问度娘,优点一箩筐. 第三方库 json解析选用j ...

  10. c++11多线程记录5: Unique Lock和延时初始化

    https://www.youtube.com/user/BoQianTheProgrammer 视频网址 Unique Lock unique_lock和lock_guard类似,都是mutex的w ...