jcascalog/桶切碎阶段在本地工作,但在hadoop中不工作

svujldwt  于 2021-06-04  发布在  Hadoop
关注(0)|答案(0)|浏览(271)

在“大数据”lambda架构书之后,我得到了一个充满类型化thift数据对象的传入目录,其中有一个datapailstructure定义的pail.meta文件
我对这些数据进行了快照:

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

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

structure: DataPailStructure

现在我想把这些数据分割成垂直的分区。在这本书中,我创建了两个pailtap对象,一个用于快照和splitdatastructure,另一个用于新的分解文件夹。

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

/shrested文件夹有一个pail.meta文件 structure: SplitDataPailStructure 按照说明,我执行jcascalog查询以强制减速器:

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

现在,在本地模式下,这个工作正常。在/shrested下创建了一个“临时”子文件夹,并使用预期的“1/1”结构进行了垂直分区。在本地模式下,这将被移到/shrested文件夹中,我可以毫无问题地合并到master。
但在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)

不用说,如果我将切碎的sink结构类型更改为datapailstructure,那么它可以正常工作,但这是一个相当无意义的操作,因为传入文件夹中的一切都是这样。现在还可以,因为我只处理一种数据类型,但这种情况很快就会改变,我需要那个分区。
有什么想法吗?起初我不想在这里发布所有的源代码,但我几乎肯定遗漏了一些东西。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题