Ambari 杂记(DB、 REST API等)

本文介绍了Ambari的集成细节,包括服务代码的放置目录和调试方法。详细讨论了Ambari Server端的代码调试,特别是如何在MySQL和PostgreSQL环境下启动调试模式。此外,文章还深入讲解了Ambari与DB的交互,如直接通过DB删除服务数据的注意事项。重点探讨了Ambari的REST API使用,包括Host、Blueprint、Cluster、Service的操作,并给出了具体的curl命令示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文目录:

1. 关于集成

###集成代码放置目录###
Service 代码放到相应目录中
放入到目录:
stack : /var/lib/ambari-server/resources/stacks/HDP/stack version/services
common service : /var/lib/ambari-server/resources/common-services

代码回最后被自动更新到agent cache中:
stack : /var/lib/ambari-agent/cache/stacks/HDP/stack version /services
common service: /var/lib/ambari-agent/cache/common-services/
PS:在调试时,更新agent-cache里的代码,代码可以直接生效(在安装完后),可以不需要重启server

如果修改了默认配置文件,如metainfo.xml文件,则如果要让配置生效,最好是先卸载服务,然后重启ambari server,再重新安装服务,让配置生效。

在调试时,可在**/var/lib/ambari-agent/data** 目录下找到Ambari Server 下方的Action Command 对应的json文件。

关于Ambari 服务集成,后面通过单独的章节进行讲述关于集成的知识

2. 关于Ambari Server 端代码调试

Server端:通过如下方式启动Ambari server

 /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.3.el7.x86_64/bin/java -server -Xdebug  -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=5005 -XX:NewRatio=3 -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -Dsun.zip.disableMemoryMapping=true -Xms1012m -Xmx3048m -XX:MaxPermSize=256m -Djava.security.auth.login.config=/etc/ambari-server/conf/krb5JAASLogin.conf -Djava.security.krb5.conf=/etc/krb5.conf -Djavax.security.auth.useSubjectCredsOnly=false -cp /etc/ambari-server/conf:/usr/lib/ambari-server/*:/usr/share/java/mysql-connector-java.jar       org.apache.ambari.server.controller.AmbariServer

要点:启动debug模式,同时指定开放的端口,该启动命令针对Ambari Server使用MySQL数据库作为后端数据存储的方式。

对于使用postgreSQL数据库的Ambari server,对应的启动命令为:

postgreSQL数据库:
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.3.el7.x86_64/bin/java -server -Xdebug  -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=5005 -XX:NewRatio=3 -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -Dsun.zip.disableMemoryMapping=true -Xms512m -Xmx2048m -XX:MaxPermSize=128m -Djava.security.auth.login.config=/etc/ambari-server/conf/krb5JAASLogin.conf -Djava.security.krb5.conf=/etc/krb5.conf -Djavax.security.auth.useSubjectCredsOnly=false -cp /etc/ambari-server/conf:/usr/lib/ambari-server/*:/usr/share/java/postgresql-jdbc.jar org.apache.ambari.server.controller.AmbariServer

本地端:使用IDEA配置远程服务器的IP地址和端口,即可连接远程Ambari Server,发送Debug指令。

3. 关于DB

当集群服务状态管理出现异常,使用Rest API无法delete时,可尝试直接从数据库中删除服务数据,恢复服务状态(慎用)

1.通过rest删除服务:

curl -u   admin:admin     -i -H   'X-Requested-By:ambari'  -X DELETE http://node1:8080/api/v1/clusters/mycluster/services/ELASTICSEARCH

2.操作数据库,删除服务相关数据

delete from hostcomponentdesiredstate where service_name='ELASTICSEARCH';
delete from hostcomponentstate where service_name='ELASTICSEARCH';
delete from servicecomponentdesiredstate where service_name='ELASTICSEARCH';
delete from servicedesiredstate where service_name='ELASTICSEARCH';
delete  from clusterservices where service_name='ELASTICSEARCH'

在具体操作时,需要严格按照顺序进行操作,各个数据表之间设置了外键,不按照顺序是无法正常删除的。(PS:再次说明,直接删除数据库中的数据具有危险性,需要确保传入的数据的正常性,并保证操作人员明确自己自己正在处理的业务)

DB check

Ambari Server在启动时,会对数据库数据进行一致性检测,进行检测的项目即执行如下SQL语句,查看是否有满足的记录。

GET_SERVICES_WITHOUT_CONFIGS_QUERY :
  select c.cluster_name, service_name from clusterservices cs  join clusters c on cs.cluster_id=c.cluster_id   where service_name not in (select service_name from serviceconfig sc where sc.cluster_id=cs.cluster_id and sc.service_name=cs.service_name and sc.group_id is null)


GET_SERVICE_CONFIG_WITHOUT_MAPPING_QUERY:
select c.cluster_name, sc.service_name, sc.version from serviceconfig sc join clusters c on sc.cluster_id=c.cluster_id where service_config_id not in (select service_config_id from serviceconfigmapping) and group_id is null


GET_STACK_NAME_VERSION_QUERY:
select c.cluster_name, s.stack_name, s.stack_version from clusters c  join stack s on c.desired_stack_id = s.stack_id 

GET_SERVICES_WITH_CONFIGS_QUERY:
select c.cluster_name, cs.service_name, cc.type_name, sc.version from clusterservices cs join serviceconfig sc on cs.service_name=sc.service_name and cs.cluster_id=sc.cluster_id join serviceconfigmapping scm on sc.service_config_id=scm.service_config_id join clusterconfig cc on scm.config_id=cc.config_id and sc.cluster_id=cc.cluster_id join clusters c on cc.cluster_id=c.cluster_id and sc.stack_id=c.desired_stack_id  where sc.group_id is null and sc.service_config_id=(select max(service_config_id) from serviceconfig sc2 where sc2.service_name=sc.service_name and sc2.cluster_id=sc.cluster_id) group by c.cluster_name, cs.service_name, cc.type_name, sc.version





GET_NOT_SELECTED_SERVICE_CONFIGS_QUERY:select c.cluster_name, cs.service_name, cc.type_name from clusterservices cs join serviceconfig sc on cs.service_name=sc.service_name and cs.cluster_id=sc.cluster_id join serviceconfigmapping scm on sc.service_config_id=scm.service_config_id join clusterconfig cc on scm.config_id=cc.config_id and cc.cluster_id=sc.cluster_id join clusterconfigmapping ccm on cc.type_name=ccm.type_name and cc.version_tag=ccm.version_tag and cc.cluster_id=ccm.cluster_id join clusters c on ccm.cluster_id=c.cluster_id where sc.group_id is null and sc.service_config_id = (select max(service_config_id) from serviceconfig sc2 where sc2.service_name=sc.service_name and sc2.cluster_id=sc.cluster_id) group by c.cluster_name, cs.service_name, cc.type_name having sum(ccm.selected) < 1"


当Server 在数据库检查出现ERROR时,可先使用 --skip-database-check参数让server起来,然后删除异常的服务,然后重启Server。

4. 关于Rest API

4.1 Host

(1)get host list:

 curl -u admin:admin -i -H 'X-Requested-By:ambari'  -X GET    http://node1:8080/api/v1/hosts

(2)delete a host:

curl -u admin:admin -i -H 'X-Requested-By:ambari'  -X delete  http://node1:8080/api/v1/clusters/test/hosts/node2

4.2 blueprint

(1)get blueprint list:
curl -u admin:admin -i -H ‘X-Requested-By:ambari’ -X GET http://node1:8080/api/v1/blueprints

(2)export blueprint:
curl -u admin:admin -i -H ‘X-Requested-By:ambari’ -X GET http://node1:8080/api/v1/clusters/HDBP?format=blueprint

4.3 Cluster

delete

curl -u admin:admin -i -H ‘X-Requested-By:ambari’ -X DELETE http://node1:8080/api/v1/clusters/test

####create cluster #####
step 1:create blueprint

curl -u admin:123456 -i -H 'X-Requested-By:ambari'  -X POST    http://node1:8080/api/v1/blueprints/blueprint?validate_topology=false   -d  '{
"host_groups" : [
  {"name" : "host-group-master",
  "components" : [{"name" : "ZOOKEEPER_SERVER"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值