Hadoop Drill深度剖析

2021-09-07 03:57:26 字數 3303 閱讀 2483

在《hadoop - 實時查詢drill》一文當中,筆者給大家介紹如何去處理實時查詢這樣的業務場景,也是簡略的提了一下如何去實時查詢hdfs,然起相關細節並未說明。今天給大家細說一下相關細節,其中包含:hdfs,hive以及hbase等內容。

在使用drill去做實時查詢,由於其只是乙個中介軟體,其適配的儲存介質是有限制的,目前官方支援以下儲存介質:

"

formats

": ,

"tsv

": ,

"parquet":

}

這裡以csv為例子來說明:

上面的配置,這裡我們也可以進行拓展,比如我們的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"

: ,

這裡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"

: ,

從單詞的意義上可以很直接的讀懂屬性所要表達的意思,這裡就不多做贅述了。由於篇幅問題,這裡就不一一枚舉了。

其他格式檔案與此類似,填寫指定檔案格式,檔案型別,副檔名,文字分隔符即可,其他擴充套件屬性可按需新增。

整合hdfs的plugins,新增內容如下所示:

},  "

formats

": ,

"tsv

": ,

"parquet":

}}

整合hive的plugins,新增內容如下所示:

}

hive --service metastore
這裡需要注意的是,drill當前不支援寫操作到hive表,在將hive表結構中的資料型別做查詢對映時,支援以下型別:

支援的sql型別

hive型別

bigint

bigint

boolean

boolean

varchar

char

date

date

decimal*

decimal

float

float

double

double

integer

int,tinyint,smallint

interval

n/atime

n/an/a

timespamp  (unix的系統時間)

timespamp

timespamp  (jdbc時間格式:yyyy-mm-dd hh:mm:ss)

none

string

varchar

varchar

varbinary

binary

另外,在drill中,不支援以下hive型別:

整合hbase的plugins,新增內容如下所示:

,  "

size.calculator.enabled

": false,

"enabled

": true

}

ps:在使用zookeeper集群連線資訊時,需要注意的是,drill在解析hbase的plugins時,會解析其hbase集群上的zk集群資訊,如:在hbase集群中的zk資訊配置使用的時網域名稱,這裡在配置其hbase的plugins的zk連線資訊也需使用對應的網域名稱,若是直接填寫ip,解析會失敗。保證解析的一致性。

另外,在使用jdbc或odbc去操作drill的時候,連線資訊的使用是需要注意的,直接按照官方給出的連線方式硬套是有問題的,這裡我們修改以下連線資訊。連線分2種情況,一種指定其drill的ip和port,第二種,使用zk的連線方式,如jdbc:drill:zk=dn1,dn2,dn3:2181即可。

ifdef cplusplus深度剖析

時常在cpp的 之中看到這樣的 ifdef cplusplus extern c endif 這樣的 到底是什麼意思呢?首先,cplusplus是cpp中的自定義巨集,那麼定義了這個巨集的話表示這是一段cpp的 也就是說,上面的 的含義是 如果這是一段cpp的 那麼加入extern c 處理其中的 ...

深度剖析ostream

雖然c 學了大半個月了,自己學了解了很多關於c 的知識,大的概念懂了不少,但是還是想說想要徹底的弄懂c 絕非易事。當別人問到乙個很小的知識點些許你都要愣很久,事實告訴我們不能太好高騖遠。為什麼要寫ostream而不是istream,因為當我們自定義型別 student類 的時候,如果需要輸出 stu...

MapReduce 深度剖析

mapreduce 深度剖析 在hadoop2.x大行其道的年代,其優秀的資源管理框架 系統 高可用的分布式儲存系統,備受企業青睞。然因上述之惑,往往不能盡得其中之深意。此篇部落格筆者為大家一一解惑。雖說我們能夠編寫乙個完成mapreduce程式,並執行它。然其執行的細節,我們卻未必清楚,往往初學者...