1. 程式人生 > >Amabri 2.6.1.5 +HDP-2.6.4.0部署文件

Amabri 2.6.1.5 +HDP-2.6.4.0部署文件

最近兩天公司要求部署Ambari叢集,我在網上找了一些資料,但是踩了許許多多的坑,我決定整理一下寫一篇部落格,與大家共享,如果有問題大家可以一起討論

環境:Amabri 2.6.1.5 +HDP-2.6.4.0、騰訊雲主機、Centos7.4

 

1、滿足最低系統要求

1.1 瀏覽器

建議您將瀏覽器(自己使用的windows既可)更新至最新的穩定版本

1.2 軟體要求(在每臺主機上)

1.2.1 yum和rpm
1.2.2 scp, curl, unzip, tar、 wget
1.2.3 OpenSSL(v1.01,build 16或更高版本)
1.2.4 python:2.7(注意如果有使用python3.x的需求,不要改變python環境變數,否則3.x會報錯)
1.2.5 jdk:1.8
1.2.6 mysql:5.6(官網上寫的5.6,不確定更高版本有沒有問題,也可以使用其他資料庫,根據自己習慣)
1.2.7 記憶體要求:Ambari主機應該至少有1 GB RAM,500 MB空閒,(但如果使用的話,建議記憶體8g以上,我自己的虛擬機器記憶體4g搭好後跑起來會很卡,配置低的話警告也會很多)
1.2.8 檢查最大開啟檔案描述符,推薦的最大開啟檔案描述符數為10000或更多
1.2.9 mysql-connector-java

以上軟體大部分系統自帶,其餘可參考:CentOS 初始環境配置

2、環境準備(在每臺主機上)

2.1 ssh 免密

只需master 免密到其他節點(包含自身),不需要互通,參考:linux ssh 免密登入

2.2 啟用NTP

yum install -y ntp
systemctl enable ntpd

2.3 編輯主機檔案

vim /etc/hosts
10.70.19.125 master       10.70.19.170 slave01           10.70.19.52 slave02

2.4 設定主機名

以master為例

2.4.1

hostname master

2.4.2

vim /etc/hostname
master

兩步缺一不可,通過命令驗證

hostname
hostname -f

兩個必須都為master才行

2.5 編輯網路配置檔案

vim /etc/sysconfig/network

修改HOSTNAME屬性為FQDN

NETWORKING=yes
HOSTNAME=master

2.6 禁用iptables

systemctl disable firewalld
service firewalld stop

2.7 禁用SELinux

2.7.1 臨時禁用

setenforce 0

2.7.2 永久禁用(重啟機器)

vim /etc/sysconfig/selinux

將SELINUX改為disabled

SELINUX=disabled

這樣伺服器或虛擬機器重啟也沒有問題。

3、製作本地源(僅在master)

因為ambari 和 hdp 安裝檔案比較大,如果線上安裝的話會很慢,所以最好選擇本地源。

(可以在叢集可以訪問的任何機器上製作本地源)

3.1 安裝製作本地源工具

yum install yum-utils createrepo

3.2 建立一個HTTP伺服器

yum install httpd -y
systemctl enable httpd && systemctl start httpd

3.3 為Web伺服器建立目錄

mkdir -p /var/www/html/hdp/HDP-UTILS

3.4 下載系統對應的最新版相關安裝包

3.4.1 下載

其中包括Ambari、HDP、HDP-UTILS、HDP-GPL

wget http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.6.1.5/ambari-2.6.1.5-centos7.tar.gz
wget http://public-repo-1.hortonworks.com/HDP/centos7/2.x/updates/2.6.4.0/HDP-2.6.4.0-centos7-rpm.tar.gz
wget http://public-repo-1.hortonworks.com/HDP-GPL/centos7/2.x/updates/2.6.4.0/HDP-GPL-2.6.4.0-centos7-rpm.tar.gz
wget http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.22/repos/centos7/HDP-UTILS-1.1.0.22-centos7.tar.gz

3.4.2 解壓

tar -zxvf ambari-2.6.1.5-centos7.tar.gz -C /var/www/html
tar -zxvf HDP-2.6.4.0-centos7-rpm.tar.gz -C /var/www/html/hdp/
tar -xzvf HDP-GPL-2.6.4.0-centos7-rpm.tar.gz -C /var/www/html
tar -zxvf HDP-UTILS-1.1.0.22-centos7.tar.gz  -C /var/www/html/hdp/HDP-UTILS/

 

3.4.3 解決在瀏覽器訪問http://ambari.master.com/hdp/HDP/centos7/2.6.4.0-91 為空白

原因:該目錄下index.xml使用了 https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js 國內訪問不了谷歌,將index.xml註釋掉即可

cd /var/www/html/hdp/HDP/centos7/2.6.4.0-91
mv index.xml index.xml.bak

此時應該可以在瀏覽器訪問下面的地址了,可以驗證一下

http://master.com/ambari/centos7/2.6.1.5-3/
http://master.com/hdp/HDP/centos7/2.6.4.0-91
http://master.com/hdp/HDP-UTILS

3.5 配置ambari、HDP、HDP-UTILS的本地源

(不正確配置會出現failure: repodata/repomd.xml from HDP-UTILS-1.1.0.22: [Errno 256] No more mirro)

cp /var/www/html/ambari/centos7/2.6.1.5-3/ambari.repo /etc/yum.repos.d/
cp /var/www/html/hdp/HDP/centos7/2.6.4.0-91/hdp.repo /etc/yum.repos.d/

將每個repo裡的baseurl和gpgkey的地址修改為本地的

vim /etc/yum.repos.d/ambari.repo
#VERSION_NUMBER=2.6.1.5-3
[ambari-2.6.1.5]
name=ambari Version - ambari-2.6.1.5
baseurl=http://10.70.19.125/ambari/centos7/2.6.1.5-3
gpgcheck=1
gpgkey=http://10.70.19.125/ambari/centos7/2.6.1.5-3/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1
vim /etc/yum.repos.d/hdp.repo

#VERSION_NUMBER=2.6.4.0-91
[HDP-2.6.4.0]
name=HDP Version - HDP-2.6.4.0
baseurl=http://master/hdp/HDP/centos7/2.6.4.0-91
gpgcheck=1
gpgkey=http://master/hdp/HDP/centos7/2.6.4.0-91/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1


[HDP-UTILS-1.1.0.22]
name=HDP-UTILS Version - HDP-UTILS-1.1.0.22
baseurl=http://master/hdp/HDP-UTILS/HDP-UTILS/centos7/1.1.0.22
gpgcheck=1
gpgkey=http://master/hdp/HDP/centos7/2.6.4.0-91/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins
enabled=1
priority=1

yum clean all
yum list update
yum makecache
yum repolist

3.6 (可選)如果您的環境中配置了多個儲存庫,請在叢集中的所有節點上部署以下外掛

yum install yum-plugin-priorities -y
vim /etc/yum/pluginconf.d/priorities.conf
[main]
enabled = 1
gpgcheck=0                

4、安裝Mariadb

yum -y install mariadb mariadb-server

安裝完成MariaDB,首先啟動MariaDB

systemctl start mariadb

設定開機啟動

systemctl enable mariadb

初始化Mariadb

mysql -uroot

use mysql;

delete from user where host<> '%';

#允許遠端登入
grant all privileges on *.* to [email protected]'%' identified by '123456'; 

#更新root的許可權,否則root使用者可能無法給hive、Ambari使用者賦許可權
update user set Grant_priv='Y' where user='root';

flush privileges;

 

 

4、安裝ambari(僅在master)

4.1安裝ambari-server

yum install ambari-server -y

4.2 設定mysql聯結器

ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java.jar

可以到這個網站下載驅動jar

https://mvnrepository.com/artifact/mysql/mysql-connector-java

(如果使用mysql作為hive的元資料庫)

 

4.3 建立相關的mysql資料庫

建立ambari資料庫及使用者,登入root使用者執行下面語句:

mysql -uroot -pRoot-123
create database ambari character set utf8 ;  
CREATE USER 'ambari'@'%'IDENTIFIED BY 'Ambari-123';
GRANT ALL PRIVILEGES ON *.* TO 'ambari'@'%';
FLUSH PRIVILEGES;

如果要安裝Hive,再建立Hive資料庫和使用者,再執行下面的語句:

create database hive character set utf8 ;  
CREATE USER 'hive'@'%'IDENTIFIED BY 'Hive-123';
GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%';
FLUSH PRIVILEGES;

hive使用者可以不用指定全部庫的許可權。

#不知道為什麼我root使用者無法給其他使用者賦許可權,我用Navicat連線之後,新建查詢就可以修改許可權了,不知道為什麼

4.4 配置ambari-server

4.4.1 setup

ambari-server setup

4.4.2 配置流程

以下為全部的配置過程,其中主要是自定義jdk,輸入JAVA_HOME路徑,自定義資料庫選mysql,輸入資料庫使用者名稱,密碼等

ambari-server setup
Using python  /usr/bin/python2
Setup ambari-server
Checking SELinux...
SELinux status is 'enabled'
SELinux mode is 'permissive'
WARNING: SELinux is set to 'permissive' mode and temporarily disabled.
OK to continue [y/n] (y)? y
Customize user account for ambari-server daemon [y/n] (n)? y
Enter user account for ambari-server daemon (root):ambari
Adjusting ambari-server permissions and ownership...
Checking firewall status...
Checking JDK...
[1] Oracle JDK 1.8 + Java Cryptography Extension (JCE) Policy Files 8
[2] Oracle JDK 1.7 + Java Cryptography Extension (JCE) Policy Files 7
[3] Custom JDK
==============================================================================
Enter choice (1): 3
WARNING: JDK must be installed on all hosts and JAVA_HOME must be valid on all hosts.
WARNING: JCE Policy files are required for configuring Kerberos security. If you plan to use Kerberos,please make sure JCE Unlimited Strength Jurisdiction Policy Files are valid on all hosts.
Path to JAVA_HOME: /opt/jdk1.8.0_151
Validating JDK on Ambari Server...done.
Checking GPL software agreement...
GPL License for LZO: https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html
Enable Ambari Server to download and install GPL Licensed LZO packages [y/n] (n)? y
Completing setup...
Configuring database...
Enter advanced database configuration [y/n] (n)? y
Configuring database...
==============================================================================
Choose one of the following options:
[1] - PostgreSQL (Embedded)
[2] - Oracle
[3] - MySQL / MariaDB
[4] - PostgreSQL
[5] - Microsoft SQL Server (Tech Preview)
[6] - SQL Anywhere
[7] - BDB
==============================================================================
Enter choice (1): 3
Hostname (localhost): 
Port (3306): 
Database name (ambari): 
Username (ambari): 
Enter Database Password (bigdata): 
Re-enter password: 
Configuring ambari database...
Configuring remote database connection properties...
WARNING: Before starting Ambari Server, you must run the following DDL against the database to create the schema: /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql
Proceed with configuring remote database connection properties [y/n] (y)? y
Extracting system views...
ambari-admin-2.6.1.5.3.jar
...........
Adjusting ambari-server permissions and ownership...
Ambari Server 'setup' completed successfully.

4.4.3將Ambari資料庫指令碼匯入到資料庫

mysql -uambari -pAmbari-123
use ambari;
source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql

4.4.4 啟動ambari

ambari-server start

4.4.5 啟動成功,可以通過如下地址訪問:

http://master:8080

使用者名稱,密碼為admin admin

 

5、使用ambari瀏覽器介面安裝hadoop,hive等元件

5.1 登入到ambari管理介面

http://ambari.master.com:8080

 

5.2 安裝hdp叢集,點選Launch Install Wizard

5.3,設定叢集名稱

5.4 配置本地源(圖片中GPL的地址不對,按照下面的輸入)

http://10.70.19.125/HDP-GPL/centos7/2.6.4.0-91/
http://10.70.19.125/hdp/HDP-UTILS/HDP-UTILS/centos7/1.1.0.22
http://10.70.19.125/hdp/HDP/centos7/2.6.4.0-91/

 

5.5 設定host

其中下面的為master上ssh的私鑰(~/.ssh/id_rsa)。

輸入master的私鑰,感覺直接用匯入檔案的方式有問題,會有很多換行符,我是直接在linux上檢視,一行一行復制的,去掉了換行符

5.6 Host確認

如果失敗或者卡住不動可根據日誌解決,如果warn根據提示資訊解決,知道全部為Success才可以進行下一步。

5.6.1 在此安裝期間可能會出現  SSLError: Failed to connect. Please check openssl library versions. 問題

解決辦法:

①在所有的節點上

yum upgrade openssl :升級ssl

②在所有的節點上

1、vi /etc/ambari-agent/conf/ambari-agent.ini

新增  在 [security] 下  force_https_protocol=PROTOCOL_TLSv1_2

③在所有的節點上

vi /etc/python/cert-verification.cfg

[https]

verify=disable

修改完之後還不好,可以考慮重啟一下機器

 

5.6.2 .可能會發生的異常:在add host並confirm host的時候,會卡住不動,然後看日誌會發現異常資訊:

Error executing bootstrap Cannot create /var/run/ambari-server/bootstrap

1.2 解決辦法
通過檢視,/var/run/ambari-server目錄下確實沒有bootstrap資料夾,手動新增即可

mkdir bootstrap
1
但是,如果只建立該資料夾的話,ambari依然報錯,大概是沒有許可權相關的,就不貼出詳細的異常了

為ambari使用者新增許可權即可

chown -R ambari:ambari /var/run/ambari-server/bootstrap/

 

 

5.7 選擇要安裝的服務

如果有依賴其他元件選擇ok即可,如安裝hive依賴tez,pig等

 

5.8 設定各個服務Master

5.9 設定Slaves 和 Clients

5.10 自定義配置

其中紅色的必須要改,大致是設定路徑,密碼等,如hive要設定hive元資料的資料庫資訊,我用的master上的mysql

測試一下連線

沒有了紅色的即可進行下一步,如遇到warn,可根據提示資訊進行修改配置,也可以忽略警告,等裝完以後再改。

5.11 review前面的配置

5.12 安裝、啟動、測試

這裡因為個人電腦配置較低,瀏覽器有點卡,進度條沒有顯示出來。

5.13 安裝完成

若最後出現警告,可以裝完重啟所有服務,再檢檢視看有沒有問題,如有警告或啟動失敗,可根據日誌排查原因,一開始安裝的的元件較多的話,出現警告的可能性會大一些,所以可以先裝幾個必要的元件,之後一個一個元件裝。

5.14 概要

5.15 hive啟動異常

這次安裝重啟之後發現hive等服務啟動不成功,我就把hive等解除安裝然後重灌,本來以為是開始是hive沒安裝成功,但是重灌後hive還是啟動不成功,看了一下日誌,發現是之前手動安裝的原生的hive的環境變數沒有註釋掉,註釋掉,重啟ambari之後,再啟動所有服務,就成功了(再在hive shell 裡建表、插入資料、查詢驗證一下),所以如果在已經安裝好的大資料叢集上安裝ambari,最好先把之前配的環境變數註釋掉。

5.16 啟動成功

 

5.17 Ambari UI中使用File viewer 建立檔案報錯

org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=DrWho, access=WRITE, inode="hadoop":hadoop:supergroup:rwxr-xr-x

解決方法:

  到伺服器上修改hadoop的配置檔案:conf/hdfs-core.xml, 找到 dfs.permissions 的配置項 , 將value值改為 false

<property>
<name>dfs.permissions</name>
<value>false</value>
<description>

 

5.18 Ambari UI中使用Hive viewer 報錯

500 status code received on GET method for API: /api/v1/stacks/HDP/versions/2.4/recommendations 
Error message: Error occured during stack advisor command invocation: Cannot create /var/run/ambari-server/stack-recommendations

解決方案:sudo chown -R ambari /var/run/ambari-server

 

5.19 Ambari UI中使用Hive viewer2.0 報錯

"E090 HDFS020 Could not write file" error occurred

-----------------------------------------------------------------------------------------

解決辦法:修改hadoop.proxyuser.root.hosts=*的value為*

Error is resolved.

 

5.20 Ambari UI中使用Hive viewer2.0 報錯

Caught exception trying to store view entity JobImpl{id='null, owner='ip56, hiveQueryId='null, dagId='null, queryId='null}

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'ambari.DS_JOBIMPL_14' doesn't exist
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'ambari.DS_JOBIMPL_14' doesn't exist
Call: INSERT INTO DS_JOBIMPL_14 (DS_id, DS_applicationId, DS_confFile, DS_dagId, DS_dagName, DS_dataBase, DS_dateSubmitted, DS_duration, DS_forcedContent, DS_globalSettings, DS_guid, DS_hiveQueryId, DS_logFile, DS_owner, DS_queryFile, DS_queryId, DS_referrer, DS_sessionTag, DS_sqlState, DS_status, DS_statusDir, DS_statusMessage, DS_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
 

解決辦法:

檢視報錯中的DS_JOBIMPL_14的表的編號是多少,我的是14,然後建立DS_JOBIMPL_14這個表,如下圖

在ambari庫中建立表

CREATE TABLE DS_JOBIMPL_14 (
ds_id VARCHAR(255) NOT NULL,
ds_applicationid TEXT,
ds_conffile TEXT,
ds_dagid TEXT,
ds_dagname TEXT,
ds_database TEXT,
ds_datesubmitted BIGINT,
ds_duration BIGINT,
ds_forcedcontent TEXT,
ds_globalsettings TEXT,
DS_guid TEXT,
DS_hiveQueryId TEXT,
ds_logfile TEXT,
ds_owner TEXT,
ds_queryfile TEXT,
ds_queryid TEXT,
ds_referrer TEXT,
ds_sessiontag TEXT,
ds_sqlstate TEXT,
ds_status TEXT,
ds_statusdir TEXT,
ds_statusmessage TEXT,
ds_title TEXT,
PRIMARY KEY (ds_id)
);

 

5.1.21 Ambari安裝元件報錯

500 status code received on GET method for API: /api/v1/stacks/HDP/versions/2.4/recommendations 
Error message: Error occured during stack advisor command invocation: Cannot create /var/run/ambari-server/stack-recommendations
解決方案:sudo chown -R ambari /var/run/ambari-server