CDH-Hadoop 安裝
[TOC] [TOC]
一、 摘要
此文件主要用於安裝 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 |
SQL/">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 在後,例:
ipaddresshostname.mercury.corphostname 172.0.0.10hostname.mercury.corphostname
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 systemctlstart mariadb.service $ sudo systemctlstop 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 systemctlstart mariadb.service $ sudo systemctlenable mariadb.service $ sudo systemctlstatus 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://