
簡介面向Hadoop運維人員與平臺搭建者的Cloudera Manager 5.14.2離線安裝包適配CentOS7 x86_64環(huán)境解決CM安裝源獲取難、依賴配置復雜的問題。包體共18,362個文件以Python字節(jié)碼py/pyo/pyc、HTML與JS管理界面、Java jar包、SQL/DDL數(shù)據(jù)庫腳本、SO動態(tài)庫及各類配置文件為主壓縮后約793.9MB涵蓋服務端、Agent、數(shù)據(jù)庫初始化等完整組件。已有277人學習下載適合在無外網(wǎng)或內(nèi)網(wǎng)環(huán)境下部署CDH集群的工程師。除安裝介質(zhì)外資源展示了CM的典型目錄與組件構成包括cloudera-scm-server、cloudera-scm-agent、supervisord守護腳本及Hive/Oozie等元數(shù)據(jù)庫定義便于理解服務部署邏輯和依賴關系??膳浜稀禖loudera Manager在CentOS7上的安裝與配置詳解》一文快速完成安裝、初始化MariaDB、Web界面創(chuàng)建集群、分發(fā)與監(jiān)控服務等全流程操作同時為后續(xù)安全配置和性能調(diào)優(yōu)提供基礎是構建企業(yè)級Hadoop平臺的重要工具包。1. 在 CentOS 7 上部署 CDH 之前先把這個 tar.gz 收好如果你正打算給團隊搭一套離線的大數(shù)據(jù)環(huán)境又不想每次裝 Hadoop 組件都去在線源里碰運氣那這份cloudera-manager-centos7-cm5.14.2_x86_64.tar.gz就是你該下的東西。它是 Cloudera Manager 5.14.2 的 CentOS 7 離線安裝包內(nèi)含 CM Server、Agent 和倉庫配置配合 CDH 5.x 的 parcel 包可以在內(nèi)網(wǎng)環(huán)境里完成從零到集群可用的完整部署。我拆過不少類似的包這個版本適合那些還在用 5.x 技術棧、又想避開在線安裝不確定性的人。下面我按實際部署順序把解壓、配置、啟動和踩坑的地方一次說清楚。2. 安裝前準備環(huán)境檢查與三處容易忽略的配置2.1 主機規(guī)劃與資源評估拆包之前先把集群拓撲想明白。CM 5.14.2 的架構是服務端加多個 AgentServer 負責管理 Web 界面和調(diào)度任務Agent 部署在每一臺需要跑大數(shù)據(jù)組件的主機上。我見過有人圖省事把 Server 跟 DataNode 塞同一臺機器結果機器負載一高整個管理界面卡成黑匣子排查起來很痛苦。建議最低規(guī)劃這樣一臺 4C8G 的機器跑 CM Server另外幾臺 4C16G 的機器跑 Agent磁盤至少留 100G。如果你只是驗證功能單臺 All-in-One 也行但后續(xù)擴容時要先改/etc/hosts和 Agent 配置不如一開始就把主機角色分清楚。先確認操作系統(tǒng)版本和內(nèi)核cat /etc/redhat-release uname -r輸出應該是 CentOS Linux release 7.x 和 3.10 內(nèi)核。CM 5.14.2 對內(nèi)核沒有特殊要求但是對 glibc 有依賴CentOS 7 默認的 2.17 版本沒問題。注意不要用 CentOS 8 或更高版本因為 CM 5.x 的初始化腳本和依賴庫都是針對 7 的強行裝會報缺少libncurses.so.5之類的鏈接錯誤。接著看 Java 環(huán)境。CM 5.14.2 要求 Oracle JDK 1.8不要用 OpenJDK 的某些精簡版本否則后續(xù)啟動 NameNode 時會碰到UnsupportedClassVersionError。我一般會在每臺機器上統(tǒng)一裝 Oracle JDK 1.8u202 以前的版本因為之后的版本需要商業(yè)許可沒必要惹麻煩。2.2 JDK 與數(shù)據(jù)庫CM 的心跳依賴JDK 裝好后設置好JAVA_HOMEexport JAVA_HOME/usr/java/jdk1.8.0_202 export PATH$JAVA_HOME/bin:$PATH記得把這兩行寫進/etc/profile然后讓所有 Agent 主機都同步這個環(huán)境變量。CM Agent 啟動時是通過JAVA_HOME找 Java 的如果你只在 Server 上配了Agent 機器上一堆Cannot find Java的報錯會讓你懷疑人生。數(shù)據(jù)庫方面CM 5.14.2 支持 MySQL 5.7、MariaDB 等。我多用 MariaDB因為 CentOS 7 自帶的是它的社區(qū)版裝起來簡單。需要提前建好 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 直接登錄創(chuàng)建一個普通用戶比如cmuser給它 sudo 權限然后用ssh-keygen生成密鑰再ssh-copy-id分發(fā)。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。我在測試環(huán)境里直接關掉 firewalld 和 SELinux因為這兩樣東西的攔截日志不顯眼出了問題你還在查端口監(jiān)聽實際上包被 SELinux 丟了。生產(chǎn)環(huán)境如果非要開防火墻至少把7180-7182、8888、9000這幾個端口放行并且每臺機器要互相放行內(nèi)網(wǎng)網(wǎng)段。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/這樣在引導集群時能直接從本地分發(fā)不會走外網(wǎng)。3.2 配置 CM 數(shù)據(jù)庫CM Server 啟動前必須初始化數(shù)據(jù)庫。配置文件在/etc/cloudera-scm-server/db.properties你需要改成自己數(shù)據(jù)庫的連接信息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本質(zhì)上也是 MySQL 協(xié)議填mysql就行。改完權限后執(zhí)行初始化腳本/opt/cm-5.14.2/share/cmf/schema/scm_prepare_database.sh mysql cmf cm your_password這個腳本會自動建表生成/etc/cloudera-scm-server/db.properties并把它替換成正確的配置。如果腳本運行時報找不到 MySQL 驅(qū)動說明你缺少 JDBC 驅(qū)動包。CM 的 lib 目錄里自帶一個mysql-connector-java.jar但有時候版本不匹配。我一般會下載 5.1.48 版本的驅(qū)動放到/opt/cm-5.14.2/share/cmf/lib/下并把舊的刪掉。初始化完成后可以順手檢查一下庫表是否生成mysql -ucm -p -e use cmf; show tables;看到一堆AUTH_、USERS、SERVICES開頭的表就說明數(shù)據(jù)庫這關過了。3.3 啟動 cloudera-scm-server 并觀察初始化日志數(shù)據(jù)庫弄完就可以啟動 Server 了。系統(tǒng)服務腳本用的是service或者直接執(zhí)行/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等日志里出現(xiàn)Started Jetty server或者Web server started字樣再看端口netstat -ntlp | grep 7180看到java進程監(jiān)聽 7180就說明 Server 起來了。這時候瀏覽器訪問http://server-ip:7180默認用戶名和密碼是admin/admin首次登錄會強制改密碼改成自己的密碼并記住。Agent 的啟動在每臺主機上都要做。把整個/opt/cm-5.14.2目錄同步到所有 Agent 機器后執(zhí)行/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 界面與接受協(xié)議用修改后的密碼登錄 CM 界面進來后是授權協(xié)議頁。生產(chǎn)環(huán)境你要勾選“我已閱讀并同意”但這里有個細節(jié)如果導入了企業(yè)版 license它會有額外的激活步驟如果只是試用界面會提示“試用許可證已生效”。這個東西不影響功能驗證填完主機信息后再激活也可以。接著填寫集群名稱。注意集群名不要帶中文和特殊字符后面生成的各種路徑和主機名拼接都會用到最好用簡單英文比如cdh-cluster。4.2 主機發(fā)現(xiàn)與 Parcel 分發(fā)在“添加主機”這一步CM 會要求你輸入主機列表或 IP 范圍。我建議直接寫內(nèi)網(wǎng) IP比如192.168.10.[1-5]比用主機名靠譜。因為主機名解析如果沒配好CM 會通過反向解析拿到不同的名字導致 Agent 注冊錯亂。填好主機后CM 會通過之前的免密登錄去檢測每臺機器的 Java 版本、內(nèi)存、磁盤等。這一步如果卡住基本都是免密沒配好或 sudo 權限不足。我遇到過最典型的cmuser的 sudoers 只允許執(zhí)行有限命令CM 需要用 superuser 權限去檢查/proc/meminfo結果失敗。所以 sudo 那行最好配NOPASSWD: ALL。主機檢測通過后界面會讓你選擇 CDH 版本。此時 CM 會去指定倉庫找 parcel。如果你已經(jīng)把 parcel 放到/opt/cloudera/parcel-repo/這里會自動識別版本并開始分發(fā)到所有 Agent。分發(fā)過程會在每臺機器上解壓 parcel 到/opt/cloudera/parcels/日志在 Agent 的日志里可以看。4.3 服務分配與參數(shù)設定Parcel 分發(fā)完成后進入服務分配頁面。CM 會推薦一個默認分配比如把 NameNode 放在第一臺DataNode 放其他臺ResourceManager 和 SecondaryNameNode 也各自指定。我一般會先按推薦來跑通之后再調(diào)整。如果你有充足內(nèi)存可以一臺機器上同時跑多個角色但注意不要在同一臺上既放 NameNode 又放 ResourceManager兩者都是重內(nèi)存角色疊加容易 OOM。參數(shù)設定界面里有幾個必須改的DataNode 數(shù)據(jù)目錄默認在/dfs/data要確認磁盤掛載點有足夠空間。NameNode 元數(shù)據(jù)目錄默認在/dfs/name也要檢查。YARN 虛擬內(nèi)存檢查CDH 默認開啟虛擬內(nèi)存比例檢查如果你給容器分配的內(nèi)存超過物理內(nèi)存任務會被 kill。我通常會把yarn.nodemanager.vmem-check-enabled設為false。HDFS 塊大小默認 128MB不用改。這些參數(shù)改好后點擊“繼續(xù)”CM 會開始創(chuàng)建角色實例并格式化 NameNode。格式化這一步會輸出大量日志最容易出的問題是目錄權限不對。確認/dfs/name屬主是hdfs用戶否則格式化會失敗。5. 避坑與常見問題五個高頻翻車現(xiàn)場與排查方法5.1 現(xiàn)象一Agent 起不來日志里報 Java 版本錯誤Agent 啟動瞬間退出日志文件/var/log/cloudera-scm-agent/cloudera-scm-agent.log顯示/usr/bin/java指向的是 JRE 1.7 或者 Java 環(huán)境變量沒找到。原因是 CM Agent 腳本會優(yōu)先讀JAVA_HOME其次讀PATH里的java。如果你用了系統(tǒng)自帶的openjdk它的路徑可能被硬編碼在腳本配置里。解決方法是在/etc/default/cloudera-scm-agent里顯式設置JAVA_HOME/usr/java/jdk1.8.0_202然后重啟服務。還要檢查which java的路徑確保JAVA_HOME/bin/java能執(zhí)行java -version且版本是 1.8。5.2 現(xiàn)象二數(shù)據(jù)庫驅(qū)動找不到scm_prepare_database.sh報錯ClassNotFoundException: com.mysql.jdbc.Driver。原因是 CM 自帶的驅(qū)動包名可能帶版本號腳本只認固定的mysql-connector-java.jar。解決去 MySQL 官網(wǎng)下載 5.1.48 的 jar重命名為mysql-connector-java.jar放到/opt/cm-5.14.2/share/cmf/lib/下再重新執(zhí)行腳本。注意權限屬主和權限要能讀。5.3 現(xiàn)象三主機時間不同步導致心跳丟失CM 界面上主機狀態(tài)一會兒顯示“良好”一會兒顯示“主機未聯(lián)系”Agent 日志里有NTP failed或心跳超時。原因是 CM 要求 Server 和 Agent 之間的時間差不能超過 5 秒時鐘漂移嚴重會把 Agent 誤判為其他主機。解決在所有機器上配置 NTP 服務或者更簡單的方式是每 10 分鐘執(zhí)行一次ntpdate同步。我生產(chǎn)環(huán)境里會寫一個 crontab*/10 * * * * /usr/sbin/ntpdate ntp-server /sbin/hwclock --systohc之后在 CM 主機管理里重新檢查一次狀態(tài)就恢復正常了。5.4 現(xiàn)象四Parcel 分發(fā)卡在 0%“分發(fā) Parcel”進度條不動Agent 日志里出現(xiàn)connection refused或transfer failed。原因是 CM Server 默認用 7182 端口跟 Agent 通信但是 Agent 反向下載 parcel 時會用 8080 端口去 Server 的 web 服務器拉取文件。如果這個端口被防火墻擋了傳輸就會卡住。解決確認 Server 上的httpd服務或 CM 內(nèi)置的cmf-web服務監(jiān)聽在 8080并且讓防火墻放行。另外確認 parcel 文件是否完整可以用openssl dgst -sha256對比 manifest 里記錄的哈希值。5.5 現(xiàn)象五NameNode 啟動失敗元數(shù)據(jù)目錄權限錯在服務啟動步驟里NameNode 紅色報警日志顯示Permission denied或者java.io.IOException: Failed to load fs image file.原因是 CM 格式化 NameNode 時使用hdfs用戶但數(shù)據(jù)目錄創(chuàng)建時屬主是 root或者多次格式化后目錄里的current子目錄殘留了舊數(shù)據(jù)。解決先停掉 NameNode 服務然后清空元數(shù)據(jù)目錄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 狀態(tài)界面正常不代表 API 正常。我每次裝完都會跑一遍 CM 的 REST API確認管理面和數(shù)據(jù)面都在線。先拿集群列表curl -u admin:your_password http://server-ip:7180/api/v5/clusters返回 JSON 包含集群名字和版本。再查主機狀態(tài)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能讀到內(nèi)容HDFS 才算活著。YARN 驗證更簡單sudo -u yarn yarn node -list能看到RUNNING狀態(tài)的節(jié)點說明 ResourceManager 的調(diào)度鏈路沒問題。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的關鍵字防止有心跳斷線在后臺悄悄發(fā)生。希望這份拆包筆記能幫你把集群一次搭起來少踩幾個坑。本文還有配套的精品資源點擊獲取