Ambari-2.7.5在麒麟V10操作系统中的集群部署(二)

Ambari-2.7.5在麒麟V10操作系统中的集群部署(二)

之前通过修改os-check.py文件,解决了Ambari安装过程中无法识别kylin系统的问题。

最后成功在三台kylin V10系统上安装了Ambari,并登录前端页面。

本文解决在Ambari页面部署hdp集群的过程中所出现的问题以及解决方案。

1、 在confirm hosts步骤中出现的问题。

Ambari官方建议的是使用全限定类名来扫描hosts,也就是说在/etc/hosts文件中应该是:

#ip地址        全限定类名        简称
192.168.1.101 node1.test.com  node1
192.168.1.102 node2.test.com  node2
192.168.1.103 node3.test.com  node3

我也没有多余的尝试使用简称到底行不行,没什么意义,但是见过成功案例,理论上应该都可以。

下载之前安装的ssh免密服务的密钥,在~/.ssh/目录下,名为id_rsa的文件。将其上传,然后进入confirm阶段。

在此过程中如果总是失败,就重试。

如果卡在preparing阶段,在每一台agent安装的机器上执行如下命令:

vim /etc/ambari-agent/conf/ambari-agent.ini
#在[security]下,添加一行代码 force_https_protocol=PROTOCOL_TLSv1_2
[security]
keysdir=/var/lib/ambari-agent/keys
server_crt=ca.crt
passphrase_env_var_name=AMBARI_PASSPHRASE
ssl_verify_cert=0
credential_lib_dir=/var/lib/ambari-agent/cred/lib
credential_conf_dir=/var/lib/ambari-agent/cred/conf
credential_shell_cmd=org.apache.hadoop.security.alias.CredentialShell
force_https_protocol=PROTOCOL_TLSv1_2

2、在Install,Start and Test出现问题(重点)

首先最直接的,进入到这一步骤,上来就报错,无论勾选几个服务,在Activity Analyzer Install这里一直报错。

File "/usr/lib/ambari-agent/lib/ambari_commons/repo_manager/yum_manager.py", line 211, in install_package
    elif context.is_upgrade or context.use_repos or not self._check_existence(name):
  File "/usr/lib/ambari-agent/lib/ambari_commons/repo_manager/yum_manager.py", line 278, in _check_existence
    return self.yum_check_package_available(name)
  File "/usr/lib/ambari-agent/lib/ambari_commons/repo_manager/yum_manager.py", line 287, in yum_check_package_available
    import yum  # Python Yum API is much faster then other check methods. (even then "import rpm")
ImportError: No module named yum

报错内容最后一句:No module named yum

重点分析:

yum是python的一个模块module;麒麟V10系统自带两个版本的python,2和3;也自带yum,但是此yum并不是yum,而是dnf,证据如下:

在这里插入图片描述

可见其/usr/bin/yum命令都指向了dnf。

dnf是centos8中yum的升级版本,dnf包含yum,也就是在centos7中,可以说yum是python的模块:py.yum,但是在centos8或kylinV10中:py.dnf.yum

同时vi /usr/bin/yum可以看到头部为#!/usr/bin/python3,使用的是python3,这里又与Ambari的安装调用python有点出入。众所周知python的2和3版本语法不兼容,所以有时候一个py文件不能即用python2运行又可以用python3运行。

下面贴上所做的尝试和最终的解决办法。

针对报错ImportError: No module named yum

方法一

经过之前安装Ambari,yum是可以正常使用的,但仍然出现该错误,可能是因为yum模块的路径没有正确设置。可以尝试手动设置PYTHONPATH环境变量,将yum模块的路径添加到其中。例如,在bash终端中,可以运行以下命令:

export PYTHONPATH=$PYTHONPATH:/usr/lib/python3.7/site-packages/

这将把/usr/lib/python3.7/site-packages/路径添加到PYTHONPATH中。请根据你的实际情况修改路径。

结果:无效。

方法二

在麒麟V10系统中 yum在dnf包内

尝试在/usr/lib/python3.7/site-packages/

创建yum软链到/usr/lib/python3.7/site-packages/dnf/yum

ln -s /usr/lib/python3.7/site-packages/yum /usr/lib/python3.7/site-packages/dnf/yum

在python3命令行中 import yum 发现可以了

[root@node1 redlsb]# python3
Python 3.7.4 (default, Sep 30 2020, 19:28:21)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import yum
>>> #这里正常无报错 即可

如果系统中存在多个Python版本,可能是因为Ambari正在使用不正确的Python版本。可以尝试指定正确的Python版本来运行Ambari。例如,可以使用以下命令在特定的Python版本中运行Ambari:

python3.7 ambari-server.py start

这将使用Python 3.7版本来运行Ambari。

报错:

File "/usr/sbin/ambari-server.py", line 169
  except OSError, e:
                ^
SyntaxError: invalid syntax

这是由于py2和py3的代码不兼容

结果:无效。

方法三(卸载python2和3、yum、dnf,重装)

该方法是没有办法的办法,要慎重。尝试该方法之前,突然灵光乍现,见方法四。

方法四、最终办法,亲测有效

麒麟系统与centos7或者8类似,更像8一点。但是7的大部分软件包都可以用。

Ambari-Server启动时的头部信息是 #!/usr/bin/python,也就是用的python2

查看麒麟系统的python2和python3的模块包site-packages,发现2.7的模块很少,没有yum其他的依赖也少的可怜,3.7倒是有很多,也有dnf和之前设置的软链yum。这也解释了为什么yum可以正常使用,但是ambari安装服务时就是检测不到。

因为是yum源的问题, 所以想到替换yum源的模块包:将centos7/8里面python2.7的site-packages包替换过来,注意ambari-server.py使用的是python2,所以我们的思路是给python2装一个可用的yum。

重启ambari

ambari-server restart

果然,No module named yum 报错没有了
出现了新的报错:No module named sqlitecachec

可知,这是依赖问题。

因为copy过来的site-packages里面没有安装pip,所以安装一下pip

python -m ensurepip --upgrade
#原生的pip安装比较慢 可以更换pip源:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

sqlitecachec包在:yum-metadata-parser里:

rpm -ivh http://mirror.centos.org/centos/7/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm --force

重启ambari。

报错: No module named pycurl

pip install pycurl
#报错:Could not run curl-config: [Errno 2] No such file or directory
rpm -ivh http://mirrors.sohu.com/centos/7/os/x86_64/Packages/libidn-1.28-4.el7.x86_64.rpm --force
rpm -ivh http://mirrors.sohu.com/centos/7/os/x86_64/Packages/libidn-devel-1.28-4.el7.x86_64.rpm --force
rpm -ivh http://mirrors.sohu.com/centos/7/os/x86_64/Packages/nss-pem-1.0.3-7.el7.x86_64.rpm --force
rpm -ivh http://mirrors.sohu.com/centos/7/os/x86_64/Packages/libcurl-7.29.0-59.el7.x86_64.rpm --force
rpm -ivh http://mirrors.sohu.com/centos/7/os/x86_64/Packages/libcurl-devel-7.29.0-59.el7.x86_64.rpm --force
#成功安装后,再次安装pycurl 
pip install pycurl
#安装成功

再次重启ambari-server 继续安装服务

报错:ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)

#安装openssl-devel    
yum install -y openssl-devel 
#卸载重装pycurl并指定openssl
pip uninstall pycurl 
export PYCURL_SSL_LIBRARY=openssl
pip install pycurl 
成功 

重启ambari-server 重试

新的报错:redhat-lsb依赖错误

RuntimeError: Failed to execute command '/usr/bin/yum -y install hadoop_3_1_5_0_152', exited with code '1', message: 'Error: 
 Problem: cannot install the best candidate for the job
  - nothing provides redhat-lsb needed by hadoop_3_1_5_0_152-3.1.1.3.1.5.0-152.x86_64

kylin的yum仓库不支持redhat-lsb的下载安装,那么有两种方法:

1、更换centos7的yum源,执行yum -y install redhat-lsb

2、自己wget下载并安装。(我的选择),操作如下:

rpm -ivh  https://update.cs2c.com.cn/NS/V10/V10SP2/os/adv/lic/base/x86_64/Packages/kylin-lsb-5.0-1.p01.ky10.x86_64.rpm
#执行 lsb_release  显示如下:
LSB Version:    :core-5.0-amd64:core-5.0-noarch

随便创建一个空的文件夹进去:

wget http://mirrors.sohu.com/centos/7/os/x86_64/Packages/redhat-lsb-4.1-27.el7.centos.1.x86_64.rpm
wget http://mirrors.sohu.com/centos/7/os/x86_64/Packages/redhat-lsb-core-4.1-27.el7.centos.1.x86_64.rpm
wget http://mirrors.sohu.com/centos/7/os/x86_64/Packages/redhat-lsb-cxx-4.1-27.el7.centos.1.x86_64.rpm
wget http://mirrors.sohu.com/centos/7/os/x86_64/Packages/redhat-lsb-desktop-4.1-27.el7.centos.1.x86_64.rpm
wget http://mirrors.sohu.com/centos/7/os/x86_64/Packages/redhat-lsb-languages-4.1-27.el7.centos.1.x86_64.rpm
wget http://mirrors.sohu.com/centos/7/os/x86_64/Packages/redhat-lsb-printing-4.1-27.el7.centos.1.x86_64.rpm
wget http://mirrors.sohu.com/centos/7/os/x86_64/Packages/redhat-lsb-submod-multimedia-4.1-27.el7.centos.1.x86_64.rpm
wget http://mirrors.sohu.com/centos/7/os/x86_64/Packages/redhat-lsb-submod-security-4.1-27.el7.centos.1.x86_64.rpm
wget http://mirrors.sohu.com/centos/7/os/x86_64/Packages/redhat-lsb-supplemental-4.1-27.el7.centos.1.x86_64.rpm
wget http://mirrors.sohu.com/centos/7/os/x86_64/Packages/redhat-lsb-trialuse-4.1-27.el7.centos.1.x86_64.rpm
#忽略依赖 强制安装
rpm -ivh *rpm --nodeps --force
#安装完成后
##执行 lsb_release  显示如下:
LSB Version:    :core-4.1-amd64:core-4.1-noarch:core-5.0-amd64:core-5.0-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch:trialuse-4.1-amd64:trialuse-4.1-noarch

重启ambari-server重试Install,Start and Test

ambari-server restart

发现安装成功!!!
安装其他服务试一试,没得问题!!!撒花~

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述