Drill:插件的基本配置

当你在一个有多个drill节点的集群中添加或是更新配置的时候,drill会把这个配置变更信息广播到其他的节点,以保持配置的同步。添加,修改配置的时候,并不需要重启任何drillbit节点。

使用Drill的WEB控制台

你可以通过Drill web控制台来修改,添加插件配置。要启动Web console,你需要将Drill shell跑起来。

要创建一个新配置,您需要:

  1. 启动Drill shell[此处应有传送门]
  2. 启动Drill WEB 控制台。[此处应有传送门]
  3. 进到插件tab,输入一个新插件的名字,每个名字都是一个新的存储插件。每个插件的配置都需要有一个全局唯一的名字,名字是区分大小写的。

  1. 点击”create”
  2. 在配置界面,尽可能地从已经有的配置中拷贝再修改JSON配置,这样可以降低json语法错误的风险,在做一些定制修改时,请参照下一章节的存储插件属性表。
  3. 点击”Create”。(译注:原文是”create”,但我认为是笔误,应当是“Update”)。

存储插件的属性配置

下图解释了一个典型的dfs的存储插件的各个key的含义。

属性和概念清单

| 属性 | 示例 | 是否必须 | 说明 |
|—|—|—|—|—| 
| “type” | “file” “hbase” “hive” “mongo” | yes | 必须是一种合法的存储插件的名字 |
| “enabled” | true false | yes | 插件的状态 |
| “connection” | “classpath:///” “file:///” “mongodb://localhost:27017/” “hdfs://” | 依赖于各种具体的实现 | 分布式文件系统的类型,比如HDFS,Amazon S3,或是你本地的文件系统,以及路径名 |
| ”workspace” | null “logs” | no | 一个或多个唯一的命名空间的名字。如果一个名字被使用了多次,只有最后一次是有效的 |
| “workspaces”…”location” | “location”:”/Users/john/mydata/” “location”:”/tmp/” | no | 文件系统上的一个完整路径 |
| “workspaces”…”writable” | true false | no | 如果定义了多次,只有最后一次有效 |
| “workspaces”…”defaultInputFormat” | null “parquet” “csv” json” | no ” 读文件的格式,不考虑扩展名。默认是“Parquet” |
| “formats” | “csv” “psv” “tsv” “parquet” “json” “avro” “maprdb” “sequencefile” | yes | 读取时合法的文件格式。Drill会检测一些文件的格式,其他的需要配置。maprdb的支持是在mapr-drill安装包里提供的 |
| ”formats”…”type” | “text”,”parquet”,”json”,”maprdb”,”avro”,”sequencefile” | yes | 文件格式的类型。你可以把两种格式的,csv ,psv 都定义成“text”类型,但是是不同的分隔符。|
| formats… extensions | [“csv”] | format-dependent | drill能够读取的文件名扩展。|
| formats… delimiter | “\t” “,” | format-dependent | 一个或多个字符的序列,用以在文本文件(例如csv)中做记录的分隔。对于不可见的字符,可以用4位的十六进制(\xXXXX)来指代。|
| formats…quote | “”” | no | 文本文件中,开始或结束一个值用的一个字符 |
| formats…escape | “`” | no | a single character that escapes a quotation mark inside a value |
| formats … comment | “#” | no | 在文本文件中开启一个注释行 |
| formats skipFirstLine | true | no | 在读取文本文件时,包含还是忽略文件头。设置成true,可以避免把文件头当成数据读入 |
| formats extractHeader | true | no | 设置成true,可以把文件头读进来做为列名。在extractHeader=false时,请确保skipFirstLine没有设置成true。 |

使用格式相关属性

你要在存储插件的配置的formats区域设置格式相关的属性,比如skipFirstLine。当设置了text类型的属性时,你需要把sys.options中的exec.storage.enable_new_text_reader 设置成 true ;更多信息,请参照“Text files:CSV,TSV,PSV”章节。

在表参数中使用格式相关属性

从Drill 1.4起,你可以在每一个query中设置格式相关的属性了。To pass parameters to the format plugin ,use the table function syntax:

    select a,b from table({table function name }(parameters));

例如:

    select a, b from table(dfs.`path/to/data.csv`(type => 'text',
fieldDelimiter => ',', extractHeader => true))

大小敏感

在前面提到过,工作空间和存储插件的名字,都是大小写敏感的。
【后面废话太多了 我懒得翻译了。。。】

存储插件的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 文件,放在classpath下。当Drill启动的时候,这个文件就会被加载。

当前用引导方式来添加存储插件的配置时,只有集群中的第一个Drillbit在第一次启动的时候才会生效。这个配置存储在ZooKeeper里,因此就再也不会去读那个 bootstrap-storage-plugins.json 文件了。

当集群起来以后,你就只能通过WEB控制台,或是REST API来添加存储插件的配置了。当然你也可以通过直接把那个插件的json文件上传到zookeeper的安装目录下的/drill路径下来修改Zookeeper里的节点,或者,如果不需要再维护相应的属性,直接删除/drill目录就好了。

如果你通过bootstrap-storage-plugins.json文件加载了一个Hbase 的配置,但是HBase并没有安装,在执行查询的时候可能会觉察到一个延时。你可以在HBase的Config 区块内设置HBase 的客户端超时和重试相关的设定。

发表评论

电子邮件地址不会被公开。 必填项已用*标注