Запустите простое каскадное приложение в локальном режиме.

Я новичок в Cascading/Hadoop и пытаюсь запустить простой пример в локальном режиме (т.е. в памяти). Пример просто копирует файл:

    import java.util.Properties;

    import cascading.flow.Flow;
    import cascading.flow.FlowConnector;
    import cascading.flow.FlowDef;
    import cascading.flow.local.LocalFlowConnector;
    import cascading.pipe.Pipe;
    import cascading.property.AppProps;
    import cascading.scheme.hadoop.TextLine;
    import cascading.tap.Tap;
    import cascading.tap.hadoop.Hfs;

    public class CascadingTest {

            public static void main(String[] args) {
                Properties properties = new Properties();


                AppProps.setApplicationJarClass( properties, CascadingTest.class );
                FlowConnector flowConnector = new LocalFlowConnector();

                // create the source tap
                Tap inTap = new Hfs( new TextLine(), "D:\\git_workspace\\Impatient\\part1\\data\\rain.txt" );

            // create the sink tap
            Tap outTap = new Hfs( new TextLine(), "D:\\git_workspace\\Impatient\\part1\\data\\out.txt" );

            // specify a pipe to connect the taps
            Pipe copyPipe = new Pipe( "copy" );

            // connect the taps, pipes, etc., into a flow
            FlowDef flowDef = FlowDef.flowDef()
                .addSource( copyPipe, inTap )
                .addTailSink( copyPipe, outTap );

                // run the flow
            Flow flow = flowConnector.connect( flowDef );
            flow.complete();
        }
    }

Вот ошибка, которую я получаю:

09-25-12 11:30:38,114 INFO  - AppProps                     - using app.id: 9C82C76AC667FDAA2F6969A0DF3949C6
Exception in thread "main" cascading.flow.planner.PlannerException: could not build flow from assembly: [java.util.Properties cannot be cast to org.apache.hadoop.mapred.JobConf]
    at cascading.flow.planner.FlowPlanner.handleExceptionDuringPlanning(FlowPlanner.java:515)
    at cascading.flow.local.planner.LocalPlanner.buildFlow(LocalPlanner.java:84)
    at cascading.flow.FlowConnector.connect(FlowConnector.java:454)
    at com.x.y.CascadingTest.main(CascadingTest.java:37)
Caused by: java.lang.ClassCastException: java.util.Properties cannot be cast to org.apache.hadoop.mapred.JobConf
    at cascading.tap.hadoop.Hfs.sourceConfInit(Hfs.java:78)
    at cascading.flow.local.LocalFlowStep.initTaps(LocalFlowStep.java:77)
    at cascading.flow.local.LocalFlowStep.getInitializedConfig(LocalFlowStep.java:56)
    at cascading.flow.local.LocalFlowStep.createFlowStepJob(LocalFlowStep.java:135)
    at cascading.flow.local.LocalFlowStep.createFlowStepJob(LocalFlowStep.java:38)
    at cascading.flow.planner.BaseFlowStep.getFlowStepJob(BaseFlowStep.java:588)
    at cascading.flow.BaseFlow.initializeNewJobsMap(BaseFlow.java:1162)
    at cascading.flow.BaseFlow.initialize(BaseFlow.java:184)
    at cascading.flow.local.planner.LocalPlanner.buildFlow(LocalPlanner.java:78)
    ... 2 more

person Clayton    schedule 25.09.2012    source источник
comment
youtu.be/VP2z8L6vIgQ — это простое видеоруководство отвечает на ваш вопрос   -  person Vinodh Thiagarajan    schedule 26.08.2016


Ответы (3)


Просто чтобы предоставить немного больше деталей: вы не можете смешивать локальные классы и классы Hadoop в Cascading, поскольку они предполагают разные и несовместимые среды. Что происходит в вашем случае, так это то, что вы пытаетесь создать локальный поток с помощью отводов хаупа, последний ожидает JobConf хаупа вместо объекта Properties, используемого для настройки локальных отводов.

Ваш код будет работать, если вы используете cascading.tap.local.FileTap вместо cascading.tap.hadoop.Hfs.

person ericschwarzkopf    schedule 26.09.2012
comment
Могу ли я запустить вышеуказанную программу напрямую в eclipse? - person Shankar; 15.03.2016

Добро пожаловать в Каскад -

Я только что ответил в списке каскадных пользователей, но вкратце проблема заключается в сочетании классов локального режима и режима Hadoop. Этот код имеет LocalFlowConnector, но затем использует краны Hfs.

Когда я возвращаюсь к классам, используемым в учебнике «Нетерпеливый», он работает правильно: https://gist.github.com/3784194

person Paco    schedule 25.09.2012
comment
Спасибо. Я пытаюсь запустить это в локальном режиме - не могли бы вы показать пример того, как это будет выглядеть? - person Clayton; 26.09.2012
comment
Есть некоторый код, иллюстрирующий локальный режим в качестве следующей части серии «Нетерпеливый». cascading.org/category/impatient - person Paco; 18.11.2012
comment
@Pacoid Я задал вопрос. stackoverflow.com/questions/15988091/ посмотрите и ответьте. - person Mohammad Adnan; 13.04.2013

Да, вам нужно использовать LFS (локальная файловая система) вместо HFS (файловая система Hadoop).

Также вы можете протестировать свой код, используя тестовые примеры Junit (с каскадной банкой-юниттестом) в самом локальном режиме/из eclipse.

http://www.cascading.org/2012/08/07/cascading-for-the-impatient-part-6/

person srinivasa rao s    schedule 20.05.2014