1. 程式人生 > >大數據架構梳理

大數據架構梳理

推薦 cloud expr meta ima broadcast mapred .net lin

根據對各種生態組件的分析,較好的一種架構是:

存儲層:使用HDFS for Parquet/Kudu/Hbase(HDFS for Parquet和Kudu各有利弊,HBase作為補充)

資源調度層:YARN(也成為MR2)

批處理:Hive(2.0中,beeline代替了hive控制臺)或MapReduce

上面也是Hadoop本身的三大組成部分。

實時查詢:Impala(也可以Spark)(Impala不支持基於HDFS的表修改操作,需要使用Kudu引擎,參考https://www.jianshu.com/p/a49e68c0015b)

支持:SQL-92
支持:HDFS, HBase, 文本文件Parquet, Avro, SequenceFile, RCFile以及Snappy, GZIP, Deflate, BZIP
安全:Kerberos認證
MPP架構

技術分享圖片

Impalad: 與DataNode運行在同一節點上,由Impalad進程表示,一個datanode對應一個impalad,它接收客戶端的查詢請求(接收查詢請求的Impalad為Coordinator,Coordinator通過JNI調用java前端解釋SQL查詢語句,生成查詢計劃樹,再通過調度器把執行計劃分發給具有相應數據的其它Impalad進行執行),讀寫數據,並行執行查詢,並把結果通過網絡流式的傳送回給Coordinator,由Coordinator返回給客戶端。同時Impalad也與State Store保持連接,用於確定哪個Impalad是健康和可以接受新的工作。在Impalad中啟動三個ThriftServer: beeswax_server(連接客戶端),hs2_server(借用Hive元數據), be_server(Impalad內部使用)和一個ImpalaServer服務。

Impala State Store: 跟蹤集群中的Impalad的健康狀態及位置信息,由statestored進程表示,它通過創建多個線程來處理Impalad的註冊訂閱和與各Impalad保持心跳連接,各Impalad都會緩存一份State Store中的信息,當State Store離線後(Impalad發現State Store處於離線時,會進入recovery模式,反復註冊,當State Store重新加入集群後,自動恢復正常,更新緩存數據)因為Impalad有State Store的緩存仍然可以工作,但會因為有些Impalad失效了,而已緩存數據無法更新,導致把執行計劃分配給了失效的Impalad,導致查詢失敗。
 
Catalogd:作為metadata訪問網關,從Hive Metastore等外部catalog中獲取元數據信息,放到impala自己的catalog結構中。impalad執行ddl命令時通過catalogd由其代為執行,該更新則由statestored廣播。

CLI: 提供給用戶查詢使用的命令行工具(Impala Shell使用python實現),同時Impala還提供了Hue,JDBC, ODBC使用接口。

執行計劃: Impala: 通過詞法分析生成執行計劃,執行計劃表現為一棵完整的執行計劃樹,可以更自然地分發執行計劃到各個Impalad執行查詢,在分發執行計劃後,Impala使用拉式獲取數據的方式獲取結果,把結果數據組成按執行樹流式傳遞匯集,減少的了把中間結果寫入磁盤的步驟,再從磁盤讀取數據的開銷。 impala的前端負責將sql轉化成執行計劃(java),包含兩個階段:單節點計劃生成、並行化和分段。第一階段對sql進行解析、分析、優化(RBO和CBO,統計信息目前只有表大小和列的NDV,無histogram),第二階段生成分布式的執行計劃,確定是否要加exchange節點(是否存在partitioned join或hash aggregation),選擇join strategy(partitioned join or broadcast join)等,最後以exchange為邊界將計劃分段(fragment),作為impala的基本運行單元。

實時MySQL數據同步:canal->Kafka

定時批量同步:sqoop,從mysql導出

實時預測:Spark Streaming/Flink(優先)/Apache Storm(主要用於實時風控、推薦、實時統計的大屏幕,http://f.dataguru.cn/thread-907180-1-1.html)

Spark SQL和Impala的性能測試結果參考http://www.cnblogs.com/jins-note/p/9513448.html,http://www.cnblogs.com/wasu/p/5828586.html

SparkStreaming讀Kafka數據寫Kudu:https://cloud.tencent.com/developer/article/1158193(結合canal寫到kafka,就實現Mysql實時到Kudu)

kafka落地到Hbase:https://www.cnblogs.com/liuwei6/p/6893036.html

新一代流式計算框架在金融行業的應用:https://blog.csdn.net/dingxiangtech/article/details/83022673

流式大數據處理的三種框架:Storm,Spark和Flink:https://blog.csdn.net/cm_chenmin/article/details/53072498

Practical Real-time Data Processing and Analytics: Distributed Computing and Event Processing using Apache Spark, Flink, Storm, and Kafka

發行版:

優先使用CDH企業版或CDH Express,減少不必要的整合時間浪費。

學習思路推薦:

1、先用CDH quick-start,從Spark或Impala開始(Kudu或Parquet先搞定一種),一開始HDFS/MapReduce會很無聊(在此過程中很多HDFS的原理和事件就順帶掌握了)。

2、流式計算;

3、反過來開始安全、認證、集群安裝;

大數據架構梳理