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

时间:2013-09-13 18:16:45

标签: 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  

在脚本中这很简单。如果程序已经运行,我可以再次调用这些启动脚本没有问题,程序将只输出它们已经运行和它们的pids。

我正在试图弄清楚是否有办法在java程序中执行此操作。 在Hadoop / ZooKeeper / Accumulo API中是否有一些隐藏命令可以运行Class.run(configs)并且它会启动或尝试启动Hadoop / ZooKeeper / Accumulo?

我的下一步是我可以使用jsch来运行ssh命令,但这似乎我并没有真正抛弃bash脚本。

修改:executing hadoop example jar files from java 在这个问题中,提问者正在使用Runtime执行启动命令。这是启动Hadoop的合适方式吗?如果有命令在那里使用,我宁愿使用本机Hadoop API。

1 个答案:

答案 0 :(得分: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 其他人则不言自明。