1

Linux マシンで Storm Topology を実行するための Maven プロジェクトをコンパイルしています。

以下はBoltクラスのメソッドです。ここでは、バッファリングされたリーダーが入力からデータを収集してファイルに書き込むファイルを実行時に作成したいと考えています。

タプル入力オブジェクト: 書き込まれるデータが含まれます。
/root/data/javacode/top_output.csv : ファイル名。
すべての IO パッケージは既にコードにインポートされています。

public void execute(Tuple input, BasicOutputCollector collector) {
    String sentence = input.getString(0);
    String[] process = sentence.split(" ");
    File file = new File("/root/data/jcode/top_output.csv");
    if (!file.exists()) {
        file.createNewFile();
    }
    FileWriter fw = new FileWriter(file.getAbsoluteFile());  // line no. 36
    BufferedWriter bw = new BufferedWriter(fw);  
    for (String proc : process) {
        proc = proc.trim();
        if (!proc.isEmpty()) {
            collector.emit(new Values(proc));
            bw.write(proc);    // line no. 42
        }
    }
    bw.close();
}

mvn パッケージを使用してプロジェクトをコンパイルするたびに、コンパイル エラーが発生します。

[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ lgassStorm ---
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 4 source files to /root/data/lgassStorm/target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /root/data/lgassStorm/src/main/java/lgaas/bolts/DataNormalizer.java:[36,19] error: unreported exception IOException; must be caught or declared to be thrown
[ERROR] /root/data/lgassStorm/src/main/java/lgaas/bolts/DataNormalizer.java:[42,13] error: unreported exception IOException; must be caught or declared to be thrown
[INFO] 2 errors

Filewriter 関連のコードにコメントを付けるたびに、正常に動作します。行番号は上記のコードに記載されています。コードのどこが間違っていますか?

4

2 に答える 2

0

関数の実行が IOException をスローするように指定する必要があります。

public void execute(Tuple input, BasicOutputCollector collector) throws IOException {

または、例外をキャッチできます。これは、IO 操作の 1 つが失敗した場合です。

于 2013-03-06T11:01:41.433 に答える
0

IOException をスローするか、コードを TryCatch ブロックに囲みます。

public void execute(Tuple input, BasicOutputCollector collector){
try{
your code...
}catch (IOException e){
e.printStackTrace ();
}
}
于 2013-03-06T11:12:34.780 に答える