Community Articles

Find and share helpful community-sourced technical articles.
Labels (1)
avatar
Super Collaborator

Story: From the documentation I was able to add a service to existing stack definition in Ambari.

Issue: But I was either not able to stop the service or delete the service just in case.

https://cwiki.apache.org/confluence/display/AMBARI/Defining+a+Custom+Stack+and+Services

How did I solve the problem?

  • 1.Create and Add Stack:

cd /var/lib/ambari-server/resources/stacks/HDP/2.4/services

  • 2.Create a directory that contains the service definition for SAMPLESRV

mkdir /var/lib/ambari-server/resources/stacks/HDP/2.4/services/SAMPLESRV

cd /var/lib/ambari-server/resources/stacks/HDP/2.4/services/SAMPLESRV

  • 3.Create a metainfo.xml as show in the link above.

  • 4.With this we have a service name as SAMPLESRV and it contains SAMPLESRV_MASTER, SAMPLESRV_SLAVE and SAMPLESRV_CLIENT

  • 5.Next we need to create the command scripts

mkdir –p /var/lib/ambari-server/resources/stacks/HDP/2.4/services/SAMPLESRV/package/scriptscd /var/lib/ambari-server/resources/stacks/HDP/2.4/services/SAMPLESRV/package/scripts

  • 6.Browse the scripts directory and create the .py command scripts:master.py, slave.py and sample_client.py under : /var/lib/ambari-server/resources/stacks/HDP/2.4/services/SAMPLESRV/package/scripts

Master.py and slave.py

5580-screen-shot-2016-07-06-at-45403-pm.png

5581-screen-shot-2016-07-06-at-45611-pm.png

here was the issue: in the documentation it doesn’t mention about the dummy.pid that needs to be created. Since we have not installed a real service, there is no PID file created by it. Therefore, we are going to artificially create the PID, remove the PID and check the process status of the dummy pid.

  • 7.Then restart ambari: ambari-server restart and add the service to the stack as shown the document. Just don't want to duplicate the process with steps here.

5582-screen-shot-2016-07-06-at-45900-pm.png

5583-screen-shot-2016-07-06-at-45908-pm.png

5584-screen-shot-2016-07-06-at-45940-pm.png

Hope this helps....

4,211 Views
Comments

Hello.

I did the similar stuff and it works fine when starting\stopping service.

But for restart it fails. Looks like it runs status check after stop and status check fails because pid file is already deleted:

Traceback (most recent call last):
  File "/var/lib/ambari-agent/cache/stacks/HDP/2.5/services/CATALOGER/package/scripts/application.py", line 28, in <module>
    Master().execute()
  File "/usr/lib/python2.6/site-packages/resource_management/libraries/script/script.py", line 280, in execute
    method(env)
  File "/usr/lib/python2.6/site-packages/resource_management/libraries/script/script.py", line 709, in restart
    self.status(env)
  File "/var/lib/ambari-agent/cache/stacks/HDP/2.5/services/CATALOGER/package/scripts/application.py", line 25, in status
    Execute ( format("cat {pid_file}") );
  File "/usr/lib/python2.6/site-packages/resource_management/core/base.py", line 155, in __init__
    self.env.run()
  File "/usr/lib/python2.6/site-packages/resource_management/core/environment.py", line 160, in run
    self.run_action(resource, action)
  File "/usr/lib/python2.6/site-packages/resource_management/core/environment.py", line 124, in run_action
    provider_action()
  File "/usr/lib/python2.6/site-packages/resource_management/core/providers/system.py", line 273, in action_run
    tries=self.resource.tries, try_sleep=self.resource.try_sleep)
  File "/usr/lib/python2.6/site-packages/resource_management/core/shell.py", line 71, in inner
    result = function(command, **kwargs)
  File "/usr/lib/python2.6/site-packages/resource_management/core/shell.py", line 93, in checked_call
    tries=tries, try_sleep=try_sleep)
  File "/usr/lib/python2.6/site-packages/resource_management/core/shell.py", line 141, in _call_wrapper
    result = _call(command, **kwargs_copy)
  File "/usr/lib/python2.6/site-packages/resource_management/core/shell.py", line 294, in _call
    raise Fail(err_msg)
resource_management.core.exceptions.Fail: Execution of 'cat /opt/app/application.pid' returned 1. cat: /opt/app/application.pid: No such file or directory