文章目錄
- 大資料平臺架構決議——以訊飛大資料平臺Odeon為例
- 定義
- 功能
- 資料采集
- 資料開發
- 資料分析
- 資料編程
- 補充
大資料平臺架構決議——以訊飛大資料平臺Odeon為例
定義
Odeon大資料平臺以全圖形化Web操作的形式為用戶提供一站式的大資料能力:包括資料采集、任務編排、調度及處理、資料展現(BI)等;同時提供完善的權限管理、日志追蹤、集群監控等能力
功能
-
資料通道:SQL、NoSql資料庫及日志多源數據接入與匯出
-
資料管理:完善的元資料管理、資料質量標準管理體系,同時具備完整的資料隔離及授權機制
-
資料分析:支持離線批處理、流式計算、OLAP、AdHoc等多種計算方式
-
資料服務:基于Greenplum和Kylin的資料服務架構,提供DaaS(資料即服務)服務
-
調度管理:可視化作業流構建,基于Time、Event等觸發機制,全程狀態監控
-
可視化運維:物理集群、分析作業、作業流、資源使用情況等全方位可視化監控及告警
-
快速部署:平臺開發及部署采用業界主流DevOps模式,全組件鏡像化,實作快速部署運維

(以上均來自訊飛官網的定義;)
總的來說——主要的也就是
- 資料采集,
- 資料開發,
- 資料分析,
- 資料編程

資料采集
主要分為結構化通道和日志通道;
結構化:包含一些常用的關心型資料庫,例如:MySQL,Oracle;還有k-v的MongoDB 等等,
日志:一些業務上產生的錨點產生的資料等等,

資料開發
Apache Oozie是Hadoop作業流調度框架,它是一個運行相關的作業作業流系統,這里,用戶被允許創建向非回圈圖作業流程,其可以在并列 Hadoop 并順序地運行,
它由兩部分組成:
作業流引擎:一個作業流引擎的職責是存盤和運行作業流程,由 Hadoop 作業組成:MapReduce, Pig, Hive.
協調器引擎:它運行基于預定義的時間表和資料的可用性作業流程作業,
Oozie可擴展性和可管理及時執行成千上萬的作業流程(每個由幾十個作業)的Hadoop集群,
Oozie 也非常靈活,人們可以很容易啟動,停止,暫停和重新運行作業,Oozie 可以很容易地重新運行失敗的作業流,可以很容易重做因宕機或故障錯過或失敗的作業,甚至有可能跳過一個特定故障節點,

-
支持Oozie編輯器,可以通過儀表板提交和監控
Workflow、Coordinator和Bundle-
Oozie是管理hadoop作業的調度系統
-
Oozie的作業流作業是一系列動作的有向無環圖(DAG)
-
Oozie協調作業是通過 時間(頻率) 和有效資料觸發當前的Oozie作業流程
-
Oozie支持各種hadoop作業,例如:
java mapreduce、Streaming mapreduce、hive、sqoop和distcp(分布式拷貝)等等,也支持系統特定的作業,例如java程式和shell腳本,
-
Oozie是一個可伸縮,可靠和可拓展的系統
-
-
默認基于輕量級sqlite資料庫管理會話資料,用戶認證和授權,可以自定義為MySQL、Postgresql,以及Oracle
-
基于檔案瀏覽器(
File Browser)訪問HDFS -
基于
Hive編輯器來開發和運行Hive查詢 -
支持基于Solr進行搜索的應用,并提供可視化的資料視圖,以及儀表板(Dashboard)
-
支持基于Impala的應用進行互動式查詢
-
支持Spark編輯器和儀表板(Dashboard)
-
支持Pig編輯器,并能夠提交腳本任務
-
支持Oozie編輯器,可以通過儀表板提交和監控
Workflow、Coordinator和Bundle-
Oozie是管理hadoop作業的調度系統
-
Oozie的作業流作業是一系列動作的有向無環圖(DAG)
-
Oozie協調作業是通過**時間(頻率)**和有效資料觸發當前的Oozie作業流程
-
Oozie支持各種hadoop作業,例如:
java mapreduce、Streaming mapreduce、hive、sqoop和distcp(分布式拷貝)等等,也支持系統特定的作業,例如java程式和shell腳本,
-
Oozie是一個可伸縮,可靠和可拓展的系統
-
-
支持HBase瀏覽器,能夠可視化資料、查詢資料、修改HBase表
特性
- 不支持復雜的事務,只支持行級事務,即單行資料的讀寫都是原子性的;
- 由于是采用 HDFS 作為底層存盤,所以和 HDFS 一樣,支持結構化、半結構化和非結構化的存盤;
- 支持通過增加機器進行橫向擴展;
- 支持資料分片;
- 支持 RegionServers 之間的自動故障轉移;
- 易于使用的 Java 客戶端 API;
- 支持 BlockCache 和布隆過濾器;
舉個例子
- RowKey 為行的唯一標識,所有行按照 RowKey 的字典序進行排序;
- 該表具有兩個列族,分別是 personal 和 office;
- 其中列族 personal 擁有 name、city、phone 三個列,列族 office 擁有 tel、addres 兩個列,

特點
- 容量大:一個表可以有數十億行,上百萬列;
- 面向列:資料是按照列存盤,每一列都單獨存放,資料即索引,在查詢時可以只訪問指定列的資料,有效地降低了系統的 I/O 負擔;
- 稀疏性:空 (null) 列并不占用存盤空間,表可以設計的非常稀疏 ;
- 資料多版本:每個單元中的資料可以有多個版本,按照時間戳排序,新的資料在最上面;
- 存盤型別:所有資料的底層存盤格式都是位元組陣列 (byte[]),
Phoenix
Phoenix是 HBase 的開源 SQL 中間層,它允許你使用標準 JDBC 的方式來操作 HBase 上的資料,在Phoenix之前,如果你要訪問 HBase,只能呼叫它的 Java API,但相比于使用一行 SQL 就能實作資料查詢,HBase 的 API 還是過于復雜,Phoenix的理念是we put sql SQL back in NOSQL,即你可以使用標準的 SQL 就能完成對 HBase 上資料的操作,同時這也意味著你可以通過集成
Spring Data JPA或Mybatis等常用的持久層框架來操作 HBase,其次
Phoenix的性能表現也非常優異,Phoenix查詢引擎會將 SQL 查詢轉換為一個或多個 HBase Scan,通過并行執行來生成標準的 JDBC 結果集,它通過直接使用 HBase API 以及協處理器和自定義過濾器,可以為小型資料查詢提供毫秒級的性能,為千萬行資料的查詢提供秒級的性能,同時 Phoenix 還擁有二級索引等 HBase 不具備的特性,因為以上的優點,所以Phoenix成為了 HBase 最優秀的 SQL 中間層, -
支持Metastore瀏覽器,可以訪問Hive的元資料,以及HCatalog
-
支持Job瀏覽器,能夠訪問MapReduce Job(MR1/MR2-YARN)
- 什么是job?
Job簡單講就是提交給spark的任務, - 什么是stage?
Stage是每一個job處理程序要分為的幾個階段, - 什么是task?
Task是每一個job處理程序要分幾為幾次任務,Task是任務運行的最小單位,最終是要以task為單位運行在executor中, - Job和stage和task之間有什么關系?
Job----> 一個或多個stage—> 一個或多個task
- 什么是job?
-
支持Job設計器,能夠創建MapReduce/Streaming/Java Job
-
支持Sqoop 2編輯器和儀表板(Dashboard)
-
支持ZooKeeper瀏覽器和編輯器
-
支持MySql、PostGresql、Sqlite和Oracle資料庫查詢編輯器
-
使用sentry基于角色的授權以及多租戶的管理.(Hue 2.x or 3.x)
資料分析
OLAP全稱為在線聯機分析應用,是一種對于多維資料分析查詢的解決方案,典型的OLAP應用場景包括銷售、市場、管理等商務報表,預算決算,經濟報表等等,
最早的OLAP查詢工具是發布于1970年的Express,然而完整的OLAP概念是在1993年由關系資料庫之父EdgarF.Codd 提出,伴隨而來的是著名的“twelvelaws of online analytical processing”. 1998年微軟發布MicrosoftAnalysis Services,并且在早一年通過OLE DB for OLAP API引入MDX查詢語言,2001年微軟和Hyperion發布的XML forAnalysis 成為了事實上的OLAP查詢標準,如今,MDX已成為與SQL旗鼓相當的OLAP 查詢語言,被各家OLAP廠商先后支持,
OLAPCube是一種典型的多維資料分析技術,Cube本身可以認為是不同維度資料組成的dataset,一個OLAP Cube 可以擁有多個維度(Dimension),以及多個事實(Factor Measure),用戶通過OLAP工具從多個角度來進行資料的多維分析,通常認為OLAP包括三種基本的分析操作:上卷(rollup)、下鉆(drilldown)、切片切塊(slicingand dicing),原始資料經過聚合以及整理后變成一個或多個維度的視圖,
傳統OLAP根據資料存盤方式的不同分為ROLAP(Relational OLAP)以及MOLAP(Multi-dimensionOLAP)
ROLAP 以關系模型的方式存盤用作多維分析用的資料,優點在于存盤體積小,查詢方式靈活,然而缺點也顯而易見,每次查詢都需要對資料進行聚合計算,為了改善短板,ROLAP使用了列存、并行查詢、查詢優化、位圖索引等技術
MOLAP 將分析用的資料物理上存盤為多維陣列的形式,形成CUBE結構,維度的屬性值映射成多維陣列的下標或者下標范圍,事實以多維陣列的值存盤在陣列單元中,優勢是查詢快速,缺點是資料量不容易控制,可能會出現維度爆炸的問題,
Apache kylin是一個開源的分布式分析引擎,它通過ANSI-SQL介面,提供基于hadoop的超大資料集(TB-PB級)的多維分析(OLAP)功能,
只需三步,kylin即可實作超大資料集上的亞秒級(sub-second latency)查詢,
- 確定hadoop上一個星型模式(
Star schema)的資料集, - 構建資料立方體(
Data cube), - 可通過
ODBC, JDBC,RESTful API等介面在亞秒級的延遲內查詢相關資料,
OLAP-Kylin是基于Apache Kylin定制的Odeon大資料平臺上的一個開源OLAP引擎,它采用多維立方體預計算技術,可以將大資料的SQL查詢速度提升到亞秒級別,相對于之前的分鐘乃至小時級別的查詢速度,亞秒級別速度是百倍到千倍的提升,改引擎為超大規模資料集上的互動式大資料分析打開了大門,
核心組件:
資料立方體構建引擎(Cube Build Engine):當前底層資料計算引擎支持MapReduce1、MapReduce2、Spark等,
Rest Server:當前kylin采用的ODBC, JDBC,RESTful API介面提供web服務,
查詢引擎(Query Engine):REST Server接收查詢請求后,決議sql陳述句,生成執行計劃,然后轉發查詢請求到Hbase中,最后將結構回傳給REST Server,

- 為什么引入kylin?
由于資料是基于hadoop分布式存盤,所以比mysql的伸縮性好,
提供hadoop上超大資料規模( 百億行級別的資料)的亞秒級(sub-second latency)SQL查詢,相對于hive的離線分析,可做到實時查詢,
可無縫整合其他BI工具,如Tableau, PowerBI,Excel,

Apache kylin核心:Kylin的(OLAP) 引擎由元資料引擎、查詢引擎、任務引擎、存盤引擎組成,另外,它還有一個rest服務器對外提供查詢請求的服務,
可擴展性:提供插件機制支持額外的特性和功能,
與其他系統的整合:可整合任務調度器,ETL工具、監控及告警系統,
驅動包(Drivers):提供ODBC、JDBC驅動支持與其他工具(如Tableau)的整合,
表(Table):表定義在hive中,是資料立方體(Data cube)的資料源,在build cube 之前,必須同步在 kylin中,
模型(model):模型描述了一個星型模式的資料結構,它定義了一個事實表(Fact Table)和多個查找表(Lookup Table)的連接和過濾關系,
立方體(Cube):它定義了使用的模型、模型中的表的維度(dimension)、度量(measure) ,一般指聚合函式,如:sum、count、average等)、如何對段磁區( segments partition)、合并段(segments auto-merge)等的規則,
立方體段(Cube Segment):它是立方體構建(build)后的資料載體,一個 segment 映射hbase中的一張表,立方體實體構建(build)后,會產生一個新的segment,一旦某個已經構建的立方體的原始資料發生變化,只需重繪(fresh)變化的時間段所關聯的segment即可,
作業(Job):對立方體實體發出構建(build)請求后,會產生一個作業,該作業記錄了立方體實體build時的每一步任務資訊,作業的狀態資訊反映構建立方體實體的結果資訊,如作業執行的狀態資訊為RUNNING 時,表明立方體實體正在被構建;若作業狀態資訊為FINISHED ,表明立方體實體構建成功;若作業狀態資訊為ERROR ,表明立方體實體構建失敗!作業的所有狀態如下:
1,NEW - This denotes one job has been just created.
2,PENDING - This denotes one job is paused by job scheduler and waiting for resources.
3,RUNNING - This denotes one job is running in progress.
4,FINISHED - This denotes one job is successfully finished.
5,ERROR - This denotes one job is aborted with errors.
6,DISCARDED - This denotes one job is cancelled by end users.
當前Apache kylin構建(build)資料立方體,采用逐層演算法(By Layer Cubing),未來的發布中將采用快速立方體演算法(Fast Cubing),下面簡單介紹一下逐層演算法:
一個完整的資料立方體,由N-dimension立方體,N-1 dimension立方體,N-2維立方體,0 dimension立方體這樣的層關系組成,除了N-dimension立方體,基于原資料計算,其他層的立方體可基于其父層的立方體計算,所以該演算法的核心是N次順序的MapReduce計算,
在MapReduce模型中,key由維度的組合的構成,value由度量的組合構成,當一個Map讀到一個key-value對時,它會計算所有的子立方體(child cuboid),在每個子立方體中,Map從key中移除一個維度,將新key和value輸出到reducer中,直到當所有層計算完畢,才完成資料立方體的計算
資料編程
- Scala 、Java
- SQL 見博文 https://hiszm.blog.csdn.net/article/details/119540143
前端使用的是hue作為web UI; 通過wappalyzer可以看出基本的部分組件

Hue是一個Web應用(默認埠8888),用來簡化用戶和Hadoop集群的互動,
Hue技術架構,如下圖所示,從總體上來講,Hue應用采用的是B/S架構,hue是基于django框架開發,python作為底層語言,
大體上可以分為三層,分別是前端view層、Web服務層和Backend服務層,Web服務層和Backend服務層之間使用RPC((Remote Procedure Call)—遠程程序呼叫)的方式呼叫,
為什么使用hue呢?由于大資料框架很多,為了解決某個問題,一般來說會用到多個框架,但是每個框架又都有自己的web UI監控界面,對應著不同的埠號,比如HDFS(50070)、YARN(8088)、MapReduce(19888)等,這個時候有一個統一的web UI界面去管理各個大資料常用框架是非常方便的,這就使得對大資料的開發、監控和運維更加的方便,
| 大資料組件 | 常用的埠及說明 |
|---|---|
| CDH | 7180: Cloudera Manager WebUI 埠 7182: Cloudera Manager Server 與 Agent 通訊埠 |
| Hadoop | 50070:HDFS WEB UI 埠 8020 : 高可用的 HDFS RPC 埠 9000 : 非高可用的 HDFS RPC 埠 8088 : Yarn 的 WEB UI 介面 8485 : JournalNode 的 RPC 埠 8019 : ZKFC 埠 19888:jobhistory WEB UI 埠 |
| Zookeeper | 2181 : 客戶端連接 zookeeper 的埠 2888 : zookeeper 集群內通訊使用,Leader 監聽此埠 3888 : zookeeper 埠 用于選舉 leader |
| Hbase | 60010:Hbase 的 master 的 WEB UI 埠 (舊的) 新的是 16010 60030:Hbase 的 regionServer 的 WEB UI 管理埠 |
| Hive | 9083 : metastore 服務默認監聽埠 10000:Hive 的 JDBC 埠 |
| Spark | 7077 : spark 的 master 與 worker 進行通訊的埠 standalone 集群提交 Application 的埠 8080 : master 的 WEB UI 埠 資源調度 8081 : worker 的 WEB UI 埠 資源調度 4040 : Driver 的 WEB UI 埠 任務調度 18080:Spark History Server 的 WEB UI 埠 |
| Kafka | 9092: Kafka 集群節點之間通信的 RPC 埠 |
| Redis | 6379: Redis 服務埠 |
| HUE | 8888: Hue WebUI 埠 |

補充
- 大資料全家桶

- IaaS,PaaS,SaaS,DaaS
資料即服務(Data-as-a-Service,DaaS)是指與資料相關的任何服務都能夠發生在一個集中化的位置,如聚合、資料質量管理、資料清洗等,然后再將資料提供給不同的系統和用戶,而無需再考慮這些資料來自于哪些資料源,

DevOps:Developer Operations Engineering,開發運維工程師,
- RPC
RPC:遠程呼叫,通過RPC框架,使得我們可以像呼叫本地方法一樣地呼叫遠程機器上的方法:
1、本地呼叫某個函式方法
2、本地機器的RPC框架把這個呼叫資訊封裝起來(呼叫的函式、入參等),序列化(json、xml等)后,通過網路傳輸發送給遠程服務器
3、遠程服務器收到呼叫請求后,遠程機器的RPC框架反序列化獲得呼叫資訊,并根據呼叫資訊定位到實際要執行的方法,執行完這個方法后,序列化執行結果,通過網路傳輸把執行結果發送回本地機器
4、本地機器的RPC框架反序列化出執行結果,函式return這個結果


https://www.jianshu.com/p/849452eb80ab
https://www.xfyun.cn/solution/big-data-platform
http://gethue.com/
http://bh-lay.github.io/demos/vue/layout-editor/
https://blog.csdn.net/liangyihuai/article/details/54137163
http://huxiaoqiang.github.io/2016/07/17/hadoop%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA/
http://221.239.36.178/accounts/login/?next=%2Fodeon%2Fnotebook%2F%23%2Findex%2Fnotebook-list
https://www.oreilly.com/radar/bringing-interactive-bi-to-big-data/
https://fusioninsight.github.io/ecosystem/zh-hans/SQL_Analytics/Apache_Kylin_2.6.1/#_1
https://dxj1113.github.io/2017/07/17/Kylin%E5%88%9D%E6%8E%A2/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/310529.html
標籤:其他
