在現實業務當中,存在這樣的業務場景,須要實時去查詢HDFS上的相關存儲數據,普通的查詢(如:Hive查詢),時延較高。那麼,是否存在時延較小的查詢組件。在業界目前較爲成熟的有Cloudera的Impala,Apache的Drill,Hortonworks的Stinger。本篇博客主要爲你們介紹Drill,其餘兩種方式你們能夠自行下去補充。html
使用Drill,能夠經過如下方式進入到Drill當中,內容以下所示:java
執行流程以下圖所示:sql
核心模塊圖,以下所示:shell
至於詳細的文字描述,這裏就很少作贅述了。你們看圖如果有疑惑的地方,能夠去官方網站,查看詳細的文檔描述。[官方文檔]apache
介紹完Drill的架構流程,下面咱們能夠去使用Drill去作相關查詢操做。安裝Drill的過程比較簡單,這裏就很少作詳細的贅述了。首先,去Apache的官網下載Drill的安裝包,這裏筆者所使用的本版是drill-1.2.0。可獨立部署在物理機上,沒必要與Hadoop集羣部署在一塊兒。這裏須要注意的是,物理機的內存至少留有4G空閒給Drill去使用。否則,在執行查詢操做的時候會內容溢出,查詢Drill的官方文檔,官方給出的解釋是,操做的內容都在內容中完成,不會寫磁盤,除非你強制指明去寫磁盤,可是,通常考慮到響應速度因素,都會在內容中完成。筆者曾試圖下降其內存配置小於4G,然並卵。因此,在使用Drill作查詢時,須要保證物理機空閒內存大於等於4G。架構
目前,Drill迭代版本比較快速。你們在下載Drill版本的時候,能夠多多留意下版本內容變化。oracle
在解壓Drill的壓縮包後,在其conf文件夾下有一個drill-override.conf文件,這裏咱們在裏面添加Web UI的訪問地址,添加的內容咱們能夠在drill-override-example.conf模版文件中查找對應的內容。添加內容以下所示:ide
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集羣鏈接信息地址。在添加完內容後,可使用如下命令啓動。oop
./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命令在終端去查詢。查詢方式以下所示:
另外,其查詢記錄詳情能夠在Profiles模塊下查看。以下圖所示:
./sqlline -u jdbc:drill:zk=dn1,dn2,dn3:2181
這裏,筆者作過一個性能測試比較,數量級分別爲10W,100W,1000W的不重複數據,其響應時間依次遞增。結果以下圖所示:
經過測試結果能夠看出,如果數量級在100W時,響應時間平均在秒級別,能夠嘗試用Drill去中OLTP業務。如果在1000W以上級別,顯然這個延時作OLTP是難以接受的,這個能夠去作OLAP業務。
這篇博客就和你們分享到這裏,若是你們在研究學習的過程中有什麼問題,能夠加羣進行討論或發送郵件給我,我會盡我所能爲您解答,與君共勉!