PXF JSON 插件错误
Posted
技术标签:
【中文标题】PXF JSON 插件错误【英文标题】:PXF JSON plugin error 【发布时间】:2016-07-14 09:52:21 【问题描述】:使用 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 TEXT, id_str TEXT, text TEXT, source TEXT, "user.id" INTEGER, “user.location”文本, “坐标。类型”文本, "coordinates.coordinates[0]" 双精度, “coordinates.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') 格式化“自定义”(格式化=“pxfwritable_import”) 将错误记录到 err_json_mytestfile 段拒绝限制 10 行;
当执行上述DDL表创建成功时。之后尝试执行选择查询
select * from ext_json_mytestfile;
但出现错误:-
ERROR: remote component error (500) from 'localhost:51200': type Exception report message java.lang.ClassNotFoundException: org.apache.hawq.pxf.plugins.json.JsonAccessor description 服务器遇到内部错误阻止它从满足这个要求。异常 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
任何帮助将不胜感激。
【问题讨论】:
【参考方案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
回显上述 cmets 的详细信息,以便正确执行步骤以确保 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-profiles 将此 sn-p 添加到最后的 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>
-
通过 Ambari 重启 PXF 服务
【讨论】:
【参考方案2】:您是否将 jar 文件位置添加到 /etc//conf/pxf-public.classpath 中?
【讨论】:
【参考方案3】:你试过了吗:
将 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)【讨论】:
是的,我完成了上述所有步骤。【参考方案4】:可能没有在类路径中添加 json jar。 创建外部表 DDL 将始终成功,因为它只是一个定义。 只有当您运行查询时,HAWQ 才会检查运行时 jar 依赖项。
【讨论】:
【参考方案5】:是的,来自https://bintray.com/big-data/maven/pxf-plugins/view# 的 jar json-pxf-ext-3.0.1.0-1.jar" 的旧包名称为 com.pivotal.*。之前的更新已编辑详细信息以从 Dropbox 下载正确的 jar
【讨论】:
以上是关于PXF JSON 插件错误的主要内容,如果未能解决你的问题,请参考以下文章
错误:在插件“@sanity/base”中找不到“sanity.json”文件
struts2的json插件导致数据返回到页面时发生懒加载错误。
错误“模块根文件夹中缺少文件 google-services.json。没有它,Google 服务插件无法运行”[重复]