smartsense是hortonworks一个商业的组件功能,作用是监控集群,并提供建议,建议是不使用。通常,此组件是安装ambari的时候的一个必选项,也就是说在安装ambari的时候它就强制绑定安装了。

那么,如何不安装它或者说安装完Hadoop集群后将这个组件删除呢?有三种方法,第一是在安装集群前,清除smartsense相关组件,第二是在安装集群后,通过ambari管理界面删除,第三是通过ambari的api命令方式删除并清除相关文件。

一,安装集群前,离线安装包内删除smartsense组件

在ambari-server 部署的机器执行以下命令(Linux系统时区分大小写的,因此是两个命令):

find / -name smartsense

find / -name SMARTSENSE

以上两个命令输出的文件全部删除即可。

在部署有ambari-agent的机器也执行以上find命令找出smartsense相关包并删除。

[root@slave1 mnt]# find / -name SMARTSENSE
/var/lib/ambari-agent/cache/stacks/HDP/2.1/services/SMARTSENSE
/var/lib/ambari-agent/cache/stacks/HDP/3.0/services/SMARTSENSE
/usr/hdp/share/hst/ambari-service/SMARTSENSE

二,安装集群完成后,在ambari管理界面删除smartsense

点到smartsense服务,然后先停止smartsense(我是已经删除了,因此,用ambari metrics 暂时代替表示),然后在删除service,最后在所有集群的机器内find 命令后删除找到的文件。

 

 三,

通过 Rest API卸载已安装的 Service
Ambari 提供了 DELETE 的 Rest API,我们可以通过该 API 来删除 Ambari 中 Service。不过这里需要注意,这个方法只是从 Ambari Service 中删除了 Service。这样一来,Ambari 的 GUI 界面中不再显示这个 Service。但是 Service 本身还安装在 Agent 所在的机器。如果用户需要彻底的清除掉这个 Service,仍需要手工的到每个机器卸载(例如,在每个机器执行 yum erase)。

这里我以删除 HDFS 为例。卸载之前,需要确认是否停掉了该 Service。我们通过 GET 方法来得到这个结果(这里当然也可以直接从 GUI 上面看到 Service 状态)。具体的命令如下:

curl -u admin:admin -H "X-Requested-By: ambari" -X GET http://master:8080/api/v1/clusters/bigdata/services/HDFS

这里需要注意,命令中的 master 为 Ambari Server 的机器名(端口默认为 8080),bigdata 为 cluster的 名字,HDFS为 Service 的名字,所有服务名称全大写。。-u后面是登录ambari的账号和密码,如果密码有更改,请根据实际修改。

在返回的报文中,可以看到 State 字段。如果是 INSTALLED,代表这个 Service 已经是停掉的状态。我们可以继续删除步骤。如果不是 INSTALLED,是STARTED,则需要先停掉这个 Service,可以从 WEB 上操作,也可以用 Rest API。

比如,我查询HDFS这个服务,可以看到该service状态是started,因此,如果是要卸载hdfs,需要先停止该服务(smartsense我已经删除过了!~~!!~~)。

[root@slave1 mnt]# curl -u admin:admin -H "X-Requested-By: ambari" -X GET http://master:8080/api/v1/clusters/bigdata/services/HDFS

输出如下:

{
  "href" : "http://master:8080/api/v1/clusters/bigdata/services/HDFS",
  "ServiceInfo" : {
    "cluster_name" : "bigdata",
    "credential_store_enabled" : "false",
    "credential_store_supported" : "false",
    "desired_repository_version_id" : 1,
    "desired_stack" : {
      "stackName" : "HDP",
      "stackVersion" : "3.0",
      "stackId" : "HDP-3.0"
    },
    "maintenance_state" : "OFF",
    "repository_state" : "CURRENT",
    "service_name" : "HDFS",
    "sso_integration_desired" : false,
    "sso_integration_enabled" : false,
    "sso_integration_supported" : false,
    "state" : "STARTED"
  },
后面内容省略了。。。。。。。。。。。

停止hdfs的 Rest API是这样的:

curl -u admin:admin -H "X-Requested-By: ambari" -X PUT -d '{"RequestInfo":{"context":"Stop Service"},"Body":{"ServiceInfo:{"state":"INSTALLED"}}}' http://master:8080/api/v1/clusters/bigdata/services/HDFS

删除hdfs的 Rest API是这样的:

curl -u admin:admin -H "X-Requested-By: ambari" -X DELETE  http://master:8080/api/v1/clusters/bigdata/services/HDFS

这个删除是没有输出的表示已删除。




总结

删除整体服务有三种方式,不过都有删除残留的问题(可以急死强迫症的那种残留~~~~~~),最简单的是第二种方式,也就是通过ambari的web界面删除,比较暴力的是第三种方式,最为暴力的是第一种,但世事难料,也是最没有余地的删除。 

 


 


 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐