Hadoop - 實時查詢Drill

weixin_34365417發表於2018-05-22

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.結束語

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

相關文章