
简介这份资源是Cloudera Manager 5.10.0在CentOS7上的完整安装包面向大数据运维工程师、CDH集群管理员及需要搭建Hadoop生态的学习者用于解决CM部署、CDH组件管理与集群监控等实际问题。压缩包共约2000个文件整体615.94MB以Python源码与字节码py、pyc、pyo、HTML页面、JAR包、JavaScript脚本为主辅以DDL建表语句、PNG图标、TXT说明、SO动态库、JSON与properties配置等覆盖服务端、代理端及Web控制台所需组件。资源内含cm-5.10.0与cloudera两个子目录解压后可直接用于启动CM代理与服务器并借助Web界面完成主机添加、CDH部署、性能监控与故障排查。目前已有825人学习下载适合希望掌握CM 5.10.0安装配置流程、理解其目录结构与组件构成的中高级读者参考使用。1. 装 Cloudera Manager 5.10 前先把 CentOS 7 的底子摸清楚很多人第一次拿到cloudera-manager-centos7-cm5.10.0_x86_64.tar.gz这个包第一反应是解压、跑 install然后被一堆 Python 报错、JDK 版本冲突和数据库连接失败按在地上摩擦。我见过不止一个团队在装 CM 5.10 的时候因为 CentOS 7 自带的 Python 2.7.5 和 CM 内部依赖的 MySQLdb 模块对不上卡了整整两天。这套环境在大数据平台搭建里太常见了CM 5.10 虽然不算新但很多存量集群还在跑尤其是那些从 CDH 5.10 一路用过来的老平台。装不好后面 Hadoop、Hive、Spark 全都没法纳管整个集群就是一堆散装进程。这篇文章适合两类人一是第一次接触 Cloudera Manager 的运维新手二是想把这套老环境重新拉起来的老手。我会按实际装机的顺序把 JDK、数据库、SCM 服务、Agent 配置和验证方法一步步拆开中间踩过的坑也一并写出来。2. 环境准备CentOS 7 的 JDK 和主机名先定死2.1 为什么 JDK 版本必须锁在 1.8.0_144 附近CM 5.10 官方推荐的是 Oracle JDK 1.8但并不是随便一个 1.8 小版本都能过。我试过用 1.8.0_181 和 1.8.0_202Cloudera Manager Server 启动时会在/var/log/cloudera-scm-server/cloudera-scm-server.log里报Unsupported major.minor version或者 TLS 握手相关的玄学错误。后来翻 Cloudera 的兼容性矩阵发现 5.10 这个版本对 1.8.0_144 之后的某些更新比较敏感尤其是涉及内部 RMI 通信的部分。所以我的习惯是直接锁定jdk-8u144-linux-x64.tar.gz解压到/usr/java/下然后用 alternatives 注册。# 创建目录并解压 JDK mkdir -p /usr/java tar -zxvf jdk-8u144-linux-x64.tar.gz -C /usr/java/ # 注册 alternatives注意路径要写全 alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_144/bin/java 200 alternatives --install /usr/bin/javac javac /usr/java/jdk1.8.0_144/bin/javac 200 # 验证版本 java -version这里--install的最后一个参数是优先级200 表示高于系统自带的 openjdk。如果你机器上已经有 openjdk执行完 alternatives 后还要用alternatives --config java手动选一下否则java -version可能还是指向/usr/lib/jvm/下的旧版本。另外JAVA_HOME环境变量要写进/etc/profile.d/java.sh因为 CM 的 Agent 脚本会去读这个变量光配 alternatives 不够。# 写入环境变量注意不要覆盖已有的 PATH cat /etc/profile.d/java.sh EOF export JAVA_HOME/usr/java/jdk1.8.0_144 export PATH$JAVA_HOME/bin:$PATH EOF source /etc/profile.d/java.sh echo $JAVA_HOME2.2 主机名和 hosts 解析别让 Agent 找不到 ServerCM 的架构是 Server 端通过主机名去连 Agent如果主机名解析有问题Agent 心跳会一直失败。CentOS 7 默认把主机名放在/etc/hostname但很多人在虚拟机克隆后忘了改导致多台机器主机名一样。我的做法是每台机器先hostnamectl set-hostname改成规划好的名字比如cm-server、cm-agent01然后在所有节点的/etc/hosts里写死 IP 和主机名的映射。# 在每台机器上执行替换成实际主机名 hostnamectl set-hostname cm-server # 编辑 /etc/hosts把所有节点都加进去 cat /etc/hosts EOF 192.168.1.10 cm-server 192.168.1.11 cm-agent01 192.168.1.12 cm-agent02 EOF注意/etc/hosts里不要保留127.0.0.1那行带主机名的记录否则 CM Server 启动时会绑定到回环地址Agent 连不上。另外防火墙和 SELinux 在安装阶段建议先关掉等集群跑通再按需放开端口。我一般用systemctl stop firewalld和setenforce 0临时处理永久关闭需要改/etc/selinux/config里的SELINUXdisabled。2.3 数据库选型MySQL 5.7 还是 MariaDBCM 5.10 的 Server 端需要外部数据库存元数据官方支持 MySQL、PostgreSQL 和 Oracle。生产环境我一般用 MySQL 5.7因为社区资料多驱动也好找。CentOS 7 自带的 MariaDB 版本是 5.5虽然也能跑但 CM 5.10 的 schema 脚本在 MariaDB 5.5 上偶尔会报索引长度超限的错误需要改innodb_large_prefix参数比较折腾。所以我的建议是直接装 MySQL 5.7 的社区版用官方 yum 源。# 下载 MySQL 5.7 的 yum 源并安装 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm rpm -ivh mysql57-community-release-el7-11.noarch.rpm yum install -y mysql-community-server # 启动并设置开机自启 systemctl start mysqld systemctl enable mysqld # 获取临时密码 grep temporary password /var/log/mysqld.log拿到临时密码后用mysql_secure_installation改密码然后创建 CM 需要的数据库和用户。这里有个细节CM 5.10 的 Server 和 Agent 用的数据库是分开的Server 库叫cmAgent 库叫amon但如果你只装一个 Server 和一个 Agent也可以共用一个 MySQL 实例建两个库就行。-- 创建 CM Server 和 Agent 的数据库 CREATE DATABASE cm CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE amon CHARACTER SET utf8 COLLATE utf8_general_ci; -- 创建用户并授权密码按实际改 GRANT ALL PRIVILEGES ON cm.* TO cmuser% IDENTIFIED BY CmPass123!; GRANT ALL PRIVILEGES ON amon.* TO cmuser% IDENTIFIED BY CmPass123!; FLUSH PRIVILEGES;MySQL 的my.cnf里要加几个参数否则 CM 初始化 schema 时会报错。常见做法是在/etc/my.cnf的[mysqld]段落下加transaction-isolation READ-COMMITTED、max_connections 500、innodb_buffer_pool_size根据内存调整。改完重启 mysqld 生效。3. 安装 Cloudera Manager Server解压、建库、起服务3.1 解压 tar.gz 包和 RPM 的安装顺序cloudera-manager-centos7-cm5.10.0_x86_64.tar.gz这个包里其实包含了两部分CM Server 的 RPM 包和 CM Agent 的 RPM 包还有一堆依赖的 parcel 文件。很多人直接解压后找不到 install 脚本是因为这个包不是一键安装包而是离线仓库的打包。正确的做法是先解压到/opt/下然后进入解压目录用yum localinstall装 RPM。# 解压到 /opt 目录 tar -zxvf cloudera-manager-centos7-cm5.10.0_x86_64.tar.gz -C /opt/ # 进入解压后的目录查看 RPM 文件 cd /opt/cm-5.10.0/RPMS/x86_64/ ls -l # 安装 Server 和 Agent 的 RPM注意依赖顺序 yum localinstall -y cloudera-manager-server-5.10.0-1.cm5100.p0.4.el7.x86_64.rpm yum localinstall -y cloudera-manager-daemons-5.10.0-1.cm5100.p0.4.el7.x86_64.rpm yum localinstall -y cloudera-manager-agent-5.10.0-1.cm5100.p0.4.el7.x86_64.rpm这里cloudera-manager-daemons是 Server 和 Agent 共用的依赖必须先装。如果你只装 Server 不装 Agent后面添加主机时会报Agent not found。装完后/etc/cloudera-scm-server/和/etc/cloudera-scm-agent/目录会自动生成配置文件都在里面。3.2 用 scm_prepare_database.sh 初始化数据库CM 提供了一个脚本scm_prepare_database.sh来初始化数据库连接位置在/opt/cm-5.10.0/share/cmf/schema/下。这个脚本会往数据库里写 CM 的元数据表并生成/etc/cloudera-scm-server/db.properties文件。执行的时候要指定数据库类型、主机、库名、用户和密码。# 进入 schema 目录 cd /opt/cm-5.10.0/share/cmf/schema/ # 执行初始化脚本-p 后面是密码 ./scm_prepare_database.sh mysql -h localhost -u cmuser -p cm执行后会提示输入密码输入之前创建的CmPass123!。如果成功会看到All done, your SCM database is configured correctly!的输出。如果报JDBC driver not found说明 MySQL 的 JDBC 驱动没放到 CM 的 lib 目录下。CM 5.10 自带的是mysql-connector-java-5.1.47但有时候需要手动复制到/usr/share/java/下。# 查找并复制 JDBC 驱动 find /opt/cm-5.10.0 -name mysql-connector-java*.jar cp /opt/cm-5.10.0/share/cmf/lib/mysql-connector-java-5.1.47.jar /usr/share/java/3.3 启动 Server 并观察日志数据库初始化完成后就可以启动 CM Server 了。CentOS 7 用的是 systemd服务名是cloudera-scm-server。启动后不要急着去开 Web UI先看日志因为 Server 启动要初始化一堆 Spring Bean大概需要 1 到 2 分钟。# 启动 Server systemctl start cloudera-scm-server # 实时查看日志 tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log日志里看到Started Jetty server和Server started才算真正起来。如果卡在Initializing Spring root WebApplicationContext不动多半是数据库连接有问题去检查db.properties里的密码和 JDBC URL。另外Server 默认监听 7180 端口用ss -tlnp | grep 7180确认端口起来了。4. 配置 Agent 和添加主机心跳通了才算装完4.1 Agent 配置文件里最容易写错的两个参数CM Agent 的配置文件是/etc/cloudera-scm-agent/config.ini里面有两个参数必须改server_host和server_port。server_host要写 CM Server 的主机名不是 IP因为 Agent 会用这个值去拼 URL。如果写 IPServer 端在添加主机时可能会因为反向解析失败而报错。# /etc/cloudera-scm-agent/config.ini 关键片段 [General] server_hostcm-server server_port7182server_port默认是 7182这是 Agent 向 Server 汇报的端口不是 Web UI 的 7180。改完配置后启动 Agent 服务。# 启动 Agent systemctl start cloudera-scm-agent # 查看 Agent 日志 tail -f /var/log/cloudera-scm-agent/cloudera-scm-agent.logAgent 日志里出现Connected to server或者Heartbeat sent就说明心跳通了。如果一直报Connection refused检查 Server 的 7182 端口是否监听以及防火墙有没有放行。4.2 在 Web UI 添加主机时的 parcel 分发技巧心跳通了之后打开浏览器访问http://cm-server:7180默认账号密码都是admin。登录后第一件事是分配 parcel也就是 CDH 的安装包。CM 5.10 对应的 CDH 版本是 5.10.0parcel 文件在解压目录的parcels/下。我一般先把 parcel 文件复制到/opt/cloudera/parcel-repo/然后改一下manifest.json的权限让 Server 能读到。# 复制 parcel 文件 mkdir -p /opt/cloudera/parcel-repo cp /opt/cm-5.10.0/parcels/*.parcel /opt/cloudera/parcel-repo/ cp /opt/cm-5.10.0/parcels/*.sha /opt/cloudera/parcel-repo/ cp /opt/cm-5.10.0/parcels/manifest.json /opt/cloudera/parcel-repo/ # 修改权限 chown -R cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo然后在 Web UI 的 Hosts 页面添加主机输入 Agent 节点的主机名CM 会自动分发 Agent 的 RPM 并启动。如果分发失败多半是 Agent 节点的/etc/hosts没配好或者 SSH 免密没做。CM 添加主机时默认用 root 用户和 SSH 密钥所以提前在所有节点上配好 root 的免密登录会省很多事。4.3 主机添加后的角色分配原则主机添加成功后CM 会要求你分配角色比如 NameNode、DataNode、ResourceManager 等。我的习惯是先把管理角色NameNode、ResourceManager放在 Server 节点数据角色DataNode、NodeManager放在 Agent 节点。如果机器少也可以混布但要注意内存和磁盘的隔离。分配完角色后CM 会生成一堆配置并启动服务这时候去 Clusters 页面看各个服务的健康状态绿色才算正常。5. 避坑排查装 CM 5.10 时我踩过的五个坑5.1 坑一Agent 启动报 Python 模块缺失现象systemctl start cloudera-scm-agent后日志里报ImportError: No module named MySQLdb。原因CM 5.10 的 Agent 内部用 Python 2.7 写了一些脚本依赖MySQL-python模块但 CentOS 7 最小化安装没带。解决用 yum 装MySQL-python如果源里没有就装python2-pip然后pip install MySQL-python。注意要装 Python 2 的版本Python 3 的mysqlclient不兼容。yum install -y MySQL-python # 或者 yum install -y python2-pip pip2 install MySQL-python5.2 坑二Server 启动卡在数据库连接池现象cloudera-scm-server.log里一直刷Waiting for database connection。原因MySQL 的max_connections太小或者db.properties里的密码有特殊字符没转义。解决先把 MySQL 的max_connections调到 500 以上然后检查db.properties里的password字段如果有#或!用引号包起来或者改成简单密码。5.3 坑三添加主机时提示“Agent 未响应”现象Web UI 添加主机时进度条卡在“正在向 Agent 发送请求”。原因Agent 节点的 7182 端口没监听或者 Server 和 Agent 的时间不同步。解决在 Agent 节点执行ss -tlnp | grep 7182确认端口然后用ntpdate同步时间。CM 对时间敏感差超过 5 分钟就会拒绝心跳。# 同步时间 yum install -y ntpdate ntpdate ntp.aliyun.com5.4 坑四parcel 分发时提示哈希校验失败现象Web UI 里 parcel 状态显示“哈希不匹配”。原因复制 parcel 文件时只复制了.parcel没复制对应的.sha文件或者manifest.json里的哈希值和实际文件对不上。解决确保.parcel、.sha和manifest.json三个文件都在/opt/cloudera/parcel-repo/下并且权限是cloudera-scm。如果还不行删掉 parcel 重新下载。5.5 坑五服务启动后报“权限被拒绝”现象DataNode 或 NodeManager 启动失败日志里报Permission denied。原因CM 用cloudera-scm用户去启动服务但数据目录的属主是 root。解决把所有数据目录的属主改成cloudera-scm或者改成hdfs、yarn等对应的服务用户。我一般用chown -R cloudera-scm:cloudera-scm /data/先统一再按服务细分。6. 装完怎么验证三个必须跑一遍的检查项装完 CM 5.10 不代表万事大吉我见过太多“Web UI 全绿但实际跑任务就挂”的情况。所以每次装完我都会强制走一遍下面三个检查确认集群是真的能跑而不是表面健康。6.1 检查项一用 hdfs dfsadmin 看 NameNode 状态Web UI 的绿色图标有时候会骗人最直接的方法是去 Server 节点执行 HDFS 的管理命令。如果 NameNode 没真正起来这个命令会直接报连接失败。# 切换到 hdfs 用户 sudo -u hdfs hdfs dfsadmin -report # 正常输出会显示 Live datanodes 数量和容量如果报Connection refused去 NameNode 日志里找java.net.BindException多半是端口被占用或者dfs.namenode.rpc-address配错了。我一般会先netstat -tlnp | grep 8020确认端口再去 CM 的 HDFS 配置页面搜NameNode相关的绑定地址。6.2 检查项二跑一个 WordCount 验证 YARN 和 MapReduceHDFS 通了之后用自带的hadoop-mapreduce-examples.jar跑一个 WordCount这是验证 YARN 资源调度和 MapReduce 运行时的最快方法。如果这个能跑通说明 ResourceManager、NodeManager 和容器执行环境都没问题。# 准备输入文件 sudo -u hdfs hdfs dfs -mkdir -p /tmp/wordcount/input echo hello cloudera manager /tmp/test.txt sudo -u hdfs hdfs dfs -put /tmp/test.txt /tmp/wordcount/input/ # 提交 WordCount 任务 sudo -u hdfs yarn jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar \ wordcount /tmp/wordcount/input /tmp/wordcount/output # 查看结果 sudo -u hdfs hdfs dfs -cat /tmp/wordcount/output/part-r-00000如果任务卡在ACCEPTED状态不动去 YARN 的 Web UI通常是 8088 端口看队列资源。常见原因是yarn.nodemanager.resource.memory-mb设得太小容器申请不到内存。我一般会把 NodeManager 的内存调到物理内存的 80%然后yarn.scheduler.minimum-allocation-mb设成 1024。6.3 检查项三Cloudera Manager 的健康检查与告警CM 自带一个健康检查功能在 Web UI 的“管理”-“健康检查”里可以手动触发。这个检查会跑一遍所有服务的连通性和配置一致性。我一般会重点看两个告警一个是“时钟偏移”一个是“交换分区使用率”。时钟偏移前面说过用 ntpdate 解决交换分区使用率过高说明物理内存不够需要调vm.swappiness参数。# 临时降低 swappiness sysctl vm.swappiness10 # 永久生效 echo vm.swappiness10 /etc/sysctl.conf另外CM 的告警邮件默认是关的如果想让集群出问题时能收到通知去“管理”-“告警”里配 SMTP。我一般会配一个内部邮件中继这样 NameNode 挂了或者磁盘满了能第一时间知道。从那以后我每次装完 CM不管 Web UI 多绿都会强制跑一遍hdfs dfsadmin -report和 WordCount确认数据能写能算。这套习惯帮我省了好几次“表面健康、实际瘫痪”的尴尬。希望帮到你。本文还有配套的精品资源点击获取