### Hadoop面试题详解
#### 1. Hadoop集群运行模式
Hadoop支持三种不同的运行模式,每种模式都有其特定的应用场景:
- **单机(本地)模式**:此模式下,所有组件运行在同一台计算机上的单个JVM内。这种模式下没有真正的Hadoop分布式文件系统(HDFS),而是使用本地文件系统。单机模式主要用于开发测试环境,方便快速搭建和调试程序。
- **伪分布式模式**:在这种模式下,所有的Hadoop守护进程(例如NameNode、DataNode等)仍然运行在同一台机器上,但每个守护进程都在独立的Java进程中运行。这种方式模拟了分布式环境,但仍便于在单台机器上进行测试和调试。
- **全分布式模式**:这是生产环境中最常用的模式,多个主机共同构成一个Hadoop集群,每个节点上运行不同的Hadoop守护进程。这种模式能够充分利用多台机器的计算能力和存储能力。
#### 2. 单机模式的注意事项
在单机模式中需要注意以下几点:
- 所有的Hadoop组件(如MapReduce任务等)都在同一个JVM内运行。
- 没有实际的HDFS,而是使用本地文件系统作为替代。
- 这种模式主要用于开发阶段,以便快速测试MapReduce程序。
#### 3. 伪分布式模式的注意事项
- 在伪分布式模式下,尽管所有组件都在同一台机器上运行,但它们各自在独立的JVM中运行。
- 适用于开发和测试环境,可以模拟分布式环境的行为,同时保持较低的硬件需求。
- 不同于单机模式,伪分布式模式提供了一个更接近真实世界的测试环境。
#### 4. VM与伪分布式模式的区别
- 虚拟机(VM)不是伪分布式模式的一部分。虽然可以在虚拟机上运行伪分布式模式,但这并不意味着虚拟机本身就是伪分布式模式。
- 伪分布式模式特指Hadoop在其内部组件之间的模拟分布式行为,而虚拟机则是用来隔离操作系统和硬件资源的一种技术。
#### 5. 全分布式模式的注意事项
- 在全分布式模式下,Hadoop集群由多台物理机器组成。
- 这种模式通常用于生产环境,能够提供高性能的计算和存储能力。
- Namenode、Datanode、TaskTracker等关键组件分布在不同的机器上,以提高系统的可靠性和可扩展性。
- 主节点和从节点的角色明确,负责不同的任务。
#### 6. Hadoop与UNIX的关系
Hadoop的设计受到了UNIX的影响,特别是其文件系统和配置文件方面:
- Hadoop保留了类似UNIX的目录结构,例如“conf”目录存放配置文件。
- 这种设计使得用户能够更容易地理解和使用Hadoop。
#### 7. Hadoop的安装目录
Cloudera和Apache Hadoop的安装通常遵循相同的目录结构:
- 安装路径通常为 `/usr/lib/hadoop-0.20/`。
- 这个路径包含了Hadoop的主要组件和服务。
#### 8. Hadoop核心组件的端口号
- Namenode:端口70
- Jobtracker:端口30
- Tasktracker:端口60
这些端口号用于Hadoop组件之间的通信。
#### 9. Hadoop的核心配置文件
Hadoop通过以下三个XML文件来进行配置:
- `core-site.xml`:包含基本配置,如Hadoop文件系统的默认FS URI。
- `hdfs-site.xml`:包含HDFS相关的配置。
- `mapred-site.xml`:包含MapReduce框架的配置。
#### 10. RAM溢出因子
RAM溢出因子是指MapReduce任务在内存中处理的数据量超过阈值后溢出到磁盘的过程。
- 这个参数决定了数据何时从内存溢出到磁盘文件中。
#### 11. fs.mapr.working.dir
- `fs.mapr.working.dir`是一个配置项,用于指定Hadoop作业的工作目录。
- 它通常用于存储中间结果或其他临时文件。
#### 12. hdfs-site.xml的关键配置
`hdfs-site.xml`文件中的关键配置包括:
- `dfs.name.dir`:指定NameNode存储元数据的目录。
- `dfs.data.dir`:指定DataNode存储数据块的目录。
- `fs.checkpoint.dir`:用于配置Secondary NameNode的检查点目录。
#### 13. Hadoop命令操作
- 使用`jps`命令可以查看当前运行的Hadoop守护进程。
- 重启NameNode可以通过执行特定的脚本命令来实现,例如使用`stop-all.sh`停止所有服务,再使用`start-all.sh`重新启动。
#### 14. 文件系统检查(Fsck)
Fsck(FileSystem Check)是一个用于检查HDFS健康状况的工具。
- 可以通过命令行工具`hadoop fsck /`来执行,它会报告文件系统的状态,包括损坏的块和副本的数量。
#### 15. 查看Namenode状态
- 使用命令`/etc/init.d/hadoop-0.20-namenodestatus`或`jps`命令来检查Namenode是否正常运行。
#### 16. 查找JobTracker
- 通过`mapred.job.tracker`配置项可以确定哪个节点是JobTracker。
#### 17. 查找Namenode
- 若要在Web浏览器中查看Namenode的状态,可以访问`http://namenode-ip:50070`。
以上知识点涵盖了Hadoop集群的不同运行模式、配置细节以及一些常用命令的操作方法,对于理解Hadoop的基本架构和技术细节具有重要意义。