Hadoop集群搭建系统环境准备

Author Avatar
山小杰 11月 05, 2017
  • 在其它设备中阅读本文章

简介

Hadoop集群的搭建需要一系列的环境准备,包括操作系统参数的调整以及一些必备软件的安装等。

环境准备

硬件配置我就不说了,CDH官网有说明:硬件配置

测试使用嘛,随便搞搞就行。

操作系统就选用很受欢迎的开源免费的CentOS了。
以4个节点的测试集群为例:

ip hostname
192.168.0.201 master1
192.168.0.202 master2
192.168.0.203 worker1
192.168.0.204 worker2

所有节点安装CentOS7-x64操作系统

修改主机名hostname

# vim /etc/hostname
master1
或者
# hostnamectl set-hostname master1
查看hostname
# hostname

配置ip

# vim /etc/sysconfig/network-scripts/ifcfg-eth33/

TYPE=Ethernet
BOOTPROTO=static                # 设置为静态
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes                      # 开机启用
IPADDR=192.168.0.201            # ip地址
GATEWAY=xxx.xxx.xxx.xxx         # 网关
NETMASK=xxx.xxx.xxx.xxx         # 子网掩码
DNS=xxx.xxx.xxx.xxx             # DNS

重启服务
# systemctl restart network
查看ip
# ip addr

修改Hosts

# vim /etc/hosts

192.168.0.201    master1
192.168.0.202    master2
192.168.0.203    worker1
192.168.0.204    worker2

关闭防火墙

Hadoop集群运行需要用到很多端口,关掉防火墙省事些。
关闭防火墙:
# systemctl stop firewalld.service
关闭开机自动启动:
# systemctl disable firewalld.service

关闭SELinux

编辑/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=disabled

配置SSH免密码登陆

1.查看ssh服务状态(CentOS默认已安装并开机自启动的)
# service sshd status
2.生成私钥和公钥(所有节点都执行)
# ssh-keygen -t rsa
# cd ~/.ssh
3.在master2节点
# cp id_rsa.pub master2.id_rsa.pub
# scp master2.id_rsa.pub root@master1:~/.ssh
4.在worker1节点
# cp id_rsa.pub worker1.id_rsa.pub
# scp worker1.id_rsa.pub root@master1:~/.ssh
5.在worker2节点
# cp id_rsa.pub worker2.id_rsa.pub
# scp worker2.id_rsa.pub root@master1:~/.ssh
6.在master1节点
将所有节点的公钥信息保存到主节点下的authorized_keys(新生成的)文件中
# cat id_rsa.pub >> authorized_keys
# cat master2.id_rsa.pub >> authorized_keys
# cat worker1.id_rsa.pub >> authorized_keys
# cat worker2.id_rsa.pub >> authorized_keys
如图所示:

7.再把authorized_keys文件拷贝到其它节点上去
# scp authorized_keys root@master2:~/.ssh
# scp authorized_keys root@worker1:~/.ssh
# scp authorized_keys root@worker2:~/.ssh
8.测试SSH:

配置ntp时间同步

集群中所有节点必须保持时间同步,如果时间相差较大会引起问题(如HBase服务无法正常启动)

实现方法:master1节点作为ntp服务器,对其它节点提供时间同步服务。 所有其它节点以master1节点为基础同步时间。
1.所有节点安装相关ntp组件
# yum install ntp/或者手动安装rpm包
2.所有节点设置时区,中国上海:
# timedatectl set-timezone Asia/Shanghai
3.启动ntp,以及设置开机启动
# systemctl start ntpd
# systemctl enable ntpd
4.在master1节点上设置现在的准确时间
# date -s “2017-06-15 09:10:00”
5.配置ntp服务器(master1节点)
# vim /etc/ntp.conf
配置示例:

6.在其它节点上设置ntp客户端
# vim /etc/ntp.conf
配置示例:

7.配置文件修改完毕后,重启ntp服务
# systemctl restart ntpd
8.在其它节点上手动同步master1的时间
# ntpdate -u 192.168.0.201
9.查看同步状态(可能需要稍等一会才能同步上)
# ntpstat

禁用Transparent Hugepage

1.查看当前是否启用(启用状态可能会严重降低Hadoop集群性能,CentOS默认启用)
# cat /sys/kernel/mm/transparent_hugepage/enabled

[always] madvise never    表示已启用
always madvise [never]    表示已禁用

2.禁用Transparent Hugepage(重启生效):
# vim /etc/rc.local

echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled

配置如图:

3.赋予rc.local文件可执行权限
# chmod +x /etc/rc.d/rc.local

调整vm.swappiness Linux内核参数

该值用于控制从物理内存到磁盘上的虚拟内存的应用数据的交换。值越高,内存交换越积极。值越低,交换的次数越少。

大多数系统默认为60,但不适用于Hadoop集群,因为即使有足够的内存,Hadoop进程也有可能会被交换到磁盘,影响集群稳定性和性能。

1.查看当前的参数
# cat /proc/sys/vm/swappiness
30 当前是30,建议设置为1-10之间,最好为1
2.设置vm.swappiness值为1
# vim /etc/sysctl.conf
vm.swappiness=1
如图所示:

MySQL 5.6安装

1.检查MySQL及相关RPM包是否已安装,如果有安装,则移除
# rpm -qa | grep -i mysql
# yum -y remove mysql-libxxxx
2.下载MySQL包:MySQL-5.6.36-1.linux_glibc2.5.x86_64.rpm-bundle.tar
解压:
# tar -xvf MySQL-5.6.36-1.linux_glibc2.5.x86_64.rpm-bundle.tar
3.安装mysql-server
# rpm -ivh MySQL-server-5.6.36-1.linux_glibc2.5.x86_64.rpm
与已安装的软件有冲突,需要卸载有冲突的软件:

# yum -y remove xxxxxxxxx
再次安装mysql-server,安装成功,但是下面执行数据库初始化会报错,缺少一个模块

需要安装autoconf(需要联网或者搭建本地yum仓库或者从CentOS7安装包里拷出autoconf的rpm包及其依赖包,手动安装):
# yum -y install autoconf

说明:这里有个坑,即最好是先安装autoconf,然后再装mysql-server,这个时候安装程序就会自动进行Mysql初始化。
4.安装客户端
# rpm -ivh MySQL-client-5.6.36-1.linux_glibc2.5.x86_64.rpm
5.初始化mysql(因为安装server之前没有安装autoconf,所以这里需要手动初始化mysql)
# /usr/bin/mysql_install_db
6.启动mysql服务
# service mysql start
若无法启动则将/var/lib/mysql目录下所有文件及子文件夹的用户及用户组设置为mysql
# chown -R mysql:mysql /var/lib/mysql/
设置开机启动:
# chkconfig mysql on
# chkconfig --list | grep mysql
7.对mysql进行安全设置
查看root账户密码:
# cat /root/.mysql_secret
执行安全设置(需要确保MySQL服务已经正常启动):
# /usr/bin/mysql_secure_installation

a)修改root用户密码 Y
b)删除匿名账号 Y
c)取消root用户远程登录 N
d)删除test库和对test库的访问权限 Y
e)刷新授权表使修改生效 Y

8.进入mysql
# mysql -uroot -p
9.开放远程登陆权限
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
10.MySQL的默认安装位置

/var/lib/mysql/ ———-#数据库目录
/usr/share/mysql ——–#配置文件目录
/usr/bin ——————#相关命令目录
/etc/init.d/mysql ———#启动脚本

11.如果需要修改字符集则需配置/etc/my.cnf文件
etc目录下没有该文件则从/usr/share/mysql/下复制一个过来
# cp /usr/share/mysql/my-default.cnf /etc/my.cnf
查看字符集:

mysql> show variables like ‘%collation%’;
mysql> show variables like ‘%char%’;
mysql> show create database databaseName;
mysql> show create table tableName;

JDK1.8安装

1.查看系统自带java版本,如果已安装就先卸载掉
# java -version

2.安装Oracle官网下载jdk的rpm安装包,并使用rpm -ivh packageName安装:
Download jdk1.8
3.修改环境变量
# vim /etc/profile
添加如下(使用rpm安装的java在/usr/java/jdk1.8XXXX)

export JAVA_HOME=/usr/java/jdk1.8.0_131
export JRE_HOME=/usr/java/jdk1.8.0_131/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

4.执行命令使环境变量生效
# source /etc/profile
5.测试
# java -version

OVER

至此,Hadoop集群搭建的环境准备部分已结束。