• Ambari——大数据平台的搭建利器


    转载自http://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari/

     

    扩展 Ambari 管理一个自定义的 Service

    首先,我们需要规划自定义的 Service 属于哪个 Stack(当然 Stack 也是可以自定义的)。这里为了快速创建一个新的 Service,而且我们已经安装了 HDP 2.2 的 Stack,所以就将自定义的 Service 放在 HDP 2.2 之下。

    第一步,首先在 Ambari Service 机器上找到 HDP 2.2 Stack 的目录,如下图所示。

    图 18. HDP 2.2 的目录

    图 18. HDP 2.2 的目录

    第二步,需要创建一个 Service 目录,我们这里用“SAMPLE”作为目录名。并在 SAMPLE 底下创建 metainfo.xml。示例代码如下。主要解释下 xml 代码中的两个字段 category 和 cardinality。category 指定了该模块(Component)的类别,可以是 MASTER、SLAVE、CLIENT。Cardinality 指的是所要安装的机器数,可以是固定数字 1,可以是一个范围比如 1-2,也可以是 1+,或者 ALL。如果是一个范围的时候,安装的时候会让用户选择机器。另外这里有关 Service 和 Component 的 name 配置要用大写,小写有时候会有问题。Displayname 可以随意设置。

    <?xml version="1.0"?>
    <metainfo>
     <schemaVersion>2.0</schemaVersion>
     <services>
     <service>
     <name>SAMPLE</name>
     <displayName>My Sample</displayName>
     <comment>My v1 Sample</comment>
     <version>1.0</version>
     <components>
     <component>
     <name>MYMASTER</name>
     <displayName>My Master</displayName>
     <category>MASTER</category>
     <cardinality>1</cardinality>
     <commandScript>
     <script>scripts/master.py</script>
     <scriptType>PYTHON</scriptType>
     <timeout>5000</timeout>
     </commandScript>
     </component>
     <component>
     <name>MYSALVE</name>
     <displayName>My Slave</displayName>
     <category>SLAVE</category>
     <cardinality>1+</cardinality>
     <commandScript>
     <script>scripts/slave.py</script>
     <scriptType>PYTHON</scriptType>
     <timeout>5000</timeout>
     </commandScript>
     </component>
     </components>
     <osSpecifics>
     <osSpecific>
     <osFamily>any</osFamily>
     </osSpecific>
     </osSpecifics>
     </service>
     </services>
    </metainfo>

    第三步,需要创建 Service 的控制脚本。这里我们需要在 SAMPLE 底下创建一个 package 目录,然后在 package 底下创建目录 scripts ,进而创建 master.py 和 slave.py。这里需要保证脚本路径和上一步中 metainfo.xml 中的配置路径是一致的。这两个 Python 脚本是用来控制 Master 和 Slave 模块的生命周期。脚本中函数的含义也如其名字一样:install 就是安装调用的接口;start、stop 分别就是启停的调用;Status 是定期检查 component 状态的调用;Configure 是安装完成配置该模块的调用。示例目录结构如下图。

    图 19. Sample Service 的目录结构

    图 19. Sample Service 的目录结构

    Python 脚本的示例代码:

    Master.py:

    import sys, os
    from resource_management import *
    from resource_management.core.exceptions import ComponentIsNotRunning
    from resource_management.core.environment import Environment
    from resource_management.core.logger import Logger
    
    class Master(Script):
     def install(self, env):
     print "Install My Master"
    
     def configure(self, env):
     print "Configure My Master"
    
     def start(self, env):
     print "Start My Master"
    
     def stop(self, env):
     print "Stop My Master"
    
     def status(self, env): 
     print "Status..."
    
    if __name__ == "__main__":
     Master().execute()

    Slave.py:

    import sys, os
    from resource_management import *
    from resource_management.core.exceptions import ComponentIsNotRunning
    from resource_management.core.environment import Environment
    from resource_management.core.logger import Logger
    
    class Slave(Script):
     def install(self, env):
     print "Install My Slave"
    
     def configure(self, env):
     print "Configure My Slave"
    
     def start(self, env):
     print "Start My Slave"
    
     def stop(self, env):
     print "Stop My Slave"
     def status(self, env): 
     print "Status..."
    
    if __name__ == "__main__":
     Slave().execute()

    第四步,需要重启 Ambari Server。因为 Ambari Server 只有在重启的时候才会读取 Service 和 Stack 的配置。命令行执行:

    ambari-server restart

    第五步,登录 Ambari 的 GUI,点击左下角的 Action,选择 Add Service。如下图:

    图 20. Add Service 按钮

    图 20. Add Service 按钮

    这时候就可以看到我们自定义的 Service:SAMPLE。如下图:

    图 21. Sample Service 列表

    图 21. Sample Service 列表

    选择左侧 My Sample 后,就可以一路 Next 了,这个过程其实和我们在搭建 Hadoop2.x 集群的时候是类似的。由于这个 Service 没有真的安装包,所以安装过程会非常的快,启动命令也没有真正的逻辑,所以启动过程也是很快的。等最后点击完 Complete,整个安装过程也就结束了。再回到 Ambari 的 Dashboard 的时候,我们就可以看到这个 My Sample 了,如下图:

    图 22. My Sample 的 Service 页面

    图 22. My Sample 的 Service 页面

    点击查看大图

    到此就可以和第四节中管理 Hadoop 集群一样管理我们的 My Sample。例如下图,Stop 我们的 My Sample。

    图 23. Stop Sample 页面 1

    图 23. Stop Sample 页面 1

    图 24. Stop Sample 页面 2

    图 24. Stop Sample 页面 2

    图 25. Stop Sample 页面 3

    图 25. Stop Sample 页面 3

    进阶的篇幅中,将会探讨如何给我们的 My Sample 自定义一些 Actions,以及 Action 之间的依赖关系如何定义。篇幅有限,这里就先到此为止。希望以上的介绍能够燃起大家对 Ambari 的热情。

     

    总结

    大数据与云计算可谓是如今数据中心中最火的两项技术领域,几乎所有的 IT 服务商都想在这两项技术中有所建树。相信 Ambari 可以帮助一些 Hadoop 的初学者。长远看来,大数据的发展离不开云计算,云计算中 IaaS 可谓已经很成熟,并且价格低廉。这时候许多公司将目光聚集在了 PaaS。大数据的流行更是加速了相关 PaaS 产品的发展,而 Ambari 的出现必然可以拉近 IaaS 和 PaaS 的距离。也就是说有了 Ambari,或许再加上 Docker,那么快速从 IaaS 演进到 PaaS 就显得不是那么困难了。

    当然这里 Ambari 要跟 IaaS 更好的切合,还有个对手那就是 Sahara。它是另一个土生土长的 OpenStack 的子项目,其目的也是为了在 Openstack 上面快速搭建 Hadoop 等集群。期望着这些项目能够快速成长,将来对大家都有所帮助。

  • 相关阅读:
    Java实现 LeetCode 34 在排序数组中查找元素的第一个和最后一个位置
    Java实现 LeetCode 34 在排序数组中查找元素的第一个和最后一个位置
    MFC的消息映射机制揭秘
    vc++窗口的创建过程(MFC消息机制的经典文章)
    映射窗口句柄对象
    评侯捷的<深入浅出MFC>和李久进的<MFC深入浅出>
    主函数 main WinMain _tmain _tWinMain 的区别
    深入分析MFC文档视图结构(项目实践)
    深入解析MFC -- 句柄与对象的关系
    深入浅出Win32多线程设计之MFC的多线程-线程与消息队列(经典)
  • 原文地址:https://www.cnblogs.com/zwingblog/p/5972954.html
Copyright © 2020-2023  润新知