2017年2月12日日曜日

Ambari AgentをPythonからスタートしてみる


備考:インポートしているのは最低限。例えばPIDFILEとかは設定していません。 (でも必要なし?)

A. シェルの"export"で:
[root@node9 ~]# export PYTHON=/usr/bin/python2.6
[root@node9 ~]# export PYTHONPATH=/usr/lib/python2.6/site-packages:/usr/lib/python2.6/site-packages/ambari_commons
[root@node9 ~]# cd /usr/lib/python2.6/site-packages/ambari_agent/
[root@node9 ambari_agent]# python
import sys, os

B. Pythonの"sys.path"で
#cd /var/lib/ambari-agent
python
import sys, os
sys.path.append("/usr/lib/python2.6/site-packages")
sys.path.append("/usr/lib/python2.6/site-packages/ambari_agent")
sys.path.append("/usr/lib/ambari-agent")
# TODO: 下記も必要?
sys.path.append("/usr/lib/python2.6/site-packages/ambari_commons")
sys.path.append("/usr/lib/ambari-agent/lib")
sys.path.append("/usr/lib/ambari-agent/lib/resource_management/libraries/functions")
sys.path.append("/var/lib/ambari-agent/tmp")

共通
from ambari_agent.AmbariConfig import AmbariConfig
from ambari_agent.Controller import Controller
config = AmbariConfig()
config.read(AmbariConfig.getConfigFile())


オペレーションのコンフィグをロードしてみる
# load config for /var/lib/ambari-agent/cache/stacks/HDP/2.2/services/HBaseRest./package/scripts/params.py
#sys.path.append("/var/lib/ambari-agent/cache/stacks/HDP/2.2/services/HBaseRest./package/scripts")
import json
from resource_management.libraries.script.config_dictionary import ConfigDictionary, UnknownConfiguration
from resource_management.libraries import Script

command_data_file = "/var/lib/ambari-agent/data/command-1016.json"
with open(command_data_file) as f:
     pass
     Script.config = ConfigDictionary(json.load(f))

config = Script.get_config()
config['configurations'].keys()
[u'spark-defaults', u'ranger-knox-plugin-properties', u'ranger-hdfs-audit', u'zeppelin-config', u'ranger-hdfs-policymgr-ssl', u'pig-env', u'anonymization-rules', u'ranger-knox-audit', u'ranger-kafka-plugin-properties', u'slider-env', u'usersyn...


HBaseのコンフィグを使ってみる(失敗)
sys.path.append("/var/lib/ambari-agent/cache/common-services/HBASE/0.96.0.2.0/package/scripts")
from hbase import hbase
hbase(name='client')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/site-packages/ambari_commons/os_family_impl.py", line 89, in thunk
    return fn(*args, **kwargs)
  File "/var/lib/ambari-agent/cache/common-services/HBASE/0.96.0.2.0/package/scripts/hbase.py", line 47, in hbase
    import params
  File "/var/lib/ambari-agent/cache/common-services/HBASE/0.96.0.2.0/package/scripts/params.py", line 26, in <module>
    from params_linux import *
  File "/var/lib/ambari-agent/cache/common-services/HBASE/0.96.0.2.0/package/scripts/params_linux.py", line 20, in <module>
    import status_params
  File "/var/lib/ambari-agent/cache/common-services/HBASE/0.96.0.2.0/package/scripts/status_params.py", line 46, in <module>
    pid_dir = config['configurations']['hbase-env']['hbase_pid_dir']
TypeError: 'NoneType' object is unsubscriptable
>>>

HBaseのスタート時に使われるPath
['/var/lib/ambari-agent/cache/stacks/HDP/2.2/services/HBaseRest./package/scripts', '/usr/lib/python2.6/site-packages', '/var/lib/ambari-agent', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk', '/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages', '/usr/lib64/python2.6/site-packages/gtk-2.0', '/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info', '/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info', '/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info']

HBaseのスタート時に使われるArgv
['/var/lib/ambari-agent/cache/stacks/HDP/2.2/services/HBaseRest./package/scripts/client.py', 'RESTART', '/var/lib/ambari-agent/data/command-1016.json', '/var/lib/ambari-agent/cache/stacks/HDP/2.2/services/HBaseRest./package', '/var/lib/ambari-agent/data/structured-out-1016.json', 'INFO', '/var/lib/ambari-agent/tmp']

上記の出力方法例:
/var/lib/ambari-agent/cache/stacks/HDP/2.2/services/HBaseRest./package/scripts/params.py", line 4
    print(str(sys.path), file=sys.stderr)
                             ^

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


Misc.:
export PYTHON=/usr/bin/python2.6
export PYTHONPATH=/usr/lib/python2.6/site-packages:/usr/lib/python2.6/site-packages/ambari_commons
#export PYTHONPATH=/usr/lib/python2.6/site-packages:/usr/lib/python2.6/site-packages/ambari_commons:/usr/lib/ambari-agent/lib/resource_management/libraries/functions:/var/lib/ambari-agent/tmp
export AMBARI_PASSPHRASE=DEV
PATH=/usr/sbin:/sbin:/usr/lib/ambari-server/*:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/var/lib/ambari-agent /usr/bin/python2 -mtrace --trace /usr/lib/python2.6/site-packages/ambari_agent/AmbariAgent.py stop


0 件のコメント:

コメントを投稿