资讯动态

CentOS 7 离线部署 CDH:Cloudera Manager 安装与排坑

发布时间:2026/10/15 20:13:17 来源:尧图企业网站定制
简介面向Hadoop运维人员与平台搭建者的Cloudera Manager 5.14.2离线安装包适配CentOS7 x86_64环境解决CM安装源获取难、依赖配置复杂的问题。包体共18,362个文件以Python字节码py/pyo/pyc、HTML与JS管理界面、Java jar包、SQL/DDL数据库脚本、SO动态库及各类配置文件为主压缩后约793.9MB涵盖服务端、Agent、数据库初始化等完整组件。已有277人学习下载适合在无外网或内网环境下部署CDH集群的工程师。除安装介质外资源展示了CM的典型目录与组件构成包括cloudera-scm-server、cloudera-scm-agent、supervisord守护脚本及Hive/Oozie等元数据库定义便于理解服务部署逻辑和依赖关系。可配合《Cloudera Manager在CentOS7上的安装与配置详解》一文快速完成安装、初始化MariaDB、Web界面创建集群、分发与监控服务等全流程操作同时为后续安全配置和性能调优提供基础是构建企业级Hadoop平台的重要工具包。1. 在 CentOS 7 上部署 CDH 之前先把这个 tar.gz 收好如果你正打算给团队搭一套离线的大数据环境又不想每次装 Hadoop 组件都去在线源里碰运气那这份cloudera-manager-centos7-cm5.14.2_x86_64.tar.gz就是你该下的东西。它是 Cloudera Manager 5.14.2 的 CentOS 7 离线安装包内含 CM Server、Agent 和仓库配置配合 CDH 5.x 的 parcel 包可以在内网环境里完成从零到集群可用的完整部署。我拆过不少类似的包这个版本适合那些还在用 5.x 技术栈、又想避开在线安装不确定性的人。下面我按实际部署顺序把解压、配置、启动和踩坑的地方一次说清楚。2. 安装前准备环境检查与三处容易忽略的配置2.1 主机规划与资源评估拆包之前先把集群拓扑想明白。CM 5.14.2 的架构是服务端加多个 AgentServer 负责管理 Web 界面和调度任务Agent 部署在每一台需要跑大数据组件的主机上。我见过有人图省事把 Server 跟 DataNode 塞同一台机器结果机器负载一高整个管理界面卡成黑匣子排查起来很痛苦。建议最低规划这样一台 4C8G 的机器跑 CM Server另外几台 4C16G 的机器跑 Agent磁盘至少留 100G。如果你只是验证功能单台 All-in-One 也行但后续扩容时要先改/etc/hosts和 Agent 配置不如一开始就把主机角色分清楚。先确认操作系统版本和内核cat /etc/redhat-release uname -r输出应该是 CentOS Linux release 7.x 和 3.10 内核。CM 5.14.2 对内核没有特殊要求但是对 glibc 有依赖CentOS 7 默认的 2.17 版本没问题。注意不要用 CentOS 8 或更高版本因为 CM 5.x 的初始化脚本和依赖库都是针对 7 的强行装会报缺少libncurses.so.5之类的链接错误。接着看 Java 环境。CM 5.14.2 要求 Oracle JDK 1.8不要用 OpenJDK 的某些精简版本否则后续启动 NameNode 时会碰到UnsupportedClassVersionError。我一般会在每台机器上统一装 Oracle JDK 1.8u202 以前的版本因为之后的版本需要商业许可没必要惹麻烦。2.2 JDK 与数据库CM 的心跳依赖JDK 装好后设置好JAVA_HOMEexport JAVA_HOME/usr/java/jdk1.8.0_202 export PATH$JAVA_HOME/bin:$PATH记得把这两行写进/etc/profile然后让所有 Agent 主机都同步这个环境变量。CM Agent 启动时是通过JAVA_HOME找 Java 的如果你只在 Server 上配了Agent 机器上一堆Cannot find Java的报错会让你怀疑人生。数据库方面CM 5.14.2 支持 MySQL 5.7、MariaDB 等。我多用 MariaDB因为 CentOS 7 自带的是它的社区版装起来简单。需要提前建好 CM 自己的库和用户CREATE DATABASE cmf CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER cm% IDENTIFIED BY your_password; GRANT ALL PRIVILEGES ON cmf.* TO cm%; FLUSH PRIVILEGES;这里有个容易踩的坑CM 初始化时会写很多带TEXT类型的字段如果用默认的latin1字符集后面在界面上看到中文乱码会很难受。建库时显式指定 UTF-8后面省很多事。2.3 免密与防火墙集群通信的基石CM Server 通过 SSH 去管理 Agent 主机需要配置 Server 到所有主机包括自己的免密登录。不要用 root 直接登录创建一个普通用户比如cmuser给它 sudo 权限然后用ssh-keygen生成密钥再ssh-copy-id分发。useradd cmuser echo cmuser ALL(ALL) NOPASSWD: ALL /etc/sudoers ssh-keygen -t rsa -P -f ~/.ssh/id_rsa for host in $(cat /etc/hosts | awk {print $2}); do ssh-copy-id cmuser$host; done防火墙是第二个大坑。CM 默认会用 7180Web UI、7182server 通信、9000 等端口Agent 反向连接 Server 用 7182。我在测试环境里直接关掉 firewalld 和 SELinux因为这两样东西的拦截日志不显眼出了问题你还在查端口监听实际上包被 SELinux 丢了。生产环境如果非要开防火墙至少把7180-7182、8888、9000这几个端口放行并且每台机器要互相放行内网网段。3. 安装与初始化解压、改配置、启动 CM Server3.1 解压安装包与目录结构拿到 tar.gz 后先看下里面有什么。解压到/opt目录tar -zxvf cloudera-manager-centos7-cm5.14.2_x86_64.tar.gz -C /opt ls /opt/cm-5.14.2目录里会有etc/、lib/、share/等标准布局重要的是etc/cloudera-scm-server/和etc/cloudera-scm-agent/里的配置文件。这个包是预编译的二进制不需要你重新编译省了很多编译工具链的麻烦。需要注意这个包只包含 CM 本身还不包含 CDH 组件。你还需要下载对应的 CDH 5.14.2 parcel 文件.parcel和 manifest 文件放到一个 HTTP 目录里或者稍后通过 CM 界面上传。我一般先把 parcel 下载到/opt/cloudera/parcel-repo/这样在引导集群时能直接从本地分发不会走外网。3.2 配置 CM 数据库CM Server 启动前必须初始化数据库。配置文件在/etc/cloudera-scm-server/db.properties你需要改成自己数据库的连接信息com.cloudera.cmf.db.typemysql com.cloudera.cmf.db.hostlocalhost com.cloudera.cmf.db.namecmf com.cloudera.cmf.db.usercm com.cloudera.cmf.db.passwordyour_password注意这里db.type不要改错。如果是 MariaDB本质上也是 MySQL 协议填mysql就行。改完权限后执行初始化脚本/opt/cm-5.14.2/share/cmf/schema/scm_prepare_database.sh mysql cmf cm your_password这个脚本会自动建表生成/etc/cloudera-scm-server/db.properties并把它替换成正确的配置。如果脚本运行时报找不到 MySQL 驱动说明你缺少 JDBC 驱动包。CM 的 lib 目录里自带一个mysql-connector-java.jar但有时候版本不匹配。我一般会下载 5.1.48 版本的驱动放到/opt/cm-5.14.2/share/cmf/lib/下并把旧的删掉。初始化完成后可以顺手检查一下库表是否生成mysql -ucm -p -e use cmf; show tables;看到一堆AUTH_、USERS、SERVICES开头的表就说明数据库这关过了。3.3 启动 cloudera-scm-server 并观察初始化日志数据库弄完就可以启动 Server 了。系统服务脚本用的是service或者直接执行/etc/init.d/cloudera-scm-server start。启动后不要急着看端口CM Server 的初始化过程要一两分钟日志里有大量 Spring 框架的启动信息。service cloudera-scm-server start tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log等日志里出现Started Jetty server或者Web server started字样再看端口netstat -ntlp | grep 7180看到java进程监听 7180就说明 Server 起来了。这时候浏览器访问http://server-ip:7180默认用户名和密码是admin/admin首次登录会强制改密码改成自己的密码并记住。Agent 的启动在每台主机上都要做。把整个/opt/cm-5.14.2目录同步到所有 Agent 机器后执行/opt/cm-5.14.2/etc/init.d/cloudera-scm-agent start然后看/var/log/cloudera-scm-agent/cloudera-scm-agent.log确认 Agent 能连上 Server。我一般会在 Agent 机器上跑ps -ef | grep cloudera确认进程存在再通过 Server 的界面上看主机列表里有没有这台的 IP。4. 配置集群Web 界面添加主机与分配服务4.1 登录 Web 界面与接受协议用修改后的密码登录 CM 界面进来后是授权协议页。生产环境你要勾选“我已阅读并同意”但这里有个细节如果导入了企业版 license它会有额外的激活步骤如果只是试用界面会提示“试用许可证已生效”。这个东西不影响功能验证填完主机信息后再激活也可以。接着填写集群名称。注意集群名不要带中文和特殊字符后面生成的各种路径和主机名拼接都会用到最好用简单英文比如cdh-cluster。4.2 主机发现与 Parcel 分发在“添加主机”这一步CM 会要求你输入主机列表或 IP 范围。我建议直接写内网 IP比如192.168.10.[1-5]比用主机名靠谱。因为主机名解析如果没配好CM 会通过反向解析拿到不同的名字导致 Agent 注册错乱。填好主机后CM 会通过之前的免密登录去检测每台机器的 Java 版本、内存、磁盘等。这一步如果卡住基本都是免密没配好或 sudo 权限不足。我遇到过最典型的cmuser的 sudoers 只允许执行有限命令CM 需要用 superuser 权限去检查/proc/meminfo结果失败。所以 sudo 那行最好配NOPASSWD: ALL。主机检测通过后界面会让你选择 CDH 版本。此时 CM 会去指定仓库找 parcel。如果你已经把 parcel 放到/opt/cloudera/parcel-repo/这里会自动识别版本并开始分发到所有 Agent。分发过程会在每台机器上解压 parcel 到/opt/cloudera/parcels/日志在 Agent 的日志里可以看。4.3 服务分配与参数设定Parcel 分发完成后进入服务分配页面。CM 会推荐一个默认分配比如把 NameNode 放在第一台DataNode 放其他台ResourceManager 和 SecondaryNameNode 也各自指定。我一般会先按推荐来跑通之后再调整。如果你有充足内存可以一台机器上同时跑多个角色但注意不要在同一台上既放 NameNode 又放 ResourceManager两者都是重内存角色叠加容易 OOM。参数设定界面里有几个必须改的DataNode 数据目录默认在/dfs/data要确认磁盘挂载点有足够空间。NameNode 元数据目录默认在/dfs/name也要检查。YARN 虚拟内存检查CDH 默认开启虚拟内存比例检查如果你给容器分配的内存超过物理内存任务会被 kill。我通常会把yarn.nodemanager.vmem-check-enabled设为false。HDFS 块大小默认 128MB不用改。这些参数改好后点击“继续”CM 会开始创建角色实例并格式化 NameNode。格式化这一步会输出大量日志最容易出的问题是目录权限不对。确认/dfs/name属主是hdfs用户否则格式化会失败。5. 避坑与常见问题五个高频翻车现场与排查方法5.1 现象一Agent 起不来日志里报 Java 版本错误Agent 启动瞬间退出日志文件/var/log/cloudera-scm-agent/cloudera-scm-agent.log显示/usr/bin/java指向的是 JRE 1.7 或者 Java 环境变量没找到。原因是 CM Agent 脚本会优先读JAVA_HOME其次读PATH里的java。如果你用了系统自带的openjdk它的路径可能被硬编码在脚本配置里。解决方法是在/etc/default/cloudera-scm-agent里显式设置JAVA_HOME/usr/java/jdk1.8.0_202然后重启服务。还要检查which java的路径确保JAVA_HOME/bin/java能执行java -version且版本是 1.8。5.2 现象二数据库驱动找不到scm_prepare_database.sh报错ClassNotFoundException: com.mysql.jdbc.Driver。原因是 CM 自带的驱动包名可能带版本号脚本只认固定的mysql-connector-java.jar。解决去 MySQL 官网下载 5.1.48 的 jar重命名为mysql-connector-java.jar放到/opt/cm-5.14.2/share/cmf/lib/下再重新执行脚本。注意权限属主和权限要能读。5.3 现象三主机时间不同步导致心跳丢失CM 界面上主机状态一会儿显示“良好”一会儿显示“主机未联系”Agent 日志里有NTP failed或心跳超时。原因是 CM 要求 Server 和 Agent 之间的时间差不能超过 5 秒时钟漂移严重会把 Agent 误判为其他主机。解决在所有机器上配置 NTP 服务或者更简单的方式是每 10 分钟执行一次ntpdate同步。我生产环境里会写一个 crontab*/10 * * * * /usr/sbin/ntpdate ntp-server /sbin/hwclock --systohc之后在 CM 主机管理里重新检查一次状态就恢复正常了。5.4 现象四Parcel 分发卡在 0%“分发 Parcel”进度条不动Agent 日志里出现connection refused或transfer failed。原因是 CM Server 默认用 7182 端口跟 Agent 通信但是 Agent 反向下载 parcel 时会用 8080 端口去 Server 的 web 服务器拉取文件。如果这个端口被防火墙挡了传输就会卡住。解决确认 Server 上的httpd服务或 CM 内置的cmf-web服务监听在 8080并且让防火墙放行。另外确认 parcel 文件是否完整可以用openssl dgst -sha256对比 manifest 里记录的哈希值。5.5 现象五NameNode 启动失败元数据目录权限错在服务启动步骤里NameNode 红色报警日志显示Permission denied或者java.io.IOException: Failed to load fs image file.原因是 CM 格式化 NameNode 时使用hdfs用户但数据目录创建时属主是 root或者多次格式化后目录里的current子目录残留了旧数据。解决先停掉 NameNode 服务然后清空元数据目录rm -rf /dfs/name/* chown -R hdfs:hdfs /dfs/name chmod 700 /dfs/name再通过 CM 界面重启 NameNode如果不行就在 CM 的高级配置里勾选“格式化 NameNode”重新格式化。6. 进阶验证通过 API 与日志体系确认集群真正健康6.1 用 curl 检查 CM API 状态界面正常不代表 API 正常。我每次装完都会跑一遍 CM 的 REST API确认管理面和数据面都在线。先拿集群列表curl -u admin:your_password http://server-ip:7180/api/v5/clusters返回 JSON 包含集群名字和版本。再查主机状态curl -u admin:your_password http://server-ip:7180/api/v5/hosts重点看healthSummary字段如果是GOOD就说明所有 Agent 的心跳都正常。6.2 快速验证 HDFS 与 YARN 服务API 层面检查完还要验证真正的读写。我一般会用hdfs dfs跑一个文件操作确认 HDFS 可用sudo -u hdfs hdfs dfs -mkdir /tmp/test sudo -u hdfs hdfs dfs -put /etc/hostname /tmp/test/hello.txt sudo -u hdfs hdfs dfs -cat /tmp/test/hello.txt能读到内容HDFS 才算活着。YARN 验证更简单sudo -u yarn yarn node -list能看到RUNNING状态的节点说明 ResourceManager 的调度链路没问题。6.3 我的收尾习惯这套 CM 5.14.2 装好后我会强制做一遍日志和目录的复查确认/var/log/cloudera-scm-server和/var/log/cloudera-scm-agent没有致命错误再检查dfs.name.dir和dfs.data.dir的磁盘余量。因为 CM 的日志轮转默认只在 100MB 自动切分如果你日志增长快建议在/etc/logrotate.d/cloudera-scm-server里把rotate设大一点。从那以后我每次部署完都收集一次cloudera-scm-agent.log的关键字防止有心跳断线在后台悄悄发生。希望这份拆包笔记能帮你把集群一次搭起来少踩几个坑。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑