1. 程式人生 > >Hadoop之CDH安裝

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。

  1. 登入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服務。