闭卷笔试100分钟
题型单选(30)、多选(20)、问答(30)、应用(20)
一 概论
1、大数据5V特点
Volume(大量)、Velocity(高速)、Variety(多样)、Value(低密度价值)、Veracity(真实性)
*2、Google三驾马车
GFS(分布式文件系统)、MapReduce(超大集群的简单数据处理)、BigTable(结构化数据的分布式存储系统)
3、Hadoop的特点
扩容能力:可靠的存储和处理PB级数据
低成本:普通计算机组成集群来处理数据,可达上千个节点
高效率:节点上并行处理数据使得速度快
可靠性:自动维护数据的多份复制,任务失败后自动重新部署计算任务
4、Hadoop生态系统
HDFS:分布式存储,数据存储功能
MapReduce:分布式计算框架
HBase:分布式数据库,基于HDFS的NOSQL数据库
Zookeeper:,分布式协调服务框架,hadoop组件管理端
Pig:数据流处理,对MapReduce的抽象
Hive:数据仓库,将结构化的数据文件映射为数据表,将SQL翻译为MapReduce语句进行查询
5、Hadoop的主要版本
p7 1.3.4 最新的3.*,出现了YARN的版本2.0
6、NoSQL有哪些
关系型数据库产品很多,如 MySQL、Oracle、Microsoft SQL Sever 等,但它们的基本模型都是关系型数据模型。
非关系型数据库又称为:NoSQL ,没有统一的模型,而且是非关系型的。
NoSQL 数据库并没有一个统一的架构,两种不同的 NoSQL 数据库之间的差异程度,远远超过两种关系型数据库之间的不同。可以说,NoSQL 数据库各有所长,一个优秀的 NoSQL 数据库必然特别适用于某些场合或者某些应用,在这些场合中会远远胜过关系型数据库和其他的 NoSQL 数据库。
常见的 NoSQL 数据库包括键值数据库、列族数据库、文档数据库和图形数据库,其具体分类和特点如表所示:
分类 | 相关产品 | 应用场景 | 数据模型 | 优点 | 缺点 |
---|---|---|---|---|---|
键值数据库 | Redis、Memcached、Riak | 内容缓存,如会话、配置文件、参数等; 频繁读写、拥有简单数据模型的应用 | <key,value> 键值对,通过散列表来实现 | 扩展性好,灵活性好,大量操作时性能高 | 数据无结构化,通常只被当做字符串或者二进制数据,只能通过键来查询值 |
列族数据库 | Bigtable、HBase、Cassandra | 分布式数据存储与管理 | 以列族式存储,将同一列数据存在一起 | 可扩展性强,查找速度快,复杂性低 | 功能局限,不支持事务的强一致性 |
文档数据库 | MongoDB、ES、CouchDB | Web 应用,存储面向文档或类似半结构化的数据 | <key,value> value 是 JSON 结构的文档 | 数据结构灵活,可以根据 value 构建索引 | 缺乏统一查询语法 |
图形数据库 | Neo4j、InfoGrid | 社交网络、推荐系统,专注构建关系图谱 | 图结构 | 支持复杂的图形算法 | 复杂性高,只能支持一定的数据规模 |
7、Hadoop/HBase/Zookeeper属于什么开源项目?
Apache基金会
8、Hadoop的开发语言(Hadoop是用什么语言编写的)
Java
二 HDFS
*1、Hadoop三大基本组件
HDFS:分布式文件系统,数据存储
YARN:统一资源管理和调度系统,支持多种框架
MapReduce:分布式计算框架,运行于YARN上
2、HDFS的特性和局限性
特性:
能保存PB级数据量,数据散布在大量节点上,支持更大文件
可靠性、高容错性,多节点数据备份
与MapReduce集成,允许数据在本地计算,减少计算时数据交互
局限性:
不适合低延迟数据访问
不适合大量小文件存储
不支持多用户并发写入及任意修改文件,一次写入多次读取
不支持缓存,每次从硬盘重新读取
3、HDFS block
在HDFS的实现中,数据块被抽象成类org.apache.hadoop.hdfs.protocol.Block(我们以下简称Block)
。在Block类中有如下几个属性字段:
1 2 3 4 5 |
|
我们从WEB UI上的数据块信息也可以看到:
一个Block除了存储上面的3个字段信息,还需要知道这个Block含有多少个备份,每一个备份分别存储在哪一个DataNode上,为了存储这些信息,HDFS中有一个名为org.apache.hadoop.hdfs.server.blockmanagement.BlockInfoContiguous(下面我们简称为BlockInfo)
的类来存储这些信息,这个BlockInfo类继承Block类,如下:
BlockInfo类中只有一个非常核心的属性,就是名为triplets的数组,这个数组的长度是3*replication
,replication
表示数据块的备份数。这个数组中存储了该数据块所有的备份数据块对应的DataNode信息,我们现在假设备份数是3
,那么这个数组的长度是3*3=9
,这个数组存储的数据如下:
也就是说,triplets包含的信息:
- triplets[i]:Block所在的DataNode;
- triplets[i+1]:该DataNode上前一个Block;
- triplets[i+2]:该DataNode上后一个Block;
其中i表示的是Block的第i个副本,i取值[0,replication)。
我们在HDFS的NameNode中的Namespace管理中讲到了,一个HDFS文件包含一个BlockInfo数组,表示这个文件分成的若干个数据块,这个BlockInfo数组实际上就是我们这里说的BlockInfoContiguous
数组。以下是INodeFile的属性:
1 2 3 4 |
|
4、HDFS守护进程
5、主从结构
主节点是什么?从节点是什么?
基本的名词:NameNode SecondaryNameNode DataNode各个节点的功能
基本的名词:数据划分为Block(大小、备份数量……)、元数据、client……
- NameNode:主节点(Master),管理元数据
- SecondaryNameNode:辅助NameNode完成某些功能,解放Name Node性能,无法替代NameNode
- DataNode:从节点(Slave),存储文件的Block。
文件的块(Block),默认大小128MB
同一个块备份到多个(默认三个)DataNode中存储
读写文件时,所有节点参与工作,负载均衡更好
6、元数据、Block、DataNode、NameNode、心跳
元数据:
存储文件路径、文件副本数量、文件块所处的服务器位置等。
元数据保存在NameNode中
内存元数据:meta data,用于查询
硬盘元数据镜像文件:fsimage,持久元数据化存储元数据
数据操作日志:edits,将更改记录进去,可以此运算出元数据
元数据管理过程:
系统启动,读取fsimage和edis至内存,形成内存元数据meta data, client向NameNode发起数据增删查请求,NameNode在接受请求后在内存元数据中执行操作,并返回结果给client,如果是增删操作,则同时记录数据操作日志edits。Secondary NameNode在合适的时间将操作日志合并到fsimage中。
Block:
在HDFS系统中,为了便于文件的管理和备份,引入分块概念(block)。这里的 块 是HDFS存储系统当中的最小单位,HDFS默认定义一个块的大小为64MB。当有文件上传到HDFS上时,若文件大小大于设置的块大小,则该文件会被切分存储为多个块,多个块可以存放在不同的DataNode上,整个过程中 HDFS系统会保证一个块存储在一个datanode上 。但值得注意的是 如果某文件大小没有到达64MB,该文件并不会占据整个块空间 。
hadoop计算的分片大小不小于blockSize,并且不小于mapred.min.split.size。默认情况下,以HDFS的一个块的大小(HDFS也是采用块管理的,但是比较大,在Hadoop1.x中默认大小是64M,Hadoop2.x中大小默认为128M)为一个分片,即分片大小等于分块大小。当某个分块分成均等的若干分片时,会有最后一个分片大小小于定义的分片大小,则该分片独立成为一个分片。
DataNode故障恢复:
每个DataNode定期(默认3秒)向NameNode发送心跳信息,报告自己的状态。如果DataNode发生故障没有定时向NameNode发送心跳,就会被NameNode标记为“宕机”,该节点上所有数据不可读,NameNode不会向其发送任何I\O请求。
NameNode定期检查数据块的副本数量,小于冗余因子(即设定的副本数)时启动冗余复制,在其他正常数据节点生成副本。
NameNode故障恢复:
如果进行了高可用性配置,发生NameNode故障时,由zookeeper通过选举机制选取一个备用名称节点切换为激活状态,保证hadoop正常运行。
如果没有进行高可用性配置,系统把NameNode的核心文件同步复制到SecondaryNameNode(备份名称节点)中,当发生NameNode故障时,通过SecondaryNameNode中的FsImage和EditLog文件恢复NameNode。
心跳过程:
数据节点主动发送请求及要报告的信息(register:自身信息,block report:block的信息,使NameNode可以维护block和DataNode之间的映射关系),名称节点被动回复需要传达的信息或指令。NameNode没有收到周期性send heartbeat,则认为该数据节点失效,将失效节点中的bolock重新备份到其他数据节点。
7、HA模式
hadoop2.x中引用HDFS名称节点高可用框架。
配置两个相同的NameNode,一个为active mode活跃模式,另一个为standby mode待机模式,两个node数据保持一致,活动节点失效,则待机节点切换为活动节点,保证hadoop正常运行。
HA模式(高可用名节点)(High Availability NameNode),不需要再配置SecondaryNameNode,CheckPoint通过Standby NameNode实现。
JournalNode是轻量化节点,用于两个NameNode之间通信,需要配置3个以上节点。
8、DataNode容错机制
*9、HDFS读写流程
写入机制:
用户客户端请求Hadoop客户端,执行文件上传,上传的文件写入hadoop客户端的临时目录,当文件写入数据量超过block(Hadoop1.x缺省64MB,2.x缺省128MB)大小时,请求NameNode申请数据块。NameNode返回数据块ID及存储数据块的DataNode地址列表,hadoop客户端根据地址列表向DataNode写入数据块。客户端写入一个数据块后,在DataNode之间异步进行数据块复制,最后一个DataNode上数据块写入完成后,发送一个确认信息给前一个DataNode,第一个DataNode返回确认信息给客户端,数据写入完毕。客户端向NameNode发送最终确认信息。
删除机制与此相同,删除请求到达后,文件不会立即被执行删除,而是移动到/trash目录(回收站),一段时9间后再执行删除。
读取机制:
用户客户端请求Hadoop客户端,请求返回指定文件,hadoop客户端向NameNode发送读文件请求。NameNode查询meta data并返回文件数据对应的数据块ID及存储数据块的DataNode地址列表,该列表按照DataNode与客户端的距离进行排序。客户端在距离最近的数据节点上读取数据,如果读取失败,则从另一个副本所在数据节点读取数据。读取到所有block后合并成文件。
NameNode需要通过心跳机制收集DataNode生存状态,不会将失效的DataNode位置返回给客户端。
客户端:Client。代表用户通过与NameNode和DataNode交互来访问整个HDFS,整个HDFS运行在内网,与外界隔离,只有Client可以接受外界命令,确保系统安全。
10、Hadoop安装类型
11、常见虚拟机Virtual Box、VMWare
12、安装Hadoop之前的步骤:配置SSH免密、安装JDK
13、常见的配置文件:
环境变量配置在/etc/profile,配置完后source /etc/profile
/etc/hosts /etc/hostname
同14: core-site.xml(配置项)、hdfs-site.xml、yarn-site.xml
workers
14、*常见Linux命令:cd、ls、mkdir、cat、jps等,vi编辑器的常用命令
常见错误:command not found,file or directory no exists
启动/停止Hadoop的命令 start-all.sh/stop-all.sh
15、Hadoop常见配置文件
core-site.xml(配置项)、hdfs-site.xml、yarn-site.xml
workers
16、HDFS守护进程、YARN守护进程
(主节点的守护进程和从节点的守护进程分别是什么)
*17、HDFS命令
-ls -mkdir -get(-copyToLocal) -put(-copyFromLocal)
*18、异常分析
无DataNode的情况下,能否 -ls?可以,原因:目录结构存储在namenode中的,不需要访问datanode
There are 0 datanode(s) running and 0 node(s) are excluded in this operation.
能否-get/-put?不能,原因,上传下载文件需要访问datanode
19、HDFS Java API用途
HDFS REST API
20、HDFS和YARN各守护进程的启动顺序
不管分步执行启动过程还是通过脚本自动启动,模块的启动顺序都是一致的即先启动HDFS模块然后再启动YARN模块,停止的过程则是先停止YARN模块再停HDFS模块。
在 Hadoop 中,HDFS 和 YARN 是两个不同的服务,它们可以同时启动,也可以分别启动。一般情况下,需要先启动 HDFS,因为其他服务如 MapReduce、Spark 等需要依赖 HDFS 存储和读取数据。而 YARN 则是用于资源调度和任务管理的服务,它可以在 HDFS 启动后启动。
具体来说,Hadoop 集群的启动流程如下:
- 启动 HDFS:包括 NameNode 和 DataNode 服务,用于存储和管理数据。
- 启动 YARN:包括 ResourceManager 和 NodeManager 服务,用于资源调度和任务管理。
- 启动其他服务:如 MapReduce、Spark 等。
三 YARN
1、YARN是什么
2、YARN主从架构(守护进程)
3、ApplicationMaster、Container
4、Yarn调度器(三种)
5、一级调度RM,二级调度AM
YARN工作流程:
四 MapReduce
*1、作业1(不正确
*2、MapReduce过程
3、编程框架中的Context
context它是mapper的一个内部类,简单的说顶级接口是为了在map或是reduce任务中跟踪task的状态,很自然的MapContext就是记录了map执行的上下文,在mapper类中,这个context可以存储一些job conf的信息,比如job运行时参数等,我们可以在map函数中处理这个信息,这也是hadoop中参数传递中一个很经典的例子,同时context作为了map和reduce执行中各个函数的一个桥梁,这个设计和java web中的session对象、application对象很相似
4、常用的键值对类型Text IntWritable FloatWritable
(Sort: MapReduce默认输出的key是字符类型时,默认是按照字典序排序)
5、二次排序的概念
五 HBase
*1、HBase守护进程
*2、Zookeeper守护进程
QuorumPeerMain
3、HBase特点
*4、如何划分Region,Region中的HFile和列族的关系
5、什么是Zookeeper。HMaster的选举机制
6、.META.表的作用
7、HBase数据查询流程
六 Hive
什么是Hive
提供类SQL(HiveQL)查询,HiveQL会被编译成MapReduce,在Hadoop中执行查询
是基于HDFS和MapReduce的数据仓库软件
Hive是一个构建在Hadoop上的数据仓库框架
Hive的设计目的是让精通SQL但JAVA编程技能相对较弱的分析师能够对存放在HDFS上的大规模数据集执行查询。
数据仓库是面向主题的,普通操作性数据库主要面向事务性处理,数据仓库又称为分析型数据库。
HIVE特点:
延迟高,适合高吞吐量、批量、海量数据处理;
语法和SQL相似,学习成本低,避免去写复杂的MapReduce,缩短开发周期
支持自由的扩展集群的规模,一般不需要重启服务
Hive支持自定义函数,用户可以根据自己的需求去定义函数。
良好的容错性,部分节点出现错误,SQL仍然可以成功执行。
仅供个人复习参考
cr.Kerst