本文从 Hadoop 高级任务调度、日志分析与监控、脚本自动化以及安全策略管理 的角度,进一步拓展实用技巧。
–
一、Hadoop 高级任务调度
1. 使用 Capacity Scheduler 动态调整任务优先级
- 命令:
yarn application -appId <ApplicationID> -priority <PRIORITY_LEVEL>
- 功能:
允许管理员在 Capacity Scheduler 环境下动态调整任务优先级。 - 使用场景:
对于紧急任务,提升其优先级以优先完成。
2. 限制单用户的任务并发量
- 配置文件修改:
编辑capacity-scheduler.xml
:<property> <name>yarn.scheduler.capacity.maximum-am-resource-percent</name> <value>0.2</value> </property>
- 功能:
限制单用户的 Application Master 内存比例,防止资源独占。 - 使用场景:
确保多用户共享资源时的公平性。
3. 动态管理队列资源分配
- 命令:
yarn rmadmin -updateNodeResource <NodeID> memory=<MB> vcores=<CORES>
- 功能:
动态调整节点的资源配置。 - 使用场景:
临时增加资源以支持大规模任务。
4. 使用 Preemption 提高资源利用率
- 配置文件:
编辑capacity-scheduler.xml
:<property> <name>yarn.scheduler.capacity.resource-calculator</name> <value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value> </property>
- 功能:
启用资源抢占机制。 - 使用场景:
高优先级任务可以主动抢占低优先级任务的资源。
二、日志分析与监控
1. 查看运行任务的详细日志
- 命令:
yarn logs -applicationId <ApplicationID>
- 功能:
检查指定任务的执行日志。 - 使用场景:
定位任务失败的原因或性能问题。
2. 实时监控任务进度
- 命令:
mapred job -status <JobID>
- 功能:
查看指定 MapReduce 任务的实时状态。 - 使用场景:
用于大规模任务执行过程中的监控。
3. 定位丢失的任务或文件
- 命令:
hdfs fsck / -files -blocks -locations
- 功能:
检查 HDFS 中的文件完整性。 - 使用场景:
定位丢失块并进行修复。
4. 定期收集节点运行状态
- 脚本示例:
#!/bin/bash nodemanager_log="/var/log/hadoop-yarn/nodemanager.log" grep "ERROR" $nodemanager_log | tail -10 > recent_errors.log echo "节点最近错误日志已保存到 recent_errors.log"
- 功能:
监控节点日志中的错误信息。 - 使用场景:
自动记录异常信息,便于排查。
三、脚本自动化操作
1. 自动迁移旧数据
- 脚本示例:
#!/bin/bash src_dir="/hdfs/source_path" dest_dir="/hdfs/archive_path/$(date +%Y%m%d)" hdfs dfs -mv $src_dir/* $dest_dir/ echo "数据迁移完成:$dest_dir"
- 功能:
定期将 HDFS 中的旧数据归档。 - 使用场景:
减少活跃目录的数据量,提高文件操作效率。
2. 自动备份元数据
- 脚本示例:
#!/bin/bash metadata_dir="/hadoop/hdfs/namenode/current" backup_dir="/backup/namenode/$(date +%Y%m%d)" cp -r $metadata_dir $backup_dir echo "NameNode元数据已备份至:$backup_dir"
- 功能:
定期备份 NameNode 元数据。 - 使用场景:
避免因元数据丢失导致集群不可用。
3. 清理无用的临时文件
- 脚本示例:
#!/bin/bash hdfs dfs -rm -r /tmp/* echo "临时文件已清理"
- 功能:
清理 HDFS 中的临时文件。 - 使用场景:
防止/tmp
目录因文件过多而影响性能。
4. 定时压缩归档历史日志
- 脚本示例:
#!/bin/bash log_dir="/hadoop/logs" tar -czf $log_dir/archive_$(date +%Y%m%d).tar.gz $log_dir/*.log echo "历史日志已归档"
- 功能:
定期压缩 Hadoop 日志。 - 使用场景:
减少日志占用的磁盘空间。
四、安全策略管理
1. 设置访问控制列表(ACL)
- 命令:
hdfs dfs -setfacl -m user:username:r-x /path/to/dir
- 功能:
为特定用户设置 HDFS 目录的权限。 - 使用场景:
控制敏感数据的访问权限。
2. 启用 Kerberos 身份认证
- 配置文件修改:
编辑core-site.xml
,添加:<property> <name>hadoop.security.authentication</name> <value>kerberos</value> </property>
- 功能:
开启 Kerberos 认证机制。 - 使用场景:
提高集群安全性,防止非法访问。
3. 检查用户权限
- 命令:
hdfs dfs -getfacl /path/to/dir
- 功能:
查看 HDFS 目录或文件的权限列表。 - 使用场景:
确保权限配置符合预期。
4. 加密存储敏感数据
- 命令:
hdfs crypto -createZone -keyName myKey -path /secure/data
- 功能:
创建加密区域并设置访问密钥。 - 使用场景:
存储敏感数据时保护隐私。