Ambari 升级

Ambari升级

[TOC]

确认版本

目前公司使用的2.4.2版本,在2017年还算是比较新的了。目前就落后了三个大版本了。不得不感叹技术迭代真的太快了。

ambari2.7.3官网给出的升级,是必须在2.6.X上升级

clipboard.png

ambari2.6.2.2官网给出的升级,是必须在2.4.2...上升级

Ambari 2.6 does not support managing an HDP 2.3, 2.2, 2.1 or 2.0 cluster. If you are running HDP 2.3, 2.2, 2.1 or 2.0, in order to use Ambari 2.6 you must first upgrade to HDP 2.4 or higher using Ambari 2.5.2, 2.4.2, 2.2.2, 2.2.1, 2.2, 2.1, or 2.0 before upgrading to Ambari 2.6. Once completed, upgrade your current Ambari version to Ambari 2.6.

也就是说,在2.4.2的基础上要升级到ambari2.7.3。必须先从2.4.2升级到2.6.X,接着再升级到2.7.3。
另外HDP的升级,Ambari-2.7.3仅支持将HDP-2.6.x升级到HDP-3.x的快速方法。也就是说必须从2.5.0版本升级到HDP2.6.X,再升级到HDP-3.X。

准备升级

在准备升级Ambari和HDP群集时,我们强烈建议您查看此项目清单以确认您的群集操作是否正常。
尝试升级在不健康状态下运行的集群可能会产生意外结果。

集群检查项目清单

  • 确保群集中的所有服务都在运行
  • 运行每个服务检查(在“服务操作”菜单下找到)并确认它们已成功执行
  • 清除所有警报,或了解它们的生成原因。必要时进行修复。
  • 确认启动和停止所有服务正在成功执行
  • 时间服务开始和停止。
  • 在升级之前下载软件包。将它们放在本地存储库中和/或考虑使用存储代理,因为群集中的所有节点都需要下载数千兆字节。
  • 确保对支持群集的所有数据库进行时间点备份。这包括(除其他外)Ambari,Hive Metastore,Ranger和Oozie。
  • 确保/usr/hdp/上有足够的磁盘空间(每增加一个HDP版本大约3GB)。

ambari升级准备工作

  • 您必须在Ambari服务器主机和群集中的所有服务器上具有root,administrative或root等效授权。
  • 您必须备份Ambari Server数据库。

    很重要!必须备份,否则无法回滚!

  • 您必须备份/etc/ambari-server/conf/ambari.properties

    目前更新的时候发现,ambari脚本是会自己去备份这个文件,命名为ambari.properties.rpmsave

  • 准备升级Ambari Metries service

    • 在开始升级过程之前,记录Metrics Collector组件的位置。
    • 您必须从Ambari Web停止Ambari Metrics服务。
    • 升级Ambari后,还必须升级Ambari Metrics System并添加Grafana组件。
  • 升级Ambari后,您还必须升级SmartSense(付费软件,可以不安装。)。

升级

升级ambari

  1. 如果您在群集中运行Ambari Metrics服务,请停止该服务。从Ambari Web,浏览到Services> Ambari Metrics,然后从Service Actions菜单中选择Stop。
  2. 停止Ambari服务器。在运行Ambari Server的主机上:

    ambari-server stop

  3. 停止所有Ambari特工。在群集中运行Ambari代理的每台主机上:

    ambari-agent stop

  4. 制作新的Ambari.repo,并将旧存储库文件替换为群集中所有主机上的新存储库文件

    http://rm/hdp3.1.0/HDP-GPL/centos7/3.1.0.0-78/
    http://rm/hdp3.1.0/HDP/centos7/3.1.0.0-78
    http://rm/hdp3.1.0/HDP-UTILS/centos7/1.1.0.22
    http://rm/hdp2.6.5/HDP/centos7/2.6.5.0-292
    http://rm/hdp/HDP-UTILS-1.1.0.21/repos/centos7
  5. 升级Ambari服务器。在运行Ambari Server的主机上:

    先检查一下yum中的ambari-server版本是否正确

    yum clean all
    yum info ambari-server
    [root@rm yum.repos.d]# yum info ambari-server
    Determining fastest mirrors
    Installed Packages
    Name        : ambari-server
    Arch        : x86_64
    Version     : 2.4.1.0
    Release     : 22
    Size        : 700 M
    Repo        : installed
    From repo   : ambari-2.4.1.0
    Summary     : Ambari Server
    URL         : http://www.apache.org
    License     : (c) Apache Software Foundation
    Description : Maven Recipe: RPM Package.
    
    Available Packages
    Name        : ambari-server
    Arch        : x86_64
    Version     : 2.6.2.2
    Release     : 1
    Size        : 718 M
    Repo        : ambari-2.6.2.2
    Summary     : Ambari Server
    URL         : http://www.apache.org
    License     : (c) Apache Software Foundation
    Description : Maven Recipe: RPM Package.

    yum upgrade ambari-server 执行这句命令,ambari会有备份动作

        Backing up Ambari properties /etc/ambari-server/conf/ambari.properties -> /etc/ambari-server/conf/ambari.properties.rpmsave
    Backing up Ambari properties /var/lib/ambari-server/ambari-env.sh -> /var/lib/ambari-server/ambari-env.sh.rpmsave
    Backing up JAAS login file /etc/ambari-server/conf/krb5JAASLogin.conf -> /etc/ambari-server/conf/krb5JAASLogin.conf.rpmsave
    Backing up stacks directory /var/lib/ambari-server/resources/stacks -> /var/lib/ambari-server/resources/stacks_23_04_19_09_40.old
    Backing up common-services directory /var/lib/ambari-server/resources/common-services -> /var/lib/ambari-server/resources/common-services_23_04_19_09_40.old
    Backing up Ambari view jars /var/lib/ambari-server/resources/views/*.jar -> /var/lib/ambari-server/resources/views/backups/
    Backing up Ambari server jar /usr/lib/ambari-server/ambari-server-2.4.1.0.22.jar -> /usr/lib/ambari-server-backups/
  6. 通过在步骤5中启动的Ambari Server安装过程中注意进度来检查升级是否成功。

    • 当进程运行时,控制台会显示与以下内容类似但不相同的输出
      Setting up Upgrade Process Resolving Dependencies --> Running transaction check
    • 如果升级失败,控制台将显示类似于以下内容的输出

      Setting up Upgrade Process No Packages marked for Update

    • 成功升级会显示类似于以下内容的输出
      Updated: ambari-server.noarch 0:2.6.2-155 Complete!
  7. 升级所有Ambari-agent。在群集中运行Ambari代理的每台主机上

    yum upgrade ambari-agent

  8. 升级过程完成后,检查每个主机以确保已安装新文件

    rpm -qa | grep ambari-agent

  9. 升级Ambari Server数据库架构。在运行Ambari Server的主机上

    ambari-server upgrade

  10. 启动Ambari服务器。在运行Ambari Server的主机上

    ambari-server start

  11. 启动所有Ambari代理商。在群集中运行Ambari代理的每台主机上

    ambari-agent start

  12. 在运行Metrics Monitor的群集中的每台主机上,运行以下命令

    yum upgrade ambari-metrics-monitor ambari-metrics-hadoop-sink

  13. 在运行Metrics Collector的所有主机上执行以下命令

    yum upgrade ambari-metrics-collector

  14. 在运行Grafana组件的主机上执行以下命令

    yum upgrade ambari-metrics-grafana

升级HDP

使用Ambari升级HDP有两种方法:滚动升级和快速升级。

  • 滚动升级:
    滚动升级按顺序编排HDP升级,以便在升级期间保持群集操作并最大限度地减少服务影响。此过程具有更严格的先决条件(特别是关于群集高可用性配置),并且可能需要比Express Upgrade更长的时间才能完成。
  • 快速升级:
    快速升级协调HDP升级的顺序将导致群集停机,但先决条件不太严格。

本次采用快速升级

  1. 注册版本

    clipboard.png

  2. 安装HDP

    clipboard.png

  3. 升级检查

    可以看到Express也就是快速升级,本次测试环境checks有两个需要解决,一个是关闭Auto-Start Services,一个是重启服务,并执行检查。

    clipboard.png

  4. 关闭Auto-Start Services

    clipboard.png

  5. 重新启动一些配置修改的服务,并执行检查。

    Reason: The following service configurations have been updated and their Service Checks should be run again: HIVE, HDFS, MAPREDUCE2, TEZ, HBASE, ZOOKEEPER, YARN
    Failed on: HIVE,HDFS,MAPREDUCE2,TEZ,HBASE,ZOOKEEPER,YARN

    去主界面start required带有黄色圈圈的服务,重启后,执行Service Check。

    clipboard.png

  6. 升级集群

    中间一些步骤可以直接勾选,并继续执行。

    clipboard.png

  7. 升级成功

clipboard.png

clipboard.png

升级到ambari2.6.2和HDP2.6.5版本之后,如法炮制升级,最终升级到ambari2.7.3.0和HDP3.1.0版本

clipboard.png

报错整理

libtirpc-devel包缺失

ExecutionFailed: Execution of '/usr/bin/yum -d 0 -e 0 -y install hive_2_6_5_0_292' returned 1. Error: Package: hadoop_2_6_5_0_292-hdfs-2.7.3.2.6.5.0-292.x86_64 (HDP-2.6-repo-51)
           Requires: libtirpc-devel
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

下载对应版本的libtirpc-devel,执行命令yum install libtirpc-devel-0.2.4-0.6.el7.x86_64.rpm -y

snappy依赖冲突

Error: Package: snappy-devel-1.0.5-1.el6.x86_64 (@HDP-UTILS-1.1.0.21)
           Requires: snappy(x86-64) = 1.0.5-1.el6
           Removing: snappy-1.0.5-1.el6.x86_64 (@HDP-UTILS-1.1.0.21)
               snappy(x86-64) = 1.0.5-1.el6
           Updated By: snappy-1.1.0-3.el7.x86_64 (centos7-media)
               snappy(x86-64) = 1.1.0-3.el7

先把离线源centos注释掉,mv centos.repo centos.repo.backup

执行ambari-server upgrade报错

执行命令ambari-server upgrade报错如下

[root@rm yum.repos.d]# ambari-server upgrade
Using python  /usr/bin/python
Upgrading ambari-server
INFO: Upgrade Ambari Server
INFO: Updating Ambari Server properties in ambari.properties ...
INFO: Updating Ambari Server properties in ambari-env.sh ...
INFO: Original file ambari-env.sh kept
INFO: Fixing database objects owner
Ambari Server configured for MySQL. Confirm you have made a backup of the Ambari Server database [y/n] (n)? y
INFO: Upgrading database schema
ERROR: Unexpected ValueError: No JSON object could be decoded
For more info run ambari-server with -v or --verbose option

查看ambari-server.log可以看到是执行insert into user_authentication语句报错主键重复,直接清空这张表的数据即可。目前怀疑是因为之前有升级到这个版本,然后回滚回去,但是由于这张表可能是低版本没有拥有的原因导致。

自定义服务错误

新版本不识别之前的group参数

在ambari中,我们需要自定义一些服务嵌入到ambari管理,比如Redis。

resource_management.core.exceptions.Fail: Execute['rm -rf /opt/ambari/custom_service/app/redis*'] received unsupported argument group

在master.py中有这样一句话,在旧版本中是没有问题的。

if  os.path.exists(params.install_dir):
            Execute(format('rm -rf {install_dir}/redis*'),
                    user=params.user,
                    group=params.group)

目前看新版本不支持这个写法,去掉user和group就可以了。

clipboard.png

spark离线模块

新版本spark源码有所删减。其中dataframe和dataset已经合并。需要修改spark代码来解决

报错信息:

java.lang.NoClassDefFoundError: org/apache/spark/sql/DataFrame

hue模块

  1. 安装时,报错KEY ERROR -u'hue'

    keyError -u'hue'
    Error: Error: Unable to run the custom hook script ['/usr/bin/python', '/var/lib/ambari-agent/cache/stack-hooks/before-ANY/scripts/hook.py', 'ANY', '/var/lib/ambari-agent/data/command-303.json', '/var/lib/ambari-agent/cache/stack-hooks/before-ANY', '/var/lib/ambari-agent/data/structured-out-303.json', 'INFO', '/var/lib/ambari-agent/tmp', 'PROTOCOL_TLSv1_2', '']

    执行以下语句

    # cd /var/lib/ambari-server/resources/scripts
    # python configs.py -u admin -p admin -n $cluster_name -l $ambari_server -t 8080 -a get -c cluster-env |grep -i ignore_groupsusers_create
    # python configs.py -u admin -p admin -n $cluster_name -l $ambari_server -t 8080 -a set -c cluster-env -k ignore_groupsusers_create -v true
  2. 安装时,报错list index out of

    怀疑是新版本拿到rm_host的方法不能用了,先写默认值解决
    resourcemanager_hosts = default("/clusterHostInfo/rm_host", ["rm.ambari"])
    histroryserver_host = default("/clusterHostInfo/hs_host", ["rm.ambari"])

    后面发现是新版本的名称改变了。

    脚本可以改成以下:

    resourcemanager_hosts = default("/clusterHostInfo/resourcemanager_hosts", [])
    histroryserver_host = default("/clusterHostInfo/historyserver_hosts", [])
    pig_hosts
    hbase_regionserver_hosts
    nodemanager_hosts
    hive_server_hosts
    zkfc_hosts
    apollo_logs_producer_hosts
    hdfs_client_hosts
    timeline_reader_hosts
    zookeeper_client_hosts
    datax_server_hosts
    metrics_collector_hosts
    oozie_server_hosts
    oozie_client_hosts
    yarn_registry_dns_hosts
    hive_metastore_hosts
    hbase_client_hosts
    hue_server_hosts
    redis_master_hosts
    datanode_hosts
    yarn_client_hosts
    spark2_jobhistoryserver_hosts
    mapreduce2_client_hosts
    app_timeline_server_hosts
    resourcemanager_hosts
    kafka_broker_hosts
    all_hosts
    apollo_logs_consumer_hdfs_hosts
    metrics_monitor_hosts
    apollo_logs_consumer_hbase_hosts
    kakfa_master_hosts
    tez_client_hosts
    all_ipv4_ips
    hive_client_hosts
    namenode_hosts
    metrics_grafana_hosts
    phoenix_query_server_hosts
    zookeeper_server_hosts
    historyserver_hosts
    journalnode_hosts
    hbase_master_hosts
    spark2_client_hosts
    all_racks
  3. 安装报错KeyError: 'group'

    把写HUE的关于EXECUTE方法带有group的方法去掉,hue_server.py中。

  4. 安装报错chown hue:hue,invalid hue

    新版本不会自己创建hue用户!自己创建useradd hue -g hue

  5. 启动报错

    Traceback (most recent call last):
     File "/var/lib/ambari-agent/cache/stacks/HDP/3.1/services/HUE/package/scripts/hue_server.py", line 82, in 
    HueServer().execute()
     File "/usr/lib/ambari-agent/lib/resource_management/libraries/script/script.py", line 352, in execute
    method(env)
     File "/var/lib/ambari-agent/cache/stacks/HDP/3.1/services/HUE/package/scripts/hue_server.py", line 34, in start
    self.configure(env)
     File "/var/lib/ambari-agent/cache/stacks/HDP/3.1/services/HUE/package/scripts/hue_server.py", line 29, in configure
    setup_hue()
     File "/var/lib/ambari-agent/cache/stacks/HDP/3.1/services/HUE/package/scripts/setup_hue.py", line 35, in setup_hue
    recursive_chmod=True
     File "/usr/lib/ambari-agent/lib/resource_management/core/base.py", line 166, in __init__
    self.env.run()
     File "/usr/lib/ambari-agent/lib/resource_management/core/environment.py", line 160, in run
    self.run_action(resource, action)
     File "/usr/lib/ambari-agent/lib/resource_management/core/environment.py", line 119, in run_action
    provider = provider_class(resource)
     File "/usr/lib/ambari-agent/lib/resource_management/libraries/providers/hdfs_resource.py", line 617, in __init__
    self.assert_parameter_is_set('dfs_type')
      File "/usr/lib/ambari-agent/lib/resource_management/libraries/providers/hdfs_resource.py", line 696, in assert_parameter_is_set
        raise Fail("Resource parameter '{0}' is not set.".format(parameter_name))
    resource_management.core.exceptions.Fail: Resource parameter 'dfs_type' is not set.

    注释掉

        #  params.HdfsResource(params.hue_hdfs_home_dir,
         #           type="directory",
        #            action="create_on_execute",
       #             owner=params.hue_user,
      #              mode=0755,
     #               recursive_chmod=True
    #  )

附录

你可能感兴趣的:(ambari)