启动Storm各个后台进程

2019-03-02 23:46|来源: 网路

      启动Storm的所有后台进程。和Zookeeper一样,Storm也是快速失败(fail-fast)的系统,这样Storm才能在 任意时刻被停止,并且当进程重启后被正确地恢复执行。这也是为什么Storm不在进程内保存状态的原因,即使Nimbus或Supervisors被重 启,运行中的Topologies不会受到影响。

以下是启动Storm各个后台进程的方式:

Nimbus: 在Storm主控节点上运行”bin/storm nimbus >/dev/null 2>&1 &”启动Nimbus后台程序,并放到后台执行;

Supervisor: 在Storm各个工作节点上运行”bin/storm supervisor >/dev/null 2>&1 &”启动Supervisor后台程序,并放到后台执行;

UI: 在Storm主控节点上运行”bin/storm ui >/dev/null 2>&1 &”启动UI后台程序,并放到后台执行,启动后可以通过http://{nimbus host}:8080观察集群的worker资源使用情况、Topologies的运行状态等信息。

注意事项:

启动Storm后台进程时,需要对conf/storm.yaml配置文件中设置的storm.local.dir目录具有写权限。

Storm后台进程被启动后,将在Storm安装部署目录下的logs/子目录下生成各个进程的日志文件。

经测试,Storm UI必须和Storm Nimbus部署在同一台机器上,否则UI无法正常工作,因为UI进程会检查本机是否存在Nimbus链接。

为了方便使用,可以将bin/storm加入到系统环境变量中。

至此,Storm集群已经部署、配置完毕,可以向集群提交拓扑运行了。

向集群提交任务

1. 启动Storm Topology:

  1. storm jar allmycode.jar org.me.MyTopology arg1 arg2 arg3 

其中,allmycode.jar是包含Topology实现代码的jar包,org.me.MyTopology的main方法是Topology的入口,arg1、arg2和arg3为org.me.MyTopology执行时需要传入的参数。

2. 停止Storm Topology:

  1. storm kill {toponame} 

其中,{toponame}为Topology提交到Storm集群时指定的Topology任务名称。


转自:http://www.cnblogs.com/likai198981/p/3757123

相关问答

更多
  • 首先:你是否证实/ usr / bin / php是PHP的正确路径? Php不喜欢这样跑。 与stdin有关。 尝试nohup: exec("nohup /usr/bin/php -f /path/to/beta.php > logfile.txt 2> errorfile.txt &"); 使用-f其他任何看起来像标志的东西都会转到PHP,所以如果你想将“-x”选项传递给你的脚本,那么你必须 /usr/bin/php -f /path/to/beta.php -- -x 如果没有,文件名前的选项 ...
  • 注意 :这个答案比2009年发布时更少。使用其他答案中显示的subprocess模块现在建议在文档中 (请注意,子流程模块为产生新流程和检索结果提供了更强大的功能;使用该模块优于使用这些功能。) 如果您希望您的进程在后台启动,您可以使用system()并以与您的shell脚本相同的方式调用它,也可以spawn它: import os os.spawnl(os.P_DETACH, 'some_long_running_command') (或者,您可以尝试使用便携式os.P_NOWAIT标志)。 请参阅这里 ...
  • 一般来说,php不会实现线程。 但是有一个ZF级可能适合你: http://framework.zend.com/manual/en/zendx.console.process.unix.overview.html ZendX_Console_Process_Unix允许开发人员产生一个对象作为一个新进程,并且在控制台环境中并行执行多个任务。 通过它的特定性质,它只能用于基于nix的系统,如Linux,Solaris,Mac / OSx等。 另外,该组件需要运行shmop_ ,pcntl_ *和posix_ ...
  • 尝试这个: private void MainForm_KeyUp(object sender, KeyEventArgs e) { Log("MainForm_KeyUp"); if (e.Control && e.KeyCode == Keys.P) { Process.Start("chrome.exe", "http://www.your_website_url.com"); } } ...
  • 正如Jonathan所提到的(并且我已独立验证),如果没有在后台运行单独的观察程序进程/守护进程,则无法执行此操作。 As Jonathan mentioned (and as I have verified independently), there is no way to do this without having a separate watcher process/daemon running in the background.
  • 您可能需要查看Flask-Testing库,它支持运行烧瓶服务器,因此您可以对其进行selenium测试。 You may want to look at the Flask-Testing library, which has support for running your flask server so you can do selenium tests against it.
  • 看看这篇文章 。 我引用:“这是一个更新和改进的代码版本,允许您在代码中选择调用应用程序是否等待其他程序关闭,然后继续或只是将新启动的程序保留到自己的设备”。 procedure ExecNewProcess(ProgramName : String; Wait: Boolean); var StartInfo : TStartupInfo; ProcInfo : TProcessInformation; CreateOK : Boolean; begin { fill with known st ...
  • 如果您的后台任务很简单并且不受CPU限制,我建议您使用cherrypy.process.plugins.BackgroundTask 。 这是一个基于线程的解决方案。 以下是完整示例的答案 。 通常在CherryPy中,我们不会传递回调来传递内部组件。 相反,我们使用插件 。 CherryPy自己的组件,如会话数据到期或请求超时监视器,守护程序和PID编写器等,都是插件。 插件的生命周期绑定到消息总线 。 FSM图说明了状态变化。 在你的插件中,你只需要处理一些对你的任务有意义的状态。 ...
  • 好吧,解决方案是从输出中分离管道,因为它阻止等待显示它,我改变了我的代码以便进行以下操作(只是评论管道)并且它有效。 void My_Interface::gazebo_launch_world() { std::string command = "roslaunch"; std::vector args; args.push_back("robot_gazebo"); args.push_back("robot_gazebo.launch"); ...
  • 我已经通过调用我的第二个进程守护进程来处理这个问题(通过HTTP调用长时间运行的进程)。 您的Pylons控制器对第二个进程进行系统调用(传递所需的任何数据),第二个进程立即成为一个守护进程。 这结束了系统调用,您的控制器可以返回。 我的网络应用程序通常会发出AJAX请求来“检查”守护进程,直到它完成。 我已经使用了两个tmp文件(cPickle工作正常)和数据库来共享守护进程和web-app之间的信息。 优秀的python守护进程配方: http : //code.activestate.com/reci ...