本书为《面试指南》系列之一,提供2021年度大数据开发岗位的全面面试问题及其详细解答,旨在帮助求职者准备相关技术面试。
### 大数据开发面试知识点详解
#### Hadoop
**1. HDFS读写流程**
- **读取流程:**
- 客户端发起读请求给NameNode。
- NameNode根据元数据信息找到文件块所在的DataNode。
- NameNode返回DataNode地址列表给客户端。
- 客户端直接连接DataNode读取数据。
- 为了提高效率,客户端可能直接从后续DataNode继续读取下一个块。
- **写入流程:**
- 客户端向NameNode发起写请求。
- NameNode根据文件大小和块配置信息决定将文件划分为多个块。
- NameNode返回DataNode列表给客户端,用于存储新文件的块副本。
- 客户端把数据分成多个包(packet)发送到DataNode。
- DataNode接收并存储包,同时复制到其他DataNode以保证数据冗余。
- 当一个DataNode接收到所有包后,它向客户端报告完成。
- 客户端通知其他DataNode完成写入。
**2. HDFS读取文件时块损坏处理**
- 如果在读取过程中发现某个块损坏:
- 客户端会尝试从其他DataNode读取该块的副本。
- 如果没有可用副本,则会报错。
- 通常,HDFS会自动检测损坏的块,并触发数据重建过程。
**3. HDFS上传文件时DataNode挂掉**
- 如果在上传过程中某个DataNode挂掉:
- 客户端会尝试连接其他DataNode完成上传。
- NameNode会在发现DataNode故障后重新分配存储任务,确保块完整性和冗余性。
**4. NameNode启动操作**
- NameNode启动时会加载元数据到内存中。
- 执行FSImage和EditLog文件的合并,生成最新的元数据。
- 启动后监听来自DataNode的心跳和状态报告。
**5. SecondaryNameNode工作机制**
- SecondaryNameNode不是NameNode的热备份。
- 定期合并NameNode的FSImage和EditLog文件,减轻NameNode的启动负担。
- 不存储元数据,仅作为辅助节点参与维护。
**6. NameNode数据存储安全保障**
- 使用Checkpoint机制定期合并FSImage和EditLog。
- 数据副本策略确保数据冗余。
- 可通过Zookeeper等工具实现高可用配置,减少单点故障的影响。
**7. NameNodeHA中的脑裂问题**
- 脑裂是指两个NameNode同时认为自己是活跃状态。
- 解决方法:通过Zookeeper或Quorum Journal Manager(QJM)确保只有一个NameNode处于活跃状态。
**8. 小文件过多的危害及避免方法**
- 危害:增加NameNode内存负担;降低系统整体性能。
- 避免方法:合并小文件;使用SequenceFile、Har等方式。
**9. HDFS的组织架构**
- **NameNode**:负责管理文件系统的命名空间。
- **DataNode**:负责存储实际的数据块。
- **Client**:用户访问文件系统的接口。
**10. MapReduce中MapTask的工作机制**
- MapTask接收输入切片。
- 对每个输入记录执行map函数。
- 输出中间结果到本地磁盘。
- 按照键值排序并对相同键值的数据进行分组。
**11. MapReduce中ReduceTask的工作机制**
- ReduceTask从各个MapTask拉取中间结果。
- 对拉取的数据进行合并、排序和分组。
- 对每组数据执行reduce函数。
- 写入最终结果到HDFS。
**12. MapReduce中shuffle阶段**
- shuffle阶段发生在MapTask和ReduceTask之间。
- MapTask对中间结果进行分区、排序和缓存。
- ReduceTask按需从MapTask拉取数据。
- 这一阶段涉及网络传输、排序和归并操作。
**13. Shuffle阶段的数据压缩机制**
- MapReduce支持多种压缩编码,如Gzip、LZO等。
- 在shuffle阶段压缩数据可以减少网络传输量。
**14. 使用规约的情况**
- 当MapTask的输出数据量非常大时。
- 在Reduce阶段之前进行数据聚合,减少网络传输量。
**15. YARN集群的架构和工作原理**
- **ResourceManager**:全局资源管理器。
- **NodeManager**:每台机器上的代理服务。
- **ApplicationMaster**:为应用程序请求资源。
**16. YARN的任务提交流程**
- 用户提交应用程序。
- ResourceManager为应用程序分配第一个Container。
- ApplicationMaster被启动并负责与ResourceManager协商资源。
- ApplicationMaster监控任务执行情况。
**17. YARN的资源调度模型**
- FIFO Scheduler:先进先出。
- Capacity Scheduler:基于容量。
- Fair Scheduler:公平分配资源。
#### Hive
**