Hadoop 面试知识点整理
整理来源
一句话知识点
- 负责 HDFS 数据存储:Datanode
- HDfS 中的 block 默认保存几份:默认3份
- 通常与 NameNode 在一个节点启动:Jobtracker
- HDFS 默认 Block Size:64MB,2.2后默认调整为 128MB
- 集群的最主要瓶颈:磁盘 IO 集群瓶颈为什么是磁盘io
- SecondaryNameNode:目的是帮助 NameNode 合并编辑日志,减少 NameNode 启动时间
- 可以作为集群的管理软件:Puppet/Pdsh/Zookeeper 什么是Zookeeper
- 配置机架感知:1. 如果一个机架出问题,不会影响数据读写 2. 写入数据的时候会写到不同机架的 DataNode 中 3. MapReduce 会根据机架获取离自己比较近的网络数据 hadoop机架感知
- Hadoop运行模式:单机版/伪分布式/分布式(Standalone, Pseudo-distribution, Fully-distribution)
- Cloudera提供安装 CDH 的方法:Cloudera manager/Tarball/Yum/Rpm Hadoop CDH四种安装方式总结
- Block Size 是可以修改的
- 如果 NameNode 意外终止,SecondaryNameNode是帮助恢复,而不是替代 SecondaryNameNode恢复Namenode
- DataNode 不通过长连接与 NameNode 保持通信
- Slave 节点要存储数据,不是磁盘越大越好;因为一旦 slave 节点宕机,数据恢复是一个难题
- Hadoop 默认调度器策略为 FIFO Hadoop集群三种作业调度算法
- NameNode 在处理 client的每次读写请求时,不需要从磁盘读取 metadata,因为所有数据都在内存中,硬盘上的只是序列化的结果,只有每次 namenode 启动的时候才会读取。
master/slave
hadoop的集群是基于master/slave模式,namenode和jobtracker属于master,datanode和tasktracker属于slave,master只有一个,而slave有多个
SecondaryNameNode
SecondaryNameNode内存需求和NameNode在一个数量级上,所以通常secondary NameNode(运行在单独的物理机器上)和NameNode运行在不同的机器上。
JobTracker/TaskTracker
JobTracker 对应于 NameNode
TaskTracker 对应于 DataNode
DataNode 和NameNode 是针对数据存放来而言的
JobTracker和TaskTracker是对于MapReduce执行而言的
MR主要概念一:JobClient
JobClient会在用户端通过JobClient类将应用已经配置参数打包成jar文件存储到hdfs,
并把路径提交到Jobtracker,然后由JobTracker创建每一个Task(即MapTask和ReduceTask)
并将它们分发到各个TaskTracker服务中去执行
MR主要概念二:JobTracker
JobTracker是一个master服务,软件启动之后JobTracker接收Job,负责调度Job的每一个子任务task运行于TaskTracker上,
并监控它们,如果发现有失败的task就重新运行它。一般情况应该把JobTracker部署在单独的机器上。
JobTracker三:TaskTracker
TaskTracker是运行在多个节点上的slaver服务。TaskTracker主动与JobTracker通信,接收作业,并负责直接执行每一个任务。
TaskTracker都需要运行在HDFS的DataNode上
Client 端上传文件
- Client向NameNode发起文件写入的请求。
- NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode的信息。
- Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。
Ganglia Nagios 集群监控告警软件
- Ganglia是伯克利开发的一个集群监控软件。可以监视和显示集群中的节点的各种状态信息
- Nagios,就是一款精于预警、通知的软件。通过将Ganglia和Nagios组合起来,把Ganglia采集的数据作为Nagios的数据源
Hadoop 配置文件
Hadoop的基础配置文件是hadoop-default.xml,默认建立一个Job的时候会建立Job的Config,Config首先读入hadoop-default.xml的配置,然后再读入hadoop-site.xml的配置(这个文件初始的时候配置为空),hadoop-site.xml中主要配置需要覆盖的hadoop-default.xml的系统级配置。
关于随机读写
HDFS:只支持随机读
HBase/Lucene:支持随机读写
- HBase提供随机读写,来解决Hadoop不能处理的问题。HBase自底层设计开始即聚焦于各种可伸缩性问题:表可以很“高”,有数十亿个数据行;也可以很“宽”,有数百万个列;水平分区并在上千个普通商用机节点上自动复制。表的模式是物理存储的直接反映,使系统有可能提高高效的数据结构的序列化、存储和检索。
文件写入 Client/nn/dn 关系
- Client向NameNode发起文件写入的请求。
- NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode的信息。
- Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。
文件读取 client/nn/dn 关系
NameNode、DataNode和Client三者之间协作关系
- Client向NameNode发起文件读取的请求。
- NameNode返回文件存储的DataNode的信息。
- Client读取文件信息。
Block 位置信息
DataNode是文件存储的基本单元,它将Block存储在本地文件系统中,保存了Block的Meta-data,同时周期性地将所有存在的Block信息发送给NameNode。
hadoop dfsadmin -report
可以快速定位出哪些节点down掉了,HDFS的容量以及使用了多少,以及每个节点的硬盘使用情况。
Namenode 单点问题
map槽(map slot)
map slot 只是一个逻辑值 ( org.apache.hadoop.mapred.TaskTracker.TaskLauncher.numFreeSlots ),而不是对应着一个线程或者进程
slot是线程还是进程讨论
input split 是不是 block?
InputFormat的数据划分、Split调度、数据读取三个问题的浅析
集群内存设置
hadoop为各个守护进程(namenode,secondarynamenode,jobtracker,datanode,tasktracker)统一分配的内存在hadoop-env.sh中设置,参数为HADOOP_HEAPSIZE,默认为1000M。
hadoop集群内存设置
ClusterID
ClusterID用于标识集群中所有的节点。当格式化一个Namenode,需要提供这个标识符或者自动生成。这个ID可以被用来格式化加入集群的其他Namenode。
hadoop集群添加namenode的步骤及常识