本文目录:
文章目录
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"