1. CDH基础概念与环境准备
CDH(Cloudera Distribution for Hadoop)是企业级Hadoop生态系统的商业发行版,它整合了HDFS、YARN、HBase、Hive、Spark等核心组件,并提供统一的Web管理界面。与社区版Hadoop相比,CDH最大的优势在于其经过充分测试的组件兼容性、企业级安全特性和可视化运维工具。
在开始配置前,需要准备以下环境:
- 至少3台Linux服务器(推荐CentOS 7或RHEL 7+)
- 每台机器建议配置:16核CPU/64GB内存/500GB存储(数据节点需更大存储)
- 所有节点间SSH免密互通
- 统一的NTP时间服务配置
- 关闭防火墙或开放必要端口(如7180、8020、8088等)
重要提示:生产环境务必使用奇数个ZooKeeper节点(至少3个),这是保证集群高可用的基础条件。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装Cloudera Manager控制台
Cloudera Manager是CDH的核心管理平台,其安装步骤如下:
2.1 配置本地yum源
bash复制# 在主节点创建repo文件
sudo tee /etc/yum.repos.d/cloudera-manager.repo <<EOF
[cloudera-manager]
name = Cloudera Manager
baseurl = https://archive.cloudera.com/cm6/6.3.1/redhat7/yum/
gpgkey = https://archive.cloudera.com/cm6/6.3.1/redhat7/yum/RPM-GPG-KEY-cloudera
gpgcheck = 1
EOF
2.2 安装JDBC驱动和MySQL(可选)
如果使用MySQL作为元数据库:
bash复制sudo yum install mysql-connector-java
sudo systemctl start mysqld
2.3 执行安装
bash复制sudo yum install cloudera-manager-daemons cloudera-manager-agent
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm password
sudo systemctl start cloudera-scm-server
安装完成后,通过http://<主节点IP>:7180访问Web界面,默认账号密码为admin/admin。
3. 集群部署与组件配置
3.1 添加主机到集群
- 在CM界面选择"添加集群"
- 输入所有节点主机名(确保/etc/hosts已正确配置)
- 选择"使用Parcels"安装方式(推荐)
- 等待所有主机通过验证
3.2 分配角色
典型角色分配方案:
- 管理节点:Cloudera Manager Server、Hue、Oozie
- 主节点:NameNode、ResourceManager、HBase Master
- 工作节点:DataNode、NodeManager、RegionServer
- 边缘节点:Gateway(部署客户端配置)
3.3 关键参数调优
在服务配置页面需要特别注意:
HDFS配置:
xml复制<property>
<name>dfs.namenode.handler.count</name>
<value>100</value> <!-- 根据CPU核心数调整 -->
</property>
YARN配置:
xml复制<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>49152</value> <!-- 不超过物理内存的80% -->
</property>
ZooKeeper配置:
ini复制maxClientCnxns=1000 <!-- 防止Kafka等组件连接数超限 -->
4. Kafka远程访问配置
4.1 安全配置方案
要实现安全的Kafka远程访问,推荐以下两种方案:
方案一:SASL+SSL认证
- 在Kafka服务配置中启用SSL:
properties复制listeners=SSL://:9093
ssl.keystore.location=/opt/cloudera/security/pki/server.jks
ssl.keystore.password=yourpassword
- 配置SASL认证:
properties复制sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
方案二:SSH隧道转发(开发环境适用)
bash复制ssh -L 9092:localhost:9092 edge-node
4.2 客户端配置示例
Java客户端连接示例:
java复制Properties props = new Properties();
props.put("bootstrap.servers", "kafka01:9093,kafka02:9093");
props.put("security.protocol", "SSL");
props.put("ssl.truststore.location", "/path/to/client.truststore");
props.put("ssl.truststore.password", "password");
KafkaProducer<String, String> producer = new KafkaProducer<>(props);
5. 运维监控与故障排查
5.1 关键监控指标
- HDFS:Used Space%、Missing Blocks
- YARN:Pending Containers、Memory Utilization
- Kafka:Under Replicated Partitions、Network Request Rate
- ZooKeeper:Outstanding Requests、Latency
5.2 常见问题处理
问题1:DataNode无法启动
检查步骤:
- 查看/var/log/hadoop-hdfs/hdfs.log
- 确认磁盘空间:df -h
- 检查网络连通性:telnet namenode 8020
问题2:Kafka生产者超时
可能原因:
- 防火墙阻断9092端口
- advertised.listeners配置错误
- 网络分区导致ZooKeeper失联
6. 集群扩容与升级
6.1 动态添加节点
- 在新主机安装CM Agent:
bash复制sudo yum install cloudera-manager-agent
sudo systemctl start cloudera-scm-agent
- 在CM界面选择"主机"→"添加新主机到集群"
- 选择要添加的服务角色(通常为DataNode和NodeManager)
6.2 滚动升级步骤
- 在CM下载新版Parcel
- 按顺序重启服务:
ZooKeeper → HDFS → YARN → HBase → Kafka - 每个服务完成重启后再处理下一个
升级前务必完成:备份HDFS元数据、导出Hive元数据库、停止所有作业
7. 安全加固实践
7.1 Kerberos集成
- 在CM启用Kerberos向导
- 配置KDC服务器信息
- 为每个服务生成keytab文件
- 测试kinit获取票据
7.2 网络隔离方案
- 使用Linux防火墙划分安全区域
- 为不同服务配置单独的网络接口
- 启用HDFS数据传输加密:
xml复制<property>
<name>dfs.encrypt.data.transfer</name>
<value>true</value>
</property>
8. 性能优化技巧
8.1 HDFS调优
- 启用短路本地读取:
xml复制<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
- 调整DataNode处理线程数:
xml复制<property>
<name>dfs.datanode.handler.count</name>
<value>30</value>
</property>
8.2 YARN优化
- 启用CGroup隔离:
xml复制<property>
<name>yarn.nodemanager.linux-container-executor.cgroups.mount</name>
<value>true</value>
</property>
- 配置基于标签的调度:
bash复制yarn rmadmin -addToClusterNodeLabels "GPU"
9. 备份与灾备方案
9.1 HDFS快照管理
- 启用目录快照功能:
bash复制hdfs dfsadmin -allowSnapshot /data
hdfs dfs -createSnapshot /data backup_202308
- 定期快照策略可通过CM的HDFS服务配置实现
9.2 跨集群复制
使用DistCp工具同步数据:
bash复制hadoop distcp \
-Ddfs.client.socket-timeout=240000000 \
-Dipc.client.connect.timeout=40000000 \
hdfs://source-cluster/data \
hdfs://target-cluster/data
10. 实践经验分享
在实际运维中,有几个容易忽视但至关重要的细节:
-
JVM参数调整:特别是NameNode和ResourceManager的堆内存设置,建议:
bash复制export HADOOP_HEAPSIZE_MAX="12g" # 根据物理内存调整 -
磁盘选择策略:DataNode应配置多块磁盘,并启用:
xml复制<property> <name>dfs.datanode.fsdataset.volume.choosing.policy</name> <value>AvailableSpaceVolumeChoosingPolicy</value> </property> -
日志管理:定期清理各组件日志,特别是YARN的作业历史日志:
bash复制find /var/log/hadoop-yarn/ -name "*.log*" -mtime +30 -delete -
客户端配置:边缘节点的/etc/hadoop/conf目录应保持与集群同步,可通过CM的"部署客户端配置"功能实现
