Hadoop,HDFS原理入门

Hadoop概述

 - 		Apache Hadoop官方定义是:Hadoop项目是一套可靠的,可扩展的,支持分布式计算的开源软件。
   		Hadoop的设计规模从单一服务器到数千台机器,每个都提供本地计算和存储,框架本身提供计算机集群高可用的服务而不是依靠硬件来提供高可用性。
    	Hadoop是一个基础框架,允许用简单的编程模型在计算机集群对大型数据集使进行分布式处理。
    	用户可以在不了解分布式底层细节的情况下,轻松地在Hadoop上开发和运行处理海量数据的应用程序。

Hadoop:生态圈

在这里插入图片描述

Hadoop:主要项目介绍

	HDFS:Hadoop分布式文件系统(Hadoop Distributed File System ),分布式文件系统,提供了高吞吐量的访问应用程序数据。
	Hadoop YARN:Hadoop集群资源管理框架(Yet Another Resource Negotiator),用于作业调度和集群资源管理。
	Hadoop MapReduce:基于YARN的大数据集的并行处理系统。
	Ambari:是一个部署、管理和监视Apache Hadoop集群的开源框架,它提供一个直观的操作工具和一个健壮的Hadoop API,可以隐藏复杂的Hadoop操作,使集群操作大大简化。
	HBase:可扩展的分布式列式数据库,支持大表的结构化存储。
	Hive:分布式数据仓库系统,提供基于类SQL的查询语言。
	Sqoop:关系型数据库与和Hadoop系统之间进行数据传输工具。
	ZooKeeper:提供Hadoop集群高性能的分布式的协调服务。

Hadoop:引入原因

	传统文件系统最大的问题是容量和吞吐量的限制
	多用户多应用的并行读写是分布式文件系统产生的根源
	一块硬盘的读写性能,比不上多块硬盘同时读写的性能
	1 HDD=75MB/sec
	1000 HDDs = 75GB/sec
	扩充存储空间的成本低廉
	可提供冗余备份
	可以为分布式计算提供基础
		归结为:
		(1)	硬件发展的趋势
		(2)	大数据的问题
		(3)	并行计算和分布式计算

Hadoop:优势与不足

	1.存储PB级以上数据
	2.处理非结构化数据
	3.注重数据处理的吞吐量
	4.不建议存储海量小文件
	5.无法随机读,无法修改

Hadoop:技术特点

	扩容能力(Scalable):能可靠地(reliably)存储和处理千兆字节(PB)数据
	成本低(Economical):可以通过普通机器组成的服务器群来分发以及处理数据。这些服务器群总计可达数千个节点
	高效率(Efficient):通过分发数据,hadoop可以在数据所在的节点上并行地(parallel)处理它们,这使得处理非常的快速
	可靠性(Reliable):hadoop能自动地维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务

HDFS基本概念与实现原理

Hadoop:HDFS架构图

在这里插入图片描述

Hadoop:HDFS基本概念

		1.	数据块 
		2.	元数据 
		3.	NameNode 
		4.	DataNode 
		5.	客户端

Hadoop:块的概念

      在传统的块存储介质中,块是读写的最小数据单位 (扇区)。传统文件系统基于存储块进行操作。为了节省文件分配表空间,会对物理存储块进行整合,一般大小为4096字节
	HDFS也使用了块的概念,但是默认大小设为128M字节
	HDFS将一个文件分为一个或数个块来存储,以块为单位在集群服务器上分配存储,每个块是一个独立的存储单位,
	与传统文件系统不同的是,如果实际数据没有达到块大小,则并不实际占用磁盘空间
	如果一个文件是300M,则它会被分为3个块: 128+128+4

在这里插入图片描述

Hadoop:块的好处

当一个文件大于集群中任意一个磁盘的时候,文件系统可以充分利用集群中所有的磁盘
管理块使底层的存储子系统相对简单
块更加适合备份,从而为容错和高可用性的实现带来方便

Hadoop:HDFS元数据

	元数据包括
		文件系统目录树信息
				1.	 文件名,目录名
				2.	 文件和目录的从属关系、大小、权限、创建时间以及最后访问时间
				3. 配额
			文件和块的对应关系
				1. 文件由哪些块组成
			块的存放位置
				1 机器名,块ID
	
	元数据持久化
		1.操作日志(Edit Log):记录文件创建、删除,修改文件属性等操作。
		2.	FSImage(HDFS元数据镜像文件):完整的命名空间;File Block映射关系;文件属性。

在这里插入图片描述

Hadoop:NameNode

	负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。
	副本存放在哪些DataNode上是由NameNode来控制,根据全局情况决定块的放置,读取文件时NameNode尽量让用户先读取最近的副本,降低带宽消耗和读取时延。
	Namenode全权管理数据块的复制,它周期性地从集群中的每个Datanode接收心跳信号和块状态报告(Blockreport)。接收到心跳信号意味着该Datanode节点工作正常。块状态报告包含了一个该Datanode上所有数据块的列表。

Hadoop:HDFS高可用

	在Hadoop2.0之前,Namenode是HDFS集群中可能发生单点故障的节点,每个HDFS集群只有一个namenode,一旦这个节点不可用,则整个HDFS集群将处于不可用状态。 
	HDFS高可用(HA)方案就是为了解决上述问题而产生的,在HA HDFS集群中会同时运行两个Namenode,一个作为活动的Namenode(Active),一个作为备份的Namenode(Standby)。备份的Namenode的命名空间与活动的Namenode是实时同步的,所以当活动的Namenode发生故障而停止服务时,备份Namenode可以立即切换为活动状态,而不影响HDFS集群服务。

在这里插入图片描述

Hadoop:DataNode

	一个数据块在DataNode以文件存储在磁盘上,包括是数据本身和元数据,元数据包括数据块的长度、块数据的校验和、以及时间戳
	DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。 
	心跳是每3秒一次,心跳返回结果带有NameNode下达给DataNode的命令。如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode 的心跳,则认为该节点不可用。

Hadoop:HDFS客户端

	需要访问HDFS文件服务的用户或应用
	命令行客户端
	同一个Hadoop安装包
	API客户端
	Java库

Hadoop:文件写入-准备阶段

	规则:每块数据3份拷贝,总有两份存在同一个机架上,另外一份则必须放到另一个机架上。
	1)由名称节点Rack wareness列表确定第一个Data Node 1,打开TCP协议并通知其准备接收数据。
	2)再由Data Node 1 将信息传达到Data Node 5,接着Data Node 5 传达到Data Node 6,确保已经准备就绪。
	3)最终,Client接收到Data Node 1回传的Ready消息,至此Client才真正的准备在集群中加载数据块。

在这里插入图片描述

Hadoop:文件写入-打通同步通道

  当数据块写入集群后,3个(数据节点副本个数参照配置文件的设置)数据节点将打开一个同步通道。这就意味着,当一个数据节点接收到数据后,它同时将在通道中给下一个数据节点送上一份拷贝。
  第二个和第三个数据节点运输在同一个机架中,这样他们之间的传输就获得了高带宽和低延时。直到这个数据块被成功的写入3个节点中。

在这里插入图片描述

Hadoop:文件写入-载入成功

   当3个节点都成功的接收到数据块后,他们将给名称节点发送个“Block Received”报告。并向通道返回“Success”消息,然后关闭TCP回话。
    Client收到成功接收的消息后会报告给NameNode报告数据已成功写入。NameNode将会更新它元数据中的节点位置信息。Client将会开启下一个数据块的处理通道,直到所有的数据块都写入数据节点。

Hadoop:副本摆放策略

第一个block副本放在client所在的datanode(如果client不在集群范围内,则这个datanode随机选取,当然系统会尝试不选择哪些太满或者太忙的datanode)。 
第二个副本放置在与第一个datanode不同机架中的datanode上(随机选择)。
第三个副本和第二个副本在同一个机架中,随机放在不同的datanode上。
如果还有更多的副本就随机放在集群的datanode上。

在这里插入图片描述

Hadoop:读取文件

(1) 使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;
(2) Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namenode都会返回有该block拷贝的DataNode地址;
(3) 客户端开发库Client会选取离客户端最接近的DataNode来读取block;如果客户端本身就是DataNode,那么将从本地直接获取数据.
(4) 读取完当前block的数据后,关闭与当前的DataNode连接,并为读取下一个block寻找最佳的DataNode;读取完一个block都会进行checksum验证,如果读取datanode时出现错误,客户端会通知Namenode,然后再从下一个拥有该block的datanode继续读。
(5) 当读完列表的block后,且文件读取还没有结束,客户端开发库会继续向Namenode获取下一批的block列表。
在这里插入图片描述

MapReduce基本概念

	MapReduce是一套可编程的框架。提供计算任务的自动并行化机制,使用分发-收集的并行策略,
	Map阶段处理(无依赖的)原始输入
	Reduce阶段处理依赖关系(按Key依赖)。

在这里插入图片描述

MapReduce特性

		    处理海量数据(>1TB)
			上百/上千CPU实现并行处理
			简单地实现以上目的
			移动计算比移动数据更划算
  • 思想:分而治之(Divide and Conquer)

     		自动实现分布式并行计算
     		容错
     		只有当map处理全部结束后,reduce过程才能够开始
    

Hadoop:Reduce举例

在这里插入图片描述
Hadoop:多个Reduce处理
在这里插入图片描述

Hbase基本概念

        Hbase是一个构建在Hadoop和ZooKeeper之上的分布式,版本化(versioned)、高可靠性、高性能、面向列、可伸缩、实时读写的列存储数据库系统。

在这里插入图片描述

Hadoop:Hbase特点

		1.面向列(族)的存储和权限控制,列(族)独立检索
		2.数据类型单一,皆为字符串
		3.同一行的读写只在同一region server上进行
		4.同一行的列写入是原子的
		5.单rowkey完全匹配查询,rowkey范围查询和全表scan
		6.单表数亿行,数百万列
		7.空列并不占存储空间,表可以设计得非常稀疏
		8.字段值保留历史版本
		9.增加DN扩量、添加region server机器增加读写吞吐量
		10.表为三维有序的逻辑结构

Hadoop:Hbase逻辑结构

			Client
		    -- 使用HBase RPC机制与HMaster和HRegionServer进行通信
		    -- Client与HMaster进行通信进行管理类操作
		    -- Client与HRegionServer进行数据读写类操作
			Zookeeper
		    -- Zookeeper Quorum存储-Meta-表地址、HMaster地址
		    -- HRegionServer注册到Zookeeper中,将HRegionServer的上下线信息实时通知给HMaster
		    -- Zookeeper避免HMaster单点问题
			HMaster
		    -- 为Region Server分配region
		    -- 负责Region Server的负载均衡
		    -- 发现失效的Region Server并重新分配其上的region
		    -- 管理用户对table的增删改查操作
			Region Server
		    -- Region Server维护region,处理对这些region的I/O请求
		    -- Region Server负责切分在运行过程中变得过大的region

在这里插入图片描述

Hadoop:Hbase存储结构

在这里插入图片描述

	①	cell值由rowkey+column family+column qualifier+timestamp确定
	②	一张表可以有多个列族,每个column family可以自由扩展多个   column qualifier
	③	当修改column qualifier值时候新值会覆盖旧值,并以timestamp区分

Hadoop:Hbase行键

	检索记录的主键。
	访问行三种方式:通过单个Row Key、通过Row Key的range、全表扫描。
	可以是任意字符串(最大长度为64KB,实际应用中长度一般是10-100bytes),在内部保存为字节数组。
	存储时,数据按照Row Key的字典序(Bytes Order)排序存储。

Hadoop:Hbase列族

	HBase表中的每个列,都归属于某个列族。
	列族是表的Schema的一部分(列不是),必须在使用表之前定义。
	列名以列族名作为前缀。
	访问控制、内存和磁盘的使用统计都是在列族层面进行的。

Hadoop:Hbase cell

	HBase中通过Row和Columns确定一个存储单元Cell。
	数据无类型,以字节码存储。
	每个Cell保存同一份数据的多个版本,版本通过时间戳(64位整型)来索引。
	时间戳在数据写入时可以由HBase自动赋值(此时为毫秒级的当前系统时间),也可以显式赋值(要避免版本冲突)。
	每个Cell中,不同版本的数据按时间倒序排列,即最新的数据排在最前面。
	数据版本回收:保存数据的最后N个版本、保存近一段时间内的版本。——用户可以针对某个列族设置。

Hadoop:Hbase物理存储

	Table中的所有行都按照rowkey排序
	Table在行的方向上分割成多个Hregion,一个HRegion表示为[startKey, endKey)

在这里插入图片描述

	Region按大小分割,每张表一开始只有一个Region,随着数据不断插入表中,Region会不断增大,当达到阀值时HRegion会分割成两个新HRegion

在这里插入图片描述
HRegion是hbase分布式存储和负载均衡的最小单元。意味着不同的HRegion可以分布在不同的Region Server上, 但一个HRegion是不会拆分到多个server上的。
在这里插入图片描述

	HRegion虽然是hbase分布式存储的最小单元,但不是存储的最小单元。一个HRegion可以由一个或者多个Store组成,每个Store存储一个Column Family数据。
	每个Store又由一个memstore和0至多个StoreFile组成,而StoreFile则以HFile格式存储在HDFS上。

在这里插入图片描述

Hbase读写过程

Hadoop:Hbase读写过程

在这里插入图片描述

Hadoop:Hbase写流程

	1.	Client先访问zookeeper,从meta表获取相应region信息,然后找到meta表的数据
	2.	根据namespace、表名和rowkey根据meta表的数据找到写入数据对应的region信息
	3.	找到对应的regionserver
	4.	把数据分别写到HLog和MemStore上一份
	5.	MemStore达到一个阈值后则把数据刷成一个StoreFile文件。

Hadoop:Hbase读流程

	1.	Client先访问zookeeper,从meta表读取region的位置,然后读取meta表中的数据。meta中又存储了用户表的region信息。
	2.	根据namespace、表名和rowkey在meta表中找到对应的region信息
	3.	找到这个region对应的regionserver
	4.	查找对应的region
	5.	先从MemStore找数据,如果没有,再到StoreFile上读(为了读取的效率)。

Hadoop:Hbase Compaction

	随着不断写入,HFile的数量将会越来越多,HFile数量过多会降低读性能。为了避免对读性能的影响,可以对这些HFile进行compact操作,把多个HFile合并成一个HFile。
	在HBase中Compaction分为两种:
	1.	Minor操作只用来做部分文件的合并操作以及包括minVersion=0并且设置ttl的过期版本清理,不做任何删除数据、多版本数据的清理工作。
	2.	Major操作是对Region下的HStore下的所有StoreFile执行合并操作,最终的结果是整理合并出一个文件。

Hbase扩缩容

Hadoop:Hbase Region Server上线

	Master使用ZooKeeper来跟踪Region Server状态。
	当某个Region Server启动时,会首先在ZooKeeper上的Server目录下建立代表自己的文件,并获得该文件的独占锁。由于Master订阅了Server 目录上的变更消息,当Server目录下的文件出现新增或删除操作时,Master可以得到来自ZooKeeper的实时通知。因此一旦Region Server上线,Master能马上得到消息。

Hadoop:Hbase Region Server下线

	       当Region Server下线时,它和ZooKeeper的会话断开,ZooKeeper自动释放代表这台Server的文件上的独占锁。而Master不断轮询Server目录下文件的锁状态。如果发现某个Region Server丢失了它自己的独占锁,或者Master连续几次和Region Server通信都无法成功,Master就是尝试去获取代表这个Region Server的读写锁,一旦获取成功,就可以确定:
	1)Region Server和ZooKeeper之间的网络断开了。
	2)Region Server挂了。
	无论哪种情况,Region Server都无法继续为它的Region提供服务了,此时Master会删除Server目录下代表这台Region Server的文件,并将这台Region Server的Region分配给其它存活者。

Hadoop:Hbase Hmaster上线

	从ZooKeeper上获取唯一一个代码Master的锁,用来阻止其它Master成为Master。
	扫描ZooKeeper上的Server目录,获得当前可用的Region Server列表。
	和每个Region Server通信,获得当前已分配的Region和Region Server的对应关系。
	扫描.META. Region的集合,计算得到当前还未分配的Region,将他们放入待分配Region列表。

Hadoop:Hbase Hmaster下线

	由于Master只维护表和Region的元数据,而不参与表数据IO的过程,Master下线仅导致所有元数据的修改被冻结(无法创建删除 表,无法修改表的Schema,无法进行Region的负载均衡,无法处理Region上下线,无法进行Region的合并,唯一例外的是Region的split可以正常进行,因为只有Region Server参与),表的数据读写还可以正常进行。因此Master下线短时间内对整个HBase集群没有影响。

Hadoop:常见安装问题

NameNode启动失败
java.net.BindException: Problem binding to [0.0.0.0:50010]
解决方案:
netstat -anlpt |grep 50010 查询占用50010端口的进程。
kill -9 xxx,强制关闭进程即可
ambari客户端连接不了服务器
操作系统centos6.5会有openssl的bug,ambari agent连不上服务器 ;
解决方案:
下载安装rpm -ivh --replacefiles openssl-1.0.1e-30.el6.x86_64.rpm 。

Hadoop:常见操作命令-hdfs

hadoop job –list #列出正在运行的Job
hadoop job –kill <job_id> #kill job
Hadoop fs –put /get /cat/df/du
hadoop fsck / #检查HDFS块状态,是否损坏
hadoop fsck / -delete #检查HDFS块状态,删除损坏块
hadoop dfsadmin –report #检查HDFS状态,包括DN信息
hadoop dfsadmin –safemode enter | leave
hadoop distcp hdfs://a:8020/xxx hdfs://b:8020/// #并行copy
./bin/start-balancer.sh #平衡集群文件

Hadoop:常见操作命令-hbase

Create '表名称', '列名称1','列名称2','列名称N'
put '表名称', '行名称', '列名称:', '值'
get '表名称', '行名称'
count  '表名称'
delete  '表名' ,'行名称' , '列名称‘
truncate/disable/drop "表名称" 
scan "表名称" \
scan "表名称" , ['列名称:']
exists "表名称"
is_enabled "表名称“
zk_dump:显示hbase的主要安装信息

Hadoop:双集群数据备份

       hdfs数据备份
               采用hadoop distcp,实现双集群的数据同步。
      hbase数据备份
               通过replication机制,实现hbase双集群的数据同步。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值