數據分析平臺架構原理數據庫
從概念上講,咱們能夠把數據分析平臺分爲接入層(Landing)、整合層(Integration)、表現層(Persentation)、語義層(Semantic)、終端用戶應用(End-user applications)、元數據(Metadata)。基於Hadoop和數據庫的分析平臺基本概念和邏輯架構是通用的,只是技術選型的不一樣:apache
接入層(Landing):以和源系統相同的結構暫存原始數據,有時被稱爲「貼源層」或ODS;json
整合層(Integration):持久存儲整合後的企業數據,針對企業信息實體和業務事件建模,表明組織的「惟一真相來源」,有時被稱爲「數據倉庫」;瀏覽器
表現層(Presentation):爲知足最終用戶的需求提供可消費的數據,針對商業智能和查詢性能建模,有時被稱爲「數據集市」;服務器
語義層(Semantic):提供數據的呈現形式和訪問控制,例如某種報表工具;架構
終端用戶應用(End-user applications):使用語義層的工具,將表現層數據最終呈現給用戶,包括儀表板、報表、圖表等多種形式;app
元數據(Metadata):記錄各層數據項的定義(Definitions)、血緣(Genealogy)、處理過程(Processing)。分佈式
來自不一樣數據源的「生」數據(接入層),和通過中間處理以後獲得的整合層、表現層的數據模型,都會存儲在數據湖裏備用。工具
數據湖的實現一般創建在Hadoop生態上,可能直接存儲在HDFS上,也可能存儲在HBase或Hive上,也有用關係型數據庫做爲數據湖存儲的可能性存在。oop
下圖說明了數據分析平臺的數據處理流程:
數據分析基本都是單獨的系統,會將其餘數據源的數據(即外部數據)同步到數據平臺的存儲體系來(即數據湖),通常數據先進入到接入層,這一層只簡單的將外部數據同步到數據分析平臺,沒有作其餘處理,這樣同步出錯後重試便可,有定時同步和流式同步兩種:
定時同步即咱們設定在指定時間觸發同步動做;
流式同步即外部數據經過Kafka或MQ發送數據修改通知及內容。
數據分析平臺執行對應操做修改數據。
接入層數據須要通過ETL處理步驟纔會進入數據倉庫,數據分析人員都是基於數據倉庫的數據來作分析計算,數據倉庫能夠看做數據分析的惟一來源,ETL會將接入層的數據作數據清洗、轉換,再加載到數據倉庫,過濾或處理不合法、不完整的數據,並使用統一的維度來表示數據狀態。有的系統會在這一層就將數據倉庫構建成數據立方體、將維度信息構建成雪花或星型模式;也有的系統這一層只是統一了全部數據信息,沒有作數據立方體,留在數據集市作。
數據集市是基於數據倉庫數據對業務關心的信息作計算提取後獲得的進一步信息,是業務人員直接面對的信息,是數據倉庫的進一步計算和深刻分析的結果,通常都會構建數據立方體。系統開發人員通常會開發頁面來向用戶展現數據集市的數據。
基於Hadoop構建數據分析平臺
上面這張圖是咱們使用到的Hadoop平臺的組件,數據從下到上流動,數據處理流程和上面說的一致。
任務調度負責將數據處理的流程串聯起來,這裏我選擇使用的是Oozie,也有不少其它選擇。
一、數據存儲
基於Hadoop的數據湖主要用到了HDFS、Hive和HBase,HDFS是Hadoop平臺的文件存儲系統,咱們直接操縱文件是比較複雜的,因此可使用分佈式數據庫Hive或HBase用來作數據湖,存儲接入層、數據倉庫、數據集市的數據。
Hive和HBase各有優點:HBase是一個NoSQL數據庫,隨機查詢性能和可擴展性都比較好;而Hive是一個基於HDFS的數據庫,數據文件都以HDFS文件(夾)形式存放,存儲了表的存儲位置(即在HDFS中的位置)、存儲格式等元數據,Hive支持SQL查詢,可將查詢解析成Map/Reduce執行,這對傳統的數據分析平臺開發人員更友好。
Hive數據格式可選擇文本格式或二進制格式,文本格式有csv、json或自定義分隔,二進制格式有orc或parquet,他們都基於行列式存儲,在查詢時性能更好。同時可選擇分區(partition),這樣在查詢時可經過條件過濾進一步減小數據量。接入層通常選擇csv或json等文本格式,也不作分區,以儘可能簡化數據同步。數據倉庫則選擇orc或parquet,以提高數據離線計算性能。
數據集市這塊能夠選擇將數據灌回傳統數據庫(RDBMS),也能夠停留在數據分析平臺,使用NoSQL提供數據查詢或用Apache Kylin來構建數據立方體,提供SQL查詢接口。
二、數據同步
咱們經過數據同步功能使得數據到達接入層,使用到了Sqoop和Kafka。數據同步能夠分爲全量同步和增量同步,對於小表能夠採用全量同步,對於大表全量同步是比較耗時的,通常都採用增量同步,將變更同步到數據平臺執行,以達到兩邊數據一致的目的。
全量同步使用Sqoop來完成,增量同步若是考慮定時執行,也能夠用Sqoop來完成。或者,也能夠經過Kafka等MQ流式同步數據,前提是外部數據源會將變更發送到MQ。
三、ETL及離線計算
咱們使用Yarn來統一管理和調度計算資源。相較Map/Reduce,Spark SQL及Spark RDD對開發人員更友好,基於內存計算效率也更高,因此咱們使用Spark on Yarn做爲分析平臺的計算選型。
ETL能夠經過Spark SQL或Hive SQL來完成,Hive在2.0之後支持存儲過程,使用起來更方便。固然,出於性能考慮Saprk SQL仍是不錯的選擇。
本文章介紹大數據平臺Hadoop的分佈式環境搭建、如下爲Hadoop節點的部署圖,將NameNode部署在master1,SecondaryNameNode部署在master2,slave一、slave二、slave3中分別部署一個DataNode節點
NN=NameNode(名稱節點)
SND=SecondaryNameNode(NameNode的輔助節點)
DN=DataNode(數據節點)
(1)準備五臺服務器
如:master一、master二、slave一、slave二、slave3
(2)關閉全部服務器的防火牆
# systemctl stop firewalld
# systemctl disable firewalld
(3)分別修改各服務器的/etc/hosts文件,內容以下:
192.168.56.132 mates1
192.168.56.133 mates2
192.168.56.134 slave1
192.168.56.135 slave2
192.168.56.136 slave3
注:對應修改個服務器的/etc/hostname文件,分別爲 master一、master二、slave一、slave二、slave3
(4)分別在各臺服務器建立一個普通用戶與組
# groupadd hadoop #增長新用戶組
# useradd hadoop -m -g hadoop #增長新的用戶
# passwd hadoop #修改hadoop用戶的密碼
切換至hadoop用戶:su hadoop
(5)各服務器間的免密碼登陸配置,分別在各自服務中執行一次
注:以上操做須要登陸到hadoop用戶操做
(6)下載hadoop包,hadoop-2.7.5.tar.gz
官網地址:https://archive.apache.org/dist/hadoop/common/hadoop-2.7.5/
(1)建立hadoop安裝目錄
(2)將安裝包解壓至/home/hadoop/app/hadoop下
(3)配置hadoop的環境變量,修改/etc/profile
(4)刷新環境變量
(1)配置core-site.xml
默認配置地址:http://hadoop.apache.org/docs/r2.7.5/hadoop-project-dist/hadoop-common/core-default.xml
(2)配置hdfs-site.xml
默認配置地址:http://hadoop.apache.org/docs/r2.7.5/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
(3)配置mapred-site.xml
$ cp /home/hadoop/app/hadoop/hadoop-2.7.5/etc/hadoop/mapred-site.xml.template /home/hadoop/app/hadoop/hadoop-2.7.5/etc/hadoop/mapred-site.xml
$ vi /home/hadoop/app/hadoop/hadoop-2.7.5/etc/hadoop/mapred-site.xml
默認配置地址:http://hadoop.apache.org/docs/r2.7.5/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml
(4)配置yarn-site.xml
默認配置地址:http://hadoop.apache.org/docs/r2.7.5/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
(5)配置slaves
slaves文件中配置的是DataNode的所在節點服務
(6)配置hadoop-env
修改hadoop-env.sh文件的JAVA_HOME環境變量,操做以下:
(7)配置yarn-env
修改yarn-env.sh文件的JAVA_HOME環境變量,操做以下
(8)配置mapred-env
修改mapred-env.sh文件的JAVA_HOME環境變量,操做以下:
(9)將master1中配置好的hadoop分別遠程拷貝至maser二、slave1 、slave二、slave3服務器中
(1)在master1節點中初始化Hadoop集羣
(2)啓動Hadoop集羣
(3)驗證集羣是否成功
瀏覽器中訪問50070的端口,以下證實集羣部署成功