Ambari 是 Apache Software Foundation 中的一個頂級項目。就 Ambari 的做用來講,就是建立、管理、監視 Hadoop 的整個生態圈產品(例如 Hive,Hbase,Sqoop,Zookeeper 等)。用一句話來講,Ambari 就是爲了讓 Hadoop 以及相關的大數據軟件更容易使用的一個工具。php
對於那些苦苦花費好幾天去安裝、調試 Hadoop 的初學者是最能體會到 Ambari 的方便之處的。並且,Ambari 如今所支持的平臺組件也愈來愈多,例如流行的 Spark,Storm 等計算框架,以及資源調度平臺 YARN 等,咱們都能輕鬆地經過 Ambari 來進行部署。html
針對各版本的HortOnWork官方文檔: http://docs.hortonworks.com/HDPDocuments/Ambari/Ambari-2.4.2.0/index.htmljava
Ambari 自身也是一個分佈式架構的軟件,主要由兩部分組成:Ambari Server 和 Ambari Agent。簡單來講,用戶經過 Ambari Server 通知 Ambari Agent 安裝對應的軟件;Agent 會定時地發送各個機器每一個軟件模塊的狀態給 Ambari Server,最終這些狀態信息會呈如今 Ambari 的 GUI,方便用戶瞭解到集羣的各類狀態,並進行相應的維護。node
安裝須知:mysql
開始安裝:linux
wget http://s3.amazonaws.com/public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.4.2.0/ambari.repo #文件會下載到當前目錄
mv ambari.repo /etc/yum.repos.d/
yum clean all yum list|grep ambari
yum install ambari-server
ambari-server --version #查看版本
若是依賴項postgresql下載失敗,須要手動下載安裝;點這裏 下載一個並安裝就能夠了sql
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
ambari-server setup
ambari-server start
ambari-server status #查看server啓動狀況
ambari-agent status #查看agent啓動狀況 這個建立集羣成功才能使用
安裝成功後,就須要在WEBUI中建立集羣了。點擊【Launch Install Wizard】數據庫
1.GetStarted 指定集羣名apache
2.Select Version 選擇HDP版本。HDP版本對應的是一組生態組件的版本。根據本身須要的組件版本選擇一個便可。我選擇的是HDP-2.5bootstrap
下面的內容,使用公共資源庫便可(推薦把資源下載到本地,而後使用本地庫。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
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服務,而且一直是啓動不成功。查看錯誤顯示 【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的升級,有機會升級的話補上這一節
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
參考: