Linux下Hadoop资源管理的核心流程与实践
在Linux环境下管理Hadoop资源前,需完成Hadoop集群的安装与环境设置:
/usr/local/hadoop-3.3.1)。~/.bashrc或/etc/profile,添加HADOOP_HOME(Hadoop安装路径)和PATH(包含Hadoop的bin、sbin目录),执行source命令使变量生效。Hadoop的资源管理主要由**YARN(Yet Another Resource Negotiator)**负责,需通过配置文件调整资源分配策略:
YARN基础配置(yarn-site.xml):
yarn.resourcemanager.hostname(如resourcemanager-host)。yarn.nodemanager.aux-services(设为mapreduce_shuffle,支持MapReduce任务的shuffle操作)。yarn.nodemanager.resource.memory-mb(节点可用内存,如4096MB)、yarn.nodemanager.resource.cpu-vcores(节点可用CPU核心数,如4)。yarn.scheduler.minimum-allocation-mb(单个容器最小内存,如1024MB)、yarn.scheduler.maximum-allocation-mb(单个容器最大内存,如8192MB),避免资源碎片化或过度分配。MapReduce配置(mapred-site.xml):
mapreduce.framework.name(设为yarn)。mapreduce.jobhistory.address(如jobhistory-host:10020)、mapreduce.jobhistory.webapp.address(如jobhistory-host:19888),用于存储和查看任务历史。HDFS配置(hdfs-site.xml):
dfs.namenode.name.dir(NameNode元数据存储路径,如/data/namenode)、dfs.datanode.data.dir(DataNode数据存储路径,如/data/datanode)。dfs.replication(数据块副本数,如3,根据集群规模调整,保障数据容错)。通过**容量调度器(Capacity Scheduler)或公平调度器(Fair Scheduler)**实现资源的多用户/多任务分配:
容量调度器(推荐):
编辑capacity-scheduler.xml,定义队列及资源占比。例如,创建default(默认队列,占70%资源)和high_priority(高优先级队列,占30%资源)两个队列,设置yarn.scheduler.capacity.root.default.capacity=70、yarn.scheduler.capacity.root.high_priority.capacity=30,并配置yarn.scheduler.capacity.root.default.minimum-user-limit-percent=50(每个用户在队列中至少获得50%资源),保障多用户公平性。
公平调度器:
编辑fair-scheduler.xml,通过<queue>标签定义队列,设置minResources(最小资源)和maxResources(最大资源),实现动态资源分配(如空闲资源自动分配给等待任务)。
根据集群硬件(内存、CPU)和任务需求(Map/Reduce任务复杂度),调整以下核心参数:
容器资源限制:
yarn.scheduler.minimum-allocation-mb(容器最小内存,如256MB)、yarn.scheduler.maximum-allocation-mb(容器最大内存,如3072MB),避免单个任务占用过多资源或资源浪费。
ApplicationMaster资源:
yarn.app.mapreduce.am.resource.mb(ApplicationMaster内存,如512MB)、yarn.app.mapreduce.am.command-opts(JVM堆大小,如-Xmx384m,设置为内存的75%左右,避免OOM)。
Map/Reduce任务资源:
mapreduce.map.memory.mb(Map任务内存,如256MB)、mapreduce.reduce.memory.mb(Reduce任务内存,如512MB)、mapreduce.map.java.opts(Map任务JVM堆大小,如-Xmx200m)、mapreduce.reduce.java.opts(Reduce任务JVM堆大小,如-Xmx400m),根据任务数据量和复杂度调整,确保任务稳定执行。
通过工具和命令实时监控集群资源状态,及时排查问题:
Web界面监控:
http://namenode-host:50070):查看HDFS存储状态(如数据块数量、副本率)。http://resourcemanager-host:8088):查看集群资源使用情况(如内存、CPU占用)、运行中的应用程序列表及资源分配详情。命令行工具:
yarn node -list:列出所有NodeManager节点及其状态(如活跃/失效)。yarn application -list:查看所有运行中的应用程序(如MapReduce作业),包括应用ID、用户、队列、资源使用情况。yarn application -kill <application_id>:终止指定ID的应用程序(如长时间占用资源的失败任务)。日志管理:
启用日志聚合(yarn.log-aggregation-enable=true),设置日志滚动间隔(yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds=300,如300秒),将节点日志集中存储到HDFS,便于统一查看和分析(如通过yarn logs -applicationId <application_id>命令获取应用日志)。
hdfs dfs -chmod、hdfs dfs -chown),控制用户对HDFS目录和文件的访问权限(如仅允许管理员修改核心配置文件)。kinit命令获取票据),防止未授权用户访问集群资源,保障数据安全。