目前市場上常見的企業級大數據平臺型的產品主流的有兩個,一個是Cloudera公司推出的CDH,一個是Hortonworks公司推出的一套HDP,其中HDP是以開源的Ambari做爲一個管理監控工具,CDH對應的是Cloudera Manager,國內也有像星環這種公司專門作大數據平臺。咱們公司最初是使用CDH的環境,近日領導找到我讓我基於Ambari作一個公司本身的數據平臺產品。最初接到這個任務我是拒絕的,由於已經有了很完善很成熟的數據平臺產品,小公司作這個東西在我看來是浪費人力物力且起步太晚。後來想一想若是公司若是有本身數據平臺的產品後續在客戶面前也能證實本身的技術實力且我我的也能從源碼級別更深刻的學習瞭解大數據生態圈的各個組件。git
我的在公司的數據平臺從無到有的這個過程。認爲建設一個本身的數據平臺應該包含三個部分。包括基礎設施建設、大數據平臺建設、業務系統數據接口三部分組成。其中基礎設施建設初期採用對臺Linux服務器做爲硬件基礎設施,後續技術成熟能夠採用容器技術更優的配置資源。大數據平臺包含數據接入模塊,數據存儲模塊,數據計算模塊,資源調度模塊,集羣監控模塊組成,致力於完成數據存儲、流計算、批處理、交互式分析等多種需求。本文將重點介紹大數據平臺建設規劃。業務系統數據接口是根據不一樣業務系統需求,對外暴露對應的數據接口提供數據。github
數據平臺按數據處理方式包含數據流處理和數據批處理兩種方式,其中數據流處理採用Storm計算框架,目前建議只作簡單邏輯處理,計算結果僅用做實時數據展現,後續技術成熟可加入實時ML模塊。批處理針對於數據倉庫,經過採集程序、對接業務系統或收集業務系統日誌等數據,數據存儲底層使用分佈式文件系統HDFS,基於多種業務需求構建數據倉庫用於多維度數據分析。數據計算建議採用當下主流的計算引擎Spark。對於非關係型數據經過代碼邏輯進行處理,對於關係型數據採用SQL進行處理,如SparkSQL,Hive,Kylin等組件,計算結果寫入支持後臺應用程序快速讀取的數據庫。計算任務經過任務調度系通通一調度執行。數據平臺安全機制採用主流的經過主機配置kerberos實現。集羣資源監控使用自行開發的XJManager,頁面應包含組件名稱及狀態統計信息,主機健康信息,用戶管理等模塊,實現用戶經過Web頁面就能夠安裝配置大數據平臺。項目總體架構以下圖所示:web
下邊介紹各個模塊:數據庫
包含傳感器數據採集程序接入,使用Flume採集業務系統日誌數據,對接其餘業務系統數據庫數據。對實時採集的數據使用Kafka做爲緩衝。對於對接的業務系統數據若是有操做型數據能夠構建ODS系統。用於數據分析的數據(含採集數據和對接業務數據)在Hadoop上構建數據倉庫。apache
基於Hadoop之上構建數據倉庫。數據來源於多種數據源,針對不一樣的業務需求設計整理不一樣的基礎數據表。數據倉庫是一種反範式設計,引入冗餘。徹底針對不一樣維度的數據分析需求去設計。安全
使用Storm做爲流計算框架。Storm具備低延時的特色。後續若是數據量吞吐量較大且沒有較高的時效性需求,能夠替換SparkStreaming。服務器
離線處理模塊對於結構化數據使用SQL進行處理,對於非結構化數據編寫代碼進行處理。使用SQL進行大數據量下的計算建議使用SparkSQL,其餘經常使用的使用SQL進行數據計算的組件如傳統的Hive,國人開源的Kylin。(Impala不開源不能整合)。架構
集成Oozie和Ext.js自動部署Oozie的web ui,經過xml配置做業依賴,經過property文件配置運行參數,經過ext.js完成web頁面監控。框架
Kerberos分佈式
目前初期建設待解決的問題以下:
Ambari源碼地址:https://github.com/apache/ambari
主要修改部分在ambari-web和ambari-views模塊
修改ambari頁面樣式,包含相關logo修改,頁面菜單、操做按鈕、提示等內容漢化。
下圖是原ambari樣式:
Ambari相似於Cloudera公司的ClouderaManager,使用源碼後編譯也僅僅可以實如今線安裝組件,在線安裝組件速度慢,不穩定,易出現安裝失敗。因此建議將經常使用組件集成一塊兒打包,經常使用組件包括HDFS、MapReduce二、YARN、Hive、Sqoop、Oozie、Zookeeper、Storm、Kafka、Flume、Spark等。提早準備好對應版本的組件安裝部署時從本地安裝提高速度也更加穩定。
目前離線安裝ambari須要提早準備好ambari、HDP、HDP-util三個包構建本地yum源,而後經過yum安裝ambari-server,還需安裝配置關係型數據庫。過程相對於普通用戶較爲複雜,建議編寫一鍵安裝腳本,在服務器準備好以後(免密鑰、關閉防火牆、時間同步等),只需運行腳本即可以實如今服務器上安裝部署。