0

Flume 構成ファイルを作成し、それらを Linux ボックスのディスクに書き込む Java アプリケーションを作成しました。次に、アプリケーションはflumeコマンドを構築し、次のコードでコマンドを実行してflumeエージェントを起動しようとします:

  try {
                    Process p = Runtime.getRuntime().exec(flumeStartCommand.toString());
                    p.waitFor(); 
                    BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
                    String line = null;
                    while ((line = in.readLine()) != null) {
                        System.out.println(line);
                    }                       

Flume コマンドをターミナルから手動で実行すると、問題なく動作します。Java アプリケーションが Flume コマンドを実行しようとしても、何も起こりません。これはクラスパスの問題ですか?

ここでの Flume コマンド: /root/flume-flume-1.6/flume-ng-dist/target/apache-flume-1.6.0-SNAPSHOT-bin/apache-flume-1.6.0-SNAPSHOT-bin/bin/flume-ngエージェント --conf conf --conf-file /root/flumeconfs/ConsumerGroup4.conf --name Agent_ConsumerGroup4 -Dflume.root.logger=INFO,console -Dflume.monitoring.type=http -Dflume.monitoring.port=34548

組み込みエージェントが別のオプションであることは知っていますが、これらは avro シンクでのみ使用できるため、あまり役に立ちません。どんな考えでも感謝します。乾杯、コールマン

4

1 に答える 1

0

これを理解しようとしている人は、flume コマンドを以下のように文字列配列のパラメータに分割する必要があります。

String[] flumeCommand = new String[]{"/root/flume-flume-1.6/flume-ng-dist/target/apache-flume-1.6.0-SNAPSHOT-bin/apache-flume-1.6.0-SNAPSHOT-bin/bin/flume-ng",
                                   "agent",
                                   "--conf",
                                   "conf",
                                   "--conf-file",
                                   _flumeConfigurationDir+Active.getFlumeConfName(),
                                   "--name",
                                   Active.getFlumeAgentName(),
                                   "-Dflume.root.logger=INFO,console",
                                   "-Dflume.monitoring.type=http",
                                   "-Dflume.monitoring.port="+Active.getFlumeMetricsPort(),
};

次に、次のコードを使用します。

ProcessBuilder flumeCommandBuilder = new ProcessBuilder(flumeCommand);
File flumeConfigurationDirFile = new File(_flumeConfigurationDir);
flumeCommandBuilder.directory(flumeConfigurationDirFile);                       
System.out.println("Working Directory: "+ flumeCommandBuilder.directory());
flumeCommandBuilder.redirectErrorStream(true);
Process process = flumeCommandBuilder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null)
    System.out.println("tasklist: " + line);
于 2015-02-17T23:38:08.460 に答える