大數據 常用框架特點
一、大數據框架:
Impala:hadoop的sql平臺、支持hbase/hdfs、支持超大數據、支持多並發、sql支持好、對內存依賴比較嚴重。需要自己優化,並且有的語句超過內存會報錯。
Spark:各種格式、各種計算(機器學習、圖形計算)、可sql、可代碼處理、支持scala/java/python語言開發。提供scala/python代碼命令行運行、超大數據支持差。
Kylin:預計算、好優化、高性能、支持mr、spark、基於時間的增量更新、流式更新、數據源有hive/kafka、提供開發用的管理臺是一套開發系統。由於有預計算、所以其他各個模塊獨立,能支持高並發。可以直接作為軟件系統的數據源。
Phoenix:sql on hbase、快
Hbase:key/value、強一致性、不丟數據
Cassandra:弱一致性,數據可能丟失。可用性高、讀寫性能比hbase高、被facebook放棄了。
案例1:特別適合大數據sql查詢
數據存入hbase,把hbase表結構隱射到hive,用Impala進行sql查詢。
優點有三個:
A、Impala支持hdfs/hbase兩個適用度比Phoenix更廣,並且更穩定。
B、數據在hbase中,對數據的操作得以進行,hdfs中的數據是沒法行級更新,刪除的。並且速度也比hdfs快。無需字段分割解析,直接讀取。
C、能在hive中為表結構,給開發和後面換用其他框架留下很大方便。
案例2:Zeppelin特別適合spark機器學習
Spark交互式開發平臺
Zeppelin整合了Spark,Markdown,Shell,Angular等引擎,集成了數據分析和可視化等功能
提供了sql查詢,和scala/python分析代碼調試功能。
http://blog.csdn.net/guohecang/article/details/51324390。
案例3:Kylin:全功能大數據sql查詢平臺
預計算、好優化、高性能、支持mr、sparksql、基於時間的增量更新、流式更新、有開發管理臺、數據源有hive/kafka。
由於有預計算、所以其他各個模塊獨立,能支持高並發。可以直接作為軟件系統的數據源。
案例4:
Presto 玩的更絕,全程在內存中倒騰,需要對各個步驟下對象數據規模做到完全精細的把控。優勢是速度快,支持的數據源多。
總結::
- MPP架構的系統(Presto/Impala/SparkSQL/Drill等)有很好的數據量和靈活性支持,但是對響應時間是沒有保證的。當數據量和計算復雜度增加後,響應時間會變慢,從秒級到分鐘級,甚至小時級都有可能。
- 搜索引擎架構的系統(Elasticsearch等)相對比MPP系統,在入庫時將數據轉換為倒排索引,采用Scatter-Gather計算模型,犧牲了靈活性換取很好的性能,在搜索類查詢上能做到亞秒級響應。但是對於掃描聚合為主的查詢,隨著處理數據量的增加,響應時間也會退化到分鐘級。
- 預計算系統(Druid/Kylin等)則在入庫時對數據進行預聚合,進一步犧牲靈活性換取性能,以實現對超大數據集的秒級響應。
1. kylin 預計算。用戶指定dimensions和要計算的metric,kylin通過MR將結果保存在HBase中,後續讀取直接讀HBase。適合那種業務清楚的知道自己要分析什麽的場景。查詢模式比較固定,只不過所查看的時間不同的場景。註意的點是要避免維度災難。
2. presto java8寫的,代碼質量非常高。設計:純內存,沒有容錯,一個task失敗就整個query fail。需要註意調整內存相關,線程數等參數,容易OOM。benchmark還行。支持標準SQL
3.Spark sql 相對更‘原生‘一些,單純的通用框架,和上面兩位並不是同一層面上的東西。
二、深度學習框架:
TensorFlow:google開源的,當前版本已經有高級API、可視化工具、GPU支持、異步執行
DeepLearning4J:(DL4J)是一套基於Java語言的神經網絡工具包,可以構建、定型和部署神經網絡。DL4J與Hadoop和Spark集成,支持分布式CPU和GPU。
Keras:
Keras是一個高層神經網絡API,Keras由純Python編寫而成並基Tensorflow或Theano。Keras 為支持快速實驗而生,能夠把你的idea迅速轉換為結果,如果你有如下需求,請選擇Keras:
簡易和快速的原型設計(keras具有高度模塊化,極簡,和可擴充特性)
支持CNN和RNN,或二者的結合
無縫CPU和GPU切換
Keras和DDPG
大數據 常用框架特點