当前位置: 首页 > news >正文

Hadoop面试题及详细答案 110题 (71-85)-- 集群部署与运维

前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux… 。

前后端面试题-专栏总目录

在这里插入图片描述

文章目录

  • 一、本文面试题目录
      • 71. 如何搭建一个Hadoop集群?(单机、伪分布式、完全分布式)
      • 72. Hadoop集群的硬件推荐配置是什么?
      • 73. Hadoop集群部署前需要做哪些准备工作?(如SSH免密、JDK安装等)
      • 74. 如何配置Hadoop的环境变量?
      • 75. 如何启动和停止Hadoop集群?(命令行操作)
      • 76. Hadoop集群的日志文件保存在哪里?如何查看?
      • 77. 如何监控Hadoop集群的健康状态?(如使用Ambari、Ganglia等)
      • 78. Hadoop集群中,NameNode或DataNode故障如何处理?
      • 79. 如何扩容或缩容Hadoop集群?
      • 80. Hadoop集群的安全配置有哪些?(如Kerberos认证)
      • 81. 如何备份和恢复Hadoop集群的元数据?
      • 82. Hadoop集群的常见故障有哪些?如何排查?
      • 83. 如何升级Hadoop集群的版本?
      • 84. Hadoop集群的性能调优有哪些方面?(如HDFS块大小、MapReduce并行度等)
      • 85. 如何配置Hadoop的HA(高可用)集群?
  • 二、110道Hadoop面试题目录列表

一、本文面试题目录

71. 如何搭建一个Hadoop集群?(单机、伪分布式、完全分布式)

Hadoop集群的搭建可分为单机模式、伪分布式模式和完全分布式模式,适用于不同场景(开发测试、生产环境等)。

  • 单机模式(默认模式)
    原理:Hadoop默认以单机模式运行,无需配置分布式文件系统,所有进程(如MapReduce任务)都在本地操作系统的JVM中运行,仅用于调试代码。
    搭建步骤:

    1. 安装JDK并配置环境变量(JAVA_HOME)。
    2. 下载Hadoop压缩包并解压(如hadoop-3.3.6.tar.gz)。
    3. 无需修改配置文件,直接运行hadoop version验证安装。
  • 伪分布式模式
    原理:在单台机器上模拟分布式集群,HDFS的NameNode、DataNode,YARN的ResourceManager、NodeManager等进程独立运行,但共用一台物理机,适用于开发和测试。
    搭建步骤(以Hadoop 3.x为例):

    1. 配置SSH免密登录(本地免密:ssh-keygen -t rsa,并将公钥加入~/.ssh/authorized_keys)。
    2. 修改Hadoop配置文件(位于$HADOOP_HOME/etc/hadoop):
      • core-site.xml:配置HDFS默认路径
        <configuration><property><name>fs.defaultFS</name><value>hdfs://localhost:9000</value></property>
        </configuration>
        
      • hdfs-site.xml:配置副本数(伪分布式设为1)
        <configuration><property><name>dfs.replication</name><value>1</value></property>
        </configuration>
        
      • mapred-site.xml:指定MapReduce运行在YARN上
        <configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property>
        </configuration>
        
      • yarn-site.xml:配置YARN资源管理器
        <configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.resourcemanager.hostname</name><value>localhost</value></property>
        </configuration>
        
    3. 格式化HDFS:hdfs namenode -format
    4. 启动集群:start-all.sh(或分别启动start-dfs.shstart-yarn.sh)。
    5. 验证:访问http://localhost:9870(HDFS Web界面)和http://localhost:8088(YARN Web界面)。
  • 完全分布式模式
    原理:多台物理机组成集群,分别担任NameNode、DataNode、ResourceManager等角色,适用于生产环境。
    搭建核心步骤:

    1. 准备多台机器(如1台Master,2台Slave),配置静态IP和主机名(/etc/hostname/etc/hosts)。
    2. 所有机器安装JDK和Hadoop,保持路径一致,并配置Master到所有Slave的SSH免密登录。
    3. 修改配置文件(核心配置如下):
      • workers(Hadoop 3.x):列出所有Slave节点的主机名。
      • core-site.xmlfs.defaultFS设为hdfs://Master主机名:9000
      • hdfs-site.xmldfs.replication设为3(生产环境推荐),并指定dfs.namenode.name.dirdfs.datanode.data.dir的存储路径。
      • yarn-site.xml:配置yarn.resourcemanager.hostname为Master主机名。
    4. 格式化NameNode(仅首次):hdfs namenode -format
    5. 启动集群:start-all.sh,通过jps命令检查各节点进程是否正常。

72. Hadoop集群的硬件推荐配置是什么?

Hadoop集群的硬件配置需根据数据规模、计算需求和预算综合考量,以下是不同场景的推荐配置:

  • 开发/测试环境(单机或伪分布式)

    • CPU:4核及以上(如Intel i5/i7)。
    • 内存:8GB及以上(Hadoop进程对内存需求较高)。
    • 硬盘:500GB SSD(提升本地文件操作效率)。
    • 操作系统:Linux(如Ubuntu、CentOS)。
  • 生产环境(完全分布式)

    1. NameNode节点(1-2台,HA架构需备用节点):
      • 角色特点:存储元数据,IO密集型(需快速处理元数据请求)。
      • 配置:
        • CPU:8核及以上(处理并发请求)。
        • 内存:32GB及以上(元数据缓存到内存,提升访问速度)。
        • 硬盘:2块1TB SSD(做RAID 1,保障元数据可靠性)。
    2. DataNode节点(数量根据数据量扩展,通常10台以上):
      • 角色特点:存储实际数据,计算任务主要运行节点,IO和CPU密集型。
      • 配置:
        • CPU:16核及以上(支持并行Map/Reduce任务)。
        • 内存:64GB及以上(避免内存不足导致任务失败)。
        • 硬盘:4-12块4TB SATA硬盘(HDD为主,成本低,适合大容量存储;无需RAID,依赖HDFS副本机制)。
    3. ResourceManager节点(1-2台,HA架构):
      • 角色特点:调度资源,CPU和内存需求中等。
      • 配置:
        • CPU:8核及以上。
        • 内存:16GB及以上。
    4. 网络
      • 节点间推荐10Gbps以太网(减少数据传输瓶颈),Master与Slave之间带宽优先。

73. Hadoop集群部署前需要做哪些准备工作?(如SSH免密、JDK安装等)

Hadoop集群部署前需完成以下准备工作,确保环境一致性和稳定性:

  • 1. 操作系统与环境检查

    • 所有节点安装Linux系统(推荐CentOS 7/8或Ubuntu 20.04,避免Windows,因Hadoop对Linux支持更完善)。
    • 关闭防火墙(或配置端口开放,如HDFS的9000、9870,YARN的8088等):
      # CentOS关闭防火墙
      systemctl stop firewalld
      systemctl disable firewalld
      
    • 禁用SELinux(避免权限限制):修改/etc/selinux/config,设置SELINUX=disabled,重启生效。
  • 2. JDK安装与配置

    • Hadoop依赖Java环境,需安装JDK 8(推荐,部分Hadoop版本支持JDK 11)。
    • 解压JDK包(如jdk-8u361-linux-x64.tar.gz)到指定路径(如/usr/local/jdk1.8)。
    • 配置环境变量(/etc/profile~/.bashrc):
      export JAVA_HOME=/usr/local/jdk1.8
      export PATH=$JAVA_HOME/bin:$PATH
      
    • 验证:java -version显示版本信息。
  • 3. 网络配置

    • 所有节点设置静态IP(如/etc/sysconfig/network-scripts/ifcfg-eth0)。
    • 配置主机名:修改/etc/hostname(如Master节点设为hadoop-master,Slave节点设为hadoop-slave1)。
    • 配置hosts文件:/etc/hosts中添加所有节点的IP与主机名映射:
      192.168.1.100 hadoop-master
      192.168.1.101 hadoop-slave1
      192.168.1.102 hadoop-slave2
      
  • 4. SSH免密登录配置

    • 所有节点安装SSH服务:yum install openssh-server(CentOS)或apt install openssh-server(Ubuntu)。
    • Master节点生成SSH密钥:ssh-keygen -t rsa(一路回车,无需密码)。
    • 将公钥分发到所有节点(包括自身):
      ssh-copy-id hadoop-master
      ssh-copy-id hadoop-slave1
      ssh-copy-id hadoop-slave2
      
    • 验证:ssh hadoop-slave1无需输入密码即可登录。
  • 5. 时间同步

    • 集群节点时间需一致,避免因时间差导致服务异常。
    • 安装NTP服务:yum install ntp,配置与公共NTP服务器同步(如pool.ntp.org),或搭建本地NTP服务器。
    • 手动同步(临时):ntpdate time.windows.com
  • 6. 关闭Swap分区

    • 禁用Swap(避免Hadoop进程使用swap影响性能):
      swapoff -a  # 临时关闭
      # 永久关闭:注释/etc/fstab中swap相关行
      

74. 如何配置Hadoop的环境变量?

配置Hadoop环境变量可简化命令操作,确保系统能识别Hadoop相关命令,步骤如下:

  1. 编辑环境变量配置文件
    推荐在全局配置文件(如/etc/profile)中设置,确保所有用户可使用:

    vi /etc/profile
    
  2. 添加Hadoop环境变量
    在文件末尾添加以下内容(路径需替换为实际Hadoop安装路径):

    # Hadoop环境变量
    export HADOOP_HOME=/usr/local/hadoop-3.3.6
    export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop  # 配置文件路径
    export HADOOP_MAPRED_HOME=$HADOOP_HOME
    export HADOOP_HDFS_HOME=$HADOOP_HOME
    export HADOOP_YARN_HOME=$HADOOP_HOME
    export JAVA_HOME=/usr/local/jdk1.8  # 需与JDK配置一致
    
  3. 生效环境变量
    执行以下命令使配置立即生效:

    source /etc/profile
    
  4. 验证配置
    输入hadoop version,若显示Hadoop版本信息,则环境变量配置成功:

    Hadoop 3.3.6
    Source code repository https://github.com/apache/hadoop.git -r ...
    

75. 如何启动和停止Hadoop集群?(命令行操作)

Hadoop集群的启动/停止可通过脚本快速操作,需在Master节点执行(假设已配置HADOOP_HOME环境变量)。

  • 启动集群

    1. 启动HDFS
      start-dfs.sh  # 启动NameNode、DataNode、Secondary NameNode
      
    2. 启动YARN
      start-yarn.sh  # 启动ResourceManager、NodeManager
      
    3. 一键启动所有服务(包含HDFS和YARN):
      start-all.sh
      
  • 停止集群

    1. 停止YARN
      stop-yarn.sh
      
    2. 停止HDFS
      stop-dfs.sh
      
    3. 一键停止所有服务
      stop-all.sh
      
  • 验证服务状态
    在各节点执行jps命令,查看进程是否正常启动:

    • Master节点应包含:NameNodeResourceManagerSecondaryNameNode(非HA架构)。
    • Slave节点应包含:DataNodeNodeManager

76. Hadoop集群的日志文件保存在哪里?如何查看?

Hadoop集群的日志分为服务日志(如NameNode、DataNode)和应用日志(如MapReduce任务),存储路径和查看方式如下:

  • 1. 服务日志(HDFS、YARN进程日志)

    • 存储路径:默认位于$HADOOP_HOME/logs(可通过HADOOP_LOG_DIR环境变量自定义)。
    • 日志文件命名规则:
      • NameNode日志:hadoop-<用户名>-namenode-<主机名>.log
      • DataNode日志:hadoop-<用户名>-datanode-<主机名>.log
      • ResourceManager日志:yarn-<用户名>-resourcemanager-<主机名>.log
    • 查看方式:
      # 查看NameNode实时日志
      tail -f $HADOOP_HOME/logs/hadoop-root-namenode-hadoop-master.log
      # 搜索错误信息
      grep "ERROR" $HADOOP_HOME/logs/hadoop-root-datanode-hadoop-slave1.log
      
  • 2. 应用日志(MapReduce/YARN任务日志)

    • 存储路径:
      • 任务运行时:$YARN_HOME/logs/userlogs/<ApplicationID>/(每个Container对应一个日志文件)。
      • 任务完成后:默认由Log Aggregation功能收集到HDFS(路径为/tmp/logs/<用户名>/logs/<ApplicationID>,需在yarn-site.xml中开启)。
    • 查看方式:
      1. 通过YARN Web界面(http://<ResourceManager主机名>:8088):找到对应Application,点击“Logs”查看。
      2. 命令行查看HDFS中的聚合日志:
        yarn logs -applicationId application_1620000000000_0001
        

77. 如何监控Hadoop集群的健康状态?(如使用Ambari、Ganglia等)

监控Hadoop集群需实时跟踪节点状态、资源使用率、任务进度等,常用工具如下:

  • 1. 内置Web界面

    • HDFS监控:访问http://<NameNode主机名>:9870,可查看集群总容量、已用空间、DataNode状态、块信息等。
    • YARN监控:访问http://<ResourceManager主机名>:8088,可查看集群资源(CPU、内存)使用情况、运行中的应用、节点状态等。
  • 2. Ambari(推荐生产环境)

    • 原理:Apache Ambari是开源的集群管理工具,支持Hadoop集群的部署、监控、告警和配置管理,提供可视化Web界面。
    • 特点:
      • 支持多组件监控(HDFS、YARN、Hive、Spark等)。
      • 实时显示节点健康状态、资源使用率,并可设置告警(如节点宕机、磁盘满)。
    • 使用步骤:
      1. 安装Ambari Server和Agent(需提前配置数据库,如MySQL)。
      2. 通过Ambari Web界面(默认http://<Ambari主机名>:8080)添加集群节点,选择需安装的服务。
      3. 在“Dashboard”查看集群概览,在“Hosts”查看节点详情。
  • 3. Ganglia

    • 原理:分布式监控系统,通过收集节点的CPU、内存、网络等指标,生成图表展示集群性能趋势。
    • 组成:
      • gmond(在每个节点运行,收集本地指标)。
      • gmetad(聚合所有gmond的数据)。
      • Web界面(展示监控图表)。
    • 特点:轻量级,适合监控大规模集群的资源使用趋势。
  • 4. Nagios

    • 原理:专注于告警的监控工具,可配置对Hadoop服务(如NameNode端口是否存活)、节点状态的检查,异常时通过邮件/短信告警。
    • 特点:告警机制灵活,可自定义监控脚本(如检查HDFS副本完整性)。

78. Hadoop集群中,NameNode或DataNode故障如何处理?

NameNode和DataNode是HDFS的核心组件,故障处理需根据角色特点采取不同策略:

  • 1. NameNode故障

    • 影响:NameNode存储元数据,故障会导致整个HDFS集群不可用(无法读写文件)。
    • 处理方法
      1. 非HA架构(依赖Secondary NameNode):
        • 停止所有HDFS服务:stop-dfs.sh
        • 从Secondary NameNode恢复元数据(Secondary NameNode定期合并edits和fsimage):
          # 将Secondary NameNode的元数据复制到NameNode的数据目录
          scp -r hadoop-secondary:/$HADOOP_HOME/dfs/namesecondary/* /$HADOOP_HOME/dfs/name/
          
        • 重启HDFS:start-dfs.sh
      2. HA架构(Active/Standby NameNode):
        • 自动故障转移:通过ZooKeeper监测Active NameNode状态,故障时Standby自动切换为Active。
        • 手动切换(若自动切换失败):
          hdfs haadmin -failover --forcefence --forceactive active-nn standby-nn
          
  • 2. DataNode故障

    • 影响:DataNode存储数据块,单节点故障不会导致数据丢失(依赖副本机制),但可能影响读写性能。
    • 处理方法
      1. 检查故障原因(如网络中断、磁盘损坏),修复后重启DataNode:
        hdfs --daemon start datanode
        
      2. 若节点无法修复(如硬件报废):
        • 从集群中移除节点:在workers文件中删除该节点主机名,重启HDFS。
        • HDFS会自动检测缺失的块,在其他DataNode上重新复制副本(通过Balancer均衡数据):
          hdfs balancer  # 平衡数据分布
          

79. 如何扩容或缩容Hadoop集群?

Hadoop集群支持动态扩容(增加节点)和缩容(移除节点),以适应数据量或计算需求的变化。

  • 1. 扩容集群(增加DataNode节点)
    步骤:

    1. 准备新节点:按照“集群部署前准备工作”配置新节点(安装JDK、Hadoop、SSH免密、时间同步等),确保与现有集群环境一致。
    2. 在新节点上配置Hadoop:复制Master节点的$HADOOP_HOME/etc/hadoop目录到新节点(保持配置一致)。
    3. 在Master节点的workers文件(Hadoop 3.x)中添加新节点的主机名。
    4. 启动新节点的DataNode和NodeManager:
      # 在新节点执行
      hdfs --daemon start datanode
      yarn --daemon start nodemanager
      
    5. 验证:通过HDFS Web界面(http://namenode:9870/datanode.html)查看新节点是否加入。
    6. 平衡数据:新节点加入后,使用Balancer将数据均匀分布到所有节点:
      hdfs balancer -threshold 10  # 数据不平衡率低于10%时停止
      
  • 2. 缩容集群(移除DataNode节点)
    步骤:

    1. 在Master节点标记待移除的节点(避免数据丢失):
      # 编辑hdfs-site.xml,添加待退役节点(临时生效)
      hdfs dfsadmin -decommission datanode-hostname start
      
    2. 监控退役进度:通过hdfs dfsadmin -decommission datanode-hostname status查看,当状态为“Decommissioned”时,节点上的数据已复制到其他节点。
    3. 停止待移除节点的服务:
      hdfs --daemon stop datanode
      yarn --daemon stop nodemanager
      
    4. 在Master节点的workers文件中删除该节点的主机名,使配置永久生效。

80. Hadoop集群的安全配置有哪些?(如Kerberos认证)

Hadoop集群默认安全性较低(如无认证机制),生产环境需配置以下安全措施:

  • 1. Kerberos认证

    • 原理:Kerberos是网络认证协议,通过密钥体系验证用户和服务身份,防止未授权访问。
    • 配置步骤:
      1. 部署Kerberos服务器(KDC),创建管理员账户和数据库。
      2. 为Hadoop服务(如NameNode、ResourceManager)和用户创建Kerberos主体(Principal)。
      3. 在Hadoop配置文件中开启Kerberos认证:
        • core-site.xml
          <property><name>hadoop.security.authentication</name><value>kerberos</value>
          </property>
          
        • hdfs-site.xml
          <property><name>dfs.namenode.kerberos.principal</name><value>hdfs/_HOST@EXAMPLE.COM</value>
          </property>
          
      4. 生成密钥表(keytab)并分发到各节点,确保服务可自动登录Kerberos。
  • 2. 授权控制(HDFS权限与ACLs)

    • HDFS文件系统支持类Unix权限(用户、组、其他权限),可通过命令设置:
      hdfs dfs -chmod 755 /user/data  # 设置目录权限
      
    • 高级授权:使用ACLs(访问控制列表)细化权限(如允许特定用户访问):
      hdfs dfs -setfacl -m user:alice:rwx /user/data  # 允许用户alice读写执行
      
  • 3. 数据加密

    • 传输加密:启用SSL/TLS加密Hadoop组件间的通信(如NameNode与DataNode),配置ssl-server.xmlssl-client.xml
    • 存储加密:HDFS支持透明数据加密(TDE),对敏感数据在写入时加密,读取时解密,需配置密钥管理服务(如KMS)。
  • 4. 审计日志

    • 开启HDFS和YARN的审计日志,记录用户操作(如文件创建、删除,任务提交),便于追溯安全事件:
      • hdfs-site.xml中配置dfs.audit.log.enabledtrue

81. 如何备份和恢复Hadoop集群的元数据?

HDFS的元数据(存储在NameNode)是集群的核心,需定期备份以防丢失,备份和恢复方法如下:

  • 1. 元数据备份
    元数据包含fsimage(元数据快照)和edits(操作日志),备份方式:

    1. 利用Secondary NameNode
      Secondary NameNode定期合并editsfsimage,生成新的fsimage,默认存储在dfs.namenode.name.dir配置的路径(如/hadoop/dfs/namesecondary),可定期复制该目录到备份存储(如异地服务器)。
    2. 手动备份
      # 手动触发元数据合并
      hdfs dfsadmin -saveNamespace
      # 复制合并后的元数据到备份目录
      cp -r $HADOOP_HOME/dfs/name/current /backup/hdfs_metadata/$(date +%Y%m%d)
      
    3. 定时任务:通过crontab配置每日自动备份:
      0 0 * * * hdfs dfsadmin -saveNamespace && cp -r /hadoop/dfs/name/current /backup/hdfs_metadata/$(date +%Y%m%d)
      
  • 2. 元数据恢复
    当NameNode的元数据损坏或丢失时,恢复步骤:

    1. 停止HDFS服务:stop-dfs.sh
    2. 清除NameNode现有元数据目录(如/hadoop/dfs/name/current)。
    3. 复制备份的元数据到NameNode的数据目录:
      cp -r /backup/hdfs_metadata/20240501/* /hadoop/dfs/name/current/
      
    4. 重启HDFS:start-dfs.sh
    5. 验证:通过hdfs dfs -ls /检查文件目录是否恢复正常。

82. Hadoop集群的常见故障有哪些?如何排查?

Hadoop集群常见故障及排查方法如下:

  • 1. NameNode无法启动

    • 可能原因:元数据损坏、端口被占用、权限不足。
    • 排查:
      • 查看NameNode日志($HADOOP_HOME/logs/hadoop-*-namenode-*.log),搜索“ERROR”关键词。
      • 检查元数据目录权限:ls -ld /hadoop/dfs/name,确保Hadoop用户有读写权限。
      • 检查端口9000(默认)是否被占用:netstat -tunlp | grep 9000, kill占用进程。
  • 2. DataNode启动后自动关闭

    • 可能原因:与NameNode通信失败、数据目录损坏、心跳超时。
    • 排查:
      • 检查DataNode日志,若显示“Invalid block pool ID”,可能是DataNode元数据与NameNode不一致,删除DataNode的数据目录(/hadoop/dfs/data)后重启。
      • 验证网络:ping namenode-hosttelnet namenode-host 9000,确保通信正常。
  • 3. YARN任务提交失败

    • 可能原因:资源不足(CPU/内存)、NodeManager未启动、Shuffle服务异常。
    • 排查:
      • 查看YARN Web界面(http://resourcemanager:8088),检查节点是否正常(“Nodes”页面)。
      • 查看任务日志:yarn logs -applicationId <AppID>,搜索失败原因(如“Container killed by YARN for exceeding memory limits”)。
      • 调整YARN资源配置(yarn-site.xml),如增加yarn.nodemanager.resource.memory-mb
  • 4. HDFS读写文件失败

    • 可能原因:副本不足、DataNode宕机、块损坏。
    • 排查:
      • 检查文件副本状态:hdfs fsck /path/to/file,若显示“MISSING”块,需修复:hdfs fsck /path/to/file -delete(删除损坏块)或等待HDFS自动复制。
      • 查看HDFS Web界面,确认DataNode是否正常在线。
  • 5. 集群时间同步问题

    • 可能原因:节点间时间差过大(超过30秒),导致Kerberos认证失败或任务调度异常。
    • 排查:
      • 检查各节点时间:date,若不一致,执行ntpdate ntp-server同步。

83. 如何升级Hadoop集群的版本?

Hadoop版本升级需谨慎操作,避免数据丢失或服务中断,推荐“滚动升级”(不停止整个集群):

  • 前提条件

    • 升级前备份元数据(fsimageedits)和配置文件。
    • 确保集群处于健康状态:hdfs dfsadmin -report显示所有DataNode正常。
  • 升级步骤(以2.x升级到3.x为例)

    1. 准备新Hadoop版本
      下载目标版本(如hadoop-3.3.6.tar.gz),解压到新目录(如/usr/local/hadoop-3.3.6),复制旧版本的配置文件(etc/hadoop)到新版本,并根据官方文档修改不兼容的配置(如3.x中部分配置项名称变更)。

    2. 滚动升级HDFS

      • 升级NameNode:
        # 停止旧版本NameNode
        hdfs --daemon stop namenode
        # 使用新版本启动NameNode(升级模式)
        export HADOOP_HOME=/usr/local/hadoop-3.3.6
        $HADOOP_HOME/bin/hdfs --daemon start namenode -upgrade
        
      • 升级DataNode(逐个节点,避免数据不可用):
        # 停止旧版本DataNode
        hdfs --daemon stop datanode
        # 启动新版本DataNode
        $HADOOP_HOME/bin/hdfs --daemon start datanode
        
      • 验证HDFS状态:hdfs dfsadmin -upgradeProgress status,确认所有DataNode升级完成。
    3. 滚动升级YARN

      • 升级ResourceManager和NodeManager,步骤类似HDFS,先升级Master节点,再逐个升级Slave节点。
    4. 完成升级

      • 确认所有组件正常运行后,提交升级:
        hdfs dfsadmin -finalizeUpgrade
        
      • 清理旧版本文件,更新环境变量HADOOP_HOME为新版本路径。

84. Hadoop集群的性能调优有哪些方面?(如HDFS块大小、MapReduce并行度等)

Hadoop集群性能调优需从HDFS、MapReduce、YARN等组件综合优化,关键方向如下:

  • 1. HDFS调优

    • 块大小(Block Size):默认128MB(Hadoop 3.x),大文件可增大至256MB,减少块数量和元数据开销;小文件多则保持默认或减小,避免块过多占用NameNode内存。
      • 配置:hdfs-site.xmldfs.blocksize
    • 副本数(Replication):根据数据重要性和集群规模调整,生产环境通常设为3(默认),非重要数据可设为2以节省空间。
    • DataNode缓存:将热点数据缓存到DataNode内存(dfs.datanode.max.locked.memory),提升读取速度。
    • 平衡器(Balancer):定期运行hdfs balancer,避免数据集中在少数节点导致IO瓶颈。
  • 2. MapReduce调优

    • Map/Reduce并行度
      • Map数量:由输入文件的块数决定,可通过mapreduce.job.maps调整(建议每个Map处理128-256MB数据)。
      • Reduce数量:默认1,根据输出数据量调整(通常设为集群节点数的1-2倍),通过mapreduce.job.reduces配置。
    • Shuffle优化
      • 增大Map端缓冲区(mapreduce.task.io.sort.mb,默认100MB),减少溢写次数。
      • 启用压缩(如Snappy):mapreduce.map.output.compress=true,减少Shuffle阶段数据传输量。
    • Combiner使用:对适合聚合的场景(如WordCount)启用Combiner,减少Map输出数据量。
  • 3. YARN资源调优

    • 资源分配:根据节点硬件配置调整yarn.nodemanager.resource.memory-mb(节点总内存)和yarn.nodemanager.resource.cpu-vcores(CPU核心数)。
    • Container资源:设置单个Container的内存(yarn.scheduler.minimum-allocation-mb)和CPU(yarn.scheduler.minimum-allocation-vcores),避免资源浪费。
    • 调度器选择:生产环境推荐Capacity Scheduler或Fair Scheduler,而非默认的FIFO,以支持多队列资源隔离。
  • 4. 小文件处理

    • 使用HAR(Hadoop Archive)合并小文件:hadoop archive -archiveName files.har -p /input /output
    • 启用HDFS Federation,通过多个NameNode分担小文件元数据压力。

85. 如何配置Hadoop的HA(高可用)集群?

Hadoop HA(High Availability)架构通过部署备用节点避免单点故障,以HDFS HA和YARN HA为例:

  • HDFS HA配置(基于QJM的共享存储)
    原理:部署两个NameNode(Active和Standby),通过Quorum Journal Manager(QJM)共享edits日志,确保元数据一致,ZooKeeper负责故障检测和自动切换。

    配置步骤:

    1. 配置core-site.xml:指定HDFS命名服务(如mycluster

      <property><name>fs.defaultFS</name><value>hdfs://mycluster</value>
      </property>
      
    2. 配置hdfs-site.xml

      • 定义NameNode节点:
        <property><name>dfs.nameservices</name><value>mycluster</value>
        </property>
        <property><name>dfs.ha.namenodes.mycluster</name><value>nn1,nn2</value>  <!-- nn1:Active, nn2:Standby -->
        </property>
        <property><name>dfs.namenode.rpc-address.mycluster.nn1</name><value>node1:8020</value>
        </property>
        <property><name>dfs.namenode.rpc-address.mycluster.nn2</name><value>node2:8020</value>
        </property>
        
      • 配置QJM共享存储(至少3个JournalNode节点):
        <property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>
        </property>
        
      • 启用自动故障转移:
        <property><name>dfs.ha.automatic-failover.enabled</name><value>true</value>
        </property>
        
    3. 配置ZooKeeper:部署ZooKeeper集群,HDFS通过ZKFC(ZooKeeper Failover Controller)监测NameNode状态。

    4. 初始化HA集群

      • 格式化NameNode:hdfs namenode -format,并复制元数据到Standby节点。
      • 初始化ZKFC:hdfs zkfc -formatZK
      • 启动HDFS:start-dfs.sh,自动选举Active NameNode。
  • YARN HA配置
    原理:部署两个ResourceManager(Active和Standby),通过ZooKeeper实现状态同步和故障转移。

    配置步骤(yarn-site.xml):

    <property><name>yarn.resourcemanager.ha.enabled</name><value>true</value>
    </property>
    <property><name>yarn.resourcemanager.cluster-id</name><value>yarncluster</value>
    </property>
    <property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value>
    </property>
    <property><name>yarn.resourcemanager.hostname.rm1</name><value>node1</value>
    </property>
    <property><name>yarn.resourcemanager.hostname.rm2</name><value>node2</value>
    </property>
    <property><name>yarn.resourcemanager.zk-address</name><value>node1:2181,node2:2181,node3:2181</value>
    </property>
    

    启动YARN:start-yarn.sh,通过yarn rmadmin -getServiceState rm1查看节点状态。

二、110道Hadoop面试题目录列表

文章序号Hadoop面试题110道
1Hadoop面试题及详细答案110道(01-15)
2Hadoop面试题及详细答案110道(16-35)
3Hadoop面试题及详细答案110道(36-55)
4Hadoop面试题及详细答案110道(56-70)
5Hadoop面试题及详细答案110道(71-85)
6Hadoop面试题及详细答案110道(86-95)
7Hadoop面试题及详细答案110道(96-105)
8Hadoop面试题及详细答案110道(106-110)
http://www.dtcms.com/a/464738.html

相关文章:

  • 5-1〔OSCP ◈ 研记〕❘ SQL注入攻击▸SQL注入理论基础
  • 南充市企业网站建设wordpress极客主题
  • 企业做小红书关键词搜索排名推广时,怎么找到小红书上有一定搜索量但竞争度低的蓝海词?
  • 数据仓库与数据挖掘基础知识
  • 鸿蒙:使用Rating组件实现五角星打分评价
  • 外国人可以在中国做网站吗做个网站得花多少钱
  • 双均线策略
  • 【vLLM 学习】Neuron
  • 网站做行业认证好处施工企业在施工过程中发现工程设计图纸存在差错的
  • 迅为RK3576开发板挂载Windows以及虚拟机Ubuntu测试
  • 第1篇:创建基础电商AI客服
  • 【MyBatis从入门到入土】告别JDBC原始时代:零基础MyBatis极速上手指南
  • MaxScript 科研绘图教程:从数据到精确的可视化
  • org.apache.http.conn.HttpHostConnectException: Connect to localhost:8086
  • 深度学习入门(一)——从神经元到损失函数,一步步理解前向传播(上)
  • 沧州网站制作公司宁波网站的优化
  • 工程承包去哪个网站做网站的步骤 优帮云
  • 网站建设课程wordpress 去掉左上角
  • 怎么创建一个博客网站wordpress电影下载
  • 搭建网站案例精粹北京cos网站
  • 云南澄江县建设局网站做网站江门
  • 企业外贸网站建设互联网创业项目概述
  • 关于企业网站建设数据现状分析重庆百度推广关键词优化
  • 手机网站免费网站安全建设费用预算表
  • 网站seo推广计划网页制作工具可以分为
  • 北京企业建设网站制作建设网站总经理讲话范本
  • 沂南网站设计不用wordpress
  • 长春网站建设吉网传媒实力牜网页视频下载安卓
  • 用书籍上的文章做网站更新南海建设工程交易中心网站
  • 高品质网站设计制作竞价排名是按照什么来计费的