1.概述
在現實業務當中,存在這樣的業務場景,需要實時去查詢HDFS上的相關存儲數據,普通的查詢(如:Hive查詢),時延較高。那么,是否存在時延較小的查詢組件。在業界目前較為成熟的有Cloudera的Impala,Apache的Drill,Hortonworks的Stinger。本篇博客主要為大家介紹Drill,其他兩種方式大家可以自行下去補充。
2.Drill Architecture
2.1 Cilent
使用Drill,可以通過以下方式進入到Drill當中,內容如下所示:
- Drill shell:使用客戶端命令去操作
- Drill Web Console:Web UI界面去操作相關內容
- ODBC/JDBC:使用驅動接口操作
- C++ API:C++的API接口
2.2 Drill Query Execution
執行流程如下圖所示:
2.3 Core Modules
核心模塊圖,如下所示:
至於詳細的文字描述,這里就不多做贅述了。大家看圖若是有疑惑的地方,可以去官方網站,查看詳細的文檔描述。[官方文檔]
3.Drill使用
介紹完Drill的架構流程,下面我們可以去使用Drill去做相關查詢操作。安裝Drill的過程比較簡單,這里就不多做詳細的贅述了。首先,去Apache的官網下載Drill的安裝包,這里筆者所使用的本版是drill-1.2.0。可獨立部署在物理機上,不必與Hadoop集群部署在一起。這里需要注意的是,物理機的內存至少留有4G空閑給Drill去使用。不然,在執行查詢操作的時候會內容溢出,查詢Drill的官方文檔,官方給出的解釋是,操作的內容都在內容中完成,不會寫磁盤,除非你強制指明去寫磁盤,但是,一般考慮到響應速度因素,都會在內容中完成。筆者曾試圖降低其內存配置小於4G,然並卵。所以,在使用Drill做查詢時,需要保證物理機空閑內存大於等於4G。
目前,Drill迭代版本比較快速。大家在下載Drill版本的時候,可以多多留意下版本內容變化。
在解壓Drill的壓縮包后,在其conf文件夾下有一個drill-override.conf文件,這里我們在里面添加Web UI的訪問地址,添加的內容我們可以在drill-override-example.conf模版文件中查找對應的內容。添加內容如下所示:
drill.exec: { cluster-id: "drillbits1", zk.connect: "dn1:2181,dn2:2181,dn2:2181", http: { enabled: true, ssl_enabled: false, port: 8047 } }
這里需要注意的是,Drill需要用ZK,這里筆者就直接使用Hadoop集群的ZooKeeper集群連接信息地址。在添加完內容后,可以使用以下命令啟動。
./drillbit.sh start
啟動之后,Web UI界面如下所示:
目前條件有限,只有單台物理機,所以只部署了單台Drill。若是,大家條件允許,可以查看官網文檔去部署Cluster。Drill插件默認是沒有HDFS的,需要我們主動去創建,默認只有以下插件,如下圖所示:
這里,筆者已經配置過HDFS的插件,故上圖出現HDFS插件信息,其配置信息如下所示:
{ "type": "file", "enabled": true, "connection": "hdfs://hadoop.company.com:9000/", "workspaces": { "root": { "location": "/opt/drill", "writable": true, "defaultInputFormat": null } }, "formats": { "csv": { "type": "text", "extensions": [ "csv" ], "delimiter": "," }, "tsv": { "type": "text", "extensions": [ "tsv" ], "delimiter": "\t" }, "parquet": { "type": "parquet" } } }
PS:這里要保證HDFS的地址信息正確。另外,Drill支持的存儲介質較多,大家參考官方文檔去添加對應的存儲介質。
在添加HDFS插件之后,我們可以通過Web UI界面的查詢界面進行文件查詢,也可以使用Drill Shell命令在終端去查詢。查詢方式如下所示:
- Web UI查詢命令:
- Web UI結果如下:
另外,其查詢記錄詳情可以在Profiles模塊下查看。如下圖所示:
- Drill Shell查詢:
./sqlline -u jdbc:drill:zk=dn1,dn2,dn3:2181
- Drill Shell 查詢結果:
4.總結
這里,筆者做過一個性能測試比較,數量級分別為10W,100W,1000W的不重復數據,其響應時間依次遞增。結果如下圖所示:
通過測試結果可以看出,若是數量級在100W時,響應時間平均在秒級別,可以嘗試用Drill去中OLTP業務。若是在1000W以上級別,顯然這個延時做OLTP是難以接受的,這個可以去做OLAP業務。
5.結束語
這篇博客就和大家分享到這里,如果大家在研究學習的過程當中有什么問題,可以加群進行討論或發送郵件給我,我會盡我所能為您解答,與君共勉!