Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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程序启动Hadoop、Accumulo和ZooKeeper?_Java_Bash_Hadoop_Apache Zookeeper_Accumulo - Fatal编程技术网

如何从java程序启动Hadoop、Accumulo和ZooKeeper?

如何从java程序启动Hadoop、Accumulo和ZooKeeper?,java,bash,hadoop,apache-zookeeper,accumulo,Java,Bash,Hadoop,Apache Zookeeper,Accumulo,我正在尝试将bash脚本转换为java程序。在此脚本中,我运行Hadoop、Zookeeper和Accumulo的启动脚本: /hadoop/bin/start_all.sh /zookeeper/bin/zkServer.sh start /accumulo/bin/start_all.sh 这在脚本中很简单。如果程序已经在运行,我可以再次调用这些启动脚本,没有问题,程序将简单地输出它们已经在运行和它们的PID 我试图找出是否有一种方法可以在java程序中实现这一点Hadoop/

我正在尝试将bash脚本转换为java程序。在此脚本中,我运行Hadoop、Zookeeper和Accumulo的启动脚本:

/hadoop/bin/start_all.sh  
/zookeeper/bin/zkServer.sh start  
/accumulo/bin/start_all.sh  
这在脚本中很简单。如果程序已经在运行,我可以再次调用这些启动脚本,没有问题,程序将简单地输出它们已经在运行和它们的PID

我试图找出是否有一种方法可以在java程序中实现这一点Hadoop/ZooKeeper/Accumulo API中是否有隐藏的命令,我可以在其中运行Class.run(configs),它将启动或尝试启动Hadoop/ZooKeeper/Accumulo?

我的下一步可能是使用jsch来运行ssh命令,但这似乎并不是真的将bash脚本抛在脑后

编辑:
在这个问题中,询问者正在使用运行时执行start命令。这是启动Hadoop的合适方式吗?如果有命令可以使用,我宁愿使用原生Hadoop API。

在我看来,没有任何特定的API来启动Hadoop服务或Zookeeper服务。 以类为例

尽管您可以使用上述类中的
main()
启动服务

在脚本中,Hadoop使用以下类似的方法来启动服务,使用参数调用不同类的main()函数

nohup $_JAVA_EXEC -Dproc_$COMMAND $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@" > "$_HADOOP_DAEMON_OUT" 2>&1 < /dev/null
nohup$\u JAVA\u EXEC-Dproc\$COMMAND$JAVA\u HEAP\u MAX$HADOOP\u OPTS-classpath“$classpath”$CLASS“$@”>“$\u HADOOP\u DAEMON\u OUT”2>&1
其中,CLASS=org.apache.hadoop.hdfs.server.namenode.namenode
还有一些是不言自明的。

我忍不住想知道为什么。。。介意解释一下吗?@DonaldMiner我正在编写一个程序,让非技术人员轻松启动这些程序。Cloudera经理/Ambari?木偶?这里好像有点不对劲。。。非技术人员可能不应该启动和停止hadoop服务。@DonaldMiner这主要是为了一个单节点实例。最终,管理层可能会由您提到的某个服务运行。谢谢你的理智检查。:)实际上,我想要一个从Java程序中运行的解决方案,我已经有了在脚本中运行的代码。这看起来不像是你扔进Java程序的东西。。。我很抱歉在接受后退出。我错误地阅读了您的解决方案。好吧,我不介意,但问题是,据我所知,您没有特定的API,正如我已经提到的。我的意图是展示Hadoop实际上是如何启动namenode的。因此,如果Hadoop本身正在使用上面的类来启动它,那么可能没有其他方法了。从任何其他Java类都可以实现这一切,但问题是您需要参数。我可能错了,你是对的。我想我将使用RuntimeException在main()中启动这些进程,使用典型的终端命令,因为我可以等待进程完成。谢谢你的更新。刚刚添加了更多信息。我可能没有正确地说明main()函数在org.apache.hadoop.hdfs.server.namenode.namenode类中,hadoop使用该类启动传递参数的namenode服务。