使用ElasticSearch作為大數據平台的實時OLAP框架 – lxw的大數據田地
http://lxw1234.com/archives/2015/12/588.htm
一直想找一個用於大數據平台實時OLAP(甚至是實時計算)的框架,之前調研的Druid(druid.io)太過復雜,整個Druid由5、6個服務組成,而且加載數據也不太方便,性能一般,亦或是我還不太會用它。后來發現使用ElasticSearch就可以滿足海量數據實時OLAP的需求。
ElasticSearch相信大家都很熟悉了,它在搜索領域已經有了舉足輕重的地位,而且也支持越來越多的聚合統計功能,還和YARN、Hadoop、Hive、Spark、Pig、Flume等大數據框架兼容的越來越好,比如:可以將ElasticSearch跑在YARN上,還可以在Hive中建立外部表映射到ElasticSearch的Index中,直接在Hive中執行INSERT語句,將數據加載進ElasticSearch。
所謂OLAP,其實就是從事實表中統計任意組合維度的指標,也就是過濾、分組、聚合,其中,聚合除了一般的SUM、COUNT、AVG、MAX、MIN等,還有一個重要的COUNT(DISTINCT),看上去這些操作在SQL中是非常簡單的統計,但在海量數據、低延遲的要求下,並不是那么容易做的。
ElasticSearch本來就是做實時搜索的,過濾自然不是問題,現在也支持各種聚合以及Pipeline aggregations(相當於SQL子查詢的功能),而且ElasticSearch的安裝部署也非常簡單,一個節點只有一個服務進程,關於安裝配置可參考:http://lxw1234.com/archives/2015/12/582.htm
本文以兩個業務場景的例子,看一下ElasticSearch是如何滿足我們的需求的。
例子1:網站流量報告
在我們的報表平台有這樣一張報表,用於查看每個網站每天的流量指標:
其中,維度有:天、小時、網站,指標有: PV****、UV****、訪問次數、跳出率、平均停留時間、回訪率等。另外,還有一張報表是地域報告,維度多了省份和城市,指標一樣。目前的做法是將可選的維度組合及對應的指標先在Hive中分析好,再將結果同步至MySQL,供報表展現。
真正意義上的OLAP做法,我是這樣做的:在Hive分析好一張最細粒度為visit_id(session_id)的事實表,字段及數據如下:
然后將這張事實表的數據加載到ElasticSearch中的logs2/sitelog1211中。查看數據:
從目前的調研結果來看,ElasticSearch沒有讓人失望,部署簡單,數據加載方便,聚合功能完備,查詢速度快,目前完全可以滿足我們的實時搜索、統計和OLAP需求,甚至可以作為NOSQL來使用,接下來再做更深入的測試。另外,還有一個開源的SQL for ElasticSearch的框架Crate(crate.io),是在ElasticSearch之上封裝了SQL接口,使得查詢統計更加方便,不過SQL支持的功能有限,使用的ElasticSearch版本較低,后面試用一下再看。
使用Hive讀寫ElasticSearch中的數據 – lxw的大數據田地
http://lxw1234.com/archives/2015/12/585.htm
總結
使用Hive將數據添加到ElasticSearch中還是非常實用的,因為我們的數據都是在HDFS上,通過Hive可以查詢的。
另外,通過Hive可以查詢ES數據,並在其上做復雜的統計與分析,但性能一般,比不上使用ES原生API,亦或是還沒有掌握使用技巧,后面繼續研究。
Elasticsearch as Database - taowen - SegmentFault
https://segmentfault.com/a/1190000003502849
推銷Elasticsearch
時間序列數據庫的秘密(1)—— 介紹時間序列數據庫的秘密(2)——索引時間序列數據庫的秘密(3)——加載和分布式計算
用SQL查詢Elasticsearch
https://github.com/taowen/es-monitor
【01】把 Elasticsearch 當數據庫使:表結構定義【02】把 Elasticsearch 當數據庫使:過濾和排序【03】把 Elasticsearch 當數據庫使:簡單指標【04】把 Elasticsearch 當數據庫使:按字段聚合【05】把 Elasticsearch 當數據庫使:HISTOGRAM聚合【06】把 Elasticsearch 當數據庫使:CASE WHEN 聚合【07】把 Elasticsearch 當數據庫使:聚合后排序【08】把 Elasticsearch 當數據庫使:計算后再聚合【09】把 Elasticsearch 當數據庫使:HAVING與Pipeline Aggregation【10】把 Elasticsearch 當數據庫使:Drill Down 下鑽【11】把 Elasticsearch 當數據庫使:Filter 下鑽【12】把 Elasticsearch 當數據庫使:聚合后再計算【13】把 Elasticsearch 當數據庫使:Join
//es-monitor【用SQL查詢Elasticsearch】
GitHub - taowen/es-monitor: query metric from elasticsearch using sql
https://github.com/taowen/es-monitor
As Console Command
For example
cat << EOF | python -m es_sql http://es_hosts SELECT "user", "oid", max("@timestamp") as value FROM gs_api_track_ GROUP BY "user", "oid" WHERE "@timestamp" > 1454239084000EOF
python -m es_sql
can be es-sql
if pip install es-sql
[
](https://github.com/taowen/es-monitor#as-python-library)As Python Library
pip install es-sql
import es_sqles_sql.execute_sql( 'http://127.0.0.1:9200', 'SELECT COUNT(*) FROM your_index WHERE field=%(param)s', arguments={'param': 'value'})
作者:葡萄喃喃囈語
鏈接:https://www.jianshu.com/p/f3c729c08b54
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
