一 客观题
(1)Hadoop基础,如:生态环境、历史等
(2)HDFS、YARN、HBase、MapReduce基本架构和原理
(3)HDFS命令、HBase命令
(4)实验操作
(5)常见故障排查(只包含集群安装、运行故障,不包含网络配置故障和虚拟机本身故障)
(6)HDFS Java API、HBase Java API、MapReduce编程
1 Hadoop基础
1.1 Hadoop历史
2004年,Google发表论文《MapReduce:超大集群的简单数据处理》
2006年Google发表论文《BigTable:结构化数据的分布式存储系统》
2006年,Yahoo!聘请Cutting将Nutch搜索引擎中的存储和处理部分抽象成为Hadoop,Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理,逐渐成为行业主流。
1.2 Hadoop生态系统
HDFS:分布式存储,为整个Hadoop系统提供数据存储功能
MapReduce:并行计算框架
HBase:构建在HDFS上的NoSQL数据库
Zookeeper:Hadoop组件管理端
Oozie:可扩展的Workflow系统,协调多个MapReduce作业执行
Pig:包含Pig Latin,对MapReduce的抽象
Hive:将结构化的数据文件映射为数据表,提供SQL语句,将SQL翻译为MapReduce语句进行查询
2 HDFS架构:
Hadoop三大基本组件:
HDFS——分布式文件系统,用于数据存储
YARN——统一资源管理和调度系统,用于管理集群的计算资源并根据计算框架的需求进行调度,支持包含MapReduce、Spark、Flink多种计算框架MRv2(Hadoop 2.x)之后的新特性
MapReduce——分布式计算框架,运行于YARN之上
HDFS/Hadoop Distributed File System
是Hadoop的分布式文件系统的实现。它的设计目标是存储海量的数据,并为分布在网络中的大量客户端提供数据访问。
HDFS是高容错性的,可以部署在低成本的硬件之上,HDFS提供高吞吐量地对应用程序数据访问。
2.1 HDFS特性
能够保存PB级的数据量,将数据散布在大量的计算机(节点)上,支持更大的文件
使用数据备份的方法解决文件存储的可靠性,如果集群中单个节点故障则启用备份
很好的与Map-Reduce集成,为减小计算时的数据交互,HDFS允许数据在本地计算
2.2 HDFS局限性
针对高速流式读取进行优化,查询性能低下(可利用Hive查询)
一次写入多次读取,不支持并发写入,并发读取性能很高
不支持文件修改
不支持缓存,每次读取文件须从硬盘上重新读取,当然对于大文件顺序读取性能影响不大
不适合存储小文件
2.3 HDFS架构
主从模式
整个Hadoop被构建在集群上,集群由各个节点(Node)构成
将集群中的节点分为NameNode(管理者)和DataNode(工作者)
文件被拆分为多个Block(块)放到不同的DataNode中,每个块默认64MB,同一个块会备份到多个DataNode中存储
2.4 Namenode
HDFS为主从架构,文件分块存储在DataNode,并由NameNode实现管理
使用NameNode存储元数据信息,保存文件名以及文件的块(Block)存储在哪些DataNode中
每个存活的DataNode定时向NameNode发送心跳信息,如果未收到DataNode的心跳,NameNode将认定其已失效,不再向其派发任何文件读请求;NameNode会将失效的DataNode中的块(Block)备份到其他存活的DataNode中
2.4.1 Namenode的元数据管理机制
整个系统的元数据都保存在NameNode中
内存元数据:meta data,用于元数据查询
硬盘元数据镜像文件:fsimage,持久化存储元数据
数据操作日志:edits,HDFS文件增删会造成元数据更改,将更改记录到edits,可运算出元数据
2.4.2 NameNode元数据管理过程
1、系统启动时,读取fsimage和edits至内存,形成内存元数据meta data
2、client向NameNode发起数据增删查请求
3、NameNode接收到请求后,在内存元数据中执行增删查操作,并向client返回操作结果
4、如果是增删操作,则同时记录数据操作日志edits
5、使用Secondary NameNode,在适当的时机将操作日志合并到fsimage中(CheckPoint过程)
2.5 HDFS数据写入机制
1.用户客户端请求Hadoop客户端,并执行文件上传
2.上传的文件写入到Hadoop客户端的临时目录中,每当写入的数据量越过块(block)边界时(hadoop 1.x缺省64mb,hadoop2.x缺省128mb),请求NameNode申请数据块
3.NameNode向Hadoop客户端返回block的位置
4.Hadoop客户端直接将block写入指定的DataNode
2.6 HDFS数据读取机制
1.用户客户端请求Hadoop客户端,请求返回指定文件
2.Hadoop客户端向NameNode发起读文件请求
3.NameNode查询meta data并返回文件对应的block位置
4.Hadoop客户端直接向DataNode请求block数据,获取到所有block后合并成文件
2.7 Hadoop配置文件
core-site.xml
Hadoop系统的通用关键属性
hdfs-site.xml
HDFS属性配置
mapred-site.xml
MapReduce计算框架的属性配置
yarn-site.xml
YARN基本属性
workers
定义所有DataNode地址
2.7.1 core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name> <!--HDFS服务地址-->
<value>hdfs://192.168.0.182:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name> <!--Hadoop临时目录-->
<value>file:/home/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name> <!--缓冲区大小-->
<value>131702</value>
</property>
</configuration>
2.7.2 hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name> <!-- namenode的元数据目录-->
<value>file:/home/hadoop/dfs/name</value><!--用逗号隔开设置多个存储目录-->
</property>
<property>
<name>dfs.datanode.data.dir</name <!-- datanode的block数据目录-->
<value>file:/home/hadoop/dfs/data</value><!--用逗号隔开设置多个存储目录-->
</property>
<property>
<name>dfs.replication</name> <!--每个block保存的副本数量-->
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.0.182:9001</value> <!--secondary namenode地址-->
</property>
</configuration>
dfs.http.address
HDFS的Web服务地址,显示HDFS服务状态和日志
缺省值:IP地址:50070
dfs.webhdfs.enabled
是否打开HDFS Web服务
缺省值:true
dfs.block.size
block大小,单位为字节,
hadoop2.X缺省128Mb
dfs.datanode.du.reserved
指定每个存储卷(硬盘分区)上不能用于HDFS文件存储的空间量,单位为%,缺省值:0
最好设置一定的空闲空间(如:20,保留20%的剩余存储空间)
dfs.namenode.edits.dir
单独为NameNode指定edits文件的存放目录,多个目录用逗号隔开
2.7.3 mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value> <!--指示MR运行在YARN上-->
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>192.168.0.182:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>192.168.0.182:19888</value>
</property>
</configuration>
2.7.4 yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.address</name> <!--RM的服务地址-->
<value>192.168.0.211:8032</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name> <!—NM通过该地址向RM汇报心
跳、领取任务-->
<value>192.168.0.211:8031</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name > <!--YARN的Web管理地址-->
<value>192.168.0.211:8088</value>
</property>
<property>