Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java应用程序启动Flume代理_Java_Apache_Hadoop_Flume_Flume Ng - Fatal编程技术网

从Java应用程序启动Flume代理

从Java应用程序启动Flume代理,java,apache,hadoop,flume,flume-ng,Java,Apache,Hadoop,Flume,Flume Ng,我已经编写了一个Java应用程序,它构建flume配置文件并将它们写入Linux设备上的磁盘。然后,应用程序生成flume命令,并尝试通过在以下代码中运行该命令来启动flume代理: try { Process p = Runtime.getRuntime().exec(flumeStartCommand.toString()); p.waitFor(); Buffere

我已经编写了一个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);
                    }                       
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);
如果我使用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文件/root/flumeconfs/ConsumerGroup4.conf-name-agent\u ConsumerGroup4-Dflume.root.logger=INFO,console-Dflume.monitoring.type=http-Dflume.monitoring.port=34548

我知道嵌入式代理是另一种选择,但它们仅适用于avro接收器,这对我来说不是很有用。感谢你的任何想法。 干杯
Colman

对于其他试图解决此问题的人,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(),
};
然后使用以下代码:

  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);
                    }                       
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);

你可以把它放在脚本中,用javayup调用这个脚本,我也试过这么做。创建一个名为flume.sh的脚本,第一行启动bash shell,第二行执行上述查询。仍然没有启动代理,只是挂起…@colman如果我想在远程flume主机而不是本地计算机上执行此命令,该怎么办?