本篇将记录笔者学习hadoop有关的原理总结,将持续更新…
一.Hadoop概述
- 数据等级
ERP
CRM(G级别) -MySQL、jdbc
WEB(T级别) -ES
BIG DATA(PB级别) -Hadoop
- Hadoop架构
HDFS(Hadoop Distributed File System):分布式文件系统,解决分布式存储
MapReduce:分布式计算框架
YARN:分布式资源管理系统、在Hadoop 2.x中引入
Common:支持所有其他模块的公共工具程序
- Hadoop发行版本
社区版:Apache Hadoop
Cloudera发行版:CDH
Hortonworks发行版:HDP
- 为什么使用Hadoop?
高扩展性,可伸缩
高可靠性:多副本机制,容错高
低成本
无共享架构:不依赖某一个技术
灵活:可存储任意类型数据
开源(社区活跃):很重要
- Hadoop生态圈
Hadoop核心:HDFS、MapReduce、YARN、common、core
数据查询分析:Hive(重要)、 Pig、Impala、 Presto
协调管理:HCatalog、Zookeeper、Ambari
数据迁移:Sqoop、 Flume(实时)
非关系型数据库:HBase
Spark、Tez:都可用于替换MaoReduce
NoSQL、机器学习、任务调度等
- zookeeper
是一个分布式应用程序协调服务:解决分布式集群中应用系统的一致性问题
提供的功能:配置管理、命名服务、分布式同步、队列管理、集群管理等
特性:全局数据一致、可靠性、顺序性、实时性、数据更新原子性
Zookeeper集群
角色:
Leader(领导者):负责投票的发起与决议,更新系统状态
Follower(跟随者):用于接收客户端的请求并向客户端返回结果,在选主过程中参与投票
Observer(观察者):可以接收客户端的请求,将写请求转发给Leader节点,但Observer不参与投票过程,只同步Leader状态,Observer的目的是为了扩展系统,提高读取速度
- HDFS优点
a.支持处理超大文件
b.可运行在廉价机器上
c.高容错性
d.流式文件写入
- HDFS缺点
a.不适合低延时数据访问场景
b.不适合小文件存取场景
c.不适合并发写入,文件随机修改场景
- HDFS CLI(命令行)
基本格式:
hdfs dfs -cmd
hadoop fs -cmd(已过时)
命令和Linux相似:
-ls
-mkdir
-put
-rm
-help
- HDFS dfsadmin
dfsadmin命令用于管理HDFS集群
hdfs dfsadmin -report 返回集群的状态信息
hdfs dfsadmin -safemode enter/leave 进入和离开安全模式
hdfs dfsadmin -saveNamespace 保存集群的名字空间
hdfs dfsadmin -rollEdits 回滚编辑日志
hdfs dfsadmin -refreshNodes 刷新节点
hdfs dfsadmin -getDatanodeInfo node1:8010 获取数据节点信息
hdfs dfsadmin -setQuota 10 /hdfs 设置文件目录配额
- HDFS 常用命令
hdfs dfs -mkdir [/目录名] //测试新建test目录
hdfs dfs -mkdir -p [/目录名/目录名/...] //新建多级目录
hdfs dfs -ls -R [/目录名] //查看test目录下的所有文件以及包
hdfs dfs -touchz [/绝对路径/文件名.格式] //创建a文件
hdfs dfs -put [/绝对路径/文件] [/绝对路径] //上传文件
hdfs dfs -cat[或text] [/绝对路径/文件名] //查看文件数据
hdfs dfs -get [/绝对路径/文件] [/绝对路径] //下载文件
hdfs dfs -du [/绝对路径] //查看目录下的文件大小
hdfs dfs -rm [/绝对路径/文件名] //删除文件
hdfs dfs -rm -R [/绝对路径/目录名] //删除目录下的所有文件以及目录
hadoop fs -chmod -R [权限值] [/目录] //修改目录权限
二.Hadoop核心之HDFS
该部分选自HDFS特性和常用功能
基本特点
高容错性,高吞吐量,适用于海量数据的可靠性存储和数据归档,对硬件性能要求低
HDFS设计目标
- 硬件失效
将硬件失效看作一种常态,健壮性,高可用.检查错误,快速和自动恢复是核心架构 - 流式访问
允许通过流的方式访问数据集,批量处理非交互,高吞吐量访问非低延迟 - 大数据集
支持PB级数据量,具有高带宽,可扩展到集群中 - 简单一致性模型
一次写入,多次读取,文件创建后无须修改(日志等),支持追加,不支持任意位置修改 - 移动计算要比移动数据更划算
以文件块管理,提供接口去移动计算到数据所在位置,非移动数据到应用位置 - 轻便的跨异构的软硬件平台
可轻便从一个平台跨到另一个平台,包括版本不同和运行环境不同
重要特性
- 分块存储(block)
默认大小128M(2.x版本),64M(老版本),可修改 - 统一的抽象目录树
可通过路径访问文件(hdfs://namenode:port/…) - 统一管理
目录结构和元数据的管理都由namenode(集群主节点)承担
负责维护目录树和文件所对应的block块id和所在datanode服务器 - datanode存储管理
集群从节点,每个block可在多个datanode上存储多个副本,副本数量可修改 - 一次写多次读,可追加不可改
- 一些缺点:
不便修改,延迟大,网络开销大,仅适用于数据分析任务
HDFS工作机制
- datanode损坏
如配置10个datanode,备份数为3,则损坏1个datanode时会自动寻找新的datanode补充进来,保证备份数为设定值 - 写数据的流程
首先,客户端要和namenode通信以确认可以写文件并获得接收文件block的datanode
然后,客户端按顺序将文件逐个block传递给相应的datanode
最后,由接收到block的datanode负责向其他datanode复制block的副本 - 读数据的流程
首先,客户端将要读取的文件路径发送给namenode
然后,namenode获取文件的元信息(主要是block的存放位置信息)返回给客户端
最后,客户端根据返回的信息找到相应datanode逐个获取文件的block并在客户端本地进行数据追加合并从而获得整个文件
HDFS常用功能
元数据
- Metadata,维护文件和目录信息,分为内存元数据和元数据文件
- NameNode主要存储元数据镜像文件Fsimage和日志文件Edits
a. Fsimage记录某一永久性检查点时整个HDFS的元信息
b. Edits所有对HDFS的写操作都会记录在此文件
检查点
- 定期对NameNode中的文件进行备份,NameNode启动时会将最新的Fsimage加载到内存中
- 由secondary namenode完成namenode备份,后者损坏后前者将fsimage拷贝到namenode工作目录,恢复其元数据
- 触发条件分为两次检查点间隔时间和两次检查点操作数两种
DataNode功能
- 存储管理用户的文件块数据,默认128M/block
- 定期汇报块信息给namenode,默认3600000ms(1小时一次)
三.Hadoop核心之Mapreduce
四.Hadoop核心之YARN
运行原理
1.client向yarn提交job,首先找ResourceManager分配资源(ResourceManager开启一个Container,在Container中运行一个ApplicationManager)
2.ResourceManager返回一个作业ID,并将路径返回给客户端
3.client端将运行作业所需要的资源(Jar包、配置信息、分片信息等)上传到返回的HDFS路径
4.上传成功后,向ResourceManager发送请求,执行作业
5.ApplicationManager将请求转发到调度器ResourceScheduler
6.调度器会将任务放入调度列表,当执行到相应的请求时,会通知ApplicationManager分配容器,找一台nodemanager开辟Container,创建作业对应的Application master
7.ApplicationManager启动NodeManager节点上的ApplicationMaster
8.ApplicationMaster获取HDFS上提交的文件,根据切片信息创建MapTast和ReduceTast
9.ApplicationMaster向调度器申请运行MapTast和ReduceTast的资源
10.调度器返回执行信息
11.ApplicationMaster通知本节点与其他节点NodeManager启动任务
12.NodeManager执行任务
13.MapTast与ReduceTast接受共享文件数据
14.执行结果反馈给ApplicationMaster,ApplicationMaster在将结果发送至ApplicationManager
15.程序执行完毕后ApplicationMaster发送请求释放资源