一、 大数据概念
1.1、大数据
传统数据处理应用软件不足以处理(存储和计算)它们的大而复杂的数据集。主要解决海量数据的存储和海量数据的运算问题。
1.2、数据单位
bit、byte(B)、KB、MB、GB、TB、PB、EB、ZB
1.3、大数据的特征:
- 容量大:数据的大小决定所考虑的数据的价值和潜在的价值
- 种类多:结构化数据、半结构化数据(xml,html)、非结构化数据
- 速度快:数据的产生呈指数式爆炸生长,处理数据时延越来越低
- 价值高:综合价值大,隐含价值大。无用数据多(价值密度低)。
1.4、元数据
定义:描述数据的数据
元数据信息:
- 目录树结构
- 每个文件的数据块存放的位置
1.5、什么是Hadoop
-
Hadoop是Apache旗下的一套开源软件平台
-
Hadoop提供的功能:利用服务器集群,根据用户自定义业务逻辑,对海量数据进行分布式处理——存储+运算
-
Hadoop核心组件:
Common(基础功能组件)
HDFS(Hadoop Distributed File System 分布式文件系统)
YARN(Yet Another Resources Negotiator 运算资源调度系统)
MapReduce(Map和Reduce分布式运算编程框架) -
广义上讲,Hadoop通常指一个更广泛的概念——Hadoop生态圈
1.6、Hadoop自带jar包试用方法**:
hadoop jar hadoop目录下MapReduce全路径下jar包名 函数名 参数
- 例wordcount函数:
hadoop jar /software/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar(jar包全路径)
wordcount (函数名)/wc.txt(HDFS上的文件输入路径) /wcout0302(HDFS上的文件输出路径)- 例pi函数:
hadoop jar /software/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar
pi 5(Map数量) 5(Reduce数量)
二、 HDFS
2.1、设计思想
中庸思想,块的大小不大不少最好:
- 块太大,块的数量少,不方便计算,更不符合HDFS的设计思想——尽量均匀分布在集群中
- 块太小,块的数量多,导致找回数据压力大
分散存储
一个大的文件想要进行存储,可借助HDFS这种分布式文件系统把大文件切分存储在各个节点上
冗余存储
整个HDFS的从节点存在故障问题,通过对数据块进行备份保证数据的安全
2.2、block(块)默认大小
hadoop2.x之前:64M
hadoop2.x(含)之后:128M
2.3、HDFS三大组件及HA、联邦
2.3.1namenode:
-
职责:维护元数据信息,负责客户端请求的响应,配置副本存放策略及管理集群负载均衡问题
-
NameNode使用WAL(Write ahead Log)预写日志系统对元数据进行管理
-
NameNode元数据存储机制
(1)内存中有一份完整的元数据(内存metadata)
(2)磁盘有一个元数据镜像(fsimage)文件
(3)用于衔接内存metadata和持久化元数据镜像fsimage之间的操作日志(edit)文件
客户端对hdfs中的文件进行新增或者修改操作,操作记录首先被计入edits日志文件中,客户端操作成功后,相应的元数据会更新到内存metadata中 -
元数据的CheckPoint(合并)
每隔一段时间,会由SecondaryNameNode将NameNode上积累的所有edits和最新的一个fsimage下载到本地,并加载到内存进行merge(合并),这个过程称为checkpoint
目的:
(1)大大缩小了操作日志的大小
(2)合并之后的磁盘镜像文件可以被nameNode快速的加载到内存中
edit文件信息查看:
hdfs oev -i edits_0000000000000001222-0000000000000001233 -o edits.xml
cat edits.xml
fsimage镜像文件信息查看:
hdfs oiv -i fsimage_0000000000000001233 -p XML -o fsimage.xml
cat fsimage.xml
2.3.2、datanode
职责:
- 维护namenode给它分配的block块
- 定期向NameNode汇报自身所持有的block信息(通过心跳机制上报)
- 实际存储数据
2.3.3secondnamenode
作用:
分担namenode合并元数据压力,故SecondaryNameNode不能和NameNode处于同一节点。
实际上。只有普通的伪分布式集群和分布式集群中才有该角色,在HA和联邦集群中都有standby NameNode承担该角色任务
高可用(HA)
- 高可用指7*24h不中断服务,即HA(High Available)
- HA是为了解决HDFS集群中NameNode的单点故障问题(SPOF Single Point of Failure)
- NameNode主要在以下两个方面影响HDFS集群:
NameNode机器发生意外,如宕机等导致集群无法使用
NameNode机器需要升级,如软件,硬件升级导致集群无法使用 - HDFS高可用功能通过配置Active/Standby两个NameNode实现在集群中对NameNode 的热备来解决上述问题
*联邦机制
-
*为什么要有联邦机制(Federation)?
HDFS的单NameNode设计带来了很多问题,包括单点故障(SPOF)以及内存受限问题,SPOF通过HA解决,内存受限通过Federation解决。 -
什么是联邦机制?
HDFS Federation之HDFS集群课同时存在多个NameNode
这种设计可解决单NameNode存在的以下几个问题:
(1)HDFS集群扩展性
多NameNode维护数据元信息。使集群扩展性提高
(2)性能更高效
各NameNode分别维护不同的元数据信息,处理请求效率更高
(3)良好的隔离性
各NameNode维护的元数据信息是隔离的
2.4、HDFS优点
1. 可构建在廉价机器上
通过多副本机制提高可靠性
2. 高容错性
数据自动保存多个副本,某个副本丢失后可以自动恢复
3. 适合批处理
它通过移动计算而不是移动数据
4. 适合大数据处理
能够处理10k+节点规模
5. 流式文件访问
一次写入,多次读取,通过校验机制保证数据的一致性
2.5、HDFS缺点
1. 不适于低时延的数据访问
HDFS适合高吞吐量的场景,不适合低延时的读取或存储数据,另外HDFS是单Master的,所有对文件的请求都要经过它,所有请求量大的时候肯定会有延时
2. 不适于小文件的存储
存储大量小文件的话,会占用大量的Namenode内存来存储这些小文件的元数据,并且其寻道时间会超过读取时间
3. 不适于文件的修改
并发写入,文件随机修改 。一个文件只能有一个写,不允许多个线程同时写,文件一旦写入,仅仅支持追加。
2.6、常用命令参数介绍
参数 | 功能 |
---|---|
-help | 输出这个命令参数手册 |
-ls | 显示目录信息 |
-put | 等同于copyFromLocal,进行文件上传 |
-get | 等同于copyToLocal,从hdfs下载文件到本地 |
-cp | 从hdfs的一个路径拷贝到hdfs的另一个路径 |
-mv | 在hdfs目录中移动文件 |
-rm | 删除文件或文件夹 |
-rmdir | 删除空目录 |
-moveFromLocal | 从本地剪切到hdfs |
-moveToLocal | 从hdfs剪切到本地 |
-copyFromLocal | 从本地文件系统拷贝文件到hdfs文件系统中去 |
–copyFromLocal | 从hdfs拷贝到本地 |
-appendToFile | 追加一个文件到已经存在的文件末尾 |
-cat | 显示文件内容 |
-tail | 显示一个文件的末尾 |
-text | 以字符形式打印一个文件的内容 |
-chgrp | linux 文件系统中的用法一样,对文件所属权限 |
-chmod | linux 文件系统中的用法一样,对文件所属权限 |
-chown | linux 文件系统中的用法一样,对文件所属权限 |
-df | 统计文件系统的可用空间信息 |
-du | 统计文件夹的大小信息 |
-count | 统计一个指定目录下的文件节点数量 |
-setrep | 设置 hdfs 中文件的副本数量 |
hdfs dfsadmin -report 可查看集群当前状态(该命令只可以在主节点上运行)
2.7、三大机制
2.7.1、心跳机制
-
心跳机制:
Hadoop是Master/Slave架构,Master中有NameNode和ResourceManager,Slave中有DataNode和NodeManager
Master启动的时候会启动一个IPC(Inter-Process Comunication,进程间通信)server服务,等待Slave的连接
Slave启动时会主动连接Master的ipc server服务,并且每隔3s连接一次,我们形象的称之为心跳。Slave通过心跳汇报自己的信息给Master,Master也通过心跳给Slave下达命令。
NameNode通过心跳得到DataNode的状态,ResourceManager通过心跳得知NodeManager的状态
如果Master长时间没有接收到Slave的心跳,就认为该Slave挂掉了 -
Admin State:dead判断机制 timeout(超时时长) = 10 * 心跳时长 + 2 * 检查心跳机制是否正常工作的时间
心跳时长:3s ——》dfs.heartbeat.interval = 3 秒 检查心跳机制是否正常工作的时间 :5min
——》heartbeat.recheck.interval = 5分钟 timeout(超时时长) = 630s
Last contact:0 1 2 正常
名词 | 涵义 |
---|---|
Last contact | 最近一次通讯时间 |
Admin State | 状态 |
Capacity | 容量 |
Used | 已经使用的容量 |
Non DFS Used | 非dfs使用的容量 |
Remaining | 剩下的容量 |
Blocks | 前的datanode所保存的块的数量 |
Block pool used | 块池占用大小 |
Failed Volumes | 0表任何的卷出现错误就要停止当前的数据节点 |
Version | 版本 |
2.7.2、安全模式
进入安全模式的原理:
NameNode发现集群中的block丢失率达到一定比例时(0.1%),NameNode就会进入安全模式。在安全模式中客户端不能对任何数据进行操作,只能查看元数据信息。
丢失率配置参数:dfs.namenode.safemode.threshould-pct=0.999f
如何退出安全模式?
- 找到问题所在,进行修复(修复宕机的datanode)
- 手动强行退出安全模式(并没有解决真正的数据丢失问题)
关于安全模式的命令
hdfs dfsadmin -safemode leave //强制namenode退出安全模式
hdfs dfsadmin -safemode enter //强制进入安全模式
hdfs dfsadmin -safemode get //查看安全模式的状态
hdfs dfsadmin -safemode wait //等待,一直等到安全模式结束
2.7.3、副本存放策略
副本存放策略:决定一个数据块的多个副本(默认是3)到底应该选取哪些服务器的节点进行存储
- 第一个副本块选取和客户端相同的节点上
- 第二个副本块选取跟第一个副本的存储节点相邻机架上的任意一个节点
- 第三个副本存储在和第二个副本块所在的机架的不同的节点上
原则:
- 任意一个节点上面不可能存储两个一样的副本块
- 如果一个数据库要保存完整的3个副本块,那么必须至少要3个节点
作用
数据分块存储和副本的存放,是提高可靠性和高性能的关键
2.8、HDFS上传下载原理
2.8.1、上传(写入)
总结:
- 客户端向namenode请求上传文件
- namenode 检查权限并做出响应
- 客户端拿到namenode的响应之后,请求上传第一个block块,并请namenode返回可用的datanode列表
- namenode依据客户端的请求返回可用的datanode的列表
- 客户端与可用的datanode列表中的节点建立数据传输管道,进行数据传输
- datanode依次返回响应,正式建立起来数据传输管道
- 客户端以package为单位,进行数据的传输,知道第一个block块传输完毕
- 其他的block块以此类推,传输完全部的数据
2.8.2、下载(读取)
总结:
- 客户端向namenode请求下载文件
- namenode返回目标文件的元数据信息,{blk1:dn1 blk2:dn2 blk3:dn1}
- 客户端和每一个block块所在的主机建立管道
- 以package为单位进行数据的传输
- 读取完毕之后,将block块合并成完整的文件