2016-06-06 2 views
0

Мне недавно пришлось выполнять каскадную работу. Раньше у меня никогда не было опыта работы с распределенными системами, поэтому у меня возникли проблемы с пониманием того, как это сделать.Каскадная группа Пример

У меня есть конфигурационный файл, который имеет кучу ведер:

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 Pipe из всех труб (эта часть, о которой я не уверен, нужна ли мне каждая труба, какой должен быть мой фильтр/функция?). Прямо сейчас я создал «Каждая труба», которая разбивает строки на вкладки.

RegexSplitGenerator splitter = new RegexSplitGenerator("\t"); 
Pipe tokenizedPipe = bucket.getBucketName(), new Field("Line"), splitter)); 

3) Создайте группу по трубе, которая объединяет все эти соединительные трубы вместе. Я точно не знаю, как заставить GroupBy трубу, чтобы выбрать только ключевые столбцы, но техника, я использую прямо сейчас:

Pipe finalPipe = new Groupby("Output Pipe", inputPipes, groupFields); 

Так это правильная логика подойти к этой проблеме? Или некоторые из моих шагов являются излишними или неправильными?

Спасибо!

ответ

0

Ваша мысль выглядит хорошо для меня. Шаг 2 можно пропустить, если вы разделяете записи, когда кран читает входные файлы.

Tap inputTap = new Hfs(new TextDelimited("\t"), inputPath); 

Cascading for the Impatient охватывает как реализовать то, что вы хотите достичь, это достойно, чтобы взглянуть на него.

Смежные вопросы