实战:ubuntu 18 离线安装ambari HDP

369 阅读7分钟

ubuntu 18 离线安装ambari HDP

基础环境

修改hosts

修改

 ulimit -n 10000

做免密

sshScript.sh

#! /bin/bash
ssh-keygen -t rsa
# 192.168.111 改为集群所在网段(和hosts中配置对应)
ALL_CLIENTS=`cat /etc/hosts| grep "192.168.111" | awk '{print $2}'`
for client in $ALL_CLIENTS
do
        echo "=============copy-ssh-id $client============="
        ssh-copy-id $client
done                    

修改UMASK

#为当前登录会话设置umask
umask 0022
# check umask
umask
#永久设置umask
echo umask 0022 >> /etc/profile

关闭防火墙

sudo ufw disable
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

安装jdk

installJDK.sh

#! /bin/bash
echo "******** JDK ********"
path=/opt/
userAndGroup=ocdp:ocdp
tar -xvf ${path}jdk-8u201-linux-x64.tar.gz -C ${path}
chown -R ${userAndGroup} ${path}jdk1.8.0_201
ln -s ${path}jdk1.8.0_201 ${path}jdk
chown -R ${userAndGroup} ${path}jdk
# 我这里是没有配置过环境变量的新机器,所以可以直接在/etc/profile 后追加
# 如果已经有环境变量可根据具体情况使用sed -i等命令配置
echo "export JAVA_HOME=${path}jdk" >> /etc/profile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile
echo "export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar" >> /etc/profile
rm -rf /usr/bin/java
rm -rf /usr/bin/javac
#hostname=`"hostname"`
#ssh $hostname "source /etc/profile;java -version;exit"
source /etc/profile
echo "******* JDK installation completed ********"

修改时区

timedatectl set-timezone Asia/Shanghai

build-essential(基础包)

sudo apt-get  -o Acquire::http::proxy="http://10.41.99.41:808/" install build-essential

python2.7

sudo apt-get  -o Acquire::http::proxy="http://10.41.99.41:808/" install python2.7
sudo apt-get  -o Acquire::http::proxy="http://10.41.99.41:808/" install python-pip

apache2与hdp源

安装apache2

sudo apt-get  -o Acquire::http::proxy="http://10.41.99.41:808/" install apache2

配置apache2

vim  /etc/apache2/sites-available/000-default.confDocumentRoot
#DocumentRoot /hadoop/var/www/html
sudo vim  /etc/apache2/apache2.conf
<Directory /hadoop/var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>
cp /var/www/html/index.html /hadoop/var/www/html/
#重启apache2
systemctl restart apache2

解压相关tar包


tar -zxvf ambari-2.7.4.0-ubuntu18.tar.gz -C /hadoop/var/www/html/

tar -zxvf HDP-3.1.4.0-ubuntu18-deb.tar.gz -C /hadoop/var/www/html/

tar -zxvf HDP-GPL-3.1.4.0-ubuntu18-gpl.tar.gz -C /hadoop/var/www/html/

tar -zxvf HDP-UTILS-1.1.0.22-ubuntu18.tar.gz -C /hadoop/var/www/html/

配置amabri源

/etc/apt/sources.list.d/ambari.list

deb http://10.41.99.212/ambari/ubuntu18/2.7.4.0-118/ Ambari main

mysql-client

sudo apt-get  -o Acquire::http::proxy="http://10.41.99.41:808/" install mysql-client
sudo apt-get  -o Acquire::http::proxy="http://10.41.99.41:808/" install libmysqlclient-dev

mysql ambari,hive,ranger元数据库创建

-- 创建ambari专用的数据库
CREATE DATABASE `ambari`;
CREATE USER 'ambari'@'%' IDENTIFIED BY 'TBbigdata2023';
grant all privileges on ambari.* to 'ambari'@'%';
-- 刷新权限
flush privileges;

-- 创建hive专用的数据库
CREATE DATABASE `hive`;
CREATE USER 'hive'@'%' IDENTIFIED BY 'TBhive20@#';
grant all privileges on hive.* to 'hive'@'%';
-- 刷新权限
flush privileges;

-- 创建ranger专用的数据库
CREATE DATABASE `ranger`;
CREATE USER 'ranger'@'%' IDENTIFIED BY 'TBranger20@#';
grant all privileges on ranger.* to 'ranger'@'%';
-- 刷新权限
flush privileges;

安装mabri

#安装
apt-get install ambari-server
#设置数据库驱动
ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java.jar
#初始化mysql ambari库
mysql -h 10.41.115.138 -uambari -p -D ambari
mysql> source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql
#启动
ambari-server start

HDP镜像源

在/etc/apt/sources.list.d/路径下分别添加 ambari.list 和 ambari-hdp.list

cd /etc/apt/sources.list.d
# ambari.list
deb http://10.41.99.212/ambari/ubuntu18/2.7.4.0-118/ Ambari main
# ambari-hdp.list
deb http://192.168.72.17/HDP/ubuntu18/3.1.0.0-78/ HDP main
deb http://192.168.72.17/HDP-GPL/ubuntu18/3.1.0.0-78/ HDP-GPL main
deb http://192.168.72.17/HDP-UTILS/ubuntu18/1.1.0.22/ HDP-UTILS main

需要添加公钥不然apt-get update 会报错

## 报错
Get:1 http://10.41.99.212/ambari/ubuntu18/2.7.4.0-118 Ambari InRelease [7,393 B]
Err:1 http://10.41.99.212/ambari/ubuntu18/2.7.4.0-118 Ambari InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B9733A7A07513CAD
Reading package lists... Done
W: GPG error: http://10.41.99.212/ambari/ubuntu18/2.7.4.0-118 Ambari InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B9733A7A07513CAD
E: The repository 'http://10.41.99.212/ambari/ubuntu18/2.7.4.0-118 Ambari InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

因为是离线环境,我们可以编辑一个hdp.pgp添加

#有网可以
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B9733A7A07513CAD
### 编辑一个hdp.pgp添加
sudo apt-key add hdp.pgp
apt-get update

hdp.pgp

-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: Hostname: 
Version: Hockeypuck 2.1.0-223-gdc2762b

xsFNBE/kz5QBEACz65O0pyfgvYrPxXNBKtMaP5HWX1X6rIReg3K24Awn2ULxvFNb
7/zepCopt7IbEwqfMSRI3DbdhA1kNbQzRBgyKXQajH3k8Ows7VPit6m6Scwfyyaa
dCIBaZWF8jcRsFjHUF4kgK4uZ3gx27bns8HDCpXUKkuZ08n0ggDiZ7Jx5Lnnfk6i
4iHWSXPyS6x0XPVyJYsdXRnONOKN/8KJosMQEzEjPx7/y4S4MycshARkq8g6gK+E
+sHtwfFqJDxYQmh7e77Fr3tLquE86VIVdPjjas2z+sttm+TPlfyoAAGKBhSh6OKX
RRhNXngMJcSMYQ5UIFDzc2rOapTSd+zO7tNJZCD64mbKDSr3Bt9uZ+dtEUEdkp2v
3byuR3E6mEITxEbImtPoVcXCAECqC7SKecT8BTDgt7ZcdOLsnnH5lTadSkYm+aAq
XUEqVBONzxMEGzTzwPy8lHqKuZ1vFgehHRu1lxGpR30cVZLSEXHdIKWB3amt+BlH
7aF/lGpjmxwmFESxFnDpXG4DrxuIOjicnAWD0nBqVActPaSCq0WCSjh11lodOr/2
9lbKCgXlh6Ynb84ZCy5T8Crx+j3h5J3InbUyoFj4gQP/3AHbC3Ig3Oq6udZ8LEHW
jOpA2+eY7FbB9FOvK0jNkmvDJ2f8mVBGaBI4OL+jkKe7Qcn/UwLA8foObwARAQAB
zS1KZW5raW5zIChIRFAgQnVpbGRzKSA8amVua2luQGhvcnRvbndvcmtzLmNvbT7C
wXgEEwECACIFAk/kz5QCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJELlz
OnoHUTytmekP/0Mlg0VmV033+JzLShpt5uEcIGF1ZCJd2Mwygu1I4JAu/fezntN9
xjPxNvpUTf4OtbrSJKRBZp4awENOXfNz/LCjysBCOP4MoVHS8Vu2oM8pknuNp5aA
lgkYX+z8YFYEdQ3JHtB6ZAt/b0XNQs3BAH71lYHY2yuUbFlB5IHztaEGBYbWuKI2
haI9/31TWEyz4L2Uf/kelHT4vjadJvftQidoRKVFUY21JPgTgwXAtaFOtUNbx2xT
xklPYb8mBqiibNFn3L/hYvlvm+LMhR3LLS3OI5wh5Rr7jWIPY5YBVp0k9OYOiH7i
AWwA786SXa4oqin9IPQUaflpfVNlCjVzJzKRvuFP99R2v1f44IwTJ9QLyYOC46i6
uChEI2rBCI19pKuOH3L9xXxbeEDYDQ7j7eSrl/BrFRYoB8AH2lXmB7IRWRKU3+Ll
FterDA76O7EDPrBKJ9gH6S8sAAE8RiFfNxj4TuYWvzoX9bMe0TLoAZcltAbRuG87
VPzDLVP1lgkBL/BsIywDG423dSZLFm1KF4ptVMGhM+wbEVPsno1AjkOzwmVzVLjZ
5iZJNVf/ruxY0iHhfYnyxz8xCqMQVv9BJ0XOuzk2xU2hFXD9rKg6UCuU/S25X0f4
WdfF0yTKCqONNpTRqL+/hPP61Tql7zZEBSaCaQEfBnC9qMJaZprK0ccz
=8mMq
-----END PGP PUBLIC KEY BLOCK-----

ubuntu18 的ambari 安装依赖postgresql

sudo apt-get  -o Acquire::http::proxy="http://10.41.115.204:808/" install postgresql

安装

sudo apt-get update
sudo apt-get install ambari-server

问题

ambari-server连接mysql报错

连接mysql报错,说连接过多,实际是ssl引起的问题需要修改/etc/ambari-server/conf/ambari.properties

WARN [C3P0PooledConnectionPoolManager[identityToken->2ti5xsaz1uhjd2o14fjqcx|6f10d5b6]-HelperThread-#1] BasicResourcePool:223 - com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@77b62b6b -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception:
java.sql.SQLException: null,  message from server: "Host '10.41.115.144' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886)
        at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1040)
        at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2253)
        at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2284)
        at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2083)
        at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:806)
        at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
        at sun.reflect.GeneratedConstructorAccessor46.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
......

修改ambari.properties

server.jdbc.url=jdbc:mysql://10.41.115.138:3306/ambari?useUnicode=true&characterEncoding=utf8&useSSL=false

同上因为useSSL=false导致ranger admin setup失败

Traceback (most recent call last):
  File "/var/lib/ambari-agent/cache/stacks/HDP/3.0/services/RANGER/package/scripts/ranger_admin.py", line 258, in <module>
    RangerAdmin().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.0/services/RANGER/package/scripts/ranger_admin.py", line 114, in start
    self.configure(env, upgrade_type=upgrade_type, setup_db=params.stack_supports_ranger_setup_db_on_start)
  File "/var/lib/ambari-agent/cache/stacks/HDP/3.0/services/RANGER/package/scripts/ranger_admin.py", line 149, in configure
    setup_ranger_xml.setup_ranger_db()
  File "/var/lib/ambari-agent/cache/stacks/HDP/3.0/services/RANGER/package/scripts/setup_ranger_xml.py", line 286, in setup_ranger_db
    user=params.unix_user,
  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 124, in run_action
    provider_action()
  File "/usr/lib/ambari-agent/lib/resource_management/core/providers/system.py", line 263, in action_run
    returns=self.resource.returns)
  File "/usr/lib/ambari-agent/lib/resource_management/core/shell.py", line 72, in inner
    result = function(command, **kwargs)
  File "/usr/lib/ambari-agent/lib/resource_management/core/shell.py", line 102, in checked_call
    tries=tries, try_sleep=try_sleep, timeout_kill_strategy=timeout_kill_strategy, returns=returns)
  File "/usr/lib/ambari-agent/lib/resource_management/core/shell.py", line 150, in _call_wrapper
    result = _call(command, **kwargs_copy)
  File "/usr/lib/ambari-agent/lib/resource_management/core/shell.py", line 314, in _call
    raise ExecutionFailed(err_msg, code, out, err)
resource_management.core.exceptions.ExecutionFailed: Execution of 'ambari-python-wrap /usr/hdp/current/ranger-admin/db_setup.py' returned 1. 2023-11-21 15:17:12,056  [I] DB FLAVOR :MYSQL
2023-11-21 15:17:12,057  [I] --------- Verifying Ranger DB connection ---------
2023-11-21 15:17:12,057  [I] Checking connection..
2023-11-21 15:17:12,057  [JISQL] /hadoop/jdk1.8.0_361/bin/java  -cp /usr/hdp/current/ranger-admin/ews/lib/mysql-connector-java.jar:/usr/hdp/current/ranger-admin/jisql/lib/* org.apache.util.sql.Jisql -driver mysqlconj -cstring jdbc:mysql://10.41.115.138/ranger -u 'ranger' -p '********' -noheader -trim -c ;  -query "select 1;"
Tue Nov 21 15:17:12 CST 2023 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
SQLException : SQL state: 08S01 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

image.png

解决

根据报错信息修改/usr/hdp/current/ranger-admin/db_setup.py

#这个参数没有加?useSSL=false
 -cstring jdbc:mysql://10.41.115.138/ranger

在db_setup.py中发现是用get_jisql_cmd方法获取最后执行的cmd命令找到,发现db_ssl_param这个拼接参数为空,直接加上启动成功 image.png

#在第737行修改
db_ssl_param='?useSSL=false'

注意

我这里是mysql unix 所以在这个位置修改,如果是orcle或者windos请找到对应位置修改