1

マニフェストファイルに事前定義されたエントリポイントを持つjarファイルがあります。そして、それは正常に実行することができます。

hadoop jar hadoop-test-1.0.2.jar -write -nrFiles 1 -fileSize 10
TestDFSIO.0.0.4
12/06/11 21:35:09 INFO fs.TestDFSIO: nrFiles = 1
12/06/11 21:35:09 INFO fs.TestDFSIO: fileSize (MB) = 10
12/06/11 21:35:09 INFO fs.TestDFSIO: bufferSize = 1000000
12/06/11 21:35:09 INFO fs.TestDFSIO: creating control file: 10 mega bytes, 1 files
12/06/11 21:35:09 INFO fs.TestDFSIO: created control files for: 1 files
12/06/11 21:35:10 INFO mapred.FileInputFormat: Total input paths to process : 1
12/06/11 21:35:10 INFO mapred.JobClient: Running job: job_201206110904_0029
12/06/11 21:35:11 INFO mapred.JobClient:  map 0% reduce 0%
12/06/11 21:35:25 INFO mapred.JobClient:  map 100% reduce 0%
12/06/11 21:35:37 INFO mapred.JobClient:  map 100% reduce 100%
...

今私の懸念は、オプションなしでjarを実行する方法です。つまり、呼び出したいだけです。

hadoop jar hadoop-test-1.0.2.jar

"-write -nrFiles 1 -fileSize 10"jarファイル内のようにどういうわけか引数を定義する必要があります。しかし、どのように?

マニフェストファイルでどのように定義できますか?自分のクラスを生成して、これらのパラメーターを使用してテストクラスを開始できることを知っています。しかし、他の回避策はありますか?

驚いたことに:引数を使用して必要なクラスを呼び出すクラスを定義しました。

実行試行:

hadoop jar hadoop-test-1.0.2.jar 
RunJar jarFile [mainClass] args...

クラスの名前をargとすると、機能します。

hadoop jar hadoop-test-1.0.2.jar Start
TestDFSIO.0.0.4
12/06/12 01:05:11 INFO fs.TestDFSIO: nrFiles = 10
12/06/12 01:05:11 INFO fs.TestDFSIO: fileSize (MB) = 1000
12/06/12 01:05:11 INFO fs.TestDFSIO: bufferSize = 1000000
12/06/12 01:05:11 INFO fs.TestDFSIO: creating control file: 1000 mega bytes, 10 files
12/06/12 01:05:11 INFO fs.TestDFSIO: created control files for: 10 files
12/06/12 01:05:11 INFO mapred.FileInputFormat: Total input paths to process : 10
12/06/12 01:05:12 INFO mapred.JobClient: Running job: job_201206110904_0033
...

マニフェストの内容:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 20.1-b02 (Sun Microsystems Inc.)
Main-Class: Start

Name: org/apache/hadoop
Implementation-Title: Hadoop
Implementation-Version: 1.0.2
Implementation-Vendor: Apache

Start.javaの内容:

import org.apache.hadoop.fs.TestDFSIO;
public class Start {

        public static void main(String[] args) throws Exception{
                String [] myargs  = {"-write","-nrFiles","10","-fileSize","1000"};

                TestDFSIO.main(myargs);

        }
}

私は何が間違っているのですか?元のクラスTestDFIOを実行するために引数なしでjarファイルを使用して開始を実行できないのはなぜですか?どうも!

4

2 に答える 2

1

いいえ。新しいmainメソッドを作成するか、別の場所 (構成ファイル、環境変数など) から引数を取得できます。

その部分を実行するラッピング シェル スクリプトを作成することもできます。

なぜこれを行う必要があるのか​​ を知らなければ、実用的なアイデアを提供することはより困難になります.

于 2012-06-12T11:47:31.277 に答える
1

それをしてはいけない。代わりに、必要な引数を使用して元のメインを呼び出す引数なしの別のメイン クラスを作成してみることができます。

于 2012-06-12T11:44:22.440 に答える