1

使用 HDP 2.4 和 HAWQ 2.0

想要将保存在 HDFS 路径中的 json 数据读取到 HAWQ 外部表中?

按照以下步骤将新的 json 插件添加到 PXF 并读取数据。

  1. 从https://bintray.com/big-data/maven/pxf-plugins/view#下载插件“json-pxf-ext-3.0.1.0-1.jar”

  2. 将插件复制到路径 /usr/lib/pxf 中。

  3. 创建外部表

    CREATE EXTERNAL TABLE ext_json_mytestfile ( created_at TEXT, id_str TEXT, text TEXT, source TEXT, "user.id" INTEGER, "user.location" TEXT, "coordinates.type" TEXT, "coordinates.coordinates[0]" DOUBLE PRECISION, "坐标.coordinates[1]" 双精度) 位置 ('pxf://localhost:51200/tmp/hawq_test.json' '?FRAGMENTER=org.apache.hawq.pxf.plugins.hdfs.HdfsDataFragmenter' '&ACCESSOR=org. apache.hawq.pxf.plugins.json.JsonAccessor' '&RESOLVER=org.apache.hawq.pxf.plugins.json.JsonResolver' '&ANALYZER=org.apache.hawq.pxf.plugins.hdfs.HdfsAnalyzer') FORMAT 'CUSTOM ' (FORMATTER='pxfwritable_import') 将错误记录到 err_json_mytestfile 段拒绝限制 10 行;

当执行上述DDL表创建成功。之后尝试执行选择查询

select * from ext_json_mytestfile;

但是出现错误:-

错误:来自'localhost:51200'的远程组件错误(500):类型异常报告消息java.lang.ClassNotFoundException:org.apache.hawq.pxf.plugins.json.JsonAccessor描述服务器遇到内部错误,阻止它完成这个请求。异常 javax.servlet.ServletException: java.lang.ClassNotFoundException: org.apache.hawq.pxf.plugins.json.JsonAccessor (libchurl.c:878) (seg4 sandbox.hortonworks.com:40000 pid=117710) (dispatcher.c :1801) 详细信息:外部表 ext_json_mytestfile

任何帮助将非常感激。

4

5 回答 5

1

似乎引用的 jar 文件的旧包名称为 com.pivotal.*。JSON PXF 扩展仍在孵化中,jar pxf-json-3.0.0.jar 是为 JDK 1.7 构建的,因为单节点 HDB VM 使用 JDK 1.7 并上传到 Dropbox。

https://www.dropbox.com/s/9ljnv7jiin866mp/pxf-json-3.0.0.jar?dl=0

回显上述注释的详细信息,以便正确执行步骤以确保 PXF 服务识别 jar 文件。以下步骤假设 Hawq/HDB 由 Ambari 管理。如果没有,之前更新中提到的手动步骤应该可以工作。

  1. 将 pxf-json-3.0.0.jar 复制到所有 HAWQ 节点(主节点和段)的 /usr/lib/pxf/。

  2. 在 Ambari 管理的 PXF 中,通过 Ambari Admin -> PXF -> Advanced pxf-public-classpath 添加以下行

/usr/lib/pxf/pxf-json-3.0.0.jar

  1. 在 Ambari 管理的 PXF 中,通过 Ambari Admin -> PXF -> Advanced pxf-profiles 将此片段添加到最后的 pxf 配置文件 xml

<profile>
  <name>Json</name>
  <description>
    JSON Accessor</description>
  <plugins>
    <fragmenter>org.apache.hawq.pxf.plugins.hdfs.HdfsDataFragmenter</fragmenter>
    <accessor>org.apache.hawq.pxf.plugins.json.JsonAccessor</accessor>
    <resolver>org.apache.hawq.pxf.plugins.json.JsonResolver</resolver>
  </plugins>
</profile>

  1. 通过 Ambari 重启 PXF 服务
于 2016-07-14T15:56:48.167 回答
0

是的,来自https://bintray.com/big-data/maven/pxf-plugins/view#的 jar json-pxf-ext-3.0.1.0-1.jar" 的旧包名称为 com.pivotal.*。以前的更新已编辑详细信息以从 Dropbox 下载正确的 jar

于 2016-07-15T19:23:22.697 回答
0

可能没有在类路径中添加 json jar。创建外部表 DDL 将始终成功,因为它只是一个定义。只有当您运行查询时,HAWQ 才会检查运行时 jar 依赖项。

于 2016-07-14T17:15:41.123 回答
0

你试过了吗:

  • 将 PXF JSON jar 文件复制到 /usr/lib/pxf
  • 更新 /etc/pxf/conf/pxf-profiles.xml 以包含 Json 插件配置文件(如果尚不存在)
  • (根据上面的评论)更新 /etc/pxf/conf/pxf-public.classpath
  • 通过 Ambari 或命令行重新启动 PXF 服务(sudo service pxf-service restart)
于 2016-07-14T15:29:26.323 回答
0

您是否将 jar 文件位置添加到 /etc//conf/pxf-public.classpath?

于 2016-07-14T14:15:17.060 回答