问题标签 [elephantbird]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
68 浏览

hadoop - 在猪 0.16 中加载 json 数据时,大象鸟不存在错误

谁能帮我弄清楚为什么我在使用 REGISTER 注册 jar 文件“象鸟”以加载 json 数据时出错:

我在猪 0.16 的本地模式下工作并得到错误:/home/shanky/Downloads/elephant-bird-hadoop-compat-4.1.jar' 不存在。/home/shanky/Downloads/elephant-bird-pig-4.1.jar' 不存在。

加载json数据的代码:

我尝试通过删除引号并放置 hdfs:// 来替换 REGISTER 语句,但对我没有任何作用。

0 投票
1 回答
106 浏览

json - Apache 猪/Twitter 象鸟 Json 解析器 ClassCastException

我正在尝试使用 Pig 和 Twitter 的大象鸟库解析一个相当简单的 json 文件,但它变成了一个非常痛苦的调试过程。

json具有以下结构:

行示例:

{"oid_id":{"oid":"573239f905474a686e2333f0"},"bookmarks":[{"id":"LEGONINX106W0079264","creator":"player","position":96,"creationdate":{"date ":"2016-12-26T09:37:36.916Z"},"oid_id":{"oid":"5860e4e0ca6baf9032edc0d0"}},{"id":"ONEPERCENTMW0128677","创作者":"玩家","位置":0.08,"creationdate":{"date":"2018-12-18T15:42:33.956Z"},"oid_id":{"oid":"5c191569faf8474953758930"}}],"lastaction":{"date ":"2018-12-18T15:42:28.107Z"},"settings":{"preferredlanguage":"vf","preferredvideoquality":"hd"},"userid":"ocs_32a6ad6dd242d5e3842f9211fd236723_1461773211"}

这是我的代码(受本教程启发: https ://acadgild.com/blog/determining-popular-hashtags-in-twitter-using-pig )

input_table: { myMap: bytearray }

B:{书签:地图[]}

当我们转储上述关系时,我们可以看到所有数据都已成功加载。

([{"oid_id":{"oid":"5860e4e0ca6baf9032edc0d0"},"creator":"player","creationdate":{"date":"2016-12-26T09:37:36.916Z"},"id ":"LEGONINX106W0079264","position":96},{"oid_id":{"oid":"5c191569faf8474953758930"},"creator":"player","creationdate":{"date":"2018-12- 18T15:42:33.956Z"},"id":"ONEPERCENTMW0128677","position":0.08}])

现在我们从书签中提取创建日期、创建者、id 和位置。

C:{ date_fact:bytearray,创建者:bytearray,id:bytearray,位置:bytearray }

转储表会出现以下错误:

猪堆栈跟踪

ERROR 1066: Unable to open iterator for alias C. Backend error : Vertex failed, vertexName=scope-41, vertexId=vertex_1542613138136_6721 88_2_00, diagnostics=[Task failed, taskId=task_1542613138136_672188_2_00_000000, diagnostics=[TaskAttempt=0 错误运行任务时出错(失败):attempt_1542613138136_672188_2_00_000000_0:org.apache.pig.backend.executionengine.ExecException: ERROR 0: Exception while execution (Name: C: Store(hdfs://sandbox/tmp/temp-1543074195/tmp277240455:org .apache.pig.impl.io.InterStorage) - sc ope-40 Operator Key: scope-40): org.apache.pig.backend.executionengine.ExecException: ERROR 0: Exception while execution [POMapLookUp ( Name: POMapLookUp [bytearray ] - scope-28 Operator Key: scope-28) children: null at [null[4,31]]]: java.lang.ClassCastException: java.lan g.String 无法转换为 java.util。org.apache.pig.backend.hadoop.executionengine.tez.plan.operator.POStoreTez.getNextTuple(POStoreTez) 的 org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.processInput(PhysicalOperator.java:315) .java:123) 在 org.apache.pig.backend.hadoop.executionengine.tez.executionengine.tez.runtime.PigProcessor.runPipeline(PigProcessor.java:376) 在 org.apache.pig.backend.hadoop.executionengine.tez.runtime.PigProcessor .run(PigProcessor.java:241) 在 org.apache.tez.runtime.LogicalIOProcessorRuntimeTask.run(LogicalIOProcessorRuntimeTask.java:370) 在 org.apache.tez.runtime.task.TaskRunner2Callable$1.run(TaskRunner2Callable.java:73)在 org.apache.tez.runtime.task.TaskRunner2Callable$1.run(TaskRunner2Callable.java:61) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:422 ) 在 org.apache.hadoop。security.UserGroupInformation.doAs(UserGroupInformation.java:1698) at org.apache.tez.runtime.task.TaskRunner2Callable.callInternal(TaskRunner2Callable.java:61) at org.apache.tez.runtime.task.TaskRunner2Callable.callInternal(TaskRunner2Callable. java:37) 在 org.apache.tez.common.CallableWithNdc.call(CallableWithNdc.java:36) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748) 引起:org.apache.pig。 backend.executionengine.ExecException:错误0:执行[POMapLookUp [byt earray]时出现异常(名称:POMapLookUp [字节数组]-范围28运算符键:范围28)子项:[null [4,31]]]处为空:java.lang .ClassCastException:java.lang。字符串不能在 org.apache.pig.backend.hadoop.executionengine.physicalLayer 的 org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.getNext(PhysicalOperator.java:364) 的 java.util.Map 中转换.relationalOperators.POForEach.processPlan(POForEach.java:406) 在 org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POForEach.getNextTuple(POForEach.java:323) 在 org.apache.pig.backend.hadoop .executionengine.physicalLayer.PhysicalOperator.processInput(PhysicalOperator.java:305) 1,9Toporg.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.processInput(PhysicalOperator.java:305) 1,9Top 上的 relationalOperators.POForEach.getNextTuple(POForEach.java:323)org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.processInput(PhysicalOperator.java:305) 1,9Top 上的 relationalOperators.POForEach.getNextTuple(POForEach.java:323)

0 投票
0 回答
5 浏览

hive - 如何使用 Hive 2.4.6 读取 protobuf 编码的序列文件

我有一个序列文件,其值为 proto3 编码的字节数组。

我查看了大象鸟,它很老,只支持 proto 2.x 版本。https://github.com/kevinweil/elephant-bird

它也停止发布新包,最新的包已经有几年了,所以我认为它不再起作用了。

而且我认为我不是唯一遇到这个问题的人,所以这就是场景。

我写了一个应用程序来生成一个包含每个(键,记录)的序列文件,键无关紧要,值是 proto3 编码的字节数组。当我的应用程序生成文件时,它不知道/不需要知道 proto 的架构,它只接受字节数组,放入序列文件中。

当我想在 Hive 中创建表以便查询数据时,我想向 Hive 提供一些信息,以便 Hive 可以正确创建表。

Elephant-bird 举例如下:https ://github.com/twitter/elephant-bird/wiki/How-to-use-Elephant-Bird-with-Hive#reading-protocol-buffers

但是由于它很旧,对于 Hive 2.4.6 和 proto3,是否有一些等效的解决方案可以让我指出?

谢谢你。