Hadoop - 實時查詢Drill


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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM