ambari版本 :2.4.2 (不過各版本安裝過程沒啥差異)
目錄:
- 為什么要用Ambari
- 概念概述
- 版本信息
- 原理簡介
- 安裝
- 創建集群
- 安裝SmartSense
- 二次開發
- Ambari的升級
- 相關錯誤
為什么要用Ambari
Ambari 是 Apache Software Foundation 中的一個頂級項目。就 Ambari 的作用來說,就是創建、管理、監視 Hadoop 的整個生態圈產品(例如 Hive,Hbase,Sqoop,Zookeeper 等)。用一句話來說,Ambari 就是為了讓 Hadoop 以及相關的大數據軟件更容易使用的一個工具。
對於那些苦苦花費好幾天去安裝、調試 Hadoop 的初學者是最能體會到 Ambari 的方便之處的。而且,Ambari 現在所支持的平台組件也越來越多,例如流行的 Spark,Storm 等計算框架,以及資源調度平台 YARN 等,我們都能輕松地通過 Ambari 來進行部署。
概念概述
- Stack :堆 版本號 一批Service的集合
- Service:產品 如Hive,HBase等
- Module:Service中的一部分
- Alert:警告
- Host:節點 可以理解為一個虛擬機
- Ambari Agent:每個Host上的管理員
- Ambari Server:通過與每個Agent保持通話,操控並了解所有信息(host、service等運行情況和資源狀態)並提供GUI
- View:ambari通過框架 Ambari Views framework ,允許第三方對組件進行擴展,如hdfs的目錄管理等。目前支持Tez、Hive、Pig、Capacity Scheduler(YARN)、Files(HDFS)
版本情況
針對各版本的HortOnWork官方文檔: http://docs.hortonworks.com/HDPDocuments/Ambari/Ambari-2.4.2.0/index.html
原理簡介
Ambari 自身也是一個分布式架構的軟件,主要由兩部分組成:Ambari Server 和 Ambari Agent。簡單來說,用戶通過 Ambari Server 通知 Ambari Agent 安裝對應的軟件;Agent 會定時地發送各個機器每個軟件模塊的狀態給 Ambari Server,最終這些狀態信息會呈現在 Ambari 的 GUI,方便用戶了解到集群的各種狀態,並進行相應的維護。
安裝
安裝須知:
- 所有操作都要使用root用戶,且系統不要有其他用戶,ssh的密鑰也都是基於root用戶的。否則會出現問題【Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password) 】
- hostname都要使用FQDN格式,具體參照【配置】的第三步
- 所有節點都安裝ntpd服務 可參考CentOS7 中使用NTP進行時間同步
- 切記 一定要從空機裝起,尤其是以前搭過hadoop環境的。
- ambari使用向導(僅僅是使用)
- ambari只能管理一個集群
- 再次說明 ambari版本:2.4.2.0;操作系統:CentOS7
開始安裝:
- 在 hortonworks公共資源庫 選定一個ambari版本並復制對應的repo地址(這個網頁的內容加載很慢 要耐心等)。我選的是2.4.2 地址是http://s3.amazonaws.com/public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.4.2.0/ambari.repo。
- 使用wget下載到節點,或者下載到物理機后上傳到節點
wget http://s3.amazonaws.com/public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.4.2.0/ambari.repo #文件會下載到當前目錄
- 將ambari.repo文件拷貝到 /etc/yum.repos.d/ 目錄下
mv ambari.repo /etc/yum.repos.d/
- 獲取該公共庫的所有源文件列表
yum clean all yum list|grep ambari
- 開始安裝server
yum install ambari-server
ambari-server --version #查看版本如果依賴項postgresql下載失敗,需要手動下載安裝;點這里 下載一個並安裝就可以了
wget ftp://mirror.switch.ch/pool/4/mirror/scientificlinux/7.2/x86_64/updates/security/postgresql-libs-9.2.15-1.el7_2.x86_64.rpm; rpm -ivh postgresql-libs-9.2.15-1.el7_2.x86_64.rpm
- 安裝完成后,開始進行配置(全部用默認項 全程回車)。其中有一步 需要指定用戶賬號,要記住使用root
ambari-server setup
- 配置完成就可以啟動了,然后 就可以用8080端口訪問管理頁面了
ambari-server start
ambari-server status #查看server啟動情況
ambari-agent status #查看agent啟動情況 這個創建集群成功才能使用
創建集群:
創建集群
安裝成功后,就需要在WEBUI中創建集群了。點擊【Launch Install Wizard】
1.GetStarted 指定集群名
2.Select Version 選擇HDP版本。HDP版本對應的是一組生態組件的版本。根據自己需要的組件版本選擇一個即可。我選擇的是HDP-2.5
下面的內容,使用公共資源庫即可(推薦把資源下載到本地,然后使用本地庫。Public Repo的話需要很長時間)。【Skip ……】這個也不用選,進入下一步。
3.Install Options 安裝配置。這一步要謹慎
Target Hosts要指定Hosts列表,這個hostname的格式必須是Fully Qualified Domain Name (FQDN),簡單點說,必須是一個域名的格式,如下圖所示。
這里輸入的hostname必須與/etc/hosts一致。同時,每個節點的hostname與/etc/hosts中的設定也必須要一致。
Host Registration Information 這里要選擇使用私鑰,並上傳作為Ambari的主機的私鑰,當然也可以直接粘貼私鑰的內容(建議使用文件,因為拷貝的內容會有格式問題) 注:id_dsa是私鑰,id_dsa.pub 是公鑰。UserAccount使用root 端口不用改
4.Confirm Hosts
從上一步過來后,在這一步會自動節點注冊,並會顯示進度及注冊狀況
可以點擊①查看有哪些注冊過程中缺少的內容
一般來講這里最可能出現的就是時間沒有同步(ntpd),以及THP的設置。
具體解決:
安裝啟動ntpd
yum -y install ntpd ntpdate time.nist.gov service ntpd start chkconfig ntpd on
禁用THP(參考 Linux 關於Transparent Hugepages的介紹)
echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
5.Choose Services 選擇集群中需要安裝的服務
有些服務是必須得,或者是被依賴的,如果沒選的 點擊下一步的時候會有提示。
6.Assign Masters 給各節點組件分配資源,這個自己看着來就行
7.Assign Slaves and Clients 配置從節點和客戶端。注意最后一列的Client指的是各種客戶端,而不是某一種。
8.Customize Service 服務的自定義設置
這一步里大部分都可以使用默認項,少部分需要改動和設置,如Hive和Oozie需要指定數據庫密碼等
紅色數字標志表示這一項有需要手動設置的內容。
此外,如果Hive和Oozie使用Mysql的話,還需要先安裝MySql,然后創建hive,oozie用戶並賦予權限,當然 還有hive、oozie數據庫
具體操作可參考 CentOS7minimal MySql的卸載及安裝
還要在ambari server通過以下命令設置驅動(如果沒有執行這一句的話 測試hive或oozie數據庫連接時會出現錯誤 coercing to Unicode: need string or buffer, NoneType found )
ambari-server setup --jdbc-db=mysql --jdbc-driver=[/path/to/mysql/mysql-connector-java.jar]
如果有不合適的參數,是無法進入下一步的,點擊下一步的時候系統會提示需要改成的值。
9.Review 提供一個總結的安裝列表,供用戶審閱並提供打印功能
10.Install,Start and Test 開始安裝和測試。這一步會花費較長時間,因為需要在線下載安裝各種組件。
這一步可能會失敗多次,不過不要慌 這基本是網絡因素,不斷重試就可以了
11.Summary 安裝情況總覽
我的NameNode沒有啟動成功,所以有警告,暫不知道是否有影響
手動修改服務配置
集群創建完了也還是有很多要手動修改的地方(如hive、oozie的元數據存儲數據庫)
這些紅彤彤的標志 都是啟動失敗的服務。
最開始HDFS那一項也是紅的,找了一下午的錯誤,最終發現是因為之前的系統變量 $HADOOP_HOME 沒有刪掉 導致路徑出現問題
明明已經unset過了 結果一重啟機器又出現,並且還找不到在哪里設置的。沒辦法,只能設了一個軟鏈接搞定。
又過了半天 終於弄好了 太不容易了
看到上方的紅數字消失,無比激動
NameNode HA
默認安裝的集群 NameNode是單點的,我們自然要給升級為HA
1.如果啟動了HBase的話,我們要先關閉HBase服務
2.HDFS->Service Actions -> Enable NameNode HA
3.Get Started 指定service ID
4.Select Hosts 選擇作為備用NameNode以及作為JournalNode的host
5.Review 確認上一步的設定。配置不用改動,直接下一步
6.Create Checkpoint
這一步的操作需要手動完成(啟用Safe mode)。
如圖所示,在NameNode所在Host先后執行兩條命令
sudo su hdfs -l -c 'hdfs dfsadmin -safemode enter' sudo su hdfs -l -c 'hdfs dfsadmin -saveNamespace'
執行成功之后 Next 會自動變得可點擊
7.Configure Components 開始重新配置各個組件服務
8.Manual Steps Required 又是一個需要手動的環節
9.Start Components 啟動各組件
10.Manual Steps Required: Initialize NameNode HA Metadata 手動初始化NameNode HA的元數據
在主NameNode上執行
sudo su hdfs -l -c 'hdfs zkfc -formatZK'
在備用NameNode上執行
sudo su hdfs -l -c 'hdfs namenode -bootstrapStandby'
11. Finalize HA Setup 啟動最終配置
安裝SmartSence
啟動后發現會有一個SmartSence服務,並且一直是啟動不成功。查看錯誤顯示 【Please configure a vaid SmartSense ID to proceed.】
SmartSence是 HORTONWORKS 公司的一款增值服務產品,為hadoop集群提供指導幫助,SmartSence是無法像Ambari其他服務一樣安裝的。
而這個SmartSenseID需要安裝之后才會由官方提供。
具體安裝參考 https://docs.hortonworks.com/HDPDocuments/SS1/SmartSense-1.1.0/bk_smartsense_admin/content/ch01s02s05s01.html
Ambari的升級
具體還沒有做過線上Ambari的升級,有機會升級的話補上這一節
相關錯誤:
1.ambari啟動后,hbase服務正常,但是之后時不時的掛掉一兩個節點,去掛掉的節點上查看日志
內容如下
2016-12-12 10:47:03,487 WARN [regionserver/slave1.sardoop.com/192.168.0.37:16020] wal.ProtobufLogWriter: Failed to write trailer, non-fatal, continuing...
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException): No lease on /apps/hbase/data/oldWALs/Node1%2C16020%2C1481510498265.default.1481510529594 (inode 25442): File is not open for writing. Holder DFSClient_NONMAPREDUCE_1762492244_1 does not have any open files.
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkLease(FSNamesystem.java:3536)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalDatanode(FSNamesystem.java:3436)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getAdditionalDatanode(NameNodeRpcServer.java:877)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getAdditionalDatanode(ClientNamenodeProtocolServerSideTranslatorPB.java:523)
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:640)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:982)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2313)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2309)
解決方法:
到Ambari的HBase服務下修改配置hbase-env.sh兩處
修改前:
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -Xmn{{regionserver_xmn_size}} -XX:CMSInitiatingOccupancyFraction=70 -Xms{{regionserver_heapsize}} -Xmx{{regionserver_heapsize}} $JDK_DEPENDED_OPTS"
修改后:
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:MaxTenuringThreshold=3 -XX:SurvivorRatio=8 -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:InitiatingHeapOccupancyPercent=75 -XX:NewRatio=39 -Xms{{regionserver_heapsize}} -Xmx{{regionserver_heapsize}} $JDK_DEPENDED_OPTS"
修改前:
export HBASE_OPTS="$HBASE_OPTS -XX:+UseConcMarkSweepGC -XX:ErrorFile={{log_dir}}/hs_err_pid%p.log -Djava.io.tmpdir={{java_io_tmpdir}}"
修改后:
export HBASE_OPTS="$HBASE_OPTS -XX:ErrorFile={{log_dir}}/hs_err_pid%p.log -Djava.io.tmpdir={{java_io_tmpdir}}"
2.HDFS的權限問題
在Ambari上安裝好集群之后 自然要使用,無論是在頁面上往查看目錄,還是在命令行操作文件或目錄,經常會出現如下問題:
【Permission denied: user=dr.who, access=READ_EXECUTE, inode="/tmp/hive":ambari-qa:hdfs:drwx-wx-wx】
黑體部分依次是 HDFS目錄、目錄擁有者、目錄擁有者所在組。
解決方式有兩種:
①修改目錄權限
sudo -u hdfs hadoop dfs -chmod [-R] 755 /user/hdfs #紅字部分是指該命令的執行用戶,這里使用目錄所有者
這種方式破壞了原有的權限設計,個人不建議
②使用對應的用戶去執行命令,如
sudo -u hdfs hadoop dfs -ls /user/hive #即 根據目錄的權限,選擇使用對應的用戶
要注意的是,如果要上傳文件,最好先用 su someuser 登錄,然后再執行(這樣路徑才不會出錯,否則會找不到路徑)
其實還有另外一種添加超級權限用戶組的方式,感興趣可參考 HDFS Permissions: Overcoming The "Permission Denied" AccessControlException
參考: