2013-11-01 76 views
0
Edit: IDE is Intellij IDEA 
     OS: Mac OS X Lion 
     Hadoop: 1.2.1 

編輯:如果文件路徑存在於當前文件系統位置,則可以使用。 因此,當從IDE運行時,如何讓它與hdfs一起工作。從內部IDE運行時出現Hadoop路徑異常

從內部IDE(IntelliJ IDEA的)變得異常運行,見下圖:

在程序參數我指定的「輸入輸出」

當然「輸入」 HDFS中確實存在的數據文件中的IT 。

但代碼試圖從HDFS中訪問目錄形式的本地項目文件系統 位置。

HDFS命令:

James-MacBook-Pro:conf james$ hadoop fs -ls input 
Found 1 items 
-rw-r--r-- 1 james supergroup   15 2013-11-01 07:31 /user/james/input/simple.txt 

的Java源代碼:

public class WordCount extends Configured implements Tool { 
    public static void main(String[] args) throws Exception { 
     int res = ToolRunner.run(new Configuration(), new WordCount(), args); 
     System.exit(res); 
    } 
    @Override 
    public int run(String[] args) throws Exception { 
     if (args.length != 2) { 
      System.err.println("Usage: hadoop jar mrjob-1.0-SNAPSHOT-job.jar" 
             + " [generic options] <in> <out>"); 
      System.out.println(); 
      ToolRunner.printGenericCommandUsage(System.err); 
      return 1; 
     } 
     Job job = new Job(getConf(), "WordCount"); 
     job.setJarByClass(getClass()); 
     job.setMapperClass(TokenizingMapper.class); 
     job.setCombinerClass(IntSumReducer.class); 
     job.setReducerClass(IntSumReducer.class); 
     job.setOutputKeyClass(Text.class); 
     job.setOutputValueClass(IntWritable.class); 
     FileInputFormat.addInputPath(job, new Path(args[0])); 
     FileOutputFormat.setOutputPath(job, new Path(args[1])); 
     boolean success = job.waitForCompletion(true); 
     return success ? 0 : 1; 
    } 
} 

配置:

芯-site.xml中

<configuration> 
<property> 
    <name>fs.default.name</name> 
    <value>hdfs://localhost:9000</value> 
</property> 
</configuration> 

HDFS-site.xml中

<configuration> 
    <property> 
     <name>dfs.replication</name> 
     <value>1</value> 
    </property> 
</configuration> 

mapred-site.xml中

<configuration> 
    <property> 
     <name>mapred.job.tracker</name> 
     <value>localhost:9001</value> 
    </property> 
</configuration> 

參數在IDE:

input output 

例外:

Nov 03, 2013 9:46:00 AM org.apache.hadoop.security.UserGroupInformation doAs 
SEVERE: PriviledgedActionException as:james cause:org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: file:/Users/james/work/projects/hadoop/mrjob/input 
Exception in thread "main" org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: file:/Users/james/work/projects/hadoop/mrjob/input 

我做了什麼錯?

+0

能否請您發佈自己嘗試過的代碼?有人會幫助你。謝謝。 –

+0

@SSaikia_JtheRocker謝謝,代碼包括在請求。 – jakstack

回答

0

從當地的Eclipse,我假設集羣配置Hadoop配置文件(核心-site.xml中)沒有在類路徑中,被捆綁到Hadoop的罐子等

的那些隱藏在類路徑

job.getConf().set('fs.default.name', "hdfs://localhost:9000"); 

你可能還需要配置JobTracker的爲好,這樣的:

您可以通過提交作業之前,手動設置您的代碼中工作配置屬性「fs.default.name」修訂本你不使用本地的:

job.getConf().set('mapred.jobtracker.address', "localhost:9001"); 

請注意,對於您的環境或部署,主機名,端口甚至屬性名稱可能會有所不同。

或者,你可以添加Hadoop的conf文件夾到你的classpath(並確保它具有比Hadoop的罐子更高的優先級)

+0

謝謝@Chris White,我嘗試了兩個建議。在hadoop jar之前,將conf文件夾放在classpath的頂層。它仍然嘗試從本地目錄訪問「輸入輸出」。此外,我嘗試了你建議配置它的代碼行我得到'IOException:連接重置由對等'。謝謝 – jakstack

+0

你可以在你的職位提交中發佈更多代碼嗎? IOException可能是由於客戶端和服務器版本之間的版本不匹配或連接到錯誤的端口號而導致的 –

+0

謝謝@Chris,按要求完成。 – jakstack