大数据系列文章-Hadoop基础介绍(一)
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,关于他的介绍就不罗列了,大家网上搜索下都能找到,总结下:
- 他就职于Yahoo期间,开发了Hadoop项目。而Hadoop项目是根据Google发布3篇的学术论文研究而来,既《Google File System》、《Google MapReduce 》、《Google BigTable》。
- 大名鼎鼎的Lucene、Nutch也是他弄出来的。
- 他目前在Cloudera公司担任首席架构师工作。
官方网站
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优点
- 高容错性
- 数据自动保存多个副本
- 副本丢失后,自动恢复
- 适合批处理
- 移动计算而非移动数据
- 数据位置暴漏给计算框架(Block偏移量)
- 适合大数据处理
- GB、TB、PB数据
- 百万规模以上的文件数量
- 10K+节点
- 可构建在廉价机器上
- 通过多副本,提升可靠性
- 提供了容错和恢复机制
HDFS缺点
- 低延迟数据访问
- 比如毫秒级
- 低延迟与高吞吐率
- 小文件存储
- 占用NameNode大量内存
- 寻找时间超过读取时间
- 并发写入、文件随机修改
- 一个文件只能有一个写入者
- 仅支持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基础介绍(一)的更多相关文章
- 大数据系列文章-Hadoop的HDFS读写流程(二)
在介绍HDFS读写流程时,先介绍下Block副本放置策略. Block副本放置策略 第一个副本:放置在上传文件的DataNode:如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点. 第二 ...
- 大数据系列之Hadoop框架
Hadoop框架中,有很多优秀的工具,帮助我们解决工作中的问题. Hadoop的位置 从上图可以看出,越往右,实时性越高,越往上,涉及到算法等越多. 越往上,越往右就越火…… Hadoop框架中一些简 ...
- 【大数据系列】hadoop核心组件-MapReduce
一.引入 hadoop的分布式计算框架(MapReduce是离线计算框架) 二.MapReduce设计理念 移动计算,而不是移动数据. Input HDFS先进行处理切成数据块(split) ma ...
- 【大数据系列】hadoop单机模式安装
一.添加用户和用户组 adduser hadoop 将hadoop用户添加进sudo用户组 sudo usermod -G sudo hadoop 或者 visudo 二.安装jdk 具体操作参考:c ...
- 【大数据系列】hadoop集群的配置
一.hadoop的配置文件分类 1.只读类型的默认文件 core-default.xml hdfs-default.xml mapred-default.xml mapred-que ...
- 大数据系列之Hadoop分布式集群部署
本节目的:搭建Hadoop分布式集群环境 环境准备 LZ用OS X系统 ,安装两台Linux虚拟机,Linux系统用的是CentOS6.5:Master Ip:10.211.55.3 ,Slave ...
- 【大数据系列】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 ...
- 【大数据系列】hadoop命令指导官方文档翻译
Hadoop Commands Guide Overview Shell Options Generic Options User Commands archive checknative class ...
- 【大数据系列】hadoop集群设置官方文档翻译
Hadoop Cluster Setup Purpose Prerequisites Installation Configuring Hadoop in Non-Secure Mode Config ...
随机推荐
- PHP Y2K38 (2038年) 问题
PHP 的 strtotime('2100-01-01'); 转换失败:经查询是因为32位系统的 Y2K38问题: Y2K38 问题:当时间大于 2038年01月19日03:14:07 时,strto ...
- xcode简单教程
1.使用Xcode软件.Xcode是一个苹果系统上的集成开发环境(IDE),就是说用Xcode就能编写C语言程序,并编译运行.也能开发ios程序等,是一种软件.在windows上类似这种能编c语言的还 ...
- XGBoost 原理及应用
xgboost原理及应用--转 1.背景 关于xgboost的原理网络上的资源很少,大多数还停留在应用层面,本文通过学习陈天奇博士的PPT地址和xgboost导读和实战 地址,希望对xgboost ...
- python:求整数的二进制表示
求解方法: 1.整数求余 2.重复进行,整数除2再求余,直到除数为0 3.拼接余数 4.反转字符串 def int2two(intNo): twoStr='' if intNo == 0: twoSt ...
- json对象转js对象
json数据: { "YD1": 0, "YD2": 0, "YD3": 0, "YD4": 0, "YD5& ...
- 通过werkzeug了解wsgi
Django有wsgi当做socket,而flask自身是没有wsgi的,他是通过werkzeug来实现的. 看源码 下面看下源码是如何实现的: #这是我们写的flask代码from flask im ...
- 0-python变量及基本数据类型
目录 1.变量2.字符串3.布尔类型4.整数5.浮点数6.日期 1.变量 1.1.变量的定义 - 类似于标签 1.2.变量的命名规则 - (强制)变量名只能包含数字.字母.下划线 - (强制)不能以数 ...
- django+uWSGI+nginx的工作原理流程与部署过程
django+uWSGI+nginx的工作原理流程与部署过程 一.前言 知识的分享,不应该只是展示出来,还应该解释这样做是为什么... 献给和我一样懵懂中不断汲取知识,进步的人们. 授人与鱼,不如授人 ...
- day03——整型、字符串、for循环
day03 整型 用于比较和运算 32位:-2 ** 31--2 ** 31-1 64位:-2 ** 63--2 ** 63-1 长整型(long) python2中有长整型.获取的是整数 pytho ...
- CLRS最大子数组问题
今天我们一起来看一下关于最大子数组的一些问题.最大子数组的应用场景可以是这样的:有一天,你搞了一场投资开始炒股,这时你就会想,我怎样才能获得最大的利润呢,最简单的想法就是我在股票的最低价时买入,然后在 ...