【发布时间】:2016-10-06 12:25:09
【问题描述】:
我最近不得不做一个级联工作。我以前从来没有使用过分布式系统,所以我在理解如何使它工作时遇到了一些麻烦。
我有一个包含一堆桶的配置文件:
Bucket{
bucket_name: "X"
input_path: "s3://..."
key_column: 1
value_column: 2
multivalue: false
default_value:
type_column: int
}
...
基本上,我所要做的就是使用它来收集一堆文件(每个文件都像一个 tsv 表,将 url 键映射到某个值),然后按 url 分组。
所以基本上,轮廓是这样的:
A --> |group |
B --> |by |--> output
C --> |url |
我想知道以下逻辑是否正确: 1)我需要为每个桶创建一个水龙头,即
Tap inputTap = new GlobHfs(new TextLine(), bucket.getInputPath());
2)我需要从所有管道中创建一个 EACH 管道(这部分我不确定,我是否需要每个管道,我的过滤器/功能应该是什么?)。现在,我创建了一个每个管道,它按制表符拆分行。
RegexSplitGenerator splitter = new RegexSplitGenerator("\t");
Pipe tokenizedPipe = bucket.getBucketName(), new Field("Line"), splitter));
3) 创建一个 groupby 管道,将所有这些标记化管道组合在一起。我不确定如何强制 groupby 管道仅选择关键列,但我现在使用的技术是:
Pipe finalPipe = new Groupby("Output Pipe", inputPipes, groupFields);
那么这是解决这个问题的正确逻辑吗?还是我的某些步骤是多余的或不正确的?
谢谢!
【问题讨论】:
标签: java hadoop distributed cascading