一、构成
Hadoop简介:
Apache Hadoop项目是可靠、可扩展的分布式计算开源软件;
Hadoop软件库是一个框架,允许使用简单的编程模型跨计算机集群分布式处理大型数据集;
狭义上说Hadoop是apache的一个顶级项目;
广义上说Hadoop就是Hadoop--生态圈。
Hadoop版本:
Hadoop发行版分为开源社区版和商业版,社区版指由apache软件基金会维护的版本,是官方维护的版本体系;商业版是由第三方公司在社区版的基础上进行了一些修改整合以及各个组件兼容性测试而发行的版本,比较著名的有cloudra的CDH、Map R、DK Hadoop等。
Hadoop主要有四个构成部分
1、基础核心Common:提供基础的通用功能
2、HDFS:分布式存储
3、MapReduce:分布式计算
4、Yarn:资源分配(任务的执行方式)
除四个主要构成部分外,还有:
Hadoop Ozone:Hadoop的对象存储;
Hadoop Submarine:Hadoop的机器学习引擎;
Hadoop优点
1、高可靠性:按位存储和处理数据的能力值得信赖;
2、高可拓展性:在可用的计算机集簇间分配数据并完成计算任务,集簇可扩展到数以千记的节点中,可以处理不同级别的数据,大到可以处理PB级数据;
3、高容错性:自动保存数据的多个副本,自动将失败的任务重新分配;
4、高效性:能够在节点中动态的移动数据,保证各个节点的动态平衡,并且处理速度很快,其工作方式为并行;
5、低成本性:Hadoop是开源的,可运行在廉价的机器上。
Hadoop缺点
1、不适合低延迟数据访问;
2、无法高效存储大量小文件;
3、不支持多用户写入及任意修改文件。
1、HDFS的构成
主要分为三个节点:
NameNode:管理节点,存放文件原数据,主要包括文件和数据块的映射表、数据块与数据节点的映射表,即数据的存放地址等。
DataNode:工作节点,存放数据块即数据;
SecondaryNameNode:辅助NameNode,将原数据持久化到磁盘中。
1、NameNode
功能:
1、存储数据的分布位置、数据的各种描述信息(如文件名、文件大小、文件所在目录、所有者名称、读写执行权限等)
2、读数据时,要先从NameNode获取文件的分布位置(在哪些DataNode上),然后再从DataNode上读数据(当然,这个过程已经由HDFS的Shell或API实现了)
3、处理客户端的读写请求.写数据时,先向NameNode提交要写的文件的信息,NameNode检查自己的记录表,以找到合适的DataNode(需要找多个,因为每个文件还要创建副本)来存储这些数据,然后指挥这些DataNode串成一串接收数据。如果某个DataNode在接收数据时罢工,则忽略掉它(忽略之后造成的副本数少于指定数量会在后期补加副本);如果所有选出的DataNode全挂掉(几率很低),则写入失败。
4、管理HDFS文件系统的命名空间.需要时,可以调用NameNode列出HDFS中的文件夹及文件(如执行 hdfs dfs -ls / 命令时)。
5、管理副本的配置和信息(默认三个副本)
元数据的存储位置
由配置文件hdfs-site.xml中的dfs.namenode.name.dir指定
dfs.namenode.name.dir的默认值是file://${hadoop.tmp.dir}/dfs/name
{user.name}
${user.name}是安装Hadoop的用户名
配置时可以在core-site.xml中修改${hadoop.tmp.dir}
持久化的元数据
元数据目录下的文件:
1 [root@izj6cj3wje0m1jxumjkuelz current]# pwd
2 /export/hadoop/tmp/dfs/name/current
3 [root@izj6cj3wje0m1jxumjkuelz current]# ls
4 edits_0000000000000000001-0000000000000000002 fsimage_0000000000000000057
6 edits_0000000000000000003-0000000000000000053 fsimage_0000000000000000057.md5
7 edits_0000000000000000054-0000000000000000055 fsimage_0000000000000000059
8 edits_0000000000000000056-0000000000000000057 fsimage_0000000000000000059.md5
9 edits_0000000000000000058-0000000000000000059 seen_txid
10 edits_inprogress_0000000000000000060 VERSION
由于需要快速查询,NameNode的元数据运行时是加载在内存中的,关闭时内存中的数据会持久化到硬盘中fsimages文件.同时HDFS集群也会将所有的操作都记录到edits文件中
内存元数据 == fsimage + edits
其他fsimage.md5是校验文件,用于校验fsimage的完整性
seen_txid是hadoop的版本
VERSION里存储的namespaceID:NameNode的唯一ID,clusterID:集群ID,NameNode和DataNode的集群ID应该一致,表明是一个集群
2、SecondaryNameNode
功能
1、NameNode的热备节点,有故障时可以快速切换到SecondaryNameNode
2、周期性同步edits编辑日志,定期合并fsimage和edits到本地磁盘
生产环境中NameNode会长时间运行,几乎不关闭。而内存中的元数据是在NameNode关闭时进行持久化的。这样生产环境中内存元数据与持久化元数据差异就会越来越大,会导致生成大量的edits文件,NameNode重启速度变慢.
SecondaryNameNode会将NameNode中产生的fsimage和edits下载过来,执行合并生成新的fsimage,然后把新的fsimage再重新发回NameNode,这样NameNode中的持久化元数据就能与内存中的元数据一致或非常接近了,edits文件的数量大大减少
3、JournalNide
功能
1、NameNode在文件系统被修改时,会向JournalNode写入操作日志(edits)
2、SecondaryNameNode同步JournalNode的edits日志,使集群中的更新操作可以被共享和同步
3、可以被NameNode和SecondaryNameNode同时访问,用以支持NameNode高可用
4、DataNode
功能
1、负责存储数据块和数据块校验
2、处理客户端的读写请求
3、通过心跳机制定期向NameNode汇报运行状态和本地所有块的列表信息
4、在集群启动时DataNode项NameNode提供存储Block块的列表信息
Block数据块
·HDSF固定的最小的存储单元(默认128M,可配置修改)
·写入到HDFS的文件会被切分成Block数据块(若文件大小小于数据块大小,则不会占用整个数据块)
·默认配置下,每个block有三个副本
二、生态体系简介
https://blog.csdn.net/wdr2003/article/details/79692886
https://blog.csdn.net/welun521/article/details/90476879
HDFS:虚拟文件系统,即一个文件可能被存于多台机器上
YARN、MapReduce(MR):MapeReduce是分布式计算模型,程序人员只需在Mapper、Reducer中编写业务逻辑,交由框架进行分布式计算即可;yarn则是负责海量数据运算时的资源调度。
spark:快速通用的计算引擎,专门为大数据处理而设计。
sqoop:是SQL-to-Hadoop的缩写,主要用于传统数据库与hadoop之间的数据传输
Hbase:源自google的bigtable论文。是分布式列存数据库,不同于一般的数据库,适合于存储非结构化的数据。
Mahout:数据挖掘算法库,主要目的是创建一些可扩展的机器学习领域经典算法的实现
Zookeeper:分布式协作服务。主要解决分布式环境下数据管理问题,统一命名,状态同步,集群管理,配置同步等。
pig:基于Hadoop的数据流系统。基于MapReduce的ad-hoc(计算在query时发生)数据分析工具
Hive:基于Hadoop的数据仓库。最初用于解决海量结构化的日志数据统计问题。
Flume:日志收集工具,Cloudera开源的日志收集系统,具有分布式、高可靠、高容错、易于定制和扩展的特点。