插件基础设置
当你在集群中安装了多个 Drill,你在一个 Drill 节点上添加或更新存储插件配置,Drill 会广播信息给其他的 Drill 节点,来同步存储插件配置。当你新增和更新存储插件时,你不需要重启任何的 Drillbit 服务。
使用 Drill Web 控制台
你可以使用 Drill Web 控制台来更新和新增一个新的存储插件配置。启动 Web 控制台时,确保 Drill 的服务是正常运行的。
创建一个新的存储插件:
- 打开 Drill 服务。
- 打开 Web 控制台。
在 Storage 栏,输入名称到 “New Storage Plugin” 模块下。每个注册的插件名字必须唯一。名字是区分大小写的。
注意:URL 依赖于你的安装和配置。
- 点击“Create”。
- 在配置时,使用 JSON 格式去修改复制一个已存在的配置。使用复制已存在的配置,来减少 JSON 编码的出错。使用存储插件属性表,在下节会指导大家去使用。
- 点击“Create”。
存储插件属性
下图展示了基础存储插件关键的属性:
属性和定义列表
下表描述了你可以配置的存储插件的相关属性。
属性 | 示例名称 | 是否需要 | 描述 |
---|---|---|---|
“type” | “file”,”hbase”,”hive”,”mongo” | 是 | 可用的存储插件类型名称。 |
“enabled” | true,false | 是 | 存储插件状态。 |
“connection” | “classpath:///“,”file:///“,”mongodb://localhost:27017/“,”hdfs://“ | 实现依赖 | 分布式文件系统类型,例如 HDFS,Amazon S3,或在你的文件系统中的文件,以及地址/路径。 |
“workspaces” | null,”logs” | 否 | 一个或多个工作区间名称。如果工作区间被一个或多个使用,仅仅最新定义的那个有效。 |
“workspaces”… “location” | “location”:”/Users/johndoe/mydata”,”location”:”/tmp” | 否 | 在文件系统中的全路径。 |
“workspaces”… “writable” | true,false | 否 | 一个或多个唯一的工作区间。如果定义了不止一次,最后一次的工作区间名称将覆盖其他。 |
“workspaces”… “defaultInputFormat” | null,”parquet”,”csv”,”json” | 否 | 格式化读取的数据,默认是 “parquet”。 |
“formats” | “psv”,”csv”,”tsv”,”parquet”,”json”,”avro”,”maprdb”,”sequencefile” | 是 | 一个或多个可用的文件格式。Drill 检测某些文件的格式;有些则需要配置。maprdb 格式在 mapr-drill 安装包中。 |
“formats”… “type” | “text”,”parquet”,”json”,”maprdb”,”avro”,”sequencefile” | 是 | 格式化类型。你可以定义两种格式,csv 和 psv 当作 “Text” 类型,但有不同的分隔符。 |
“formats”… “extensions” | [“csv”] | 格式依赖 | 扩展 Drill 能够读取的文件名称。 |
“formats”… “delimiter” | “\t”,”,” | 格式依赖 | 一系列的字符去分割文本文件,例如 CSV。使用 4 位进制代码语法\uxxxx为非打印分隔符。 |
“formats”… “quote” | “”” | 否 | 在一个分隔的文本文件中,用一个单引号开始/结束一个值。 |
“formats”… “escape” | “`” | 否 | 用单引号来标记一个值。 |
“formats”… “comment” | “#” | 否 | 用 “#” 来注释分割的文本文件。 |
“formats”… “skipFirstLine” | true | 否 | 设置 true,避免读取数据中的头。 |
“formats”… extractHeader | true | 否 | 当读取分割数据时,设置 true 来读取头来作为列名。否则,设置 false 将会跳过第一行。 |
使用格式属性
在存储插件的 formats
区域,你可以设置格式属性,例如 skipFirstLine。当在文本文件中设置属性时,例如 CSV,你需要设置 sys.options
属性,exec.storage.enable_new_text_reader
为 true(默认)。
使用格式属性作为表函数的参数
在 Drill 1.4 和之后的版本,你还可以在每个查询基础上设置上面定义的格式属性。通过参数格式化插件,使用表函数语法如下:
select a, b from table({table function name}(parameters))
这里 table function name
是表名,参数是格式化的名称,其他参数是插件接受的字段。
例如,读取一个 CSV 文件和解析头信息:
select a, b from table(dfs.`path/to/data.csv`(type => 'text',
fieldDelimiter => ',', extractHeader => true))
使用其他属性
配置其他属性,例如在 hbase
插件中的 size.calculator.enabled
和在 hive
插件中的 configProps
。
区分大小写
正如前面提到的,工作区和存储插件名称都是区分大小写的。例如,下面的查询使用存储插件名称 dfs
和工作区名称 clicks
。当你在 SQL 语句中使用 dfs.clicks
,定义如下:
0: jdbc:drill:> USE dfs.clicks;
例如,使用大写字母在存储插件中的查询和工作区间使用小写字母是不会工作的。举个例子,在存储插件中,你定义的是 DFS
,然而你在工作区间中,你使用 dfs
,这是不会工作的。
存储插件 REST API
如果你需要增长存储插件配置,而又不想使用 Web 浏览器,你可以使用 Drill REST API 去创建一个存储插件配置。使用 POST 请求和通过两个属性:
- name存储插件的名称。
- config作为进入 Web 控制台的属性设置。
例如,以下命令创建一个存储插件名称叫 “myplugin” 用于读取文件和未知类型,在本地文件系统的根目录下:
curl -X POST -H "Content-Type: application/json" -d '{"name":"myplugin", "config": {"type": "file", "enabled": false, "connection": "file:///", "workspaces": { "root": { "location": "/", "writable": false, "defaultInputFormat": null}}, "formats": null}}' http://localhost:8047/storage/myplugin.json
该示例并未启用 HTTPS。
引导一个存储插件
REST API 推荐用以编程方式添加存储插件配置 Drill。用于在分布式环境中使用另一个只是引导。你可以创建一个 bootstrap-storage-plugins.json
文件包括在类路径中启动 Drill 时。当 Drill 启动,存储插件会加载配置文件。
当前,引导存储插件配置工作仅仅当集中首次启动的第一个 Drillbit。配置存储在 ZooKeeper 中,防止 Drill 再次从 bootstrap-storage-plugins.json
文件中获取。
集群启动之后,你可以使用 REST API 或 Drill Web 控制台去增加存储插件配置。另外,你可以进去到 ZooKeeper 目录 /drill 中修改 JSON 文件,并上传到插件,或者删除 /drill 目录。
如果你加载 HBase 存储插件使用 bootstrap-storage-plugins.json
文件,并且 HBase 没有安装,在执行查询时,您可能会遇到延迟。配置 HBase 客户端超时,重新设置配置块在 HBase 插件配置中。