Hadoop - 實時查詢Drill
https://github.com/smartloli/apache-drill-cn
1.概述
在《Hadoop - 實時查詢Drill》一文當中,筆者給大家介紹如何去處理實時查詢這樣的業務場景,也是簡略的提了一下如何去實時查詢HDFS,然起相關細節並未說明。今天給大家細說一下相關細節,其中包含:HDFS,Hive以及HBase等內容。
2.資料來源和檔案格式
在使用Drill去做實時查詢,由於其只是一箇中介軟體,其適配的儲存介質是有限制的,目前官方支援以下儲存介質:
FS
HDFS
HBase
Hive
RDBMS
MongoDB
MapR-DB
S3
這裡筆者主要給大家介紹HDFS,Hive,HBase這三種介質。另外,Drill支援以下輸入格式的資料來源:
Avro
CSV
TSV
PSV
Parquet
MapR-DB*
Hadoop Sequence Files
2.1 文字型別檔案(CSV,TSV,PSV)
下面筆者給大家介紹文字型別的相關細節,文字型別的使用,有其固定的使用方法,通用配置如下:
"formats": {
"csv": {
"type":"text",
"extensions": [
"txt" ],
"delimiter":"\t" },
"tsv": {
"type":"text",
"extensions": [
"tsv" ],
"delimiter":"\t" },
"parquet": {
"type":"parquet" }}
這裡以CSV為例子來說明:
"csv":表示固定的文字格式
"type":制定檔案的型別,這裡指定為文字型別
"extensions":副檔名為csv
"delimiter":文字內容,每行的分隔符為一個tab佔位符
上面的配置,這裡我們也可以進行擴充,比如我們的HDFS上的檔案格式如下圖所示:
我們要達到以下查詢結果,內容如下所示:
0: jdbc:drill:zk=local> SELECT * FROM hdfs.`/tmp/csv_with_header.csv2`;+------------------------+| columns |+------------------------+| ["hello","1","2","3"] || ["hello","1","2","3"] || ["hello","1","2","3"] || ["hello","1","2","3"] || ["hello","1","2","3"] || ["hello","1","2","3"] || ["hello","1","2","3"] |+------------------------+
那麼,我們可以對其做以下配置,內容如下所示:
"csv": {
"type":"text",
"extensions": [
"csv2" ],
"skipFirstLine":true,
"delimiter":","},
這裡skipFirstLine這個屬性表示忽略一行結果。
另外,同樣用到上面的資料來源,我們要實現以下查詢結果,內容如下所示:
0: jdbc:drill:zk=local> SELECT * FROM hdfs.`/tmp/csv_with_header.csv2`;+-------+------+------+------+| name | num1 | num2 | num3 |+-------+------+------+------+| hello |1|2|3|| hello |1|2|3|| hello |1|2|3|| hello |1|2|3|| hello |1|2|3|| hello |1|2|3|| hello |1|2|3|+-------+------+------+------+
這該如何去修改CSV的屬性,我們新增以下內容即可:
"csv": {
"type":"text",
"extensions": [
"csv2" ],
"skipFirstLine":false,
"extractHeader":true,
"delimiter":","},
從單詞的意義上可以很直接的讀懂屬性所要表達的意思,這裡就不多做贅述了。由於篇幅問題,這裡就不一一列舉了。
其他格式檔案與此類似,填寫指定檔案格式,檔案型別,副檔名,文字分隔符即可,其他擴充套件屬性可按需新增。
3.Plugins
3.1 HDFS
整合HDFS的Plugins,新增內容如下所示:
{
"type":"file",
"enabled":true,
"connection":"hdfs://hdfs.company.com:9000/",
"workspaces": {
"root": {
"location":"/opt/drill",
"writable":true,
"defaultInputFormat":null }
},
"formats": {
"csv": {
"type":"text",
"extensions": [
"txt" ],
"delimiter":"\t" },
"tsv": {
"type":"text",
"extensions": [
"tsv" ],
"delimiter":"\t" },
"parquet": {
"type":"parquet" }
}
}
PS:連線HDFS地址注意要正確。
3.2 Hive
整合Hive的Plugins,新增內容如下所示:
{
"type":"hive",
"enabled":true,
"configProps": {
"hive.metastore.uris":"thrift://hdfs.company.com:9083",
"fs.default.name":"hdfs://hdfs.company.com/",
"hive.metastore.sasl.enabled":"false" }
}
PS:這裡需要指定Hive的metastore的thrift地址,同時也需要指定hdfs的地址。另外,我們需要啟動metastore的thrift服務,命令如下所示:
hive --service metastore
這裡需要注意的是,Drill當前不支援寫操作到Hive表,在將Hive表結構中的資料型別做查詢對映時,支援以下型別:
支援的SQL型別Hive型別
BIGINTBIGINT
BOOLEANBOOLEAN
VARCHARCHAR
DATEDATE
DECIMAL*DECIMAL
FLOATFLOAT
DOUBLEDOUBLE
INTEGERINT,TINYINT,SMALLINT
INTERVALN/A
TIMEN/A
N/ATIMESPAMP (unix的系統時間)
TIMESPAMPTIMESPAMP (JDBC時間格式:yyyy-mm-dd hh:mm:ss)
NoneSTRING
VARCHARVARCHAR
VARBINARYBINARY
另外,在Drill中,不支援以下Hive型別:
LIST
MAP
STRUCT
TIMESTAMP(Unix Epoch format)
UNION
3.3 HBase
整合HBase的Plugins,新增內容如下所示:
{
"type":"hbase",
"config": {
"hbase.zookeeper.quorum":"hbase-zk01,hbase-zk02,hbase-zk03",
"hbase.zookeeper.property.clientPort":"2181" },
"size.calculator.enabled":false,
"enabled":true}
PS:在使用ZooKeeper叢集連線資訊時,需要注意的是,Drill在解析HBase的Plugins時,會解析其HBase叢集上的ZK叢集資訊,如:在HBase叢集中的ZK資訊配置使用的時域名,這裡在配置其HBase的Plugins的ZK連線資訊也需使用對應的域名,若是直接填寫IP,解析會失敗。保證解析的一致性。
4.總結
另外,在使用JDBC或ODBC去操作Drill的時候,連線資訊的使用是需要注意的,直接按照官方給出的連線方式硬套是有問題的,這裡我們修改以下連線資訊。連線分2種情況,一種指定其Drill的IP和PORT,第二種,使用ZK的連線方式,如jdbc:drill:zk=dn1,dn2,dn3:2181即可。
相關文章
- Drill官網文件翻譯二:Drill查詢的執行
- Hadoop-Drill深度剖析Hadoop
- PostgreSQL實時高效搜尋-全文檢索、模糊查詢、正則查詢、相似查詢、ADHOC查詢SQL
- 大資料的實時查詢大資料
- 查詢hadoop引數變數Hadoop變數
- 如何實現模糊查詢時間段
- 全球主要城市實時天氣查詢
- 北京實時公交查詢——Flutter 入坑實戰Flutter
- 【DG】Real-time query實時查詢操作
- Oracle11DATA GUARD實時應用加實時查詢功能Oracle
- 使用 NineData 實現備份集的實時查詢
- 基於Redis、Storm的實時資料查詢實踐RedisORM
- 關聯查詢時使用樹狀查詢要小心
- JPA時間段查詢
- MySQL查詢時間段MySql
- Kibana查詢耗時
- 線性時間查詢
- SQL時間段查詢SQL
- sqlserver查詢時不加鎖SQLServer
- Access查詢實現Mysql的 limit 查詢MySqlMIT
- 如何使用 Milvus 向量資料庫實現實時查詢資料庫
- 概括SQL Server實時查詢Oracle資料庫WSSQLServerOracle資料庫
- 各大招聘網站資訊實時查詢瀏覽網站
- 查詢演算法集:順序查詢、二分查詢、插值查詢、動態查詢(陣列實現、連結串列實現)演算法陣列
- SSH:hiberate實現資料的查詢(單查詢和全查詢)
- Mysql 查詢時間轉換MySql
- 查詢時LONG列追加資訊
- Drill官網文件翻譯四Drill的效能
- 例項講解hadoop中的map/reduce查詢(python語言實現HadoopPython
- 例項講解hadoop中的hive查詢(python語言實現)薦HadoopHivePython
- jQuery 條件搜尋查詢 實時取值 升降序排序jQuery排序
- 各大招聘網站資訊實時查詢瀏覽【二】網站
- 實時查詢最耗CPU資源的SQL語句SQL
- Laravel Query Builder 複雜查詢案例:子查詢實現分割槽查詢 partition byLaravelUI
- Oracle日期時間範圍查詢Oracle
- Mysql中查詢系統時間MySql
- RAC:在子查詢使用gv$檢視,有時查詢不出資料
- 【搜尋引擎】Solr全文檢索近實時查詢優化Solr優化