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. redis 链接

    一.redis启动: 本地启动:redis-cli 远程启动:redis-cli -h host -p port -a password 例如:redis-cli -h r-2mlmkmxu7.red ...

  2. Kafka限流

    1. 客户端认证 如果kafka客户端是认证的,那么可以使用userId和clientId两种认证方式.如果没有认证只能使用clientId限流. bin/kafka-configs. --alter ...

  3. [No000019A]IDEA 设置手册

    [No000019A]idea设置手册.rar IDEA 设置手册 IDEA 设置手册 plugin lgnore files and folesrs 代码管控 程序框架 部署方式 useless 3 ...

  4. [LeetCode] 737. Sentence Similarity II 句子相似度 II

    Given two sentences words1, words2 (each represented as an array of strings), and a list of similar ...

  5. sql server 2008 自动备份

    身份验证:包含Windows身份验证和 SQL Server身份验证,此处选择Windows 身份验证; 选择[管理]-->[维护计划]-->[维护计划向导] 必须启用代理服务(启动模式请 ...

  6. docker搭建samba共享目录

    需求:因同事需要共享文件夹来传输数据.整好接触docker,所以想用docker来搭建samber 系统:Centos7.4 docker搭建就不在赘述,如有需要请参考:https://www.jia ...

  7. spark 读写text,csv,json,parquet

    以下代码演示的是spark读取 text,csv,json,parquet格式的file 为dataframe, 将dataframe保存为对应格式的文件 package com.jason.spar ...

  8. linux 把nginx加入到系统服务的方法

    linux 把nginx加入到系统服务的方法一.首先写一个shell脚本,脚本名称:nginx<pre>#! /bin/bash# chkconfig: 35 85 15 # descri ...

  9. HBase 详解

    1.HBase 架构 ============================================ 2. HBase Shell 操作 2.1. 基本操作 进入HBase客户端命令行:bi ...

  10. 处理登录时,AJAX的状态码无权限情况

    $.ajaxSetup({ complete: function(XMLHttpRequest, textStatus) { }, error:function(jqXHR,textStatus,er ...