【问题标题】:Making storage plugin on Apache Drill to HDFS在 Apache Drill 上制作存储插件到 HDFS
【发布时间】:2016-10-09 21:52:10
【问题描述】:

我正在尝试为 Hadoop (hdfs) 和 Apache Drill 制作存储插件。 实际上我很困惑,我不知道为 hdfs:// 连接设置什么端口,以及为位置设置什么。 这是我的插件:

 {
 "type": "file",
 "enabled": true,
 "connection": "hdfs://localhost:54310",
 "workspaces": {
 "root": {
  "location": "/",
  "writable": false,
  "defaultInputFormat": null
},
"tmp": {
  "location": "/tmp",
  "writable": true,
  "defaultInputFormat": null
}
 },
"formats": {
  "psv": {
  "type": "text",
  "extensions": [
    "tbl"
  ],
  "delimiter": "|"
},
"csv": {
  "type": "text",
  "extensions": [
    "csv"
  ],
  "delimiter": ","
},
"tsv": {
  "type": "text",
  "extensions": [
    "tsv"
  ],
  "delimiter": "\t"
},
"parquet": {
  "type": "parquet"
},
"json": {
  "type": "json"
},
"avro": {
  "type": "avro"
   }
 }
}

所以,设置 localhost:54310 是否正确,因为我是通过命令得到的:

 hdfs -getconf -nnRpcAddresses 

还是:8020?

第二个问题,我需要为位置设置什么?我的 hadoop 文件夹位于:

/usr/local/hadoop

,在那里你可以找到 /etc /bin /lib /log ... 那么,我需要在我的数据节点上设置位置吗?

第三个问题。当我连接到 Drill 时,我正在通过 sqlline 而不是连接到我的 zookeeper 上,例如:

  !connect jdbc:drill:zk=localhost:2181 

我的问题是,在我制作了存储插件之后,当我用 zk 连接到 Drill 时,我可以查询 hdfs 文件吗?

如果这是一个菜鸟问题,我很抱歉,但我在互联网上没有找到任何有用的东西,或者至少它没有帮助我。 如果您能向我解释一些事情,我将不胜感激。

【问题讨论】:

    标签: apache hadoop hdfs apache-drill hadoop-plugins


    【解决方案1】:

    根据钻docs

      {
        "type" : "file",
        "enabled" : true,
        "connection" : "hdfs://10.10.30.156:8020/",
        "workspaces" : {
          "root" : {
            "location" : "/user/root/drill",
            "writable" : true,
            "defaultInputFormat" : null
          }
        },
        "formats" : {
          "json" : {
            "type" : "json"
          }
        }
      }
    

    "connection"

    输入namenode服务器地址。

    如果您不确定此地址。 检查core-site.xml 中的fs.default.namefs.defaultFS 属性。

    来到"workspaces"

    您可以在其中保存工作区。在上面的示例中,有一个名为 root 和位置 /user/root/drillworkspace这是您的 HDFS 位置。

    如果/user/root/drillhdfs目录下有文件,可以使用这个工作空间名称查询。

    例如:abc 在这个目录下。

     select * from dfs.root.`abc.csv`
    

    插件创建成功后,就可以开始钻取,开始查询了。

    无论工作空间如何,您都可以查询任何目录。

    假设要查询/tmp/data hdfs目录下的employee.json

    查询是:

    select * from dfs.`/tmp/data/employee.json`
    

    【讨论】:

    • 嗯,同时我做了hadoop多节点集群。但是,我仍然无法查询 hdfs 文件夹。我检查了我的 core-site.xml 和连接站:hdfs://hadoop-master:9000。我进入了 apache Drill dfs 插件,在 connection 中我写了完全相同的行。我还在 hdfs 中创建了一个文件夹,并将他命名为 parquet。当我尝试从钻头查询时,这是我的查询:SELECT * FROM dfs.'/parquet/file.parquet';,我收到此错误:*Query failed: PARSE ERROR: From line 1, column 21 to line 1, column 23: Table 'dfs. /file.parquet' 未找到 [wq9u34jnj1223 on hadoop-master:31010]
    • @Superbrain_bug 检查我答案的最后一行。它的`符号不是单引号(')现在试试:SELECT * FROM dfs.`/parquet/file.parquet`;
    • 是的,我一直在使用他,我错过了输入,我很抱歉另外,当我尝试使用带有 hdfs:// 配置的SHOW FILES 时,我收到这样的错误:查询失败:系统错误:SQL 处理失败。 但是,我可以切换模式..
    • @Superbrain_bug 我假设您的插件名称是 dfs 并且它添加成功。你正在尝试 - use dfs; 然后show files; 对吗?
    • 我确实做到了。问题显然出在 Apache Drill 版本中。我用的是0.8。在我升级到 1.8 之后。它开始工作了。感谢您的宝贵时间!
    【解决方案2】:

    我有类似的问题,Drill 无法读取 dfs 服务器。最后,问题是由namenode端口引起的。 namenode web UI 的默认地址是http://localhost:50070/

    namenode服务器的默认地址是hdfs://localhost:8020/。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多