CDH6.3.2企業(yè)級安裝實戰(zhàn)(二)
五、HDFS HA配置
啟用和禁用高可用性會導致HDFS服務以及所有依賴HDFS的服務中斷。在啟用或禁用HA之前,請確保集群上沒有正在運行的作業(yè)。
啟動 HA 前,存在 SecondaryNameNode:
1、啟用 High Avaliaability
2、Nameservice 名稱
我們建議在具有與 NameNode 相似硬件規(guī)格的機器上承載 JournalNode。通常,NameNode 和 ResourceManager 的主機都是不錯的選擇。您必須要有至少三個以上的奇數(shù) JournalNode。
JournalNode的作用是共享存儲,它是主備NameNode節(jié)點都可讀寫的共享目錄,系統(tǒng)是否可用也受限于共享目錄是否可用, JournalNode的實現(xiàn)使用的是類Paxos思想。就是多數(shù)服從少數(shù)。要想?yún)^(qū)分多和少,就只能是奇數(shù)個節(jié)點。不是說至少3個,你部署一個,應該是沒問題的。
在往JournalNode寫數(shù)據(jù)的時候,是并發(fā)多個節(jié)點同時寫的,只要有 n / 2 + 1個節(jié)點返回成功,就代表數(shù)據(jù)寫入成功,這樣即不影響效率,又能保證數(shù)據(jù)的安全。
3、分配角色
這里必須至少有三個JournalNode守護程序,因為必須將 edit log 修改內(nèi)容寫入大多數(shù)JournalNode。
HA是使用Quorum-based storage來實現(xiàn)的。Quorum-based storage依賴于一組JournalNode,每個JournalNode維護一個本地編輯目錄,該目錄將對修改的記錄記錄到名稱空間元數(shù)據(jù)中。
4、部署完成
dfs.namenode.name.dir
dfs.namenode.name.dir
dfs.namenode.edits.dir

dfs.datanode.data.dir.perm
DataNode 數(shù)據(jù)目錄權限
5、查看HA
namenode active
name standby
6、查看nameservice
HDFS 實例 --> Federation 與 High Availability
六、YARN HA 配置
1、啟用 High Availability
2、選擇HA主機
3、部署完成
4、查看HA
七、安裝之后
1、Testing the Installation
表示Good Health
檢查主機心跳
Running a MapReduce Job
[cuadmin@cdh68 ~]$ sudo -u hdfs hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 10 100
Number of Maps = 10
Samples per Map = 100
Wrote input for Map #0
Wrote input for Map #1
Wrote input for Map #2
Wrote input for Map #3
Wrote input for Map #4
Wrote input for Map #5
Wrote input for Map #6
Wrote input for Map #7
Wrote input for Map #8
Wrote input for Map #9
Starting Job
20/11/19 14:02:39 INFO impl.YarnClientImpl: Submitted application application_1604371984479_0001
20/11/19 14:02:39 INFO mapreduce.Job: The url to track the job: http://cdh68.bigdata.com:8088/proxy/application_1604371984479_0001/
20/11/19 14:02:39 INFO mapreduce.Job: Running job: job_1604371984479_0001
20/11/19 14:02:48 INFO mapreduce.Job: Job job_1604371984479_0001 running in uber mode : false
20/11/19 14:02:48 INFO mapreduce.Job: map 0% reduce 0%
20/11/19 14:02:55 INFO mapreduce.Job: map 100% reduce 0%
20/11/19 14:03:03 INFO mapreduce.Job: map 100% reduce 100%
20/11/19 14:03:03 INFO mapreduce.Job: Job job_1604371984479_0001 completed successfully
20/11/19 14:03:03 INFO mapreduce.Job: Counters: 54
Job Finished in 25.901 seconds
Estimated value of Pi is 3.14800000000000000000
2、Installing the GPL Extras Parcel
GPL Extras contains functionality for compressing data using the LZO compression algorithm.
-
Download, distribute, and activate the parcel.
在配置 CDH 遠程倉庫時,我們已經(jīng)下載了 GPL Parcel包,故安裝集群時已經(jīng)激活。

-
The LZO parcels require that the underlying operating system has the native LZO packages installed. If they are not installed on all cluster hosts, you can install them as follows:
sudo yum install lzo
八、Hive安裝
1、安裝
- 添加服務
- 選擇Hive服務
- 選擇依賴
- 自定義角色分配
- 數(shù)據(jù)庫設置
- 審核更改
- 命令詳細信息
如果報如下錯誤:
HiveMetaException: Failed to retrieve schema tables from Hive Metastore DB,Not supported
Mysql JDBC驅(qū)動包導致的,使用yum安裝的驅(qū)動包不可用。下載并使用較新版本的驅(qū)動包可解決這個問題。
驅(qū)動包最新版本是5.1.49,親測可用。
- 匯總
- 查看狀態(tài)
2、生產(chǎn)環(huán)境部署架構
該架構體系中用戶使用的 Hive 客戶端或者 Hivesever2 服務、Spark 引擎、Presto 引擎等都是訪問統(tǒng)一 Hive Metastore 服務獲取 Hive 元數(shù)據(jù)。
Hive Metastore 服務主要是使用 LVS + 多個 Hive Metastore 實例組成。所有的 Hive Metastore 實例共享一套主從 MySQL 環(huán)境作為 Hive 元數(shù)據(jù)存儲 DB。
3、Hive Metastore Server HA
Metastore HA解決方案被設計用來處理metastore服務故障。當一個部署的metastore宕機時,metastore服務可能持續(xù)相當長的時間不可用,直到服務被重新拉起。為了避免這種服務中斷情況,需要部署Hive Metastore HA模式。Cloudera建議Metastore的每個實例在單獨的集群主機上運行,突出高可用作用。
1、工作原理
常規(guī)連接:
Metastore HA:
2、配置 Metastore HA
官方教程:https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/admin_ha_hivemetastore.html
未配置HA之前只有一個Metastore:
hive-site.xml配置如下:
<property>
<name>hive.metastore.uris</name>
<value>thrift://cdh68.bigdata.com:9083</value>
</property>
新增一個Hive Metastore Server
部署Hive Metastore Server
配置更新明細
重啟服務,重新部署客戶端配置
查看部署的 Hive Metastore Server
查看hive-site.xml配置文件:
<property>
<name>hive.metastore.uris</name>
<value>thrift://cdh68.bigdata.com:9083,thrift://cdh69.bigdata.com:9083</value>
</property>
4、HiveServer2 HA
官方教程:https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/admin_ha_hiveserver2.html
在生產(chǎn)環(huán)境中使用Hive,強烈建議使用HiveServer2來提供服務,好處很多:
- 在應用端不用部署Hadoop和Hive客戶端;
- 相比hive-cli方式,HiveServer2不用直接將HDFS和Metastore暴漏給用戶;
- 有安全認證機制,并且支持自定義權限校驗;
- 有HA機制,解決應用端的并發(fā)和負載均衡問題;
- JDBC方式,可以使用任何語言,方便與應用進行數(shù)據(jù)交互;
- 從2.0開始,HiveServer2提供了WEB UI。
如果使用HiveServer2的Client并發(fā)比較少,可以使用一個HiveServer2實例,沒問題。
但如果這一個實例掛掉,那么會導致所有的應用連接失敗。
1、新增 HiveServer2實例
啟動新增的 HiveServer2
查看新增HiveServer2實例
2、使用nginx實現(xiàn)HiveServer2 HA
我們常常會碰到企業(yè)已經(jīng)在用Nginx,Nginx畢竟在http和反向代理這塊是最優(yōu)秀的,這個時候我們就需要考慮復用Nginx。
-
安裝nginx
[song@cdh68 ~]$ sudo yum install -y nginx -
配置HiveServer2負載均衡策略
/etc/nginx/nginx.cfgstream{
log_format basic '$remote_addr [$time_local] ' '$protocol $status $bytes_sent $bytes_received' '$session_time';
upstream hiveserver2 {
least_conn; #路由策略:least_conn:最少連接
server cdh69.bigdata.com:10000;
server cdh70.bigdata.com:1000;
}
server{ #hiveserver2 jdbc 負載均衡
listen 10010;
proxy_pass hiveserver2;
}
}重新加載Nginx配置
[song@cdh68 ~]$ sudo nginx -s reload -
JDBC Beeline測試
[song@cdh68 ~]$ beeline -u jdbc:hive2://cdh68.bigdata.com:10010/default -n song
Connecting to jdbc:hive2://cdh68.bigdata.com:10010/default
Connected to: Apache Hive (version 2.1.1-cdh6.3.2)
Driver: Hive JDBC (version 2.1.1-cdh6.3.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 2.1.1-cdh6.3.2 by Apache Hive
0: jdbc:hive2://cdh68.bigdata.com:10010/defau> show databases;
+----------------+
| database_name |
+----------------+
| default |
+----------------+
1 row selected (0.595 seconds)
0: jdbc:hive2://cdh68.bigdata.com:10010/defau> -
配置HiveServer2 Balancer

此方法nginx存在單點故障,可以使用keepalive + nginx實現(xiàn)高可用
3、使用Zookeeper實現(xiàn)HiveServer2 HA
Hive從0.14開始,使用Zookeeper實現(xiàn)了HiveServer2的HA功能(ZooKeeper Service Discovery),Client端可以通過指定一個nameSpace來連接HiveServer2,而不是指定某一個host和port;
JDBC Client 首先訪問Zookeeper,然后返回HiveServer2的host:port, 然后JDBC Client在根據(jù)Zookeeper返回的host:port 連接HiveServer2。
-
修改配置問題
具體配置如下 (在hive-site.xml中或者hiveserver2-site.xml 進行配置
這里注意 如果你在hiveserver2-site.xml 和hive-site.xml 均配置了一個參數(shù),hiveserver2-site.xml將會覆蓋hive-site.xml中的參數(shù))
打開 Hive -> 配置-> 類別-> 高級,搜索"hive-site.xml 的 HiveServer2 高級配置代碼段(安全閥)" 增加配置:
<property>
<name>hive.server2.support.dynamic.service.discovery</name>
<value>true</value>
</property>
下面可以不用設置,默認會直接在zookeeper創(chuàng)建 /hiveserver2,如果多個hive集群共用同一個zookeeper就需要單獨設置):
<property>
<name>hive.server2.zookeeper.namespace</name>
<value>hiveserver2_zk</value>
</property>
重啟 hiveserver2 服務并注冊到 zookeeper。
-
驗證zookeeper是否有hiveserver2信息
[song@cdh68 ~]$ zookeeper-client
[zk: localhost:2181(CONNECTED) 0] ls /
[hiveserver2, zookeeper, yarn-leader-election, hadoop-ha, rmstore, hive_zookeeper_namespace_hive]
[zk: localhost:2181(CONNECTED) 2] ls /hiveserver2
[serverUri=cdh69.bigdata.com:10000;version=2.1.1-cdh6.3.2;sequence=0000000001, serverUri=cdh70.bigdata.com:10000;version=2.1.1-cdh6.3.2;sequence=0000000000]
[zk: localhost:2181(CONNECTED) 3] -
Beeline驗證
JDBC連接的URL格式為:
jdbc:hive2://<zookeeper quorum>/<dbName>;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2其中:
[song@cdh68 ~]$ beeline
beeline> !connect jdbc:hive2://cdh68.bigdata.com:2181,cdh69.bigdata.com:2181,cdh70.bigdata.com:2181/;serviceDiscoveryMode=zookeeper;zookeeperNamespace=hiveserver2 song ""
Connecting to jdbc:hive2://cdh68.bigdata.com:2181,cdh69.bigdata.com:2181,cdh70.bigdata.com:2181/;serviceDiscoveryMode=zookeeper;zookeeperNamespace=hiveserver2
20/12/02 17:21:36 [main]: INFO jdbc.HiveConnection: Connected to cdh69.bigdata.com:10000
Connected to: Apache Hive (version 2.1.1-cdh6.3.2)
Driver: Hive JDBC (version 2.1.1-cdh6.3.2)
+----------------+
| database_name |
+----------------+
| default |
+----------------+
1 row selected (0.686 seconds)
0: jdbc:hive2://cdh68.bigdata.com:2181,cdh69.>遇到的問題:
[song@cdh68 ~]$ beeline -u jdbc:hive2://cdh68.bigdata.com:2181,cdh69.bigdata.com:2181,cdh70.bigdata.com:2181/;serviceDiscoveryMode=zookeeper;zookeeperNamespace=hiveserver2 song ""
Connecting to jdbc:hive2://cdh68.bigdata.com:2181,cdh69.bigdata.com:2181,cdh70.bigdata.com:2181/
20/12/02 17:34:29 [main]: WARN jdbc.HiveConnection: Failed to connect to cdh68.bigdata.com:2181
Unexpected end of file when reading from HS2 server. The root cause might be too many concurrent connections. Please ask the administrator to check the number of active connections, and adjust hive.server2.thrift.max.worker.threads if applicable.
Error: Could not open client transport with JDBC Uri: jdbc:hive2://cdh68.bigdata.com:2181/: null (state=08S01,code=0)
Beeline version 2.1.1-cdh6.3.2 by Apache Hive
beeline>
- 為Zookeeper的集群鏈接串,如zkNode1:2181,zkNode2:2181,zkNode3:2181
- 為Hive數(shù)據(jù)庫,默認為default
- serviceDiscoveryMode=zooKeeper 指定模式為zooKeeper
- zooKeeperNamespace=hiveserver2 指定ZK中的nameSpace,即參數(shù)hive.server2.zookeeper.namespace所定義,默認為hiveserver2
九、Sqoop安裝
-
添加服務

-
選擇服務

-
自定義角色分配

-
命令詳細信息

-
匯總

-
查看

十、HBase安裝
1、安裝
1.1 選擇HBase服務
1.2 自定義角色分配
1.3 審核更改
1.4 命令詳細信息
1.5 重啟并查看
2、HBase HA
HBase 可以運行在多 Master 環(huán)境下,即集群中同時有多個 HMaster 實例,但只有一個HMaster 運行并接管整個集群。當一個 HMaster 激活時,Zookeeper 同時給它一個租期,當HMaster 的租期耗盡或意外停止時,Zookeeper 會及時運行另一個 HMaster 來接替它的工作
1、添加角色實例
2、添加HMaster
3、啟動HMaster
十一、Oozie
1、安裝
1.1 選擇服務
1.2 選擇依賴
1.3自定義角色分配
1.4 數(shù)據(jù)庫設置
1.5 審核更改
1.6 命令詳細信息
1.7 完成
2、Oozie Web console
CM安裝完Oozie服務后,并沒有安裝好Oozie Web,如下如所示:
缺少ExtJs library:
2.1 安裝ExtJs 2.2
從網(wǎng)上下載ext-2.2.zip,并上傳到服務器。 oozie安裝時,所需要的js文件在ext-2.2.zip中,需要解壓到oozie根目錄/libext/文件中:
[song@cdh70 ~]$ sudo cp ext-2.2.zip /opt/cloudera/parcels/CDH/lib/oozie/libext/
[song@cdh70 ~]$ cd /opt/cloudera/parcels/CDH/lib/oozie/libext/
[song@cdh70 libext]$ sudo unzip ext-2.2.zip
[song@cdh70 libext]$ sudo chown oozie:oozie -R ext-2.2
再次訪問 Oozie Web UI,可以正常訪問了。
2.2 更改時區(qū)
3、Oozie HA
官方教程:https://docs.cloudera.com/documentation/enterprise/latest/topics/cdh_hag_oozie_ha.html
3.1 Nginx 配置 Oozie 負載均衡
[song@cdh68 ~]$ sudo vim /etc/nginx/nginx.conf
stream{
log_format basic '$remote_addr [$time_local] ' '$protocol $status $bytes_sent $bytes_received' '$session_time';
upstream oozie_ha {
least_conn; #路由策略:least_conn:最少連接
server cdh69.bigdata.com:11000;
server cdh70.bigdata.com:11000;
}
server{ # oozie 負載均衡
listen 11000;
proxy_pass oozie_ha;
}
}
[song@cdh68 ~]$ sudo nginx -s reload
3.2 CM 啟用 Oozie HA
-
填寫 Oozie Load Banlancer 和 HTTP Port

-
啟用High Availability
- 添加備用Oozie Server
- 配置Oozie Load Balancer
- 命令詳細信息
3.3 配置備用Oozie Server的Web console
[song@cdh70 ~]$ scp ext-2.2.zip cdh69.bigdata.com:~
[song@cdh69 ~]$ sudo cp ext-2.2.zip /opt/cloudera/parcels/CDH/lib/oozie/libext/
[song@cdh69 ~]$ cd /opt/cloudera/parcels/CDH/lib/oozie/libext/
[song@cdh69 libext]$ sudo unzip ext-2.2.zip
[song@cdh69 libext]$ sudo chown oozie:oozie -R ext-2.2
3.4 查看Oozie HA
十二、Phoenix安裝
1、安裝
1.1 安裝 phoenix parcel
從https://archive.cloudera.com/phoenix/6.2.0/parcels/下載對應操作系統(tǒng)parcel包。
上傳到服務器,并啟動http服務:
[cuadmin@cdh68 phoenix]$ pwd
/data1/software/cloudera-repos/phoenix
[cuadmin@cdh68 phoenix]$ ll
total 392812
-rw-r--r-- 1 cuadmin cuadmin 2478 Dec 8 20:06 manifest.json
-rw-r--r-- 1 cuadmin cuadmin 402216960 Dec 8 20:10 PHOENIX-5.0.0-cdh6.2.0.p0.1308267-el7.parcel
-rw-r--r-- 1 cuadmin cuadmin 41 Dec 8 20:15 PHOENIX-5.0.0-cdh6.2.0.p0.1308267-el7.parcel.sha
配置Nginx:
server {
listen 8666;
server_name localhost;
location / {
root /data1/software/cloudera-repos;
autoindex on;
}
}
查看phoenix parcels
將Phoenix parcel包位置添加到“遠程Parcel存儲庫URL”中
下載、分配、激活 phoenix parcel
1.2 安裝 CSD 服務
在CDH中添加Phoenix服務之前,必須安裝Custom Service Descriptor(CSD)文件。
否則,在添加服務中找不到Phoenix服務。
從 https://archive.cloudera.com/phoenix/6.2.0/csd/ 下載 csd文件 PHOENIX-1.0.jar
-
確定CSD文件存放位置

-
上傳csd文件,然后重啟Cloudera Manager服務
登錄Cloudera Manager所在主機執(zhí)行以下命令:
[cuadmin@cdh68 phoenix]$ sudo cp PHOENIX-1.0.jar /opt/cloudera/csd/
[cuadmin@cdh68 ~]$ sudo chown cloudera-scm:cloudera-scm /opt/cloudera/csd/PHOENIX-1.0.jar
[cuadmin@cdh68 ~]$ ll /opt/cloudera/csd/
-rw-r----- 1 cloudera-scm cloudera-scm 5306 Dec 9 09:51 PHOENIX-1.0.jar
[cuadmin@cdh68 ~]$ sudo systemctl restart cloudera-scm-server -
登錄Cloudera Manager,重啟 Cloudera Management Service

1.3 添加 Phoenix 服務
添加服務
自定義角色分配
查看Phoenix服務
1.4 配置HBase以用于Phoenix
-
添加屬性
選擇“Hbase”->“配置”,搜索“hbase-site.xml 的 HBase 服務高級配置代碼段(安全閥)”,單擊“以XML格式查看”,并添加以下屬性:
<property>
<name>hbase.regionserver.wal.codec</name>
<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>
<property>
<name>phoenix.functions.allowUserDefinedFunctions</name>
<value>true</value>
<description>enable UDF functions</description>
</property>
<property>
<name>phoenix.schema.mapSystemTablesToNamespace</name>
<value>true</value>
</property>
<property>
<name>phoenix.schema.isNamespaceMappingEnabled</name>
<value>true</value>
</property>
- 將hbase.regionserver.wal.codec定義寫入預寫日志(“wal”)編碼。
- 設置phoenix.functions.allowUserDefinedFunctions屬性啟用用戶自定義函數(shù)(UDF)。
- 開啟Phoenix Schema 與 HBase namespace的對應關系
重啟HBase
1.5 驗證
Phoenix連接異常:
原因:1.4的配置不包括客戶端配置,故需要在客戶端重新配置一遍:
在hbase-site.xml 的 HBase 客戶端高級配置代碼段(安全閥)中重新配置:
部署客戶端配置
可以看到配置在/etc/hbase/conf目錄下:
在次運行,出現(xiàn)如下錯誤:
解決方案:
[song@cdh68 ~]$ hbase clean --cleanZk
ZNode(s) [cdh69.bigdata.com,16020,1607489641049, cdh68.bigdata.com,16020,1607489641121, cdh70.bigdata.com,16020,1607489641424] of regionservers are not expired. Exiting without cleaning hbase data.
再次驗證:
十三、Hue
1、安裝
添加Hue服務:
選擇依賴:
自定義角色分配:
數(shù)據(jù)庫設置:
完成:
2、Hue HA
添加多個Load Blancer和Hue Server
重啟實例
使用負載均衡登錄:
3、配置
首次登錄:
1、Configuring Hue to Work with HDFS HA Using Cloudera Manager
選用HttpFS即可
2、配置Hbase
解決方案:
-
enable
hbase.regionserver.thrift.http
hbase.thrift.support.proxyuser

-
add the config into the hdfs core-site.xml
<property>
<name>hadoop.proxyuser.hbase.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hbase.groups</name>
<value>*</value>
</property>
