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界面删除,比较暴力的是第三种方式,最为暴力的是第一种,但世事难料,也是最没有余地的删除。