一、摘要
此文檔主要用於安裝 CDH,CDH是Cloudera的軟件發行版,包含Apache Hadoop及相關項目。詳情請參見官網介紹:
- 中文:https://cn.cloudera.com/developers/inside-cdh.html
- 英文:https://www.cloudera.com/products/open-source/apache-hadoop/key-cdh-components.html
其中,需要我們手動安裝的主要是 Cloudera Manager(後面簡稱爲 CM),因爲 Hadoop 相關服務會由 CM 通過界面的方式提供安裝,其安裝原理大致爲:CM
通過 ssh/scp 將 Hadoop 相關服務安裝包分發到各節點,然後通過腳本自動安裝與啓動即可。
所以以下主要包括一些環境的配置(比如 CM 安裝 Hadoop 相關服務時需要分發軟件包,此時就需要配置 ssh 無密登陸,另外針對可能引起 hadoop 集羣問題的一些配置)以及數據庫的安裝(CM 以及 hive 需要使用數據庫)等。具體路線大致爲:
- 服務器基礎配置(針對所有主機)
- 配置 sudo 無密
- 配置 ssh 無密登陸
- 其它基礎配置
- Cloudera Manager 安裝
- JDK 安裝
- 數據庫安裝
- Hadoop 服務以及 CM agent 安裝(通過 CM 自動分發安裝)
- JDK 安裝
- CM Angent 安裝
- Hadoop 相關服務安裝
二、安裝
請注意本文檔與實際安裝環境的區別:
- 本文檔安裝版本爲:CDH 5.8.3
- 系統版本:centos 7.2.1511
- 每臺服務器 CPU / Physical memory / Disk 信息:
- CM 服務器(兩臺):CPU core 8, Physical memory 23.4 GiB, Disk ~= 195.9 GiB
- master 節點(5 臺):CPU core 16, Physical memory 251.6 GiB, Disk ~= 4TiB
- salve 節點(35 臺):CPU core 16, Physical memory 251.6 GiB, Disk ~= 13.1TiB
- 因爲是內網安裝,所以我們提前下載了安裝包,並配置了 yum repository,repo 文件如下:
$ cat /etc/yum.repos.d/cloudera-manager.repo
[cloudera-manager]
name = Cloudera Manager, Version 5.8.3
baseurl = http://172.0.0.62/cm5/5.8.3/
gpgkey = http://172.0.0.62/RPM-GPG-KEY-cloudera
gpgcheck = 1
1. 基礎環境配置
1) 主機介紹
在安裝之前,我們會預先配置主機名稱,主機名稱和 IP 通常是根據安裝的服務而有區別的,比如這次有 42 臺服務器,那麼它們的名稱與所安裝的服務會有如下的對應關係(因爲涉及敏感信息,所以假設前綴都爲xxxx_,但實際上應該是有業務含義的前綴):
主機名稱 | 所安裝服務 |
---|---|
xxxx_cli01 | CM Web 服務器 |
xxxx_cli02 | MySQL or MariaDB CM Event Server CM Alert Publisher |
xxxx_hdp(01 - 05) | HBase Master HDFS NameNode HDFS Balancer HDFS httpFS HDFS JournalNode Hive Gateway Hive Metastore Server Hive Server2 Spark History Spark Gateway Yarn ResourceManager Yarn JobHistory Server Zookeeper |
xxxx_hdp(11 - 45) | HBase RegionServer HDFS DataNode Yarn NodeManager |
可以看見,以 cli01/cli02 結尾的主要安裝 CM 相關服務,以 hdp01 - hdp05 結尾的主要是 master-salve 架構中的一些 master 服務,而以 hdp11 - hdp45 結尾的則是 salve 服務,也是數據實際存放的節點。在瞭解了安裝的服務器之後,我們再來進行安裝,這樣更能辨別所需的操作是在哪一個節點上面完成的。
2) 配置 sudo 無密
進入 1.configure-no-password-sudo 目錄,並根據 readme.md 文件操作(請根據實際情況跳過)。
3) 配置 SSH 無密登陸以及其它基礎配置
進入 2.configure-and-check-system-env 目錄,並根據 readme.md 文件操作(請根據實際情況跳過)。
其中基礎配置主要包含以下配置:
- 配置 SSH 無密登陸
- 配置 host 文件:確保所有主機都能正確的解析自己以及集羣內其它所有主機的主機名
- 配置 repostory 文件:用於內網安裝
- 配置打開文件的最大句柄數:防止 HDFS too many open files 異常,本次爲 32768,
- 關閉 SELinux,使其狀態爲 disabled:啓用時可能限制 SSH 免密登陸
- 關閉防火牆
- 配置 NTP 服務:集羣內所有節點的時間必須同步
- 配置 swappiness:使 vm.swappiness = 0,以避免使用 swap 分區
- 禁用透明大頁面壓縮(Transparent HugePages / THP):使 transparent_hugepage=never,以提升系統性能
- 優化 TCP 連接設置
2. 檢查系統環境配置
注意:
- 通過以下命令獲取 cluster 中各 server 的 name 是大寫還是小寫,hosts 文件中 host 列表要與它保持一致,否則後面會出問題;
python -c 'import socket; print socket.getfqdn(), socket.gethostbyname(socket.getfqdn())'
- /etc/hosts 設置,主機名全域名在前,FQDN 在後,例:
ipaddress hostname.mercury.corp hostname
172.0.0.10 hostname.mercury.corp hostname
3. 安裝依賴數據庫
可選數據庫(僅選其中之一即可):
- MySQL
- MariaDB(推薦)
3.1 MySQL
3.1.1 安裝
$ sudo yum install mysql-server
$ sudo service mysqld start
3.1.2 啓動
請檢查 mysql 默認引擎,如果不是innodb,請添加default-storage-engine=INNODB到my.cnf配置文件中(通常在/etc/mycnf),並重啓 mysql 服務。
$ sudo service mysqld restart
3.1.3 安裝 MySQL JDBC Connector
hadoop 相關服務需要連接 mysql 服務
$ sudo yum install mysql-connector-java
3.1.4 確認 MySQL 服務有開機啓動
$ sudo /sbin/chkconfig mysqld on
$ sudo /sbin/chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
3.1.5 創建 Cloudera Manager 需要的數據庫
create database cloudera_manager_service DEFAULT CHARACTER SET utf8;
grant all on cloudera_manager_service.* to 'cloudera-scm'@'%' identified by 'xxxx' with grant option;
create database hive DEFAULT CHARACTER SET utf8;
grant all on hive.* to 'xxxx' identified by 'xxxx' ;
3.2 MariaDB(推薦)
3.2.1 安裝
$ sudo yum clean all
$ sudo yum install mariadb-server
3.2.2 配置
1) 下面是 Cloudera 推薦的一個配置文件:
請將以下配置追加到原配置文件中,並注意分區 [mysqld] [mysqld_safe]
$ sudo vi /etc/my.cnf
[mysqld]
transaction-isolation = READ-COMMITTED
# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links = 0
key_buffer = 16M
key_buffer_size = 32M
max_allowed_packet = 32M
thread_stack = 256K
thread_cache_size = 64
query_cache_limit = 8M
query_cache_size = 64M
query_cache_type = 1
max_connections = 550
#expire_logs_days = 10
#max_binlog_size = 100M
#log_bin should be on a disk with enough free space. Replace '/var/lib/mysql/mysql_binary_log' with an appropriate path for your system
#and chown the specified folder to the mysql user.
log_bin=/var/lib/mysql/mysql_binary_log
binlog_format = mixed
read_buffer_size = 2M
read_rnd_buffer_size = 16M
sort_buffer_size = 8M
join_buffer_size = 8M
# InnoDB settings
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 64M
innodb_buffer_pool_size = 4G
innodb_thread_concurrency = 8
innodb_flush_method = O_DIRECT
innodb_log_file_size = 512M
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
2) 停止 Mariadb
$ sudo systemctl start mariadb.service
$ sudo systemctl stop mariadb.service
3) 備份日誌
sudo mkdir /var/lib/mysql_bak;
sudo mv /var/lib/mysql/ib_logfile0 /var/lib/mysql_bak
sudo mv /var/lib/mysql/ib_logfile1 /var/lib/mysql_bak
4) 設置開機啓動
// Ensure the MariaDB server starts at boot.
$ sudo systemctl start mariadb.service
$ sudo systemctl enable mariadb.service
$ sudo systemctl status mariadb.service
5) 設置 MariaDB 賬戶密碼
$ sudo /usr/bin/mysql_secure_installation
[...]
Enter current password for root (enter for none):
OK, successfully used password, moving on...
[...]
Set root password? [Y/n] y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] Y
[...]
Disallow root login remotely? [Y/n] N
[...]
Remove test database and access to it [Y/n] Y
[...]
Reload privilege tables now? [Y/n] Y
All done!
3.2.3 創建 Cloudera Manager 所需數據庫
注:xxxx 爲所使用的數據庫密碼,請根據實際情況進行更改,後面也會用到
$ mysql -u root –p
create database cloudera_manager_service DEFAULT CHARACTER SET utf8;
grant all on cloudera_manager_service.* to 'cloudera-scm'@'%' identified by 'xxxx' with grant option;
create database hive DEFAULT CHARACTER SET utf8;
grant all on hive.* to 'xxxx' identified by 'xxxx' ;
FLUSH PRIVILEGES;
3.2.4 安裝 MariaDB JDBC Connector (服務需要)
1) 下載 mysql jdbc driver
http://www.mysql.com/downloads/connector/j/5.1.html
2) 解壓下載文件,示例:
tar zxvf mysql-connector-java-5.1.40.tar.gz
3) 拷貝並重命名 jdbc driver 到目標地址,示例:
$ sudo cp mysql-connector-java-5.1.40/ mysql-connector-java-5.1.40-bin.jar /usr/share/java/mysql-connector-java.jar
如果目標文件夾不存在與這個主機,你可以在拷貝 jar 文件前創建它,示例:
$ sudo mkdir -p /usr/share/java/
$ sudo cp mysql-connector-java-5.1.40-bin.jar /usr/share/java/mysql-connector-java.jar
注意: 不要使用 yum install 命令安裝 MySQL driver 包,因爲他會安裝 openJDK, 並使用 linux alternatives 命令將系統 JDK 設置爲 openJDK。
4. 安裝 Cloudera Manafer 服務
將 Cloudera Manager Server 安裝在安裝數據庫的服務器上或者可以訪問數據庫的服務器上。這個服務器不需要是使用 Cloudera Manager 管理的集羣的機器。
$ sudo yum clean all
$ sudo yum -y install cloudera-manager-server
$ sudo yum -y install cloudera-manager-daemons
5. 安裝 JDK
$ sudo yum install oracle-j2sdk1.7
6. 裝備 Cloudera Manager 服務所需的數據庫
/usr/share/cmf/schema/scm_prepare_database.sh [options] database-type database-name username password
1) Mysql 在本地主機上
$ sudo /usr/share/cmf/schema/scm_prepare_database.sh mysql cloudera_manager_service cloudera-scm xxxx
$ sudo /usr/share/cmf/schema/scm_prepare_database.sh mysql cloudera_manager cloudera-scm
2) Mysql 不在本地主機上
$ sudo /usr/share/cmf/schema/scm_prepare_database.sh -he3echdcli02 mysql cloudera_manager_service cloudera-scm xxxx
$ sudo /usr/share/cmf/schema/scm_prepare_database.sh -he3echdcli02 mysql cloudera_manager cloudera-scm xxxx
7. 啓動 Cloudera Manager 服務
$ sudo service cloudera-scm-server start
或者
sudo systemctl start cloudera-scm-server.service
8. 進入 Cloudera Manager 管理控制檯
http://:
是安裝 Cloudera Manager Server 的服務器的主機名或 IP 地址,是爲 Cloudera Manager Server 配置的端口,默認端口 7180。
三、 使用 Cloudera Manager 自動安裝 CDH 並配置
注:以下有部分步驟並未展示,因爲它們可能僅僅是進行簡單的默認操作(直接點擊繼續操作按鈕)
1. 通過界面安裝
在瀏覽器進入 http://\
1) 選擇 Cloudera Manager 版本
選擇將要安裝的 Cloudera Manager 版本,我們目前使用的 Express Edition(免費版);
2) 爲 CDH 集羣安裝指定主機
通過主機名和 IP 地址範圍搜索指定的集羣主機:
點擊繼續,並等待系統自動檢查完成:
3) 選擇存儲庫
因爲使用的自定義存儲庫,所以需要做如下更改:
將存儲庫服務器的 IP 地址,添加到集羣中每臺服務的 host 文件中,例:
$ more /etc/hosts
# ...
172.16.0.10 archive.cloudera.com
# ...
在此之前,我們應該檢查我們的存儲庫(填寫的遠程服務器的主機上)。例如:壓縮包位於 /var/www/html/cdh5/parcels/5.4.0/ 目錄,cm 位於 /var/www/html/cm5/redhat/6/x86_64/cm/5.4.0/,那麼:
$ cd /var/www/html/
$ sudo createrepo cdh5/parcels/5.4.0/
$ sudo createrepo cm5/redhat/6/x86_64/cm/5.4.0/
或者
$ cd /var/www/html/
$ sudo createrepo --update cdh5/parcels/5.4.0
$ sudo createrepo --update cm5/redhat/6/x86_64/cm/5.4.0/
4) JDK 安裝選項
5) 啓動單用戶運行選項
不使用單用戶模式運行,直接點擊繼續
6) 提供 SSH 憑證
提供 SSH 憑證,用以分發向各節點分發安裝包,其中用戶爲 linux 登錄用戶。
7) 安裝 JDK 和 Agent
點擊繼續,系統將自動在各節點安裝 JDK 與 angent,等待其完成
8) 分發 Parcel
繼續下一步,系統會自動將 Hadoop 相關服務安裝包分發到各節點,等待其完成。
9) 檢查主機正確性
安裝完成之後,系統會自動檢查主機正確性:
這裏有一個問題,應該是之前配置的問題,後面再解決吧,繼續下一步
10) 選擇需要安裝的服務
選擇所需的 Hadoop 相關服務,這裏選擇了 HBase、HDFS、Spark、YARN、Zookeeper:
11) 自定義角色分配
選擇完需要安裝的服務後,就需要爲各服務選擇對應的主機。根據主機名, Cloudera Manager 的服務安裝在以 cli01/cli02 結尾的兩臺服務器上,其它服務的主節點(除去數據節點,比如 DataNode 和 RegionServer)均安裝在以 01 - 05 結尾的服務器上,剩下的譬如 HDFS 的 DataNode、HBase 的 RegionServer、YARN 的 NodeManger 則安裝在以 11 ~ 45 結尾的節點上,如下:
注意:上圖中 Spark 的 Gateway 請選擇與 HiveServer2 相同的主機,否則後面會報錯,這裏截圖時沒截對。
12) 數據庫設置
接下來,我們需要爲 Hive 和 Activity Monitor 設置數據庫,數據庫就是我們之前創建的數據庫。設置完成後點擊測試鏈接併成功後方可繼續:
13) 集羣的基礎配置
繼續,需要配置一些基礎配置(請根據實際情況更改,比如接受的 DataNode 失敗的卷設置爲 0,圖片裏爲 4):
14) 自動安裝
2. 異常處理
如果在最後的步驟中發生了檢查異常,而服務已經安裝好的情況,請直接進入 CM 控制檯,並根據服務的先後順序依次安裝或配置必須的配置,再進行依次啓動。
3. 主界面
因爲瀏覽器是中文版,所以儘管系統是英文版,最終還是顯示的中文版。
至此,基本安裝完成。
鳴謝
此文檔主要來自於公司 DBA 的親手指導,並根據其編寫的文檔整理而來,特此感謝。