使用 HDP 2.4 和 HAWQ 2.0
想要将保存在 HDFS 路径中的 json 数据读取到 HAWQ 外部表中?
按照以下步骤将新的 json 插件添加到 PXF 中并读取数据。
-
下载插件"json-pxf-ext-3.0.1.0-1.jar"https://bintray.com/big-data/maven/pxf-plugins/view#
-
将插件复制到路径/usr/lib/pxf 中。
-
创建外部表
创建外部表ext_json_mytestfile(created_at文本,id_str文本、文本文本、源文本、"user.id"整数,"用户位置"文本,"坐标类型"文本,"坐标.坐标[0]" 双精度,"坐标.坐标[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')格式"自定义"(格式化程序="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 说明 服务器遇到内部错误,阻止它完成此请求。 exception 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
任何帮助将不胜感激。
似乎引用的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 管理。如果没有,前面更新中提到的手动步骤应该可以工作。
-
将 pxf-json-3.0.0.jar 复制到所有 HAWQ 节点(主节点和段节点)的/usr/lib/pxf/。
-
在 Ambari 托管的 PXF 中,通过 Ambari Admin -> PXF -> Advanced pxf-public-classpath 添加以下行
usr/lib/pxf/pxf-json-3.0.0.jar
- 在 Ambari 托管的 PXF 中,通过 Ambari Admin -> PXF -> Advanced pxf 配置文件,将此代码段添加到您的 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>
- 通过安巴里重新启动 PXF 服务
您是否将 jar 文件位置添加到/etc//conf/pxf-public.classpath?
你试过吗:
- 将 PXF JSON jar 文件复制到/usr/lib/pxf 更新/etc/pxf/
- conf/pxf-profiles.xml 以包含 Json 插件配置文件(如果尚不存在)
- (根据上面的评论)更新/etc/pxf/conf/pxf-public.classpath
- 通过 Ambari 或命令行重新启动 PXF 服务(sudo 服务 PXF 服务重新启动)
可能没有在类路径中添加json jar。创建外部表 DDL 将始终成功,因为它只是一个定义。仅当您运行查询时,HAWQ 才会检查运行时 jar 依赖项。
是的,来自 https://bintray.com/big-data/maven/pxf-plugins/view# 的 jar json-pxf-ext-3.0.1.0-1.jar" 的旧包名称为 com.pivotal.*。之前的更新已编辑详细信息,以从保管箱下载正确的jar