在《hadoop - 實時查詢drill》一文當中,筆者給大家介紹如何去處理實時查詢這樣的業務場景,也是簡略的提了一下如何去實時查詢hdfs,然起相關細節並未說明。今天給大家細說一下相關細節,其中包含:hdfs,hive以及hbase等內容。
在使用drill去做實時查詢,由於其只是乙個中介軟體,其適配的儲存介質是有限制的,目前官方支援以下儲存介質:
"這裡以csv為例子來說明:formats
": ,
"tsv
": ,
"parquet":
}
上面的配置,這裡我們也可以進行拓展,比如我們的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
"] |
+------------------------+
"這裡skipfirstline這個屬性表示忽略一行結果。csv"
: ,
另外,同樣用到上面的資料來源,我們要實現以下查詢結果,內容如下所示:
0: jdbc:drill:zk=local> select * from hdfs.`/tmp/csv_with_header.csv2`;這該如何去修改csv的屬性,我們新增以下內容即可:+-------+------+------+------+
| 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"
: ,
其他格式檔案與此類似,填寫指定檔案格式,檔案型別,副檔名,文字分隔符即可,其他擴充套件屬性可按需新增。
整合hdfs的plugins,新增內容如下所示:
}, "整合hive的plugins,新增內容如下所示:formats
": ,
"tsv
": ,
"parquet":
}}
}
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,新增內容如下所示:
, "ps:在使用zookeeper集群連線資訊時,需要注意的是,drill在解析hbase的plugins時,會解析其hbase集群上的zk集群資訊,如:在hbase集群中的zk資訊配置使用的時網域名稱,這裡在配置其hbase的plugins的zk連線資訊也需使用對應的網域名稱,若是直接填寫ip,解析會失敗。保證解析的一致性。size.calculator.enabled
": false,
"enabled
": true
}
另外,在使用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程式,並執行它。然其執行的細節,我們卻未必清楚,往往初學者...