2

我正在尝试将 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 脚本抛在后面。

编辑:从java执行hadoop示例jar文件 在这个问题中,提问者正在使用运行时执行启动命令。这是启动 Hadoop 的合适方式吗?如果有要使用的命令,我宁愿使用本机 Hadoop API。

4

1 回答 1

1

在我看来,没有任何特定的 API 可以启动 Hadoop 服务或 Zookeeper 服务。以类org.apache.hadoop.hdfs.server.namenode.NameNode为例

虽然您可以使用上述类main()中的来启动服务。

从脚本中,Hadoop 使用类似以下的内容来启动服务,使用参数调用不同类的 main() 函数。

nohup $_JAVA_EXEC -Dproc_$COMMAND $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@" > "$_HADOOP_DAEMON_OUT" 2>&1 < /dev/null

其中, CLASS = org.apache.hadoop.hdfs.server.namenode.NameNode 其他是不言自明的。

于 2013-09-13T19:02:27.157 回答