从java应用程序启动flume代理

rn0zuynd  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(326)

我已经编写了一个java应用程序,它构建flume配置文件并将它们写入linux设备上的磁盘。然后,应用程序生成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-agent--conf conf-conf-file/root/flumeconfs/consumergroup4.conf--name agent\u consumergroup4-dflume.root.logger=info,console-dflume.monitoring.type=http-dflume.monitoring.port=34548
我知道,嵌入式代理是另一种选择,但这些只适用于avro接收器,这对我不是很有用。感谢你的任何想法。干杯,科尔曼

ryoqjall

ryoqjall1#

对于其他试图弄清楚这一点的人,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);

相关问题