Hadoop基础

  1. 介绍下Hadoop
分布式系统架构。开发分布式程序。利用集群的威力进行高速运算和存储。
  1. Hadoop的特点
高可靠性
高效性
高可扩展性
高容错性
低成本
  1. 说下Hadoop生态圈组件及其作用
1,HDFS (分布式文件系统)
2,资源管理器(YARN 和 mesos)
3,mapreduce(分布式计算框架)
4,flume(日志收集工具)
5, hive(基于hadoop的数据仓库)
6,hbase(分布式列存数据库)
7,zookeeper(分布式协作服务)
8,sqoop(数据同步工具)
9,pig(基于hadoop的数据流系统)
10,mahout(数据挖掘算法库)
  1. Hadoop主要分哪几个部分?他们有什么作用?
三大核心组件:
HDFS(分布式文件存储)
MAPREDUCE(分布式计算)
YARN(资源调度)
  1. Hadoop 1.x,2x,3.x的区别
Hadoop1.x : MR 处理业务逻辑运算 和 资源的调度,耦合性较大。
Hadoop2.x : 增加了Yarn。Yarn负责资源的调度,MR负责运算。
Hadoop3.x : 在组成上没有变化。
  1. Hadoop集群工作时启动哪些进程?它们有什么作用?
1)NameNode主服务器,管理 名称空间 和对 文件访问,保存metadate。 
2)SecondaryNameNode提供周期检查点和清理任务。
3)DataNode守护进程,负责管理连接到节点的存储。
4)ResourceManager JobTracker负责调度DataNode上的工作。TaskTracker执行实际工作。
5)NodeManager TaskTracker执行任务。
6)DFSZKFailoverController高可用时它负责监控NN的状态,并及时的把状态信息写入ZK。它通过一个独立线程周期性的调用NN上的一个特定接口来获取NN的健康状态。FC也有选择谁作为Active NN的权利,因为最多只有两个节点,目前选择策略还比较简单(先到先得,轮换)。
7)JournalNode 高可用情况下存放namenode的editlog文件.
  1. 在集群计算的时候,什么是集群的主要瓶颈
磁盘IO
  1. 搭建Hadoop集群的xml文件有哪些?
core-site.xml      核心配置文件,主要定义文件访问 hdfs://
hadoop-env.sh      主要配java路径
hdfs-site.xml       hdfs的相关配置
mapred-site.xml    MR相关配置
slaves               从节点
yarm-site.xml       资源调度
  1. Hadoop的checkpoint流程
1. 请求主节点Namenode 停⽌使⽤ edits⽂件,将新的写操作记录到新⽂件 edits.new。
2. 从主节点获取 fsimage 和 edits ⽂件(采⽤HTTP GET)
3. 将 fsimage 载⼊内存,执⾏ edits 的操作,创建新 fsimage,并发回主节点(使⽤HTTP POST)
4. 主节点将换旧的 fsimage ,⽤ edits.new 替换 edits⽂件。更新 fstime ⽂件 记录检查点执⾏的时间。
  1. Hadoop的默认块大小是多少?为什么要设置这么大?
Hadoop 1 默认大小 64M
Hadoop 2 之后默认大小 128M 
为了最小化寻址开销
  1. Block划分的原因
文件是分布式储存的,被分成块分别储存在不同的机器上。
而多个副本,是为了安全的考虑。
  1. Hadoop常见的压缩算法?
gzip、lzo、snappy、Bzip2
  1. Hadoop作业提交到YARN的流程?
(1)作业提交
Client 调用 job.waitForCompletion 方法,向整个集群提交 MapReduce 作业, 向 ResourceManager 申请一个作业 id。
RM 给 Client 返回该 job 资源的提交路径和作业 id。
Client 提交 jar 包、切片信息和配置文件到指定的资源提交路径,向 RM 申请运行 MRAppMaster。
(2)作业初始化
当 RM 收到请求后,AppManager 将该 job 添加到容量调度器 Scheduler 中。
空闲的 NodeManager 领取到该 Job,创建 Container,并产生 MRAppMaster,下载 Client 提交的资源到本地。
(3)任务分配和运行
MRAppMaster 向 RM 申请运行多个 MapTask 任务资源,
RM 将运行 MapTask 分配给空闲的 NodeManager,使其创建容器。
MRAppMaster 命令 NodeManager 启动 MapTask,对数据分区排序,等待执行结束。
MRAppMaster 向 RM 申请容器,运行 ReduceTask。ReduceTask 向 MapTask 获取相应分区的数据。
MRAppMaster 监控 Task 的运行状态 运行结束后,会向 RM 申请注销自己。 
(4)进度和状态更新 
YARN 中的任务将其进度和状态(包括 counter)返回给应用管理器 AppManager, 
客户端每秒(通过 mapreduce.client.progressmonitor.pollinterval 设置)
向应用管理器请求进度更新, 展示给用户,AppManager 会监控 MRAppMaster。 
(5)作业完成
  1. Hadoop的Combiner的作用
Combine是作为 Map任务的一部分,在执行完 Map函数后紧接着执行的。能够减少中间结果的数目,从而减少网络流量。
  1. Hadoop序列化和反序列化
1)序列化:将 结构化对象 转换为 字节流 的过程,以便在网络上传输或写入到磁盘进行永久存储。 
2)反序列化:将 字节流 转回一系列的 结构化对象。 
在Hadoop中,多个节点上进程间的通信是通过“远程过程调用(RPC)”实现的。
  1. Hadoop的运行模式
1.独立(本地)运行模式:无需任何守护进程,所有的程序都运行在同一个JVM上执行。在独立模式下调试MR程序非常高效方便。所以一般该模式主要是在学习或者开发阶段调试使用 。
2.伪分布式模式:  Hadoop守护进程运行在本地机器上,模拟一个小规模的集群,换句话说,可以配置一台机器的Hadoop集群,伪分布式是完全分布式的一个特例。
3.完全分布式模式:Hadoop守护进程运行在一个集群上。
  1. Hadoop小文件处理问题
文件是许多记录组成的,可以通过调用 HDFS 的 sync() 方法(和 append 方法结合使用),每隔一定时间生成一个大文件。
或者,可以通过写一个 MapReduce 程序来来合并这些小文件。
MapReduce上的小文件 需要容器通过某种方式来对这些文件进行分组。
  1. Hadoop为什么要从2.x升级到3.x?
1.License
adoop 2.x - Apache 2.0,开源
Hadoop 3.x - Apache 2.0,开源
2.支持的最低Java版本
Hadoop 2.x - java的最低支持版本是java 7
Hadoop 3.x - java的最低支持版本是java 8
3.容错
Hadoop 2.x - 可以通过复制(浪费空间)来处理容错。
Hadoop 3.x - 可以通过Erasure编码处理容错。
4.数据平衡
Hadoop 2.x - 对于数据,平衡使用HDFS平衡器。
Hadoop 3.x - 对于数据,平衡使用Intra-data节点平衡器,该平衡器通过HDFS磁盘平衡器CLI调用。
5.存储Scheme
Hadoop 2.x - 使用3X副本Scheme
Hadoop 3.x - 支持HDFS中的擦除编码。
6.存储开销
Hadoop 2.x - HDFS在存储空间中有200%的开销。
Hadoop 3.x - 存储开销仅为50%。
7.存储开销示例
Hadoop 2.x - 如果有6个块,那么由于副本方案(Scheme),将有18个块占用空间。
Hadoop 3.x - 如果有6个块,那么将有9个块空间,6块block,3块用于奇偶校验。
8.YARN时间线服务
Hadoop 2.x - 使用具有可伸缩性问题的旧时间轴服务。
Hadoop 3.x - 改进时间线服务v2并提高时间线服务的可扩展性和可靠性。
9.默认端口范围
Hadoop 2.x - 在Hadoop 2.0中,一些默认端口是Linux临时端口范围。所以在启动时,他们将无法绑定。
Hadoop 3.x - 但是在Hadoop 3.0中,这些端口已经移出了短暂的范围。
10.工具
Hadoop 2.x - 使用Hive,pig,Tez,Hama,Giraph和其他Hadoop工具。
Hadoop 3.x - 可以使用Hive,pig,Tez,Hama,Giraph和其他Hadoop工具。
11.兼容的文件系统
Hadoop 2.x - HDFS(默认FS),FTP文件系统:它将所有数据存储在可远程访问的FTP服务器上。 Amazon S3(简单存储服务)文件系统Windows Azure存储Blob(WASB)文件系统。
Hadoop 3.x - 它支持所有前面以及Microsoft Azure Data Lake文件系统。
12.Datanode资源
Hadoop 2.x - Datanode资源不专用于MapReduce,我们可以将它用于其他应用程序。
Hadoop 3.x - 此处数据节点资源也可用于其他应用程序。
13.MR API兼容性
Hadoop 2.x - 与Hadoop 1.x程序兼容的MR API,可在Hadoop 2.X上执行
Hadoop 3.x - 此处,MR API与运行Hadoop 1.x程序兼容,以便在Hadoop 3.X上执行
14.支持Microsoft Windows
Hadoop 2.x - 它可以部署在Windows上。
Hadoop 3.x - 它也支持Microsoft Windows。
15.插槽/容器
Hadoop 2.x - Hadoop 1适用于插槽的概念,但Hadoop 2.X适用于容器的概念。通过容器,我们可以运行通用任务。
Hadoop 3.x - 它也适用于容器的概念。
16.单点故障
Hadoop 2.x - 具有SPOF的功能,因此只要Namenode失败,它就会自动恢复。
Hadoop 3.x - 具有SPOF的功能,因此只要Namenode失败,它就会自动恢复,无需人工干预就可以克服它。
17.HDFS联盟
Hadoop 2.x - 在Hadoop 1.0中,只有一个NameNode来管理所有Namespace,但在Hadoop 2.0中,多个NameNode用于多个Namespace。
Hadoop 3.x - Hadoop 3.x还有多个名称空间用于多个名称空间。
18.可扩展性
Hadoop 2.x - 我们可以扩展到每个群集10,000个节点。
Hadoop 3.x - 更好的可扩展性。 我们可以为每个群集扩展超过10,000个节点。
19.更快地访问数据
Hadoop 2.x - 由于数据节点缓存,我们可以快速访问数据。
Hadoop 3.x - 这里也通过Datanode缓存我们可以快速访问数据。
20.HDFS快照
Hadoop 2.x - Hadoop 2增加了对快照的支持。 它为用户错误提供灾难恢复和保护。
Hadoop 3.x - Hadoop 2也支持快照功能。
21.平台
Hadoop 2.x - 可以作为各种数据分析的平台,可以运行事件处理,流媒体和实时操作。
Hadoop 3.x - 这里也可以在YARN的顶部运行事件处理,流媒体和实时操作。
22.群集资源管理
Hadoop 2.x - 对于群集资源管理,它使用YARN。 它提高了可扩展性,高可用性,多租户。
Hadoop 3.x - 对于集群,资源管理使用具有所有功能的YARN。
  1. Hadoop的优缺点
Hadoop的优点
1、具有 按位存储 和处理数据能力的高可靠性。
2、通过可用的计算机 集群 分配数据,完成存储和计算任务,这些集群可以方便地扩展到数以千计的节点中,具有高扩展性。
3、能够在节点之间进行 动态地移动数据,并保证各个节点的动态平衡,处理速度非常快,具有高效性。
4、能够自动保存数据的 多个副本,并且能够自动将失败的任务重新分配,具有高容错性。

Hadoop的缺点
1、不适用于低延迟数据访问。
2、不能高效存储大量小文件。
3、不支持多用户写入并任意修改文件。