1. 首页 > Hadoop教程 > 正文

大数据教程FG172-Hadoop生产环境最佳实践

本文详细介绍Hadoop生产环境最佳实践,包括硬件规划、操作系统配置、HDFS/YARN/Hive优化等内容,参考Hadoop官方最佳实践文档,适合大数据架构师和运维工程师使用。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 最佳实践概述

最佳实践是指在生产环境中经过验证的、能带来最佳效果的方法和经验。学习交流加群风哥微信: itpux-com

最佳实践目标:

  • 提高性能
  • 保证稳定
  • 降低成本
  • 简化运维
  • 保障安全

1.2 设计原则

设计原则:

# 设计原则
1. 高可用
– 关键组件HA
– 无单点故障
– 故障自动切换

2. 高性能
– 合理的硬件配置
– 优化的参数配置
– 高效的存储格式

3. 高可靠
– 数据多副本
– 定期备份
– 灾难恢复

4. 可扩展
– 线性扩展
– 模块化设计
– 预留资源

5. 易运维
– 完善的监控
– 清晰的日志
– 自动化脚本

1.3 标准与规范

标准与规范:

风哥提示:规范很重要,能减少问题,提高效率。建立完善的规范体系,并严格执行。更多学习教程公众号风哥教程itpux_com

Part02-生产环境规划与建议

2.1 硬件规划最佳实践

硬件规划最佳实践:

# NameNode配置
CPU:
– 2路16核或更高
– 高主频优先

内存:
– 64GB-256GB
– 堆内存配置合适

磁盘:
– OS盘:2块SSD RAID1
– NameNode元数据盘:4块SSD RAID10
– JournalNode:3块SSD RAID1

网络:
– 2块万兆网卡绑定

# DataNode配置
CPU:
– 2路12-24核
– 按需配置

内存:
– 32GB-128GB
– 根据负载调整

磁盘:
– OS盘:2块SSD RAID1
– 数据盘:12-24块 SATA/SAS
– JBOD模式(不做RAID)

网络:
– 2块万兆网卡绑定

# ResourceManager配置
CPU:
– 2路16核或更高

内存:
– 32GB-64GB

磁盘:
– 2块SSD RAID1

网络:
– 2块万兆网卡绑定

# 硬件选型建议
CPU:
– 优先选择Intel Xeon
– 主频高优先
– 核数适中

内存:
– DDR4 或更高
– ECC内存
– 双列或多列

磁盘:
– 数据盘:大容量高转速
– 元数据盘:SSD
– OS盘:SSD

网络:
– 万兆网络起步
– 建议25G或40G
– 网卡绑定

2.2 网络规划最佳实践

网络规划最佳实践:

网络最佳实践:

  • 网络架构:Spine-Leaf架构
  • 带宽:万兆起步,建议25G
  • 网卡绑定:bond4模式,LACP
  • 网络隔离:业务网络、管理网络、数据网络分离

from bigdata视频:www.itpux.com

2.3 操作系统配置最佳实践

操作系统配置最佳实践:

# 系统选择
推荐系统:
– Oracle Linux 9.3
– RHEL 9.3 / 8.x / 7.x
– CentOS Stream
– 麒麟操作系统 Kylin v10 SP3

# 系统参数配置
cat > /etc/sysctl.d/99-hadoop.conf << ‘EOF’
# 文件描述符
fs.file-max = 6815744

# 网络优化
net.core.somaxconn = 1024
net.core.netdev_max_backlog = 5000
net.core.rmem_default = 131071
net.core.wmem_default = 131071
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 131072 16777216
net.ipv4.tcp_wmem = 4096 131072 16777216
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_moderate_rcvbuf = 1
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.tcp_congestion_control = cubic

# 虚拟内存
vm.swappiness = 10
vm.dirty_ratio = 20
vm.dirty_background_ratio = 10
vm.overcommit_memory = 1
vm.overcommit_ratio = 50

# 内核参数
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.msgmni = 2878
kernel.msgmax = 8192
kernel.msgmnb = 16384
EOF

sysctl -p /etc/sysctl.d/99-hadoop.conf

# limits配置
cat > /etc/security/limits.d/99-hadoop.conf << ‘EOF’
hdfs soft nofile 655360
hdfs hard nofile 655360
hdfs soft nproc 655360
hdfs hard nproc 655360
yarn soft nofile 655360
yarn hard nofile 655360
yarn soft nproc 655360
yarn hard nproc 655360
hive soft nofile 655360
hive hard nofile 655360
hive soft nproc 655360
hive hard nproc 655360
hbase soft nofile 655360
hbase hard nofile 655360
hbase soft nproc 655360
hbase hard nproc 655360
EOF

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭SELinux
setenforce 0
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config

# 关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo “transparent_hugepage=never” >> /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg

# 配置swap
swapoff -a
# 注释/etc/fstab中的swap行

# 配置IO调度
echo deadline > /sys/block/sda/queue/scheduler
echo deadline > /sys/block/sdb/queue/scheduler
# 配置udev规则永久生效

# 配置NTP
yum install -y chrony
systemctl start chronyd
systemctl enable chronyd
# 配置chrony.conf

Part03-生产环境项目实施方案

3.1 HDFS最佳实践

3.1.1 HDFS配置优化

# hdfs-site.xml优化配置
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
<property>
<name>dfs.datanode.handler.count</name>
<value>10</value>
</property>
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>4096</value>
</property>
<property>
<name>dfs.image.transfer.timeout</name>
<value>600000</value>
</property>
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>false</value>
</property>
<property>
<name>dfs.heartbeat.interval</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.heartbeat.recheck-interval</name>
<value>300000</value>
</property>

# NameNode堆内存
export HDFS_NAMENODE_OPTS=”-Xms8192m -Xmx8192m -XX:+UseG1GC -XX:MaxGCPauseMillis=200″

# DataNode堆内存
export HDFS_DATANODE_OPTS=”-Xms4096m -Xmx4096m -XX:+UseG1GC”

# 小文件合并
SET hive.merge.mapfiles=true;
SET hive.merge.mapredfiles=true;
SET hive.merge.size.per.task=256000000;
SET hive.merge.smallfiles.avgsize=16000000;

# 使用列式存储
# ORC格式
STORED AS ORC
TBLPROPERTIES (“orc.compress”=”SNAPPY”)

# Parquet格式
STORED AS PARQUET
TBLPROPERTIES (“parquet.compression”=”SNAPPY”)

3.2 YARN最佳实践

3.2.1 YARN配置优化

# yarn-site.xml优化配置
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>163840</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>32</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>16384</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>16</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>2592000</value>
</property>

# Capacity Scheduler配置
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>production,development,test</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.production.capacity</name>
<value>60</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.production.maximum-capacity</name>
<value>80</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.development.capacity</name>
<value>25</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.development.maximum-capacity</name>
<value>40</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.test.capacity</name>
<value>15</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.test.maximum-capacity</name>
<value>25</value>
</property>

# ResourceManager堆内存
export YARN_RESOURCEMANAGER_OPTS=”-Xms4096m -Xmx4096m -XX:+UseG1GC”

# NodeManager堆内存
export YARN_NODEMANAGER_OPTS=”-Xms2048m -Xmx2048m -XX:+UseG1GC”

3.3 Hive最佳实践

3.3.1 Hive配置优化

# hive-site.xml优化配置
<property>
<name>hive.execution.engine</name>
<value>tez</value>
</property>
<property>
<name>hive.tez.container.size</name>
<value>4096</value>
</property>
<property>
<name>hive.tez.cpu.vcores</name>
<value>2</value>
</property>
<property>
<name>hive.cbo.enable</name>
<value>true</value>
</property>
<property>
<name>hive.compute.query.using.stats</name>
<value>true</value>
</property>
<property>
<name>hive.stats.fetch.column.stats</name>
<value>true</value>
</property>
<property>
<name>hive.stats.fetch.partition.stats</name>
<value>true</value>
</property>
<property>
<name>hive.vectorized.execution.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.vectorized.execution.reduce.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.auto.convert.join</name>
<value>true</value>
</property>
<property>
<name>hive.auto.convert.join.noconditionaltask</name>
<value>true</value>
</property>
<property>
<name>hive.auto.convert.join.noconditionaltask.size</name>
<value>25000000</value>
</property>
<property>
<name>hive.optimize.skewjoin</name>
<value>true</value>
</property>
<property>
<name>hive.skewjoin.key</name>
<value>100000</value>
</property>
<property>
<name>hive.groupby.skewindata</name>
<value>true</value>
</property>
<property>
<name>hive.exec.parallel</name>
<value>true</value>
</property>
<property>
<name>hive.exec.parallel.thread.number</name>
<value>8</value>
</property>
<property>
<name>hive.exec.dynamic.partition</name>
<value>true</value>
</property>
<property>
<name>hive.exec.dynamic.partition.mode</name>
<value>nonstrict</value>
</property>
<property>
<name>hive.merge.mapfiles</name>
<value>true</value>
</property>
<property>
<name>hive.merge.mapredfiles</name>
<value>true</value>
</property>
<property>
<name>hive.merge.size.per.task</name>
<value>256000000</value>
</property>

# 收集统计信息
ANALYZE TABLE fgedu_db.fgedu_user COMPUTE STATISTICS;
ANALYZE TABLE fgedu_db.fgedu_user PARTITION (dt=’2024-04-08′) COMPUTE STATISTICS;
ANALYZE TABLE fgedu_db.fgedu_user COMPUTE STATISTICS FOR COLUMNS user_id, name, city;

# HiveServer2堆内存
export HIVE_SERVER2_HEAPSIZE=4096

# Metastore堆内存
export HIVE_METASTORE_HEAPSIZE=2048

风哥提示:配置优化是一个持续的过程,要根据实际运行情况调整。不要过度优化,先保证稳定,再逐步优化。学习交流加群风哥QQ113257174

Part04-生产案例与实战讲解

4.1 性能优化实战

4.1.1 性能优化

# 性能优化步骤
1. 监控分析
– 收集性能指标
– 分析瓶颈
– 确定优化方向

2. 参数调优
– 调整JVM参数
– 调整Hadoop参数
– 调整应用参数

3. SQL优化
– 优化SQL语句
– 使用分区
– 使用列式存储

4. 资源优化
– 合理分配资源
– 调整队列
– 调整并行度

# JVM优化
# NameNode JVM
export HDFS_NAMENODE_OPTS=”-Xms16384m -Xmx16384m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=45 -XX:+ParallelRefProcEnabled”

# DataNode JVM
export HDFS_DATANODE_OPTS=”-Xms8192m -Xmx8192m -XX:+UseG1GC”

# ResourceManager JVM
export YARN_RESOURCEMANAGER_OPTS=”-Xms8192m -Xmx8192m -XX:+UseG1GC”

# SQL优化示例
— 优化前
SELECT * FROM fgedu_db.fgedu_user_log;

— 优化后
SELECT user_id, event_type, page
FROM fgedu_db.fgedu_user_log
WHERE dt BETWEEN ‘2024-04-01’ AND ‘2024-04-08’;

— 小表JOIN大表
— 小表放左边
SELECT /*+ MAPJOIN(u) */ *
FROM fgedu_db.fgedu_user u
JOIN fgedu_db.fgedu_user_log l ON u.user_id = l.user_id
WHERE l.dt = ‘2024-04-08’;

— 使用分区
SELECT * FROM fgedu_db.fgedu_user_log WHERE dt = ‘2024-04-08’;

— 使用ORC/Parquet
CREATE TABLE … STORED AS ORC TBLPROPERTIES (“orc.compress”=”SNAPPY”);

— 收集统计信息
ANALYZE TABLE fgedu_db.fgedu_user COMPUTE STATISTICS;

4.2 稳定性保障实战

4.2.1 稳定性保障

# 高可用配置
# HDFS HA
– NameNode HA
– 自动故障转移
– JournalNode QJM

# YARN HA
– ResourceManager HA
– 自动故障转移

# HBase HA
– HMaster HA
– RegionServer多副本

# 数据安全
# 副本策略
dfs.replication=3

# 回收站
fs.trash.interval=1440
fs.trash.checkpoint.interval=1440

# 快照
hdfs dfsadmin -allowSnapshot /path
hdfs dfs -createSnapshot /path snapshot_name

# 备份
# 元数据备份
# HDFS数据备份
# 配置定期备份

# 监控告警
# 监控指标
– 服务状态
– 资源使用
– 性能指标
– 错误日志

# 告警规则
– 服务宕机
– 资源使用率过高
– 存储空间不足
– 关键错误

# 应急预案
# 常见故障预案
– NameNode故障
– DataNode故障
– ResourceManager故障
– 网络故障
– 磁盘故障

# 应急演练
– 定期演练
– 验证预案
– 优化流程

4.3 安全加固实战

4.3.1 安全加固

# 认证
# Kerberos认证
– 配置Kerberos
– 配置各组件Kerberos
– 验证认证

# LDAP用户管理
– 集成LDAP
– 用户统一管理
– 权限管理

# 授权
# Ranger授权
– 安装Ranger
– 配置各组件Plugin
– 配置权限策略

# Sentry授权
– 安装Sentry
– 配置权限
– 管理角色

# 审计
# 审计日志
– 启用审计
– 配置审计日志
– 定期审计

# Ranger Audit
– 配置审计存储
– 配置告警
– 定期分析

# 加密
# 传输加密
– TLS/SSL
– HTTPS
– SASL

# 存储加密
– HDFS透明加密
– 列级加密
– 应用层加密

# 安全加固
# 网络安全
– 防火墙
– 网络隔离
– VLAN

# 主机安全
– 关闭不必要服务
– 定期补丁
– 入侵检测

生产环境建议:安全是一个系统工程,要从认证、授权、审计、加密四个维度全面考虑。没有绝对的安全,要持续关注和改进。更多视频教程www.fgedu.net.cn

Part05-风哥经验总结与分享

5.1 最佳实践总结

最佳实践总结:

  • 硬件规划:合理的硬件配置是基础
  • 系统配置:操作系统参数要优化
  • 高可用:关键组件必须HA
  • 监控告警:完善的监控告警体系
  • 备份恢复:定期备份,验证恢复
  • 安全加固:认证、授权、审计、加密

5.2 常见错误与规避

# 常见错误
1. 硬件配置不合理
– 错误:配置过低或过高
– 规避:根据需求合理配置

2. 系统参数未优化
– 错误:使用默认参数
– 规避:按照最佳实践配置

3. 未配置HA
– 错误:单节点运行
– 规避:关键组件必须HA

4. 监控不完善
– 错误:没有监控或监控不全
– 规避:建立完善的监控体系

5. 不做备份
– 错误:没有备份或备份不验证
– 规避:定期备份,定期验证

6. 安全不重视
– 错误:没有安全措施
– 规避:从设计开始考虑安全

# 规避经验
– 前期规划要充分
– 按最佳实践配置
– 建立监控体系
– 定期备份
– 重视安全
– 持续优化

5.3 生产环境检查清单

# 生产环境检查清单
## 硬件层
– [ ] 硬件配置合理
– [ ] 磁盘健康
– [ ] 网络正常
– [ ] 硬件监控

## 系统层
– [ ] 系统参数优化
– [ ] 防火墙关闭
– [ ] SELinux关闭
– [ ] 透明大页关闭
– [ ] NTP同步
– [ ] limits配置

## HDFS层
– [ ] NameNode HA
– [ ] 副本数配置正确
– [ ] 回收站配置
– [ ] 小文件合并
– [ ] 列式存储

## YARN层
– [ ] ResourceManager HA
– [ ] 资源配置合理
– [ ] 队列配置
– [ ] 日志聚合

## 监控层
– [ ] 监控完善
– [ ] 告警配置
– [ ] 日志收集
– [ ] 定期巡检

## 安全层
– [ ] 认证配置
– [ ] 授权配置
– [ ] 审计配置
– [ ] 加密配置

## 备份层
– [ ] 元数据备份
– [ ] 数据备份
– [ ] 备份验证
– [ ] 应急预案

风哥提示:最佳实践是经验的总结,要结合实际情况使用。生产环境稳定是第一位的,在稳定的基础上再追求性能。持续学习,持续改进。学习交流加群风哥微信: itpux-com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息