我有一个要求,我希望在使用Ambari服务器的所有hadoop群集节点上的特定位置部署jar文件。为此我想我可以使用服务功能。 所以我创建了一个示例服务,并可以在所有节点上将其部署为客户端或从属服务器。 我添加了一个新的文件夹内/var/lib/ambari-server/resources/stacks/HDP/2.2/services/ TestService的,它有以下文件/目录如何使用Ambari服务在所有hadoop节点上部署jar?
[machine]# cd /var/lib/ambari-server/resources/stacks/HDP/2.2/services/Testservice^C
[machine]#
[machine]# pwd
/var/lib/ambari-server/resources/stacks/HDP/2.2/services/Testservice
[machine]# ls
configuration metainfo.xml package
[machine]# ls package/*
package/archive.zip
package/files:
filesmaster.py test1.jar
package/scripts:
test_client.py
[machine]#
有了这个我的服务添加和安装在所有节点上。在每个节点上,创建与上述相同的文件结构的相应目录“/var/lib/ambari-agent/cache/stacks/HDP/2.2/services/Testservice”。截至目前,test_client.py脚本根本没有代码。只是虚拟执行安装,配置功能。
所以在这里我要添加代码,这样从每个主机到规定的目标位置包/文件/ test1.jar说“/ lib文件夹。 我需要在这一点上有所帮助。我怎么能利用test_client.py剧本?我怎么能写通用代码复制我的jar文件。
test_client.py具有如下图所示安装方法
class TestClient(Script):
def install(self, env):
需要更多细节变量如何ENV可以用来获得所有必要的基础路径, ambari服务目录和hadoop安装基本路径。
理论上,您是否可以封装一个存档并使用install方法调用Execute()并提取并复制这些内容?什么是反对这样做的论据? –
@JeroenVlek,我已经更新了我的答案以提供替代方案,并解释了为什么我的原始答案是最佳/行业标准方法。 – cjackson
@杰克逊我已经尝试了第二种选择,即使用文件功能,现在它已经为我工作。但是我不知道标准的包装方法。所以谢谢你分享的细节。我也会试着看看它是如何工作的。 – DPM