2

次の実行コードで mapreduce ジョブを実行していますが、次の例外が発生し続けます。ジョブを開始する前にフォルダーを削除したことを確認しましたが、機能しません。

コード:

    JobConf jobConf = new JobConf( getConf(), MPTU.class );
    jobConf.setJobName( "MPTU" );

    AvroJob.setMapperClass( jobConf, MPTUMapper.class );
    AvroJob.setReducerClass( jobConf, MPTUReducer.class );

    long milliSeconds = 1000 * 60 * 60;
    jobConf.setLong( "mapred.task.timeout", milliSeconds );

    Job job = new Job( jobConf );
    job.setJarByClass( MPTU.class );

    String paths = args[0] + "," + args[1];
    FileInputFormat.setInputPaths( job, paths );
    Path outputDir = new Path( args[2] );
    outputDir.getFileSystem( jobConf ).delete( outputDir, true );
    FileOutputFormat.setOutputPath( job, outputDir );

    AvroJob.setInputSchema( jobConf, Pair.getPairSchema( Schema.create( Type.LONG ), Schema.create( Type.STRING ) ) );
    AvroJob.setMapOutputSchema( jobConf, Pair.getPairSchema( Schema.create( Type.STRING ),
                                                             Schema.create( Type.STRING ) ) );
    AvroJob.setOutputSchema( jobConf,
                             Pair.getPairSchema( Schema.create( Type.STRING ), Schema.create( Type.STRING ) ) );

    job.setNumReduceTasks( 400 );
    job.submit();
    JobClient.runJob( jobConf );

例外:

13:31:39,268 ERROR UserGroupInformation:1335 - PriviledgedActionException as:msadri (auth:SIMPLE) cause:org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory file:/Users/msadri/Documents/files/linkage_output already exists
Exception in thread "main" org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory file:/Users/msadri/Documents/files/linkage_output already exists
    at org.apache.hadoop.mapred.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:117)
    at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:937)
    at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:896)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332)
    at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:896)
    at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:870)
    at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1319)
    at com.reunify.socialmedia.RecordLinkage.MatchProfileTwitterUserHandler.run(MatchProfileTwitterUserHandler.java:58)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    at com.reunify.socialmedia.RecordLinkage.MatchProfileTwitterUserHandler.main(MatchProfileTwitterUserHandler.java:81)
4

4 に答える 4

0

これも試すことができます

出力フォルダーが既に存在する場合は削除します。

于 2014-04-24T06:53:37.583 に答える
-1

出力ディレクトリ(/Users/msadri/Documents/files/linkage_output)が HDFS ファイル システムに既に作成/存在しているため、上記の例外が発生しています。

map reduce ジョブの実行中に、既に HDFS にある出力ディレクトリに言及することを覚えておいてください。この例外を解決するのに役立つ次の手順を参照してください。

Map Reduce ジョブを実行するには、以下のコマンドのようなコマンドを記述する必要があります

$hadoop jar {name_of_the_jar_file.jar} {package_name_of_jar} {hdfs_file_path_on_which_you_want_to_perform_map_reduce} {output_directory_path}

例:- hadoop jar facebookCrawler.jar com.wagh.wordcountjob.WordCount /home/facebook/facebook-cocacola-page.txt /home/facebook/crawler-output

{output_directory_path} 、つまり /home/facebook/crawler-output に注意してください。HDFS でこのディレクトリ構造を既に作成している場合、Hadoop EcoSystem は「org.apache.hadoop.mapred.FileAlreadyExistsException」という例外をスローします。

解決策:-常に実行時に出力ディレクトリ名を指定します (つまり、Hadoop が自動的にディレクトリを作成します。出力ディレクトリの作成について心配する必要はありません)。上記の例で述べたように、同じコマンドを次の方法で実行できます -

「hadoop jar facebookCrawler.jar com.wagh.wordcountjob.WordCount /home/facebook/facebook-cocacola-page.txt /home/facebook/crawler-output-1」

出力ディレクトリ {crawler-output-1} は、実行時に Hadoop エコ システムによって作成されます。

詳細については、以下を参照してください: - https://jhooq.com/hadoop-file-already-exists-exception/

于 2015-09-08T07:02:27.140 に答える