1第 1 章 搭建学习环境
1.1 工具软件连接
1.1.1xshell 连接工具
打开 xshell 工具,点击连接配置对话框,填写主机名和公网 IP。
在用户认证选项卡中,填写登录用户名和密码。
点 击 OK 之 后 , 在 Sessions 会 话 框 中 , 看 到 刚 刚 创 建 的 session 连 接 djt-0001 。
然后双击 djt-0001,即可连接上华为云服务器。
1.1.2FileZilla 连接工具
打开
FileZilla
工具,新建站点取名为
djt-0001
(名字可以自定义),然后右侧协议选择
SFTP
,
主机、用户和密码根据自己的服务器情况来设置。
然后点击“连接”,即可登录 djt-0001 服务器,进入 hadoop 用户的根目录。
1.2 操作系统高级设置
1.2.1 创建用户和用户组
新建用户工作组
groupadd hadoop
新建用户同时增加用户组
useradd -g hadoop hadoop
为
hadoop
用户设置密码
passwd hadoop
1.2.2 赋予 hadoop 用户 sudo 权限
在工作中一般不会让我们通过 root 用户来操作,因此我们给 hadoop 用于赋予 sudo 权限。
这时会进入
/etc/sudoers
文件的编辑页面,增加如下配置即可:
#
表示
hadoop
用户可以在任何位置运行任何命令
hadoop ALL=(ALL) NOPASSWD: ALL
参数解释:
第一个字段:
hadoop
表示能使用
sudo
命令的用户;
第二个字段:第一个
ALL
表示允许使用
sudo
的主机,第二个括号里的
ALL
表示使用
sudo
后
以什么身份来执行命令;
第三个字段:第一个
NOPASSWD
表示使用
sudo
提升权限的时候不用输入密码,第二
ALL
表
示以
sudo
命令允许执行的命令;
注意:后续操作就用
hadoop
用户。
1.2.3 配置 hostname
检查当前
hostname
,使用命令
hostname -f
或者
hostnamectl
,此时
hostname
为
0001
。
永久修改
hostname
执行如下命令
sudo hostnamectl set-hostname djt-0001
配置
hosts
文件
sudo vi /etc/hosts
注意:最前面两行一定不要删除,避免出现各种奇怪的网络问题。另外注意配置的内外
IP
而非公网
IP
。
通过
hostname ping
通云服务器
1.2.4 防火墙设置
通过如下命令禁用防火墙,避免多个节点之间通信受到影响:
#
禁止防火墙开机启动
sudo systemctl disable firewalld
#
关闭防火墙
sudo systemctl stop firewalld
#
查看防火墙状态
sudo systemctl status firewalld
1.2.5 禁用 SELinux
SELinux
是美国国家宇航局开发的
Linux
的安全子系统,一定要禁用掉免得出现各种莫名其妙
的问题。
检查
SELinux
状态:
getenforce
只要返回的不是 disabled 就说明 SElinux 打开着呢。
临时禁用
(
不需要重启,但必须操作一下
)
:
sudo setenforce 0
永久禁用:
sudo vi /etc/selinux/config
将
SELINUX=enforcing
改为
SELINUX=disabled
。
1.3SSH 免密
Hadoop
大数据集群的相关组件大多依赖
SSH
免密来通过一个节点操作一个大集群,尽管到
目前为止我们还只有
djt-0001
一个节点,我们仍然需要配置一下
hadoop
用户的
SSH
免密。
以
hadoop
用户登录
djt-0001
,切换到
hadoop
用户的根目录。
执行如下命令生成
ssh
公钥和私钥:
将公钥拷贝到认证文件:
文件授权:
接下来执行一次
djt-0001
自己到自己的
ssh
,第一次
ssh
连接会提示是否继续,直接
yes
就
可以了,如下图:
最后
exit
退出
ssh
连接,然后再连接一次,如果不需要输入密码
SSH
免密就做好了
:
1.4 安装 Java
大数据很多组件离不开
Java
,因此我们要提前安装好,这里选择安装
Java 8
的最新稳定版。
首先把安装包
jdk-8u231-linux-x64.tar.gz
上传到
djt-0001
的用户主目录,然后安装
jdk
:
sudo tar -zxvf jdk-8u231-linux-x64.tar.gz -C /usr/local/
sudo ln -s /usr/local/jdk1.8.0_231/ /usr/local/jdk
设置环境变量,在文件末尾添加如下内容:
sudo vi /etc/profile
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
使环境变量生效:
source /etc/profile
验证
Java
是否安装成功
输出如上内容说明 Java 就安装好了。
1.5 准备本地 yum 源
我们的思路是把
HDP
所需要的
RPM
安装包都下载到本地创建一个本地
yum
源,后续安装就
直接使用本地
yum
源,这样速度比较快,也可以在内网操作。
1.5.1 准备 HDP 相关文件
需要从以下地址下载相关文件:
Ambari
相关安装包:
http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.7.4.0/ambari-2.7.4.0-cent
os7.tar.gz
HDP
安装:
http://public-repo-1.hortonworks.com/HDP/centos7/3.x/updates/3.1.4.0/HDP-3.1.4.0-centos7-r
pm.tar.gz
HDP-UTIL
安装包:
http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.22/repos/centos7/HDP-UTILS-1.1.0.22-c
entos7.tar.gz
HDP-GPL
文件:
http://public-repo-1.hortonworks.com/HDP-GPL/centos7/3.x/updates/3.1.4.0/HDP-GPL-3.1.4.0-c
entos7gpl.tar.gz
使用
FileZilla
上传到
djt-0001
的
hadoop
用户主目录下即可:
1.5.2 安装 Apache
按照如下命令安装并启动
Apache
:
#
安装
Apache
sudo yum -y install httpd
#
将
Apache
设置为开机启动
sudo systemctl enable httpd
#
启动
Apache
sudo systemctl start httpd
Webui
访问
apache
:
http://116.63.162.238/
如果能看到如下界面 Apache 就安装好了。
1.5.3HDP 安装包部署到 Apache
#
移动要所报到
/var/www/html/
下:
cd /var/www/html/
sudo mv ~/ambari-2.7.4.0-centos7.tar.gz /var/www/html/
sudo mv ~/HDP-3.1.4.0-centos7-rpm.tar.gz /var/www/html/
sudo mv ~/HDP-GPL-3.1.4.0-centos7-gpl.tar.gz /var/www/html/
sudo mv ~/HDP-UTILS-1.1.0.22-centos7.tar.gz /var/www/html/
#
解压缩
sudo tar -zxvf ambari-2.7.4.0-centos7.tar.gz
sudo tar -zxvf HDP-3.1.4.0-centos7-rpm.tar.gz
sudo tar -zxvf HDP-GPL-3.1.4.0-centos7-gpl.tar.gz
sudo tar -zxvf HDP-UTILS-1.1.0.22-centos7.tar.gz
#
安装压缩包清理
sudo rm -r ambari-2.7.4.0-centos7.tar.gz
sudo rm -r HDP-3.1.4.0-centos7-rpm.tar.gz
sudo rm -r HDP-GPL-3.1.4.0-centos7-gpl.tar.gz
sudo rm -r HDP-UTILS-1.1.0.22-centos7.tar.gz
#
更改目录权限
sudo chmod -R ugo+rX /var/www/html/
最终几个
yum
库的
Base URL
如下:
HDP-3.1 yum
本地仓库地址:
http://djt-0001/HDP/centos7/3.1.4.0-315/
HDP-3.1-GPL yum
本地仓库地址:
http://djt-0001/HDP-GPL/centos7/3.1.4.0-315/
HDP-UTILS-1.1.0.22 yum
本地仓库地址:
http://djt-0001/HDP-UTILS/centos7/1.1.0.22/
1.5.4
配置使用本地
yum
源
在
djt-0001
节点上的
/etc/yum.repos.d/
目录下,创建
ambari.repo
文件,添加如下内容:
cd /etc/yum.repos.d/
sudo vi ambari.repo
[ambari-repo]
name=ambari
#
指向
yum
源的地址
baseurl=http://djt-0001/ambari/centos7/2.7.4.0-118/
#
若是
1
将对下载的
rpm
将进行
gpg
的校验,校验密钥就是
gpgkey
,一般自己的
yum
源是不
需要检测的。
gpgcheck=0
#enable=0
是指这个组不可用;
enable=1
是指这个组可用;若是没写就默认可用。
enabled=1
验证
HDP
本地
yum
源:
yum repolist
看到上图效果,就说明本地 yum 源就创建好了。
1.6 安装 MySQL
1.6.1 安装 MySQL
我们要安装
MySQL5.5
之后的版本,这里选择
5.7
。
安装
MySQL
的
Yum
仓库:
sudo yum -y localinstall
https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
安装
MySQL
:
sudo yum -y install mysql-community-server
设置为开机启动:
sudo systemctl enable mysqld
启动
MySQL:
sudo systemctl start mysqld
查看
MySQL
状态:
sudo systemctl status mysqld
查看临时
root
临时密码:
sudo grep 'temporary password' /var/log/mysqld.log
我们看到随机生成的
root
临时密码是
(
注意每次随机生成密码不一样,不要死记
)
:
7yjfp>?Tpz&,
修改
root
密码,先进入
mysql
命令行:
mysql -uroot -p
这时会要求输入密码,我们输入上
述临时密码然后回车即可。
然后按照如下命令把 root 用户的密码改为 root%123:
MySQL
常用密码参数:
validate_password_policy
:安全强度,默认为中,即
1
,要求必须包含 数字、符号、大小写
字母,长度至少为
8
位。
validate_password_length
:密码最小长度
validate_password_mixed_case_count
:至少有大小写字母
n
对,即
2*n
个
validate_password_number_count
:最少数字数量
validate_password_special_char_count
:最少符号数量
set global validate_password_policy=0;
set global validate_password_mixed_case_count=0;
set global validate_password_number_count=3;
set global validate_password_special_char_count=0;
set global validate_password_length=3;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root%123';
Exit
在生产上建议把 root 密码设置的更加复杂,我这里设置的 root 只能本机连接。
1.6.2 安装 MySQL 的 Java 驱动
最后将
MySQL
的
java
驱动
mysql-connector-java-8.0.18.jar
上传到
djt-0001
的用户主目录,并
移动到一个目录下:
sudo mkdir -p /usr/share/java
sudo mv ~/mysql-connector-java-8.0.18.jar /usr/share/java
我们后面设置 Ambari-Server 时会用到这个驱动包。
1.7 部署 AmbariServer
1.7.1Ambari 架构原理
1.Ambari
介绍
Ambari
是
Hadoop
分布式集群配置管理工具,是由
hortonworks
主导的开源项目,是
apache
基金会的开源项目,已经成为
Hadoop
运维系统中的得力助手。
Ambari
充分利用了一些已有
的优秀开源软件,巧妙地把它们结合起来,使其在分布式环境中做到了集群式服务管理能力、
监控能力、展示能力。
2.Ambari
架构原理
Ambari
框 架 采 用 的 是
Server/Client
的 模 式 , 主 要 由 两 部 分 组 成 :
ambari-agent
和
ambari-server
。
ambari-server
主要管理部署在每个节点上的管理监控程序。
Ambari-agent
部
署在监控节点上运行的管理监控程序。
ambari-web
作为用户与
Ambari server
交互的。
Ambari
提供
Ambari web
,
rest api
,
Ambari shell
三大方式操作集群;
Ambari
将集群的配置、各个服务的配置等信息存在
Ambari server
端的
DB
中
(
比如可以是
Mysql)
;
Ambari server
与
Ambari agent
的交流走
RPC
,即
agent
向
server
报告心跳,
server
将
command
通过
response
发回给
agent
,
agent
本地执行命令;
Ambari
有自己的一套监控、告警、镜像服务,以可插拔的形式供上层服务调用;
1.7.1 安装 Ambari Server
在
djt-0001
上执行如下命令,稍等片刻,
ambari-server
就安装好了
.
sudo yum -y install ambari-server
1.7.2 创建 Ambari 数据库资源
Ambari
在配置的时候需要
MySQL
来存储数据,因此我们来创建相关数据库资源,进入
MySQL:
mysql -uroot -p
执行如下命令:
set global validate_password_policy=0;
set global validate_password_mixed_case_count=0;
set global validate_password_number_count=3;
set global validate_password_special_char_count=0;
set global validate_password_length=3;
create database ambari;
CREATE USER 'ambari'@'%' IDENTIFIED BY 'bigdata';
GRANT ALL ON ambari.* TO 'ambari'@'%';
FLUSH PRIVILEGES;
use ambari;
source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql;
exit
1.7.3 配置 AmbariServer
执行如下命令开始设置
Ambari-Server:
sudo ambari-server setup
选择是否自定义
ambari-server
的运行用户,我们保持默认
root
用户即可,所以输入
n
并回
车。
在下图中,我们选择 2,代表自定义 java,然后回车:
如下图所示,我们需要指定自己安装的
java
的路径
/usr/local/jdk
,然后回车:
如下图提示是否下载并安装
LZO
的包,我们输入
y
并回车:
是否进入数据库高级设置,我们输入
y
然后回车:
在选择数据库的环节,我们选择
3
也就是
MySQL
,然后回车:
MySQL
的相关配置我们均采用默认值,默认用户和
db
都是
ambari
,密码是
bigdata
,然后回
车
(
它会自动创建
)
:
如下图,我们需要指定
MySQL
的驱动包所在的路径
/usr/share/java/mysql-connector-java-8.0.18.jar
,然后回车:
如下图,我们选择可以远程连接该数据库
(y)
,然后回车就配置完毕了。
1.8Ambari 部署核心技术组件
1.8.1 启动 Ambari-Sever
在
djt-0001
上启动
amabri-server
,出现如下界面就启动成功了
.
sudo ambari-server start
如果出现错误,一定要查看日志:
vi /var/log/ambari-server/ambari-server.log
遇到的错误:不能启动服务“
REASON: Server not yet listening on http port 8080 after 50 seconds.
Exiting.
”
原因:由于本地的公网
ip
改变或者不稳定导致的链接不上。
解决:修改
/etc/hosts
,将
hostname
公网
IP
映射改为内网映射。
通 过
webui
访 问
Ambari
:
http://116.63.162.238:8080
, 用 户 名 密 码 默 认 是
admin/admin,如果看到如下界面就代表 ambari 真正启动好了。
常见问题:Ambari 启动正常,没有错误日志,但是通过 http://116.63.162.238:8080
无法访问 Ambari。
原因:
1. 防火墙没有关闭(查看防火墙:
sudo systemctl status firewalld
)
2. 华为云服务 8080 端口没有对外开放
解决:
1.关闭防火墙:
sudo systemctl stop firewalld
2.开放华为云服务器 8080 端口
1)进入控制台
2)进入当前节点
3
)进入安全组
4)打开“入方向规则”
勾选常见协议端口 8080
完成 8080 端口添加
1.8.2 部署 Amabri 集群
1.
启动安装向导
如下图所示,点击
Ambari
主界面中的
"Launch Install Wizard",
启动安装向导:
2.
集群名称
接下来我们要给集群起个名字,我们就叫做
myclutser
,名字可以随便起,然后点击右下角
的
”next“
,如下图所示:
3.
版本选择
首先要选择
HDP3.1.4.0
,因为我们下载的就是这个版本的安装包,已经构建自本地
yum
仓
库,然后要选择
”Use Local Repository“
,如下图:
接着要把滚动条往下拉,把无用的其他操作系统的仓库删掉,如下图所示:
最终我们只保留
"readhat7"
的仓库,接下来要把直接部署
yum
本地仓库的地址填进去,同时
不要勾选下面的两个高级选项,如下图:
各个仓库的地址参考下表,我们在前面章节部署
yum
本地源时已经见过了。
HDP-3.1 yum
本地仓库地址:
http://djt-0001/HDP/centos7/3.1.4.0-315/
HDP-3.1-GPL yum
本地仓库地址:
http://djt-0001/HDP-GPL/centos7/3.1.4.0-315/
HDP-UTILS-1.1.0.22 yum
本地仓库地址:
http://djt-0001/HDP-UTILS/centos7/1.1.0.22/
4.
注册主机
我们按照下图所示注册主机到
Ambari
:
上面的私钥要拷贝完整,一点也不能少,最后一行也不要换行。
点击右下角按钮开始注册,会弹出提示窗口,点击”
CONTINUE
“即可:
这时会自动开始注册,如下图所示。
报 错 :
ERROR 2020-09-07 22:58:10,547 main.py:269 - Ambari agent machine hostname
(localhost.localdomain) does not match expected ambari server hostname (djt-0001). Aborting
registration. Please check hostname, hostname -f and /etc/hosts file to confirm your hostname is
setup correctly
解决:修改
/etc/hosts
文件,去掉无关配置
当看到所有主机都为 Success 状态时就可以点击下一步了,如下图所示:
主机在注册过程中会去各节点检查环境是否有问题,我么可以点击上图的”
Click here to see
thewarnings
“去查看,例如:
这里的警告是云服务器的一些警告,所以不用管它,直接点
close
。然后直接点击右下角的”
NEXT
“,这时会弹出窗口,问你有警告是否忽略,我们选择”
OK
“会自动进入下一步。
5.
选择要安装的服务
Amabri
管大数据的各个组件叫做
Service
,在这一步要选择同时安装的服务,当然我们也可
以先不选后面再选。
在这里我们选择安装下
Hadoop
相关的服务,其余的服务就取消掉对话框的对勾
(
它默认选了
一堆,一定要去掉,好多用不到
)
,如下图所示:
在这里要特别注意,在
Ambari
里
Hadoop
被当做多个服务例如
HDFS
、
YARN
等,如果你选择
的服务依赖于其他服务他会提示的,你点击确认后会自动勾选,然后下一步即可
6.
分配
Mater
服务安装到哪些主机
接下来
Ambari
会让你选择
Master
服务要安装到哪些主机,所谓
Master
服务,是指的各个
服务的
Master
服务,例如
HDFS
的
Master
服务就是
namenode
,因为我们就一个节点,所以
保持不动直接下一步:
7.
分配
Slave
服务和
Client
安装到哪些主机
8.
自定义
Service
接下来是一些自定义
Service
的配置,首先会让你设置一些服务的密码,如下图:
这里要注意,随着前面你选的
Service
的不同,这里也会不同,点击
”next“
会让你确认一些服
务的目录,我们先保持默认,直接
”next“
,如下图:
然后是确认各个
service
运行在操作系统的哪个用户下,我们也保持默认,如下图:
点击下一步,会让我们确认其他的配置,我们保持默认直接点 NEXT:
注意,这里随着你前面选择的
service
的不同会有很大差异,比如你要选择了
Hive
,它一定
会要你输入
MySQL
相关信息,所以不要死记硬背。
上图中
ADVANCED
爆红,说
ssl.client.keystore.password
密码不匹配,这里面默认设置密
码为
admin
即可。
9.Review
在
Review
环节我们要仔细检查之前的配置,没有问题就点击
”DEPLOY“
正式开始部署了,如
下图所示:
点击 DEPLOY 会开始初始化任务,如下图:
初始化完就开始部署了。
1.9.4 纳入 Ambari 管理
这一步我们要先把新节点 djt-0002
和
djt-0003
纳入到
Amabri
进行管理。
在下拉菜单中点击如下按钮:
接下来就进入了添加向导,选择要添加的主机名,注意一行一个,输入
Ambari-server
的私
钥,
SSH
用户选择
hadoop
,如下图所示,然后下一步。
接下来进开始在新加的节点上自动安装 ambari-agent 了,如下图,安装完毕之后点下一步。
问 题 : 报 错
Host registration aborted. Ambari Agent host cannot reach Ambari Server
'localhost:8080'
解决:
sudo vim /etc/ambari-agent/conf/ambari-agent.ini
#
检查
hostname=xxx
是否是对应的
hostname
接下来选择新增节点要安装的服务
(slave
服务
)
,我们选择在
djt-0002
和
djt-0003
上安装
DataNode
和
Client
,其余服务后面单独再安装:
配置环节保持默认,如下图:
后续
Review
、安装测试、
Summary
环节与之前类似,不再累述,部署完之后,可以看到:
10.
部署启动与测试
部署过程需要花较长时间,随时可以看到进度,如下图:
在部署完服务之后,
Ambari
会自动启动服务并进行冒烟测试,测试通过看到如下界面就代
表成功安装好了,点击
”NEXT“
即可:
11.Summary
最后一步就是现实一些摘要信息,如下图:
直接点击
"complete"
这个部署过程就结束了,会自动进入
Amabri
的
dashboard
的页面:
1.8.3 验证集群
经过前面的步骤我们搭建好了
Ambari
的集群,虽然只有一个
djt-0001
节点,但是五脏俱全。
同时,我们也通过
Amabri
部署了
HDFS
、
YARN
,包括
Zookeeper
集群,因此我们可以简单验
证下
HDFS
,直接在
HDFS
上执行如下命令:
注意:通过 Ambari 部署的 HDFS 的,管理员用户是 hdfs
在本地创建一个
djt.log
日志文件,内容如下所示:
在
hdfs
中创建一个
/test
目录,并将
djt.log
上传至
/test
目录下。
将
hadoop
自带
WordCount
提交到
yarn
集群运行。
sudo -u hdfs yarn jar
/usr/hdp/3.1.4.0-315//hadoop-mapreduce/hadoop-mapreduce-examples-3.1.1.3.1.4.0-315.jar
wordcount /test/djt.log /test/out