Hadoop基础
本文主要介绍了Hadoop 基础面试题
Hadoop是什么?
-
Hadoop是一个由Apache基金会开发的分布式系统基础架构
-
主要解决海量数据的存储和计算问题
-
是一个开源的、可靠的、可扩展的分布式计算框架
Hadoop的架构和组件有哪些?
Hadoop的架构主要包含三大核心组件:
HDFS(分布式文件系统)
- NameNode(主节点)
- 管理文件系统命名空间
- 维护文件系统树及树中所有文件和目录
- 记录每个文件中各个块所在的数据节点信息
- SecondaryNameNode(辅助节点)
- 定期合并fsimage和edits文件
- 用于故障恢复
- DataNode(数据节点)
- 存储实际的数据块
- 执行数据块的读写操作
- 定期向NameNode汇报状态
YARN(资源管理和调度系统)
- ResourceManager(资源管理器)
- 整个集群资源的管理和调度
- 接收客户端的作业提交请求
- 启动和监控ApplicationMaster
- NodeManager(节点管理器)
- 管理单个节点的资源
- 处理来自ResourceManager的命令
- 管理Container的生命周期
- ApplicationMaster
- 负责单个应用程序的管理
- 向ResourceManager申请资源
- 与NodeManager协同管理任务
MapReduce(分布式计算框架)
- Container
- 资源封装
- 任务运行环境
- CPU、内存等资源的隔离
Hadoop 生态圈组件有哪些
Zookeeper:是一个开源的分布式应用程序协调服务,基于zookeeper可以实现同步服务,配置维护,命名服务。
Flume:一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。
Hbase:是一个分布式的、面向列的开源数据库, 利用Hadoop HDFS作为其存储系统。
Hive:基于Hadoop 的一个数据仓库工具,可以将结构化的数据档映射为一张数据库表,并提供简单的sql询功能,可以将sql语句转换为MapReduce任务进行运行。
Sqoop:将一个关系型数据库中的数据导进到Hadoop的 HDFS中,也可以将HDFS的数据导进到关系型数据库中。
Hadoop的运行模式有哪些?
要点说明:
- 单机模式最简单,适合初学者入门
- 伪分布模式是开发测试的理想选择
- 生产环境一般都使用完全分布式模式
Hadoop 集群的最主要瓶颈
1.服务器性能
CPU、内存、磁盘、网络带宽
I/O操作优化
- 数据倾斜
- Map和Reduce数量设计的不合理
- Map运行的时间过长、导致Reduce等待时间过久
- 小文件过多
- 大量的不可切分的超大的压缩文件
- Spill次数过多(导致大量落盘操作)
- Merge次数过多
Hadoop Merge次数过多主要有以下几个原因:
源头原因:
输入的小文件过多
内存配置不合理
Map任务输出量大
Map端问题:
map.sort.spill.percent阈值设置过小,导致频繁spill
io.sort.mb缓冲区设置过小
导致Map端频繁进行中间结果的溢写和合并
Reduce端问题:
- mapred.reduce.parallel.copies设置过小,影响复制效率
- shuffle.input.buffer.percent设置不合理
- 导致Reduce阶段需要多次合并
解决方案:
- 合理设置内存参数:
- 增加io.sort.mb的值
- 调整map.sort.spill.percent阈值
- 优化shuffle.input.buffer.percent
- 源数据优化:
- 合并小文件
- 使用CombineFileInputFormat
- 优化输入数据格式
- 任务优化:
- 增加mapred.reduce.parallel.copies值
- 合理设置Map和Reduce任务数
- 使用Combiner减少数据传输量
Hadoop运行模式
本地模式、伪分布式模式、完全分布式模式
本地模式是指Hadoop运行在单机上,数据存储在本地文件系统中,适用于数据量较小的情况,主要用于开发和测试。
分布式模式是指Hadoop运行在多台机器上,数据被分割成多个块,存储在不同的节点上,通过网络进行通信和协调,适用于处理大规模数据的情况,主要用于生产环境。在分布式模式下,Hadoop提供了两种运行模式:独立模式和伪分布式模式。
伪分布式模式是指Hadoop运行在单台机 器上,但是各个组件运行在不同的进程中,模拟了分布式环境,适用于开发和测试。
“hadoop”和“hadoop 生态系统”两个概念
Hadoop是指Hadoop框架本身;hadoop生态系统,不仅包含hadoop,还包括保证hadoop框架正常高效运行其他框架,比如zookeeper、Flume、Hbase、Hive、Sqoop等辅助框架。
请列出正常工作的Hadoop集群中Hadoop都分别需要启动哪些进程,它们的作用分别是什么?
1)NameNode:它是hadoop中的主服务器,管理文件系统名称空间和对集群中存储的文件的访问,保存有metadate。
2)SecondaryNameNode:它不是namenode的冗余守护进程,而是提供周期检查点和清理任务。帮助NN合并editslog,减少NN启动时间。
3)DataNode:它负责管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运行一个datanode守护进程。
4)ResourceManager(JobTracker):JobTracker负责调度DataNode上的工作。每个DataNode有一个TaskTracker,它们执行实际工作。
5)NodeManager:(TaskTracker)执行任务。
6)DFSZKFailoverController:高可用时它负责监控NN的状态,并及时的把状态信息写入ZK。它通过一个独立线程周期性的调用NN上的一个特定接口来获取NN的健康状态。FC也有选择谁作为Active NN的权利,因为最多只有两个节点,目前选择策略还比较简单(先到先得,轮换)。
7)JournalNode:高可用情况下存放namenode的editlog文件。
HDFS 中的 block 默认保存几份?
在 HDFS 中,block 默认会被保存三份,这也被称为副本(replica)。
这种副本的机制被称为数据冗余(data redundancy),它的目的是为了提高数据的可靠性和可用性。当某个副本不可用时,HDFS 可以使用其他副本来保证数据的可用性。
同时,HDFS 还会定期地对副本进行校验,确保它们的一致性。
可以通过修改 HDFS 的配置来改变副本的数量。
但是需要注意的是,增加副本数量会占用更多的存储空间和网络带宽,因此需要根据实际情况进行权衡。
HDFS 默认 BlockSize 是多大?
HDFS(Hadoop Distributed File System)的默认 BlockSize 是 128MB。
这个值可以通过 HDFS 的配置文件进行修改,但是一般来说,不建议随意修改这个值,因为它会影响到 HDFS 的性能和数据存储的效率。如果你需要存储的文件 比较小,可以考虑将多个小文件合并成一个大文件,以达到更好的存储效率。