-
参考文档:
-
安装包下载地址:
安装说明
-
软件版本
软件 版本 说明 ambari 2.7.3.0 hdp管理软件 HDP 3.1.0.0 JDK 1.8.0_181 版本必须大于1.8 mysql 5.7.30 版本必须大于5.7 在hpd官网中有软件兼容性表格,不同的HDP版本对其他软件有兼容性要求:
-
集群规划,当前规划使用五个节点,搭建HA进行集群安装。规划如下:
组件 node1 node2 node3 node4 node5 ambari-server √ ambari-agent √ √ √ √ √ zookeeper √ √ √ namenode √ √ datanode √ √ √ √ resourcemanager √ √ nodemanager √ √ √ √ hiveserver √ hiveserver2 √ √ hiveserver2 interactive √ livy √ HMaster √ √ HRegionServer √ √ √ √ kafka √ √ √ client(hive、spark、zookeeper...) √ √ √ √ √ mysql √
环境检查
-
关闭selinux:
# 查看selinux状态 getenforce Disabled #enforceing代表开启,permissive代表警告,disabled代表关闭 # 如果已关闭跳过后面步骤,如果没关闭,修改/etc/sysconfig/selinux vim /etc/sysconfig/selinux # 修改以下内容为disabled SELINUX=disabled # 重启服务器 reboot -
关闭防火墙,每个节点都需要:
# 查看防火墙状态 service firewalld status Redirecting to /bin/systemctl status firewalld.service ● firewalld.service Loaded: masked (/dev/null; bad) Active: inactive (dead) # 关闭防火墙 service firewalld stop # 关闭防火墙自启动 chkconfig firewalld off -
JDK安装,每个节点都需要:
# 查看用的是哪个java,如果是系统自带的,进行卸载和安装,如果已经安装好,跳过后续步骤 which java /usr/java/jdk1.8.0_181/bin/java # 查看系统安装的java yum list installed | grep java # 卸载系统安装的java yum remove -y java* # 安装java,需先将tar包上传至服务器 mkdir /usr/local/java tar -zxvf jdk-8u188-linux-x64.tar.gz -C /usr/local/java # 配置环境变量,在/etc/profile文件中添加一下内容 #JAVA_HOME export JAVA_HOME=/usr/local/java/jdk1.8.0_181 export CLASSPATH=.:$JAVA_HOME/lib:/lib export PATH=$JAVA_HOME/bin:$PATH # 使得环境变量生效 source /etc/profile # 检查是否生效 java -version java version "1.8.0_181" Java(TM) SE Runtime Environment (build 1.8.0_181-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode) -
hostname修改,每个节点
/etc/hostname下填入各自的hostname:noed1 -
ssh配置:
# 主节点node1上尝试远程登录其他节点,注意远程节点hostname修改为环境所对应的 ssh node2 Last login: Fri Aug 28 09:37:53 2020 from 192.168.0.3 ## 如果没有设置,进行免密登录设置: # 主节点上生成密钥对(一路回程): ssh-keygen -t rsa # 复制公钥 cd ~/.ssh; cp id_rsa.pub authorized_keys ## 将公钥分发至其他节点 # 其他所有节点先创建目录 mkdir ~/.ssh; # 方式一,知道root密码: scp authorized_keys root@node2:~/.ssh/authorized_keys # 方式二,不知道密码的话只能手动将密钥复制过去了 cat ~/.ssh/id_rsa.pub # 主节点 vim ~/.ssh/authorized_keys # 其他节点,将公钥复制进去 # 复制公钥后其他节点修改目录权限 chmod -R 600 ~/.ssh # 在主节点上再次尝试远程登录其他节点 ssh node2 -
hosts配置(
/etc/hosts):vim /etc/hosts # 加入以下内容,根据具体环境修改: 192.168.0.81 node1 192.168.0.82 node2 192.168.0.83 node3 192.168.0.84 node4 # 将hosts分发到其他节点 scp /etc/hosts root@node2:/etc/hosts
创建centos本地源
centos本地源的创建只有当系统为minimal且没有外部网络的时候(或者外部网络很慢)时进行创建,如果网络良好的话跳过该步骤
-
选择对应版本的centos-dvd或者everything版本下载:Download CentOS Linux ISO images
-
httpd服务安装且自启动:
rpm -ivh mailcap-2.1.48-2.mga7.noarch.rpm rpm -ivh apr-1.4.8-5.el7.x86_64.rpm rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm rpm -ivh httpd-tools-2.4.6-93.el7.centos.x86_64.rpm rpm -ivh httpd-2.4.6-93.el7.centos.x86_64.rpm service httpd start chkconfig httpd on -
将下载的
CentOS-7-x86_64-DVD-1810.iso上传到服务器/opt/os目录下并进行挂载:# -o loop:指定设备的挂载方式,loop表示把一个文件当成硬盘分区挂载到系统 # -t iso9660:指定文件系统的类型,ISO文件的类型对应为iso9660,其他文件类型可以自行查资料 mount -o loop -t iso9660 /opt/os/CentOS-7-x86_64-DVD-1810.iso /var/www/html/centos mount: /dev/loop0 写保护,将以只读方式挂载 -
删除现有yum库:
cd /etc/yum.repos.d/ mkdir ../etc/yum.repos.d.bak mv ./* ../etc/yum.repos.d.bak -
在
/etc/yum.repos.d/base.repo下填入以下内容:[centos] name=centos baseurl=http://192.168.0.251/centos enabled=1 gpgcheck=0 #参数含义: # name:表示该yum源的名称 # baseurl:表示yum源的软件目录,"http://"表示该yum源为一个远程的http协议的yum源。当然此处还可以为ftp协议或者是其他的文件传输协议; # enabled:表示该yum配置段是否生效,1表示生效,0表示无效 # gpgcheck:表示是否对yum源指定的软件包进行安全校验,0表示不校验,本地挂载的镜像可以认为软件就是安全的,不必校验; -
执行一下命令进行yum源的情况和更新,之后就可以通过yum安装一些iso中的包的了:
yum clean all yum update
依赖库预装
-
系统如果是minimal的,以下的库都是缺少的需要安装,如果不是也最好确认下是否存在避免安装的时候报错;
-
系统库安装:
yum install -y redhat-lsb yum-utils createrepo net-tools -
依赖库安装,mysql和hdp等会需要用到:
yum install -y libaio libaio-devel postgresql-devel # 只挂载centos dvd是没有libtirpc-devel文件的,没有网络的话要下载对应的rpm包上传上去手动安装,rpm下载地址见 安装说明章节之前安装包下载地址 rpm -ivh libtirpc-0.2.4-0.16.el7.x86_64.rpm rpm -ivh libtirpc-devel-0.2.4-0.16.el7.x86_64.rpm
mysql安装
-
卸载linux自带的mysql
rpm -qa | grep mysql rpm -e --nodeps mysql-connector-java-5.1.25-3.el7.noarch -
卸载linux自带的mariadb
rpm -qa | grep mariadb rpm -e --nodeps mariadb-libs-5.5.65-1.el7.x86_64 #删除mysql配置文件(不一定存在,存在删除即可) rm -f /etc/my.cnf -
查看是否有mysql用户和组:
cat /etc/passwd | grep mysql cat /etc/group | grep mysql #如果不存在,创建不登录用户和组 useradd -s /sbin/nologin mysql -
mysql安装
-
将mysql安装包上传到对应服务器节点
-
rpm进行mysql安装:
rpm -ivh mysql-community-common-5.7.30-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.30-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.30-1.el7.x86_64.rpm rpm -ivh mysql-community-server-5.7.30-1.el7.x86_64.rpm -
启动mysql服务:
service mysqld start -
mysql服务开机启动:
chkconfig mysqld on -
查看mysql服务运行状态:
service mysqld status -
查看自动初始化的root密码:
grep password /var/log/mysqld.log -
初始密码登录mysql:
mysql -u root -p -
重置密码:
set password = password("ABcd_123456")。第一次登录一定要重置密码才能进行其他操作,密码要求长达大于8,包含大消息特殊符号和数字,如果需要设置简单密码,参考Your password does not satisfy the current policy requirements进行修改; -
修改字符集为utf8mb4,在/etc/my.cnf中添加以下内容:
[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4' -
将pid、data、log目录所属设置为mysql:
chown -R mysql:mysql /var/lib/mysql chown -R mysql:mysql /var/run/mysqld/ chown mysql:mysql /var/log/mysqld.log-
重启mysql:
service mysqld restart -
查看字符集信息:
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
-
-
root用户登录,创建hive和ambari数据库及其对应用户,注意密码修改为自己的密码:
CREATE DATABASE hive CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE DATABASE ambari CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER 'hive'@'%'IDENTIFIED BY 'Hive_123'; CREATE USER 'ambari'@'%'IDENTIFIED BY 'Ambari_123'; GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'%' identified by 'Hive_123'; GRANT ALL PRIVILEGES ON ambari.* TO 'ambari'@'%' identified by 'Ambari_123'; flush privileges;
hdp安装
-
在进行hdp安装之前,确保所有节点都有安装好JDK8、配置好master节点到其他节点的SSH免密登录以及关闭防火墙和SELinux;
-
将安装文件上传到master节点,包含以下文件:
ambari-2.7.3.0-centos7.tar.gz HDP-3.1.0.0-centos7-rpm.tar.gz HDP-GPL-3.1.0.0-centos7-gpl.tar.gz HDP-UTILS-1.1.0.22-centos7.tar.gz -
安装yum工具库:
yum install -y yum-utils yum install -y createrepo yum repolist #离线安装采用如下命令: rpm -ivh ./yum-utils-1.1.31-54.el7_8.noarch.rpm rpm -ivh ./createrepo-0.9.9-28.el7.noarch.rpm -
master节点安装apache httpd,启动服务并设置开机启动:
yum install -y httpd #离线安装采用如下命令: rpm -ivh mailcap-2.1.48-2.mga7.noarch.rpm rpm -ivh apr-1.4.8-5.el7.x86_64.rpm rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm rpm -ivh httpd-tools-2.4.6-93.el7.centos.x86_64.rpm rpm -ivh httpd-2.4.6-93.el7.centos.x86_64.rpm -
在httpd生成的
/var/www/html目录下创建ambari和hdp目录mkdir /var/www/html/ambari mkdir /var/www/html/hdp -
将ambari和hdp安装文件解压到对应html目录中:
tar -zxvf ambari-2.7.3.0-centos7.tar.gz -C /var/www/html/ambari/ tar -zxvf HDP-3.1.0.0-centos7-rpm.tar.gz -C /var/www/html/hdp/ tar -zxvf HDP-GPL-3.1.0.0-centos7-gpl.tar.gz -C /var/www/html/hdp/ tar -zxvf HDP-UTILS-1.1.0.22-centos7.tar.gz -C /var/www/html/hdp/ -
配置ambari的本地repo,往
/etc/yum.repos.d/ambari.repo中写入一下内容,注意baseurl和gpgkey修改为本地路径:#VERSION_NUMBER=2.7.3.0-139 [ambari-2.7.3.0] #json.url = http://public-repo-1.hortonworks.com/HDP/hdp_urlinfo.json name=ambari Version - ambari-2.7.3.0 #baseurl=http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.7.3.0 baseurl=http://192.168.0.251/ambari/ambari/centos7/2.7.3.0-139 gpgcheck=1 #gpgkey=http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.7.3.0/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins gpgkey=http://192.168.0.251/ambari/ambari/centos7/2.7.3.0-139/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins enabled=1 priority=1 -
配置hdp的本地repo**(可不做,ambari会根据页面配置自动生成)**,在
/etc/yum.repos.d/hdp.repo中填入以下内容:#VERSION_NUMBER=3.1.0.0-78 [HDP-3.1.0.0] name=HDP Version - HDP-3.1.0.0 baseurl=http://192.168.0.251/hdp/HDP/centos7/ gpgcheck=1 gpgkey=http://192.168.0.251/hdp/HDP/centos7/3.1.0.0-78/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins enabled=1 priority=1 [HDP-GPL-3.1.0.0] name=HDP-GPL Version - HDP-GPL-3.1.0.0 baseurl=http://192.168.0.251/hdp/HDP-GPL/centos7/ gpgcheck=1 gpgkey=http://192.168.0.251/hdp/HDP-GPL/centos7/3.1.0.0-78/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins enabled=1 priority=1 [HDP-UTILS-1.1.0.22] name=HDP-UTILS Version - HDP-UTILS-1.1.0.22 baseurl=http://192.168.0.251/hdp/HDP-UTILS/centos7/ gpgcheck=1 gpgkey=http://192.168.0.251/hdp/HDP-UTILS/centos7/1.1.0.22/RPM-GPG-KEY/RPM-GPG-KEY-Jenkins enabled=1 priority=1 -
生成本地源(这里不确定hdp相关的直接创建到hdp目录即可):
createrepo /var/www/html/ambari/ambari/centos7 createrepo /var/www/html/hdp/HDP/centos7 createrepo /var/www/html/hdp/HDP-UTILS/centos7 createrepo /var/www/html/hdp/HDP-GPL/centos7浏览器打开http://192.168.0.251/ambari/ 和 http://192.168.0.251/hdp/ 能看到以下内容即可:
-
更行yum源:
yum clean all yum update yum repolist -
master节点安装ambari-server
-
将mysql驱动程序上传到服务器任意目录,我是放到
/usr/share/java -
安装ambari-server:
yum install -y ambari-server -
ambari数据库初始化:
mysql -u ambari -p use ambari; source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql; show tables; #共111个表 -
所有节点创建ambari用户**(hdp安装的时候用的是root,安装好后所有的启动都用ambari)**:
useradd ambari passwd ambari -
给ambari用户添加sudo权限,
/etc/sudoers中添加以下内容:ambari ALL=(ALL) NOPASSWD:ALL -
配置ambari-server:
ambari-server setup,主要需要设置用户(用户设置为ambari,默认为root)、javahome和mysql连接信息等信息:
-
-
启动ambari服务
ambari-server start -
hdp安装:
-
登录ambari ui:192.168.0.251:8080, 默认用户名密码为admin:admin
-
设置集群名称:
-
添加版本信息,下拉选择Add Version,填入前面httpd服务中HDP的
HDP-3.1.0.0-78.xml文件路径,这里为http://192.168.0.251/hdp/HDP/centos7/3.1.0.0-78/HDP-3.1.0.0-78.xml,添加后以该版本信息进行hdp安装: -
选择HDP版本,这里勾选Use Local Repository,删除其他OS,留下redhat7对应填入对应的http路径:
http://192.168.0.251/hdp/HDP/centos7/ http://192.168.0.251/hdp/HDP-GPL/centos7/ http://192.168.0.251/hdp/HDP-UTILS/centos7/ -
配置节点和密钥,密钥为master节点root用户的私钥,默认路径为
~/.ssh/id_rsa,如果ssh端口有修改,做对应配置: -
节点选择,等安装好后点击下
click here to see the wamings,有错误的话需要解决: -
服务选择,选择需要的服务即可,这里选择了
HDFS、yarn、tez、hive、zookeeper、ambari metrics、SmartSense、spark2、hbase、kafka,hbase和kafka不是必选项: -
master配置,根据前面的集群规划进行组件的配置:
-
slave配置,根据前面的集群规划进行组件的配置:
-
hive连接设置,database url填入mysql对应节点即可:
jdbc:mysql://dp-slave3/hive,填好账号密码后测试下连接,如果连接出错尝试执行下:ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java-5.1.47.jar进行数据库驱动指定后再试:数据目录等其他配置,用默认即可,数据目录不需要手动创建,如果已经存在需要确保hdfs:hadoop用户和组有读写权限,不然服务启动会出错,可根据磁盘挂载将目录修改为磁盘空间大的数据目录,通过
df -ah查看磁盘挂载情况; -
review:
-
安装和启动服务:
安装完成后可能某些服务启动失败进入管理页面尝试手动重启,根据日志查找原因,大部分都是因为目录权限或者端口占用的原因:
最终确保以下组件正常启动即可:
-
hdfs HA搭建
HA的搭建是搭建好完全分布式集群、启动服务后进行的
-
在HDFS服务中启动HA配置:
-
设置HA集群的namespace:
-
选择节点部署额外的NameNode:
-
节点间删除和增加的组件清单:
-
登录到NameNode节点设置checkpoints,按步骤执行里面的命令即可:
-
组件配置:
-
JournalNode配置,登录到NameNode节点执行给出的命令即可:
-
服务安装:
-
ZKFC格式化和NameNode元数据初始话(注意ZKFC的格式化是在NameNode1执行的,NameNode的元数据初始话是在新的NameNode节点中执行):
-
服务启动:
yarn HA搭建
yarn的HA的搭建同样也是搭建好完全分布式集群、启动服务后进行的
-
在yarn组件中启用yarn HA后:
-
选择节点安装ResourceManager服务:
-
增加和删除服务清单:
-
安装服务:
hiveserver2 HA搭建
-
在hosts中进入需要装额外和iveserver2的节点:
-
在add中选择hiveserver2安装即可:
服务启动
在安装好所有服务后,之后的服务管理就不应该在通过root用户启动维护了,这里通过ambari管理:
-
先在ambari-ui中将所有服务关闭,然后停止ambari服务:
# 所有节点执行 service ambari-agent stop # 主节点执行 service ambari-server stop # 所有节点执行 chown -R ambari:ambari /var/log/ambari-agent/ /var/log/ambari-server/ chown -R ambari:ambari /var/lib/ambari-agent /var/lib/ambari-server chown -R ams:hadoop /var/lib/ambari-metrics-monitor/ chown -R ambari:ambari /var/run/ambari-agent /var/run/ambari-server -
然后切换到ambari用户重启启动ambari服务,再登录ambari-ui将集群服务启动:
# 所有节点执行 su ambari # 主节点执行 sudo service ambari-server start # 所有节点执行 sudo service ambari-agent start -
最终选择要用的服务启动即可:
问题解决
-
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 2: ordinal not in range(128):python的str默认是ascii编码,和unicode编码冲突,就会报这个错误,在
/usr/lib/python2.7/site-packages/sitecustomize.py添加以下内容:# encoding=utf-8 import sys reload(sys) sys.setdefaultencoding('utf-8')