我正在尝试将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。
答案 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 其他人则不言自明。