1.1 环境配置
使用XShell软件,创建5个会话窗口,五个服务器的地址分别是:
1.1.1 配置主机名、hosts文件
# 主机名
# 配置各节点的主机名
[root@main-master ~]# vim /etc/sysconfig/network
#查看
[root@main-master ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=main-master
# 配置hosts
[root@main-master ~]# vim /etc/hosts
#在配置文件上加各节点IP
# 一定要保留127.0.0.1,否则cm分发会心跳错误
127.0.0.1 localhost
1.1.2 配置各节点之间的ssh免密玥
# 在各个节点生成自己的公钥和私钥
[root@main-master ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
[root@data1 packages]# cd ~
# 将自己的公钥分发给其他节点,包括自己分发给自己
首先在main-master节点上
[root@main-master ~]# ssh-copy-id -i .ssh/id_rsa.pub main-master
[root@main-master ~]# ssh-copy-id -i .ssh/id_rsa.pub back-master
[root@main-master ~]# ssh-copy-id -i .ssh/id_rsa.pub datanode1
[root@main-master ~]# ssh-copy-id -i .ssh/id_rsa.pub datanode2
[root@main-master ~]# ssh-copy-id -i .ssh/id_rsa.pub datanode3
然后依次在每个节点执行上述命令
1.1.3 安装jdk环境
# 安装jdk环境
# rpm 安装
[root@main-master soft]# rpm -i jdk-8u221-linux-x64_2.rpm
# 环境变量配置
vim /etc/profile
# 在配置文件里增加
export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$JAVA_HOME/bin
# 使环境变量生效
. /etc/profile
1.1.4 关闭防火墙
#需要注意的是,每次节点挂掉重启后,都需要关闭防火墙
[root@main-master ~]# service iptables stop
#检查是否已经关闭
[root@hadoop1 ~]# chkconfig iptables off
1.1.5 SELINUX关闭
[root@main-master ~]# setenforce 0
# SELINUX=disabled
[root@main-master ~]# vi /etc/selinux/config
1.1.6 配置内网ntp服务器
# 选定一台节点当ntp主服务器,其他节点同步本节点时间
# 修改ntp主服务器配置如下:
[root@main-master ~]# vim /etc/ntp.conf
# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).
driftfile /var/lib/ntp/drift
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
#restrict default kod nomodify notrap nopeer noquery
#restrict -6 default kod nomodify notrap nopeer noquery
restrict default nomodify
# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict -6 ::1
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.127.1.0
fudge 127.127.1.0 stratum 10
# 修改其他服务器ntp配置 # 其他节点的server服务器均注释,换为以下内容:
[root@back-master ~]# vim /etc/ntp.conf
[root@datanode1 ~]# vim /etc/ntp.conf
[root@datanode2 ~]# vim /etc/ntp.conf
[root@datanode3 ~]# vim /etc/ntp.conf
# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).
driftfile /var/lib/ntp/drift
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict -6 ::1
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server hadoop
#允许时间服务器(上游时间服务器)修改本机时间
restrict hadoop nomodify notrap noquery
#broadcast 192.168.1.255 autokey # broadcast server
#broadcastclient # broadcast client
# 手动同步时间一次,之后开启ntp服务自动更新
ntpdate hadoop
# 在所有节点启动ntp服务
[root@main-master ~]# service ntpd start
Starting ntpd: [ OK ]
# 设置ntp服务开机启动
[root@hadoop ~]# chkconfig ntpd on
# 查询ntp服务是否开启成功
[root@hadoop ~]# ntpq -p
remote refid st t when poll reach delay offset jitter ==============================================================================
*LOCAL(0) .LOCL. 10 l 13 64 1 0.000 0.000 0.000
1.2 创建本地源、并将本地源作为其他节点的yum源
# 创建本地源
# 将安装光盘挂载,使用其内的依赖包。
# 创建iso文件夹,和cdron文件夹
mkdir /mnt/iso
mkdir /mnt/cdron
# 将ISO镜像文件文件上传至/mnt/iso中
# 将iso文件,挂在在/mnt/cdron下:
mount -o loop /mnt/iso/centos.iso /mnt/cdron
# 将/mnt/cdron目录下所有的文件复制到/opt/下,即将yum源仓库放在/opt目录下
cp -rv /mnt/cdron/* /opt/
# 切换到/opt/目录下:删除*.html、删除CentOS/repodata/TRANS.TBL
cd /opt
rm -rf *.html
rm -rf repodata/TRANS.TBL
# 安装createrepo工具
## 切换到 /mnt/cdron/Packages 下
## 首先安装deltarpm、其次python-deltarpm、最后createrepo
## 切换到/opt/repodata/中,复制c6-x86_64-comps.xml的文件名。
## 生成YUM通用数据库
createrepo -g /opt/repodata/b4e0b9342ef85d3059ff095fa7f140f654c2cb492837de689a58c581207d9632c6-x86_64-comps.xml /opt/
# 创建本地源文件
vi /etc/yum.repos.d/local-yum.repo
# 内容如下:
[local-yum]
name=local-yum
baseurl=file:///opt/
enabled=1
gpgcheck=0
# 先将网络yum源的配置文件更名(让其失效)
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.bak
# 清除yum源缓存
yum clean all
# 完成本地源创建
# 将本地源作为其他节点的yum源
# 在本地源节点上,安装httpd服务
[root@main-master ~]# yum install -y httpd
# 修改httpd配置,将默认根路径指向本地源中的opt目录。
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
DocumentRoot "/opt"
# This should be changed to whatever you set DocumentRoot to.
<Directory "/opt">
# 修改/opt目录的属主和属组为apache
[root@main-master ~]# chown -R apache.apache /opt/
# 删除默认的欢迎主页
rm /etc/httpd/conf.d/welcome.conf
# 重启httpd服务
service httpd restart
# 完成本地源的http服务搭建
# 将其他节点的yum源修改为之前的本地源
cd /etc/yum.repos.d
# 将默认的yum源备份即关闭
mv CentOS-Base.repo CentOS-Base.repo.bak
# 新建本地源文件
vim local-yum.repo
# 修改内容为
[local-yum]
name=local-yum
baseurl=http://main-master
enabled=1
gpgcheck=0
#清楚yum安装包和缓存
# yum clean all
# yum makecache
1.4 安装系统依赖包
# 在三个datanode节点均安装如下依赖包
yum install -y chkconfig python bind-utils psmisc libxslt zlib sqlite cyrussasl-plain cyrus-sasl-gssapi fuse fuse-libs redhat-lsb
1.5 安装mysql
yum install mysql-server
service mysqld start
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
mysql> delete from user where host !='%';
mysql> flush privileges
2. 安装过程
2.1 创建安装目录,并上传cm压缩包,并解压
# 安装包地址:http://archive.cloudera.com/cm5/cm/5/
# 在所有节点,创建CM的安装路径
mkdir /opt/cloudera-manager
# 上传安装包到一台服务器,并解压
[root@main-master soft]# tar xf cloudera-manager-el6-cm5.12.2_x86_64.tar_2.gz -C /opt/cloudera-manager/
# 并在其他节点执行相同操作
2.2 修改agent配置
[root@main-master cloudera-scm-agent]# pwd
#目录
/opt/cloudera-manager/cm-5.12.2/etc/cloudera-scm-agent
# 修改默认的cm服务端节点,本例中是main-master。
[root@main-master cloudera-scm-agent]# vim vim config.ini
# Hostname of the CM server.
server_host=main-master
2.3 创建用户cloudera-scm
# 三个节点均需要创建
useradd --system --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
2.4 创建cdh的仓库目录
# 在server节点
mkdir -p /opt/cloudera/parcel-repo
chown cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo
# 在所有agent节点
mkdir -p /opt/cloudera/parcels
chown cloudera-scm:cloudera-scm /opt/cloudera/parcels
2.5 配置CM Server数据库
# 拷贝mysql jar文件到目录 /usr/share/java/
# 注意jar包名称要修改为mysql-connector-java.jar
[root@main-master soft]# cp mysql-connector-java-5.1.26-bin.jar /usr/share/java/mysql-connector-java.jar
# 连接server上的mysql数据库,建立一个msyql用户 # cmadmin - 123456
mysql> grant all on *.* to 'cmadmin'@'%' identified by '123456' with grant option;
# 执行CM数据库配置脚本
cd /opt/cloudera-manager/cm-5.4.3/share/cmf/schema/
格式:数据库类型、数据库、数据库服务器、用户名、密码、cm server服务器
[root@main-master schema]# ./scm_prepare_database.sh mysql cmtemp -h main-master -ucmadmin -p123456 --scm-host main-master scm scm scm
2.6 将cdh文件,放入server节点的本地仓库中
[root@main-master parcel-repo]# pwd /opt/cloudera/parcel-repo
[root@main-master parcel-repo]# ll /opt/soft/
[root@main-master parcel-repo]# mv /opt/soft/CDH-5.12.2-1.cdh5.12.2.p0.4-el6.parcel* ./
[root@main-master parcel-repo]# mv /opt/soft/manifest.json ./
[root@main-master parcel-repo]# ll
2.7 将server节点的cm文件手动分发到其他节点
[root@main-master soft]# pwd
#目录
/opt/soft
[root@main-master soft]# scp cloudera-manager-el6-cm5.12.2_x86_64.tar_2.gz back-master:`pwd`
[root@main-master soft]# scp cloudera-manager-el6-cm5.12.2_x86_64.tar_2.gz datanode1:`pwd`
[root@main-master soft]# scp cloudera-manager-el6-cm5.12.2_x86_64.tar_2.gz datanode2:`pwd`
[root@main-master soft]# scp cloudera-manager-el6-cm5.12.2_x86_64.tar_2.gz datanode3:`pwd`
[root@main-master cloudera-scm-agent]# pwd
#目录
/opt/cloudera-manager/cm-5.12.2/etc/cloudera-scm-agent
[root@main-master cloudera-scm-agent]# scp config.ini back-master:`pwd`/
[root@main-master cloudera-scm-agent]# scp config.ini datanode1:`pwd`/
[root@main-master cloudera-scm-agent]# scp config.ini datanode2:`pwd`/
[root@main-master cloudera-scm-agent]# scp config.ini datanode3:`pwd`/
2.8 启动CM Server、Agent
# Sever首次启动会自动创建表以及数据,不要立即关闭或重启,否则需要删除所有表及数据重新安装
# 在server端,启动server
[root@main-master init.d]# pwd
#目录
/opt/cloudera-manager/cm-5.12.2/etc/init.d
[root@main-master init.d]# ll
[root@main-master init.d]# ./cloudera-scm-server start
# 在所有agaent节点,启动agent
[root@main-master init.d]# ./cloudera-scm-agent start
#新开一个main-master命令窗口 去日志查看初始化进程
[root@main-master cloudera-scm-server]# pwd
#目录
/opt/cloudera-manager/cm-5.12.2/log/cloudera-scm-server
[root@main-master cloudera-scm-server]# tail -f cloudera-scm-server.log
# 当看到jetty服务启动时,说明server启动成功;
# 查看 hadoop:7180页面
# 用户名和密码均为 admin
# 如果失败,则去mysql删除上步中的temp数据库,重新开始初始化
3 CM安装配置
在 main-master:7180 页面中,选择 Cloudera Express 免费版。
如果之前只启动了server,那么需要在本页面搜索其他主机,进行集群划分。
由于我们自己启动了agent,那么这里会出现“管理的主机”,勾选构成集群即可。
此处选择安装的cdh的源,以及cdh的安装版本。
然后会自动将cdh文件分发到个节点,进行安装和配置
安装完进入下一步
3.1、主机检查
进行主机检查,会显示集群中存在的问题。一一进行解决。
1. Cloudera 建议将 /proc/sys/vm/swappiness 设置为最大值 10 。当前设置为 60 。使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf ,以在重启后保存该设置。您可以 继续进行安装,但 Cloudera Manager 可能会报告您的主机由于交换而运行状况不良。
# 在每个节点都执行如下语句
[root@main-master init.d]# echo 10 > /proc/sys/vm/swappiness
2. 已启用透明大页面压缩,可能会导致重大性能问题。请运行
echo never > /sys/kernel/mm/transparent_hugepage/defrag 和 echo never > /sys/kernel/mm/transparent_hugepage/enabled 以禁用此设置,然后将同一命令添加到 /etc/rc.local 等初始化脚本中,以便在系统重启时予以设置。
# 在每个节点都执行如下语句
[root@main-master init.d]# echo never > /sys/kernel/mm/transparent_hugepage/defrag [root@main-master init.d]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
# 并将如上两条语句写入到如下文件中
[root@main-master init.d]# vim /etc/rc.local
3.2、最小规模集群
最小规模的集群包含:
hdfs 、yarn、zookeeper
因此我们勾选自定义组件如下:
3.3 开启高可用(ha)
选中hdfs选卡,开启高可用。
输入集群服务名称。
选择集群的两个namenode节点和journal节点。
这里我们选择三台datanode来安装jn节点。
进行ha模式的搭建,会报namenode的格式化失败,由于namenode已经格式化了一次并运行了,所以 会失败,但并没有影响。
完成搭建
此时可以看到,我们设置的main-master和back-master的50070端口都已经打开。而且一个处于active 状态,一个处于standby。
集群中的secondary namenode角色已经消失。
至此,高可用的最小模式的hdfs框架已经搭建完成。
每次登陆服务器前,进行以下操作。然后登陆ip:7180
可以查看组件的运行状况
启动配置过程中遇到的问题:
启动Hadoop时候datanode没有启动的原因及解决方案
启动YARN时,ResourceManager 和 NodeManager报错 Error found before invoking supervisord dictionary update s
Canary 测试无法为 /tmp/.cloudera_health_monitoring_canary_files 创建父目录