1、Spark集成ElasticSearch的設計動機web
ElasticSearch 毫秒級的查詢響應時間仍是很驚豔的。其優勢有:編程
1. 優秀的全文檢索能力架構
2. 高效的列式存儲與查詢能力框架
3. 數據分佈式存儲(Shard 分片)elasticsearch
相應的也存在一些缺點:分佈式
1. 缺少優秀的SQL支持函數
2. 缺少水平擴展的Reduce(Merge)能力,現階段的實現侷限在單機oop
3. JSON格式的查詢語言,缺少編程能力,難以實現很是複雜的數據加工,自定義函數(相似Hive的UDF等)性能
Spark 做爲一個計算引擎,能夠克服ES存在的這些缺點:優化
1. 良好的SQL支持
2. 強大的計算引擎,能夠進行分佈式Reduce
3. 支持自定義編程(採用原生API或者編寫UDF等函數對SQL作加強)
因此在構建即席多維查詢系統時,Spark 能夠和ES取得良好的互補效果
2、Spark與ElasticSearch結合的架構和原理
ES-Hadoop無縫打通了ES和Hadoop兩個很是優秀的框架,咱們既能夠把HDFS的數據導入到ES裏面作分析,也能夠將es數據導出到HDFS上作備份,歸檔,其中值得一提的是ES-Hadoop全面的支持了Spark框架,其中包括Spark,Spark Streaming,Spark SQL,此外也支持Hive,Pig,Storm,Cascading,固然還有標準的MapReduce,不管用那一個框架集成ES,都是很是簡潔的。最後還可使用Kibana提供的可視化的數據分析一條龍服務,很是棒的組合
整個數據流轉圖以下
而咱們今天要介紹的,就是使用ES-Hadoop裏面的ES-Spark插件,來完成使用spark向ES裏面大批量插入數據和加載數據。
3、集羣的硬件配置
Spark集羣含有3個節點,FEA-spk和Spark集羣的交互採用yarn-client。
主機 |
cpu |
mem |
disk |
10.68.23.89 |
1200MHZ*8 |
50g |
400g |
10.68.23.90 |
1200MHZ*8 |
50g |
400g |
10.68.23.91 |
1200MHZ*8 |
50g |
400g |
4、寫入elasticsearch的數據介紹
elasticsearch副本數量是2個,每個副本的大小是216.4g
數據的條數爲88762914,字段的個數73個
5、FEA-spk寫入ElasticSearch的原語實現
(1) 建立spk的鏈接
(2) 建立ElasticSearch的鏈接
(3) 加載數據到es中
數據的格式以下表所示
(4) 查看一下df1表的前十行
(5)將df1表的數據寫回到ES裏面,其中spark是index,people是type
因爲數據量比較大,因此咱們選擇後臺運行
進入spark web界面,查看運行狀況
咱們能夠看到花費了2.3小時,若是對集羣的資源和參數優化,時間可能會更短
6、Spark寫回數據到ES的性能計算
每秒處理的數據條數=總條數/總時間=88762914/(2.5*60*60)=9863條
每條記錄的大小=總大小/總條數=216.4*1024*1024k/88762914=3K
每秒能寫多少兆=每秒處理的數據條數*每條記錄的大小/1024=9863*3/1024=29M
7、FEA-spk結合ES適用的場景
不會使用Spark,想使用Spark分析存放在ES中的數據,把結果寫入到ES裏面,FEA-spk是一個不錯的選擇。