使用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。
创建外部表
CREATE EXTERNAL TABLE ext_json_mytestfile(created_at TEXT, id_str TEXT,text TEXT,source TEXT," user.id"整数, " user.location"文本, " coordinates.type"文本, " coordinates.coordinates [0]"双精度, " coordinates.coordinates [1]"双精度) LOCATION(' pxf:// localhost:51200 / tmp / hawq_test.json' '分段器= org.apache.hawq.pxf.plugins.hdfs.HdfsDataFragmenter' '&安培;访问器= org.apache.hawq.pxf.plugins.json.JsonAccessor' '&安培; RESOLVER = org.apache.hawq.pxf.plugins.json.JsonResolver' '&安培; ANALYZER = org.apache.hawq.pxf.plugins.hdfs.HdfsAnalyzer') 格式'定制' (FORMATTER =' pxfwritable_import') LOG ERRORS INTO err_json_mytestfile SEGMENT REJECT LIMIT 10 ROWS;
执行上述DDL表时成功创建。之后尝试执行选择查询
select * from ext_json_mytestfile;
但是得到错误: -
错误:远程组件错误(500)来自' localhost:51200':类型异常报告消息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) DETAIL:外部表ext_json_mytestfile
非常感谢任何帮助。
答案 0 :(得分: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管理。如果没有,之前更新中提到的手动步骤应该有效。
将pxf-json-3.0.0.jar复制到所有HAWQ节点(主节点和段)的/ usr / lib / pxf /。
在Ambari管理的PXF中,通过Ambari Admin添加以下行 - > PXF - >高级pxf-public-classpath
/usr/lib/pxf/pxf-json-3.0.0.jar
<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 :(得分:0)
您是否将jar文件位置添加到/etc//conf/pxf-public.classpath?
答案 2 :(得分:0)
你有没有尝试过:
答案 3 :(得分:0)
可能没有在classpath中添加json jar。 创建外部表DDL将始终成功,因为它只是一个定义。 只有在运行查询时,HAWQ才会检查运行时jar依赖项。
答案 4 :(得分:0)
是的,jar json-pxf-ext-3.0.1.0-1.jar&#34;来自https://bintray.com/big-data/maven/pxf-plugins/view#的旧包名称为com.pivotal。*。上一次更新已编辑,详细信息从dropbox下载正确的jar