Cascalog / Paul脱落阶段在本地工作但不在Hadoop中工作

时间:2014-03-10 16:57:13

标签: hadoop cascalog lambda-architecture

"Big Data" Lambda Architecture book之后,我有一个传入的目录,里面装满了所有类型的Thift Data对象,并且定义了一个DataPailStructure pail.meta文件

我拍摄了这些数据的快照:

Pail snapshotPail = newDataPail.snapshot(PailFactory.snapshot);

传入的文件和元数据文件是重复的,pail.meta文件也有

structure: DataPailStructure

现在我想要粉碎这些数据,将其拆分为垂直分区。从本书开始,我创建了两个PailTap对象,一个用于Snapshot和SplitDataStructure,一个用于新的 Shredded 文件夹。

PailTap source = dataTap(PailFactory.snapshot);
PailTap sink = splitDataTap(PailFactory.shredded);

/ Shredded 文件夹中有一个包含structure: SplitDataPailStructure的pail.meta文件

按照说明执行JCascalog查询以强制执行reducer:

Api.execute(sink, new Subquery(data).predicate(reduced, empty, data));

现在,在本地模式下,这很好用。在/ Shredded下创建了一个“临时”子文件夹,并使用预期的“1/1”结构进行垂直分区。在本地模式下,然后将其移至/ Shredded文件夹,我可以合并并合并到主服务器。

但是在Hadoop中运行,此时它失败了,出现错误:

cascading.tuple.TupleException: unable to sink into output identifier: /tmp/swa/shredded 
...
Caused by: java.lang.IllegalArgumentException: 1/1/part-000000 is not valid with the pail structure {structure=com.hibu.pail.SplitDataPailStructure, args={}, format=SequenceFile} --> [1, _temporary, attempt_1393854491571_12900_r_000000_1, 1, 1] at com.backtype.hadoop.pail.Pail.checkValidStructure(Pail.java:563)

毋庸置疑,如果我将Shredded Sink结构类型更改为DataPailStructure,那么它工作正常,但这是一个相当无意义的操作,因为所有内容都与Incoming文件夹中的一样。现在没关系,因为我只使用一种数据类型,但这很快就会改变,我需要这个分区。

有什么想法吗?我最初不想在这里发布我的所有源代码,但我几乎肯定错过了一些东西。

0 个答案:

没有答案