3

タイトルで説明されているように、Hadoopプログラムを実行すると(そしてローカルモードでデバッグすると)、次のようになります。

1.テストデータの10個のcsv行はすべて、マッパー、パーティショナー、およびマップステップの後に呼び出されるRawComperator(OutputKeyComparatorClass)で正しく処理されます。ただし、OutputValueGroupingComparatorClassの関数とReduceClassの関数は後で実行されません。

2.私のアプリケーションは次のようになります。(スペースの制約のため、構成パラメーターとして使用したクラスの実装は省略します。誰かがそれらを含むアイデアを得るまで):

public class RetweetApplication {

    public static int DEBUG = 1;
    static String INPUT = "/home/ema/INPUT-H";
    static String OUTPUT = "/home/ema/OUTPUT-H "+ (new Date()).toString();

    public static void main(String[] args) {
    JobClient client = new JobClient();
    JobConf conf = new JobConf(RetweetApplication.class);


    if(DEBUG > 0){
        conf.set("mapred.job.tracker", "local");
        conf.set("fs.default.name", "file:///");
        conf.set("dfs.replication", "1");
    }


    FileInputFormat.setInputPaths(conf, new Path(INPUT));   
    FileOutputFormat.setOutputPath(conf, new Path(OUTPUT));


    //conf.setOutputKeyClass(Text.class);
    //conf.setOutputValueClass(Text.class);
    conf.setMapOutputKeyClass(Text.class);
    conf.setMapOutputValueClass(Text.class);

    conf.setMapperClass(RetweetMapper.class);
    conf.setPartitionerClass(TweetPartitioner.class);
    conf.setOutputKeyComparatorClass(TwitterValueGroupingComparator.class);
    conf.setOutputValueGroupingComparator(TwitterKeyGroupingComparator.class);
    conf.setReducerClass(RetweetReducer.class);

    conf.setOutputFormat(TextOutputFormat.class);

    client.setConf(conf);
    try {
        JobClient.runJob(conf);
    } catch (Exception e) {
        e.printStackTrace();
    }
    }
}

3.次のコンソール出力が表示されます(フォーマットについては申し訳ありませんが、どういうわけかこのログは正しくフォーマットされません):

12/05/22 03:51:05 INFO mapred.MapTask:io.sort.mb = 100 12/05/22 03:51:05 INFO mapred.MapTask:データバッファー= 79691776/99614720

12/05/22 03:51:05 INFO mapred.MapTask:レコードバッファ= 262144/327680

12/05/22 03:51:06 INFO mapred.JobClient:map 0%reduce 0%

12/05/22 03:51:11 INFO mapred.LocalJobRunner:file:/ home / ema / INPUT-H / tweets:0 + 967 12/05/22 03:51:12 INFO mapred.JobClient:map 39%reduce 0%

12/05/22 03:51:14 INFO mapred.LocalJobRunner:file:/ home / ema / INPUT-H / tweets:0 + 967 12/05/22 03:51:15 INFO mapred.MapTask:マップのフラッシュを開始しています出力

12/05/22 03:51:15 INFO mapred.MapTask:流出が終了しました0

12/05/22 03:51:15 INFO mapred.Task:Task:attempt_local_0001_m_000000_0が完了しました。そして、コミットの過程にあります

12/05/22 03:51:15 INFO mapred.JobClient:map 79%reduce 0%

12/05/22 03:51:17 INFO mapred.LocalJobRunner:file:/ home / ema / INPUT-H / tweets:0 + 967

12/05/22 03:51:17 INFO mapred.LocalJobRunner:file:/ home / ema / INPUT-H / tweets:0 + 967

12/05/22 03:51:17 INFO mapred.Task:タスク'attempt_local_0001_m_000000_0'が完了しました。

12/05/22 03:51:17 INFO mapred.Task:ResourceCalculatorPluginの使用:org.apache.hadoop.util.LinuxResourceCalculatorPlugin@35eed0

12/05/22 03:51:17 INFO mapred.ReduceTask:ShuffleRamManager:MemoryLimit = 709551680、MaxSingleShuffleLimit = 177387920

12/05/22 03:51:17 INFO mapred.ReduceTask:attempt_local_0001_r_000000_0スレッドが開始されました:ディスク上のファイルをマージするためのスレッド

12/05/22 03:51:17 INFO mapred.ReduceTask:attempt_local_0001_r_000000_0スレッド待機中:ディスク上のファイルをマージするためのスレッド

12/05/22 03:51:17 INFO mapred.ReduceTask:attempt_local_0001_r_000000_0スレッドが開始されました:メモリファイルにマージするためのスレッド

12/05/22 03:51:17 INFO mapred.ReduceTask:attempt_local_0001_r_000000_0すでに0が進行中の別の1つのマップ出力が必要12/05/22 03:51:17 INFO mapred.ReduceTask:attempt_local_0001_r_000000_0スケジュールされた0出力( 0つの遅いホストと0つの重複ホスト)

12/05/22 03:51:17 INFO mapred.ReduceTask:attempt_local_0001_r_000000_0スレッドが開始されました:マップ完了イベントをポーリングするためのスレッド

12/05/22 03:51:18 INFO mapred.JobClient:map 100%reduce 0%12/05/22 03:51:23 INFO mapred.LocalJobRunner:reduce> copy>

太字のマークされた線は、この時点から際限なく繰り返されます。

4.マッパーがすべてのタプルを確認した後、多くのオープンプロセスがアクティブになります。

RetweetApplication (1) [Remote Java Application]    
    OpenJDK Client VM[localhost:5002]   
        Thread [main] (Running) 
        Thread [Thread-2] (Running) 
        Daemon Thread [communication thread] (Running)  
        Thread [MapOutputCopier attempt_local_0001_r_000000_0.0] (Running)  
        Thread [MapOutputCopier attempt_local_0001_r_000000_0.1] (Running)  
        Thread [MapOutputCopier attempt_local_0001_r_000000_0.2] (Running)  
        Thread [MapOutputCopier attempt_local_0001_r_000000_0.4] (Running)  
        Thread [MapOutputCopier attempt_local_0001_r_000000_0.3] (Running)  
        Daemon Thread [Thread for merging on-disk files] (Running)  
        Daemon Thread [Thread for merging in memory files] (Running)    
        Daemon Thread [Thread for polling Map Completion Events] (Running)  

Hadoopが入力ディレクトリに入れるよりも多くの出力をマッパーから期待する理由はありますか(ログの太字でマークされた行を参照)?すでに述べたように、すべての入力がマッパー/パーティショナーなどで適切に処理されることをデバッグしました。

更新 Chrisの助けを借りて(コメントを参照)、私のプログラムが期待どおりにlocalModeで開始されていないことがわかりました。クラスのisLocal変数はに設定されていますが、そうあるべきです。ReduceTaskfalsetrue

スタンドアロンモードを有効にするために設定する必要がある3つのオプションが正しい方法で設定されているため、これが発生する理由は私にはまったくわかりません。驚いたことに、設定が無視されたので、「通常のディスクから読み取る」設定はありませんでした。これは、モードとプロトコルが結合されているとlocal思ったため、非常に奇妙なことです。localfile:///

デバッグ中に、デバッグビューで評価して変数をtrueにReduceTask設定し、プログラムの残りの部分を実行しようとしました。それはうまくいきませんでした、そしてこれはスタックトレースです:isLocalisLocal=true

12/05/22 14:28:28 INFO mapred.LocalJobRunner: 
12/05/22 14:28:28 INFO mapred.Merger: Merging 1 sorted segments
12/05/22 14:28:28 INFO mapred.Merger: Down to the last merge-pass, with 1 segments left of total size: 1956 bytes
12/05/22 14:28:28 INFO mapred.LocalJobRunner: 
12/05/22 14:28:29 WARN conf.Configuration: file:/tmp/hadoop-ema/mapred/local/localRunner/job_local_0001.xml:a attempt to override final parameter: fs.default.name;  Ignoring.
12/05/22 14:28:29 WARN conf.Configuration: file:/tmp/hadoop-ema/mapred/local/localRunner/job_local_0001.xml:a attempt to override final parameter: mapred.job.tracker;  Ignoring.
12/05/22 14:28:30 INFO ipc.Client: Retrying connect to server: master/127.0.0.1:9001. Already tried 0 time(s).
12/05/22 14:28:31 INFO ipc.Client: Retrying connect to server: master/127.0.0.1:9001. Already tried 1 time(s).
12/05/22 14:28:32 INFO ipc.Client: Retrying connect to server: master/127.0.0.1:9001. Already tried 2 time(s).
12/05/22 14:28:33 INFO ipc.Client: Retrying connect to server: master/127.0.0.1:9001. Already tried 3 time(s).
12/05/22 14:28:34 INFO ipc.Client: Retrying connect to server: master/127.0.0.1:9001. Already tried 4 time(s).
12/05/22 14:28:35 INFO ipc.Client: Retrying connect to server: master/127.0.0.1:9001. Already tried 5 time(s).
12/05/22 14:28:36 INFO ipc.Client: Retrying connect to server: master/127.0.0.1:9001. Already tried 6 time(s).
12/05/22 14:28:37 INFO ipc.Client: Retrying connect to server: master/127.0.0.1:9001. Already tried 7 time(s).
12/05/22 14:28:38 INFO ipc.Client: Retrying connect to server: master/127.0.0.1:9001. Already tried 8 time(s).
12/05/22 14:28:39 INFO ipc.Client: Retrying connect to server: master/127.0.0.1:9001. Already tried 9 time(s).
12/05/22 14:28:39 WARN conf.Configuration: file:/tmp/hadoop-ema/mapred/local/localRunner/job_local_0001.xml:a attempt to override final parameter: fs.default.name;  Ignoring.
12/05/22 14:28:39 WARN conf.Configuration: file:/tmp/hadoop-ema/mapred/local/localRunner/job_local_0001.xml:a attempt to override final parameter: mapred.job.tracker;  Ignoring.
12/05/22 14:28:39 WARN mapred.LocalJobRunner: job_local_0001
java.net.ConnectException: Call to master/127.0.0.1:9001 failed on connection exception: java.net.ConnectException: Connection refused
    at org.apache.hadoop.ipc.Client.wrapException(Client.java:1095)
    at org.apache.hadoop.ipc.Client.call(Client.java:1071)
    at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:225)
    at $Proxy1.getProtocolVersion(Unknown Source)
    at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:396)
    at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:379)
    at org.apache.hadoop.hdfs.DFSClient.createRPCNamenode(DFSClient.java:119)
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:238)
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:203)
    at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:89)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1386)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:66)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1404)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:254)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:123)
    at org.apache.hadoop.mapred.ReduceTask$OldTrackingRecordWriter.<init>(ReduceTask.java:446)
    at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:490)
    at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:420)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:260)
Caused by: java.net.ConnectException: Connection refused
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:592)
    at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
    at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:489)
    at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:434)
    at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:560)
    at org.apache.hadoop.ipc.Client$Connection.access$2000(Client.java:184)
    at org.apache.hadoop.ipc.Client.getConnection(Client.java:1202)
    at org.apache.hadoop.ipc.Client.call(Client.java:1046)
    ... 17 more
12/05/22 14:28:39 WARN conf.Configuration: file:/tmp/hadoop-ema/mapred/local/localRunner/job_local_0001.xml:a attempt to override final parameter: fs.default.name;  Ignoring.
12/05/22 14:28:39 WARN conf.Configuration: file:/tmp/hadoop-ema/mapred/local/localRunner/job_local_0001.xml:a attempt to override final parameter: mapred.job.tracker;  Ignoring.
12/05/22 14:28:39 INFO mapred.JobClient: Job complete: job_local_0001
12/05/22 14:28:39 INFO mapred.JobClient: Counters: 20
12/05/22 14:28:39 INFO mapred.JobClient:   File Input Format Counters 
12/05/22 14:28:39 INFO mapred.JobClient:     Bytes Read=967
12/05/22 14:28:39 INFO mapred.JobClient:   FileSystemCounters
12/05/22 14:28:39 INFO mapred.JobClient:     FILE_BYTES_READ=14093
12/05/22 14:28:39 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=47859
12/05/22 14:28:39 INFO mapred.JobClient:   Map-Reduce Framework
12/05/22 14:28:39 INFO mapred.JobClient:     Map output materialized bytes=1960
12/05/22 14:28:39 INFO mapred.JobClient:     Map input records=10
12/05/22 14:28:39 INFO mapred.JobClient:     Reduce shuffle bytes=0
12/05/22 14:28:39 INFO mapred.JobClient:     Spilled Records=10
12/05/22 14:28:39 INFO mapred.JobClient:     Map output bytes=1934
12/05/22 14:28:39 INFO mapred.JobClient:     Total committed heap usage (bytes)=115937280
12/05/22 14:28:39 INFO mapred.JobClient:     CPU time spent (ms)=0
12/05/22 14:28:39 INFO mapred.JobClient:     Map input bytes=967
12/05/22 14:28:39 INFO mapred.JobClient:     SPLIT_RAW_BYTES=82
12/05/22 14:28:39 INFO mapred.JobClient:     Combine input records=0
12/05/22 14:28:39 INFO mapred.JobClient:     Reduce input records=0
12/05/22 14:28:39 INFO mapred.JobClient:     Reduce input groups=0
12/05/22 14:28:39 INFO mapred.JobClient:     Combine output records=0
12/05/22 14:28:39 INFO mapred.JobClient:     Physical memory (bytes) snapshot=0
12/05/22 14:28:39 INFO mapred.JobClient:     Reduce output records=0
12/05/22 14:28:39 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=0
12/05/22 14:28:39 INFO mapred.JobClient:     Map output records=10
12/05/22 14:28:39 INFO mapred.JobClient: Job Failed: NA
java.io.IOException: Job failed!
    at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1265)
    at uni.kassel.macek.rtprep.RetweetApplication.main(RetweetApplication.java:50)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:156)

このスタックトレースは、実行中にポート9001が使用されていることを示しているので、xml-configurationファイルがlocal-java-made設定(テストに使用)を上書きしていると思います。これは、何度も読んでいるので奇妙です。インターネットでは、そのJavaがxml構成を上書きします。これを修正する方法が誰にもわからない場合は、すべてのconfiguration-xmlを単純に消去してみてください。おそらくこれで問題は解決します...

新しいアップデート

Hadoopsconfフォルダーの名前を変更すると、コピー機の待機の問題が解決され、プログラムは最後まで実行されます。HADOOP_OPTS残念ながら、正しく設定されていても、実行はデバッガーを待機しなくなりました。

RESUME:これは構成の問題のみです。XMLは(一部の構成パラメーターでは)JAVAを上書きする可能性があります。誰かがデバッグを再度実行する方法を知っていれば、それは完璧ですが、今のところ、このスタックトレースが表示されなくなってうれしいです!;)

クリス、お時間を割いていただきありがとうございます。

4

1 に答える 1

2

申し訳ありませんが、これまでに見たことはありませんが、次のログ ステートメントで示されているように、conf xml ファイルで 2 つの重要な構成プロパティが final に設定されているようです。

12/05/22 14:28:29 WARN conf.Configuration: file:/tmp/hadoop-ema/mapred/local/localRunner/job_local_0001.xml:a attempt to override final parameter: fs.default.name;  Ignoring.
12/05/22 14:28:29 WARN conf.Configuration: file:/tmp/hadoop-ema/mapred/local/localRunner/job_local_0001.xml:a attempt to override final parameter: mapred.job.tracker;  Ignoring.

これは、ジョブをローカル モードで実際に実行することができず、ローカル モードで開始されますが、リデューサーがシリアル化されたジョブ構成を読み取り、ローカル モードではないと判断し、タスク トラッカー ポートを介してマップ出力を取得しようとしたことを意味します。

あなたの修正はconfフォルダーの名前を変更することであると言いました-これにより、デフォルトでhadoopがデフォルト構成に戻り、これら2つのプロパティは「最終」としてマークされません

于 2012-06-01T02:43:42.933 に答える