2016-09-18 21 views
1

我在主類中使用了下面提到的分佈式緩存代碼。在Hadoop中使用DistributedCache時發生異常

job.addCacheFile(new URI(args[2])); 

下面提到的代碼是在reduce類中。

@Override 
     protected void setup(Reducer<LongWritable, Text, Text, Text>.Context context) throws IOException, InterruptedException { 
      super.setup(context); 
      URI[] paths = context.getCacheFiles(); 
      if (paths.length > 0) { 
       loadDeliveryStatusCodes(paths[0].toString()); 
      } 
     } 
     private void loadDeliveryStatusCodes(String file) { 
      String strRead; 
      BufferedReader reader = null; 
      try { 
       reader = new BufferedReader(new FileReader("./some")); 
       while ((strRead = reader.readLine()) != null) { 
        String splitarray[] = strRead.split(","); 
        deliveryCodesMap.put(splitarray[0].trim(), splitarray[1].trim()); 
       } 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
       try { 
        reader.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

我得到下面提到的異常。

@@@@@@@@/user/DeliveryStatusCodes.txt 1 
java.io.FileNotFoundException: ./some (No such file or directory) 
    at java.io.FileInputStream.open0(Native Method) 
    at java.io.FileInputStream.open(FileInputStream.java:195) 
    at java.io.FileInputStream.<init>(FileInputStream.java:138) 
    at java.io.FileInputStream.<init>(FileInputStream.java:93) 
    at java.io.FileReader.<init>(FileReader.java:58) 
    at com.hadoop.intellipaat.UserSMSDeliveryJob$USERNameSMSStatusCodeMapper.loadDeliveryStatusCodes(UserSMSDeliveryJob.java:95) 

你的幫助將拯救我的一天。 謝謝。

+0

什麼是'ARGS [2]'? –

+0

這是我想用作緩存的hadoop目錄中的txt文件位置。例如。 /user/DeliveryStatusCodes.txt – cody123

回答

1

它看起來像你從你的args[2] .AT你有/user/DeliveryStatusCodes.txt的那一刻結束失蹤#some,但你應該有

/user/DeliveryStatusCodes.txt#some 

沒有它,FileReader逐字尋找./some,這當然將不存在。

或者你可以跳過別名(它是可選的),寫

new FileReader("/user/DeliveryStatusCodes.txt") 
+0

謝謝本。我之前嘗試過,但不知何故當時不工作,現在它正在工作。 我也面臨着減速機的一些問題。它不是結合mappers輸出。 https://github.com/ragnar-lothbrok/hadoop-demo/blob/master/src/main/java/com/hadoop/intellipaat/UserSMSDeliveryJob.java 在減速器[鍵,[值1,值1] [key,[valeu2,value2]]但它應該像[key,[value1,value2]]一樣。你可以幫我嗎。 – cody123

+0

你確定Reducer正在運行嗎?你看到你的系統? –

+0

是的,我也調試和使用sysout。控制就在那邊。 123 456 ######## [用戶-SMS〜001,用戶-SMS〜001] 456 123 ######## [用戶〜湯姆,用戶〜湯姆] 789 123 ######## [user-sms〜003,user-sms〜003] – cody123

相關問題