2012-09-25 48 views
4

我是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 
+0

https://youtu.be/VP2z8L6vIgQ - 這個簡單的視頻教程回答你的問題 –

回答

3

只是爲了提供更詳細一點:你不能在層疊搭配本地和Hadoop類,他們承擔不同和不兼容的環境。你的情況發生的是你試圖用Hadoop水龍頭創建一個本地流量,後者希望使用hadoop JobConf而不是用於配置本地水龍頭的Properties對象。

如果您使用cascading.tap.local.FileTap而不是cascading.tap.hadoop.Hfs,您的代碼將起作用。

+0

我可以直接在eclipse中運行上面的程序嗎? – Shankar

1

歡迎級聯 -

我剛纔已經回答了層疊用戶列表中,但在短暫的問題是混合使用本地和Hadoop模式類。此代碼具有LocalFlowConnector,但隨後使用Hfs輕敲。

當我恢復到在「不耐煩」教程中使用的類,它正常運行: https://gist.github.com/3784194

+0

感謝。我試圖在本地模式下運行 - 你能展示一個這樣的例子嗎? – Clayton

+0

得到了一些代碼,以說明本地模式作爲「不耐煩」系列中的下一部分。 http://www.cascading.org/category/impatient/ – pacoid

+0

@Pacoid我發佈了一個問題。 http://stackoverflow.com/questions/15988091/getting-cascading-tap-hadoop-io-multiinputsplit-class-not-found-exception-while 請看看和回答。 –

相關問題