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.結束語
這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行討論或傳送郵件給我,我會盡我所能為您解答,與君共勉!