1.1 环境配置

使用XShell软件,创建5个会话窗口,五个服务器的地址分别是:

hadoop c参数 hadoop cm_vim

1.1.1 配置主机名、hosts文件

# 主机名

 # 配置各节点的主机名

[root@main-master ~]# vim /etc/sysconfig/network

hadoop c参数 hadoop cm_cloudera_02

#查看

[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      

hadoop c参数 hadoop cm_vim_03

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 免费版。

hadoop c参数 hadoop cm_mysql_04


如果之前只启动了server,那么需要在本页面搜索其他主机,进行集群划分。

hadoop c参数 hadoop cm_cloudera_05


由于我们自己启动了agent,那么这里会出现“管理的主机”,勾选构成集群即可。

hadoop c参数 hadoop cm_vim_06

此处选择安装的cdh的源,以及cdh的安装版本。

  

hadoop c参数 hadoop cm_vim_07

然后会自动将cdh文件分发到个节点,进行安装和配置

hadoop c参数 hadoop cm_mysql_08

安装完进入下一步

hadoop c参数 hadoop cm_cloudera_09

3.1、主机检查

hadoop c参数 hadoop cm_cloudera_10

进行主机检查,会显示集群中存在的问题。一一进行解决。

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
因此我们勾选自定义组件如下:

hadoop c参数 hadoop cm_vim_11

3.3 开启高可用(ha)

选中hdfs选卡,开启高可用。

hadoop c参数 hadoop cm_vim_12

 

输入集群服务名称。

hadoop c参数 hadoop cm_cloudera_13

选择集群的两个namenode节点和journal节点。

hadoop c参数 hadoop cm_mysql_14

这里我们选择三台datanode来安装jn节点。

hadoop c参数 hadoop cm_cloudera_15

进行ha模式的搭建,会报namenode的格式化失败,由于namenode已经格式化了一次并运行了,所以 会失败,但并没有影响。

hadoop c参数 hadoop cm_vim_16

完成搭建

hadoop c参数 hadoop cm_cloudera_17

此时可以看到,我们设置的main-master和back-master的50070端口都已经打开。而且一个处于active 状态,一个处于standby。

hadoop c参数 hadoop cm_cloudera_18

集群中的secondary namenode角色已经消失。

hadoop c参数 hadoop cm_mysql_19

至此,高可用的最小模式的hdfs框架已经搭建完成。

每次登陆服务器前,进行以下操作。然后登陆ip:7180

hadoop c参数 hadoop cm_cloudera_20

可以查看组件的运行状况

hadoop c参数 hadoop cm_vim_21

hadoop c参数 hadoop cm_cloudera_22

hadoop c参数 hadoop cm_mysql_23

hadoop c参数 hadoop cm_cloudera_24

启动配置过程中遇到的问题:

启动Hadoop时候datanode没有启动的原因及解决方案

启动YARN时,ResourceManager 和 NodeManager报错 Error found before invoking supervisord dictionary update s

Canary 测试无法为 /tmp/.cloudera_health_monitoring_canary_files 创建父目录