Hadoop之CDH安裝
1. 離線資料儲存及查詢環境部署
離線資料的儲存與查詢主要是以hadoop為中心的技術棧,包括hive,hbase,hue,kylin等。部署hadoop的方式比較流行的主要有三種:
1. 直接部署Apache Hadoop,即手工部署,需要自己配置,協調版本相容等,好處是能夠加深理解,但是過程較繁瑣。
2. Ambari :Hortonworks的產品,用於建立,管理,監視hadoop叢集,完全開源,由社群維護,同樣是Apache Software Foundation頂級專案之一。支援整合ElasticSearch,redis,kylin等。
3. Cloudera Manager:Cloudera公司把Apache hadoop開源專案商業化,開發出了Cloudera Manager及CDH等一套相關的hadoop生態系統,分為免費版和商業版,商業版收費。
目前國內Apache Hadoop和Cloudera Manager使用的較多,本系統使用Cloudera Manager按照hadoop的生態系統。
1. Java版本
要求按照Oracle JDK,CM/CDH 5.0及以上版本支援JDK 7,如下表1.2所示:
表1.2 JDK版本支援
JDK 7 | Supported in all C5.x |
---|---|
1.7u80 | Recommended / Latest version tested |
1.7u75 | Recommended |
1.7u67 | Recommended |
1.7u55 | Minimum required |
在CM/CDH 5.3及更高版本時,開始支援JDK 8,但是,CDH 5.13時開始支援的Kafka 3.0要求JDK 8,不支援JDK 7。由於存在安全風險,JDK 8u40,8u45和8u60不在支援範圍之內。支援JDK 8u75,但有一個已知問題:當Oozie伺服器在JDK 8u75或更高版本上執行時,Oozie Web Console返回500錯誤。如下表1.3所示:
表1.3 JDK 8版本支援
JDK 8 | Supported in C5.3 and Higher |
---|---|
1.8u131 | Recommended / Latest version tested |
1.8u121 | Recommended |
1.8u111 | Recommended |
1.8u102 | Recommended |
1.8u91 | Recommended |
1.8u74 | Recommended |
1.8u31 | Minimum required |
2. 將其中一臺主機指定為Cloudera Manager Server主機。提供使用root帳戶或具有無密碼sudo許可權的帳戶登入到該主機的功能。
3. 允許Cloudera Manager Server主機在所有主機的同一埠上進行統一的SSH訪問。
4. 所有群集主機必須有權訪問標準軟體包儲存庫以及archive.cloudera.com或具有所需安裝檔案的本地儲存庫。
本系統伺服器版本為Centos7,所有安裝均以此為準,其他系統版本的安裝,請參考官網。
1.2 CM/CDH安裝
安裝方式主要分為三種:
1. Path A:由Cloudera Manager自動安裝,使用嵌入式資料庫,適合測試環境,不建議生產環境使用,隨著叢集的增長,有可能需要資料庫的遷移。
2. Path B:使用Cloudera Manager的Parcels or Packages安裝(比如yum命令安裝)。
3. Path C:手動安裝,使用tar壓縮包。
如果選擇Yum聯網安裝,則下載Repo File,拷貝到/etc/yum.repos.d/中。或者進入Location指向的地址,可以看到如下圖1.7所示的內容:
圖1.7 CM5.12.0安裝包
將其中的rpm包全部下載,上傳到伺服器。
1.2.1 安裝JDK
首先在Cloudera Manager伺服器上安裝Oracle JDK(所有伺服器都需要安裝同一版本的Oracle JDK),從倉庫中安裝命令如下:
sudo yum install oracle-j2sdk1.7
也可以直接使用rpm包安裝,命令如下:
sudo yum localinstall –nogpgcheck jdk-6u31-linux-amd64.rpm
sudo yum localinstall –nogpgcheck oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm
1.2.2 安裝外部資料庫-MariaDB
生成環境需要單獨安裝外部資料庫,可選的資料庫有MariaDB(Mysql),Oracle Server或者PostgreSQL Server,本系統選擇用MariaDB。安裝命令如下:
yum install mariadb-server
安裝完成之後,如果MariaDB啟動了,先關閉:
sudo service mariadb stop
接下來,開始配置mariaDB:
1. 備份舊的InnoDB日誌檔案/var/lib/mysql/ib_logfile0和/var/lib/mysql/ib_logfile1到新位置,移出/var/lib/mysql目錄。
2. 確定配置檔案my.cnf的位置,一般在如下位置之一:
· /etc/my.cnf
· /etc/mysql/my.cnf
· my.cnf in the DEFAULT_SYSCONFDIR specified during the compilation
· my.cnf in the path, specified in the environment variable MYSQL_HOME (if any)
· the file specified in --defaults-extra-file (if any)
· user-home-dir/.my.cnf
修改配置檔案讓其慢如以下幾個條件:
1. 為了防止死鎖,將隔離級別設定為read committed。
· 大多數發行版中的MariaDB安裝中的預設設定使用保守的緩衝區大小和記憶體使用情況。 Cloudera管理服務角色需要高寫入吞吐量,因為他們可能會在資料庫中插入許多記錄。 Cloudera建議您將innodb_flush_method屬性設定為O_DIRECT。
2. 小叢集(小於50臺伺服器),可以在同一臺主機上儲存多個數據庫,把每個資料庫放在自己的儲存捲上。為每個資料庫允許最多100個連線,然後額外新增50個連線。例如,對於兩個資料庫,將最大連線設定為250。如果一臺主機儲存5個數據庫(Cloudera Manager Server,活動監視器,報告管理器,Cloudera導航器和Hive metastore的資料庫),則設定為550。
3. 大型叢集(超過50個主機) - 不要在同一個主機上儲存多個數據庫。為每個資料庫/主機對使用一個單獨的主機。主機不需要為資料庫專門保留,但每個資料庫應該位於不同的主機上。
4. 開啟binlog,能夠保證資料庫錯誤恢復。Cloudera Manager本身不要求。
如下為推薦的配置示例:
[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/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
完成如上配置之後,則需要將資料庫設定為開機啟動,命令如下所示:
sudo systemctl enable mariadb
sudo service mariadb start
設定MariaDB的root密碼,當前密碼為空,如下所示:
$ 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
... Success!
以上就完成了MariaDB的安裝和配置,如果沒有使用 Cloudera Manager Installer安裝Cloudera Manager Server,則需要手動建立資料庫和使用者賬號:
1. Cloudera Manager服務包含的角色有:
1) Activity Monitor(如果使用MapReduce 服務)
2) Reports Manager - 跟蹤磁碟利用率和處理活動的時間。Medium-sized.。
2. Each Hive Metastore - 包含Hive元資料。比較小。
3. Sentry Server - 包含授權元資料。比較小。
4. Cloudera Navigator Audit Server - 包含審計資訊。在大型叢集中,這個資料庫可能會變大。
5. Cloudera Navigation Metadata Server - 包含授權,策略和審計報告元資料。比較小。
建立這些資料庫時,必須設定為UTF-8編碼。首先使用root進入MariaDB:
$ mysql -u root -p
Enter password:
為Activity Monitor, Reports Manager, Hive Metastore Server, Hue Server, Sentry Server, Cloudera Navigator Audit Server, and Cloudera Navigator Metadata Server建立資料庫,資料庫名,使用者名稱和密碼可以是任何值,如下表1.4提供了Cloudera Manager預設的配置名:
表1.4 Cloudera Manager預設資料庫名配置
Role | Database | User | Password |
---|---|---|---|
Activity Monitor | amon | amon | amon_password |
Reports Manager | rman | rman | rman_password |
Hive Metastore Server | metastore | hive | hive_password |
Sentry Server | sentry | sentry | sentry_password |
Cloudera Navigator Audit Server | nav | nav | nav_password |
Cloudera Navigator Metadata Server | navms | navms | navms_password |
建立資料庫,執行命令如下:
mysql> create database database DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on database.* TO 'user'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)
重要說明:重新啟動程序時,將使用儲存在Cloudera Manager資料庫中的資訊重新部署每個服務的配置。如果此資訊不可用,則說明群集無法正常啟動或執行。必須安排和維護Cloudera Manager資料庫的定期備份才能在發生此資料庫丟失的情況下恢復群集。
1.2.3 安裝Cloudera Manager Server Packages
如果配置了倉庫,則安裝命令如下:
sudo yum install cloudera-manager-daemons cloudera-manager-server
也可以直接使用rpm包安裝,命令如下:
sudo yum --nogpgcheck localinstall cloudera-manager-daemons-*.rpm
sudo yum --nogpgcheck localinstall cloudera-manager-server-*.rpm
安裝完Cloudera Manager Server之後,為其配置外部資料庫,如下圖1.8所示,建立Cloudera Manager Server所需的資料庫:
圖1.8 Cloudera Manager 資料庫
建立資料庫之後,執行scm_prepare_database.sh指令碼(安裝Cloudera Manager Server的伺服器上),如下所示:
/usr/share/cmf/schema/scm_prepare_database.sh database-type [options] database-name username password
如下表1.5所示,為指令碼的引數說明:
表1.5 scm_prepare_database.sh指令碼引數說明
Parameter | Description |
---|---|
database-type | One of the supported database types: 1. MariaDB – mysql 2. MySQL – mysql 3. Oracle – oracle 4. PostgreSQL - postgresql |
database-name | The name of the Cloudera Manager Server database to create or use. |
username | The username for the Cloudera Manager Server database to create or use. |
password | The password for the Cloudera Manager Server database to create or use. If you do not specify the password on the command line, the script prompts you to enter it. |
直接執行如上指令碼,可能會出現結果會如下圖1.9所示:
無法找到mysql驅動程式,如上圖6.9紅色部分所示,指令碼會到/usr/share/java下找Mysql的驅動程式,所以,可以下載mysql-connector-java.jar放到對應目錄,下載地址:
http://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.21
結果如下圖1.10所示:
此時,再次執行如上scm_prepare_database.sh指令碼,結果如下圖1.11所示:
如果嵌入式PostgreSQL的配置檔案存在的話,使用如下命令刪除:
rm /etc/cloudera-scm-server/db.mgmt.properties
以上,已經完成了Cloudera Manger Server的安裝,接下來,你可以選擇手動安裝 Oracle JDK, Cloudera Manager Agent 和 CDH以及 Managed Service Packages。或者由Cloudera Manager自動安裝它們,但是必須能夠聯網。
Oracle JDK已經安裝完成,注意,每臺伺服器上都要安裝JDK。所以,接下來先安裝 Cloudera Manager Agent。
1.2.4 安裝 Cloudera Manager Agent
Cloudera Manager Agent負責啟動和停止程序,觸發安裝以及監控叢集中的所有主機。你可以手動在所有伺服器上安裝Cloudera Manager Agent,或者稍後由Cloudera Manager自動安裝。注意,手動安裝時,每臺伺服器上都要進行如下的步驟(包括執行Cloudera Manager Service Roles的伺服器:Service Monitor, Activity Monitor, Event Server, Alert Publisher, or Reports Manager):
如果配置了yum repo,則可以使用如下命令安裝:
sudo yum install cloudera-manager-agent cloudera-manager-daemons
否則,直接使用下載的rpm包進行安裝,命令如下:
sudo yum --nogpgcheck localinstall cloudera-manager-daemons-*.rpm
sudo yum --nogpgcheck localinstall cloudera-manager-agent-*.x86_64.rpm
當安裝完成之後,在每一臺主機上,配置Cloudera Manager Agent指向Cloudera Manager Server,配置檔案為/etc/cloudera-scm-agent/config.ini,配置如下:
1. server_host:執行Cloudera Manager Server的主機的名稱(ip地址)。
2. server_port:執行Cloudera Manager Server的主機上的埠。預設7182。
1.2.5 安裝CDH和Managed Service
CDH和Managed Service Packages同樣能夠由Cloudera Manager自動安裝或者手動安裝,即使用Parcels安裝或者Packages安裝。之前,使用的都是yum install Packages安裝的,Parcels是專用於Cloudera Manager安裝的格式,使用Parcels安裝,Cloudera Manager自動下載,分發和啟用程式。為了區別,Parcels預設安裝在/opt/cloudera/parcels,Packages預設安裝在/usr/lib。使用Packages安裝的話,就無法再使用Parcels安裝了,在同一個叢集中,你無法即使用Packages又使用Packages安裝軟體,只能二者選一,所以,這裡選擇使用Parcels安裝。
1. 啟動Cloudera Manager
sudo service cloudera-scm-agent start # 所有伺服器
sudo service cloudera-scm-server start # Cloudera Manager Server伺服器
稍後幾分鐘,等待Cloudera Manager Server啟動成功。在Cloudera Manager Server伺服器上。可以檢視/var/log/cloudera-scm-server/cloudera-scm-server.log日誌,觀察啟動的過程。如果出錯,請參考Troubleshooting Installation and Upgrade Problems。
- 登入Cloudera Manager Web Ui
當Cloudera Manager啟動成功之後,訪問地址http://Server host:port, 埠預設7180,進入Web介面,首先出現的登入介面,預設的使用者名稱:admin,密碼:admin。接下來是終端使用者協議和條件,點選YES之後,進入Welcome to Cloudera Manager介面。如下圖1.13所示:
在這裡選擇免費版本,提供的功能相較於企業版少一些,通常情況下,已經夠用了。
點選繼續以進入安裝介面,如下圖1.14所示:
這一步,有兩個選項卡,如果沒有提前手動安裝和啟動Cloudera Manager Agent,則選擇“新主機”,填入主機名,Cloudera Manager Server自動搜尋能夠免密登入的主機,然後在其上自動安裝Cloudera Manager Agent。由於已經安裝和啟動了Cloudera Manager Agent,並且成功啟動,這裡選擇“當前管理的主機”,就能夠直接看到啟動了Cloudera Manager Agent的主機,勾選上即可。如果“當前管理的主機”顯示的不完全,同樣可以使用新主機進行搜尋。如下圖1.15所示:
點選搜尋,結果如下圖1.16所示:
勾選上“當前受管”為否的主機,此時主機“dyl02”因為“當前受管”狀態為是,所以無法勾選,這一步先忽略該主機,下一步,顯示如下圖1.17所示:
注:事後檢測原因,由於直接克隆的虛擬機器,導致/var/lib/cloudera-scm-agent/uuid內容相同,即agent的uuid相同,所以,只能顯示出一個agent,無法兩個agent同時存在,將叢集中主機刪除,修改其中一個uuid內容,然後在Cloudera Manager介面重新新增主機,之後重新進入叢集安裝,與下列步驟相同。
這一步,需要選擇安裝CDH的方式,有兩種方式,使用資料包和使用Parcel,如果伺服器已經使用資料包安裝了CDH,則這裡不能再選擇使用Parcel,兩者無法同時使用,建議選擇Parcel。
使用Parcel安裝,可以選擇離線安裝和線上安裝,線上安裝時,Cloudera Manager自動下載所需包,預設存放到/ opt/cloudera/parcel-repo,如果伺服器無法聯網,或者網速較慢,可以提前下載下來,將所需檔案放入該目錄,下載地址為:
https://archive.cloudera.com/cdh5/parcels/5.12.0/
下載內容:
CDH-5.12.0-1.cdh5.12.0.p0.29-el7.parcel
CDH-5.12.0-1.cdh5.12.0.p0.29-el7.parcel.sha1
manifest.json
將CDH-5.12.0-1.cdh5.12.0.p0.29-el7.parcel.sha1重新命名CDH-5.12.0-1.cdh5.12.0.p0.29-el7.parcel.sha,同時編輯內容,將hashcode後面的url去掉。
如圖1.17所示,勾選“使用Parcel安裝”,選擇CDH版本為CDH-5.12.0-1.cdh5.12.0.p0.29,點選“繼續”,進入下一步,選擇是否安裝Oracle Java SE開發工具,由於已經安裝完成,這一步直接“繼續”,進入“啟用單使用者模式”,不啟動單使用者模式,直接“繼續”,接下來,提供SSH登入憑據,如下圖1.18所示:
同時安裝的數量設定為適當的數值,這裡因為是虛擬機器,所以設定為1。點選“繼續”,第五步時,將進行Cloudera Manager叢集的安裝,一段時間之後,叢集安裝成功,如下圖1.19所示:
下一步,將會安裝CDH叢集,這一步,如果沒有預先下載CDH包,則首先會下載CDH,這裡已經提前下載,所以將會直接安裝。等待一段時間,CDH安裝完成,如下圖1.20所示:
繼續之後,將檢查主機正確性,等待約一分鐘,檢測結果如下圖1.21所示:
如上圖1.21所示,建議vm.swappiness設定為10等建議,根據其提示進行相關操作,如下圖1.22所示:
瀏覽器輸入網址:http://192.168.42.131:7180,進入Cloudera Manager管理介面之後,首先需要先新增Cloudera Manager Service,在右上角,如下圖1.21所示,點選“新增Cloudera Manager Service”:
彈出介面如下圖1.22所示,選擇性填入有效資訊之後,完成新增:
在沒有新增Cloudera Manager Service時,首頁可能會報錯,比如無法連線Host Monitor等,啟動該服務成功,等待一段時間,所有服務準備就緒,首頁正常,如下圖1.23所示:
如下圖1.24是Cloudera Manager Service提供的服務,包括了Host Monitor:
如上,已經完成Cloudera Manager的基本部署,需要的功能,只需要在Cloudera Manager的Web上新增服務,並且完成對應的配置,即可完成部署和啟動。
1.2.6 新增HDFS服務
Cloudera Manager的服務之間,很多是有依賴關係的,例如,如果需要Hive服務,則需要先安裝HDFS和YARN服務,所以,接下來,先新增HDFS服務,如下圖1.25所示:
首先,如上圖1.25所示,單擊“新增服務”,將進入下圖1.26所示介面,選擇HDFS服務,
如上圖1.26所示,點選繼續,進入HDFS服務配置介面,如下圖1.27所示:
選擇主機的角色,分配不同的功能,如上圖6.27所示,“dyl02”主機作為NameNode,“dyl”主機作為DataNode,單擊“繼續”,進入更改HDFS大小,資料目錄等配置,根據需要修改,單擊“繼續”,進入部署介面,開始執行命令,配置並啟動HDFS,等待完成,點選“繼續”,進入成功介面,點選“完成”,成功新增HDFS服務。
1.2.7 新增YARN服務
YARN服務依賴HDFS服務,如上已經完成HDFS服務的安裝與啟動,則可以繼續新增YARN服務。同樣,如圖1.25所示,點選“新增服務”按鈕,選擇YARN,分配主機角色,如下圖1.28所示:
根據主機配置,分配不同功能,這裡由於“dyl”主機記憶體不足,分配到“dyl02”主機上。點選“繼續”,將會配置NodeManager本地目錄,配置後繼續,將開始部署和啟動YARN服務,啟動完成之後,點選“繼續”,等待YARN服務新增到叢集中,直接點選“完成”
1.2.8 新增Hive服務
如上圖1.25所示,點選“新增服務”,選擇Hive,進入Hive配置介面,首先選擇主機,如下圖1.29所示:
根據主機配置,選擇Hive安裝到哪臺主機上,點選“繼續”,將配置hive metadata資料庫,如下圖1.30所示:
在前面章節安裝外部伺服器mariaDB時,已經建立了hive的元資料庫metastore,按照提示填入對應資訊即可。
如上圖1.30所示,無法找到jdbc驅動程式,操作和6.4.2.3中相同,“dyl02”伺服器上傳mysql-connector-java.jar到/usr/share/java中,Cloudera Manager Agent預設載入該目錄下jar包。再次點選“測試連線”,顯示成功,點選“繼續”,顯示配置hive目錄和埠的介面,點選“繼續”,開始部署並啟動hive,如下圖1.31所示:
從圖1.31可以看出,自動建立了Hive Metastore的資料庫表,如上,已經添加了HDFS,YRAN和Hive服務,離線資料庫Hive的部署完成,表明已經可以通過Flume,向Hive寫入資料了。
其他服務,例如hue,HBase等的新增過程類似,在這裡不一一贅述。注意,安裝HBase之前,需要首先安裝Zookeeper服務。