Реализация параллельного ввода в hadoop - PullRequest
1 голос
/ 23 июня 2011

Я хотел бы реализовать параллельный ввод в hadoop.Параллельно-для получает под-скелет (это может быть функция типа map ()) и целое число в качестве параметров.субскелет будет выполнен столько раз, сколько указано целочисленным параметром.Результат одного вызова суб-скелета передается в качестве параметра для следующего вызова суб-скелета.В конце концов, результат последнего суб-скелета предоставляется как результат параллельного вычисления.Пример реализации библиотеки Scandium (http://skandium.niclabs.cl/) приведен ниже, и я хотел бы перенести эту реализацию на hadoop.

* @param <P> The input and result type of the {@link Skeleton}.
* */
public class For<P> extends AbstractSkeleton<P,P> {

    Skeleton<P,P> subskel;
    int times;

    /**
     * The constructor.
     * 
     * @param skeleton The skeleton pattern to execute.
     * @param times The number of times to execute the skeleton.
     */
    public For(Skeleton<P,P> skeleton, int times){
        this.subskel=skeleton;
        this.times = times;
    }

    /**
     * The constructor.
     * 
     * @param execute The skeleton pattern to execute.
     * @param times The number of times to execute the {@link Muscle}.
     */
    public For(Execute<P,P> execute, int times){
        this(new Seq<P,P>(execute), times);
    }

    /**
     * {@inheritDoc}
     */
    public void accept(SkeletonVisitor visitor) {
        visitor.visit(this);
    }
}

1 Ответ

0 голосов
/ 28 декабря 2011

Если я правильно понял вопрос, вы хотите выполнить функцию N раз, при этом каждый вызов получает в качестве входных данных выходные данные предыдущего вызова.

Эта цепочка вызовов функций по своей природе является последовательной. Нет (общего) способа распараллелить это.

Единственная надежда, которую я вижу, состоит в том, что если природа функции и входных данных (которые вы не указали) позволяет распараллелить один вызов функции, то вы можете сделать это и выполнить итерацию / создание цепочки на уровне контроля работы. Это значит: если ваш ввод - это набор данных, а ваша функция - это некое преобразование для этого набора данных, выход которого является допустимым вводом для функции, и если это преобразование может быть распараллелено, тогда может быть способ используйте Hadoop здесь.

Если вы можете предоставить более подробную информацию, я буду рад дополнить этот ответ более конкретными предложениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...