小坨的CentOS6.4搭建hadoop集群的实践笔记

虽然在一般的学习当中,8必用上集群,hadoop伪分布式配置已经够用,配置过程也很简单

Ubuntu上搭建hadoop伪分布式配置请看这里

CentOS上搭建hadoop伪分布式配置请看这里

但学hadoop不搭个集群说不过去。这里搭个hadoop集群,一边搞一边记录

说是集群,实际上只有一个master和一个slave,为了怜惜自己那一点的内存,为了不让CPU烧熟桌子

本搭建基于Hadoop 2,可适合任何 Hadoop 2.x.y 版本

安装CentOS6.4,两台

一台做Master,一台做Slave1,这里不做克隆了

在Windows使用VirtualBox安装CentOS教程

这步不必阐述,搭过虚拟机的同蟹都懂

在使用CentOS6过程中请注意,CentOS6和CentOS7的个别命令有些许不一样,如果你的是CentOS7,那么请注意有些命令间的差别

配置网络

为了虚拟机上各个节点都能互联,我们必须得配置网络,使它们使用同一个网段。

修改网络配置文件

Master节点上修改网卡配置

vi /etc//network-scripts/ifcfg-eth0      
#eth0这里是我机子上的网卡名,注意查看自己机子上的网卡名

首先是改

BOOTPROTO=static
ONBOOT=yes

再然后是增加

IPADDR=192.168.100.10	#IP地址   
NETMASK=255.255.255.0    #子网掩码
GATEWAY=192.168.100.2	#网关地址
DNS1=8.8.8.8	#DNS服务器地址

Slave1节点上修改网卡配置,基本和Master上的配置一样,但把IP地址改为192.168.100.11
配置联网方式

打开虚拟网络编辑器:
VMnet8(NAT模式)----子网IP设置为:192.168.100.0----NAT设置:网关改为192.168.100.2—确定----去掉使用本地DHCP服务将IP地址分配给虚拟机选项—确定

重启网卡

在Master节点和Slave1节点上重启网卡

service network restart

注:CentOS7上重启网卡的命令是

systemctl restart network

确保都重启成功,假如有一项重启失败,则证明你还有bug要修

我们先永久关闭掉Master和Slave1上的防火墙

#按顺序执行这两个命令
service iptables stop
chkconfig iptables off

CentOS7上关闭防火墙的命令

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

改主机名并配置主机名到IP地址的映射

Master上改主机名

vi /etc/sysconfig/network 

修改HOSTNAME=Master

Slave1上改主机名

vi /etc/sysconfig/network 

注:CentOS7上改主机名命令

vi /etc/hostname

添加HOSTNAME=Slave1

配置主机名到IP地址的映射(两个节点上都配一遍)

vi /etc/hosts
192.168.100.10   Master
192.168.100.11   Slave1

注:原来的/etc/hosts里面,只保留127.0.0.1 localhost

修改完之后我们都重启一下

reboot

测试能不能跑通,实现节点间互联

查看网络配置是否成功

ifconfig	#显示的网络信息是否和我们配置的契合

Master上

ping baidu.com
ping 192.168.0.104
ping Slave1

Slave1上

ping baidu.com
ping 192.168.0.103
ping Master

如果ping不通则说明你还有bug要修

更换yum源

我们现在把两台虚拟机的默认yum源更换为国内的阿里云yum源,让下载安装及更新速度更快一些

#备份缓存
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#下载新的CentOS-Base.repo 到/etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
#添加EPEL
wget -O /etc/yum.repos.d/epel-6.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum clean all	#清楚缓存
yum makecache	#生成缓存

CentOS7上更换yum源,请参考这篇文章
CentOS 7的yum更换为国内的阿里云yum源

两个节点都创建hadoop用户

useradd -m hadoop -s /bin/bash   # 创建新用户hadoop
passwd hadoop
visudo             #为hadoop用户增加管理员权限,以避免后续遇到一系列权限问题

在root ALL=(ALL) ALL 这行下面增加
hadoop ALL=(ALL) ALL,如图所示,图中的间隔为tab
在这里插入图片描述
两个节点都登录hadoop用户

su hadoop    #后续的操作在hadoop用户下执行

配置SSH无密码登录

一般情况下,CentOS 默认已安装了 SSH client、SSH server,我们在两个节点上打开终端执行如下命令进行检验

rpm -qa | grep ssh

如图,如果有显示openssh-server和openssh-client就证明已安装
在这里插入图片描述
假如没有安装,我们使用以下命令安装

sudo yum install openssh-clients
sudo yum install openssh-server

在安装 SSH client、SSH server之后,我们在Master和Slave1节点上检验是否能用ssh登录到本机

ssh localhost

如图,ssh在两个节点上均是能正常使用的,虽然每次登录时要输入密码
在这里插入图片描述
exit命令退出ssh连接后
我们在Master节点上设置无密码ssh登录本机

cd ~/.ssh    #假如没有此目录,那么你需要ssh localhost后再执行这一步操作  
rm ./id_rsa*    #如果有之前瞎鼓捣生成的公钥的话,就删除,删除失败就跳过
ssh-keygen -t rsa 	#生成公钥,一直按回车就好

在这里插入图片描述

cat ./id_rsa.pub >> ./authorized_keys   #让Master节点能无密码ssh本机
chmod 600 ./authorized_keys    #修改文件权限为只读

检验一下是否能在Master节点上无密码ssh登录本机

ssh localhost

这时连接本机已经不需要密码了
在这里插入图片描述
成功了之后就使用exit命令退出ssh连接

我们已经能在Master节点上无密码ssh登录本机了

接下来虾一步

使Master节点能无密码ssh登录Slave1节点

这时我们的Master节点是能ssh连接到Slave1节点了,但每一次都得输入密码,我们设置使Master节点能无密码ssh登录Slave1节点。

在Master上

scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/	#在线复制公钥给Slave1

在Slave1上

mkdir ~/.ssh       # 如果不存在该文件夹需先创建,若已存在则忽略
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys   #将Master传送过来的公匙加入授权
rm ~/id_rsa.pub    # 用完删掉,过河拆桥

在Master上测试是否能无密码ssh登录到Slave1

ssh Slave1

这时已经不需要密码登录了
在这里插入图片描述然后exit

两个节点上均安装Java环境

sudo yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel  #使用此命令安装openjdk

查查刚才的jdk安装到哪里了

rpm -ql java-1.7.0-openjdk-devel | grep '/bin/javac'	

此命令返回的路径去掉"bin/javac"就是我们jdk的安装位置,我们拿这个路径去配环境变量
在这里插入图片描述
像我这里的是/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.251.x86_64

vi ~/.bashrc

在文件后面加一行

export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.251.x86_64

让环境变量生效

source ~/.bashrc  

检验变量是否设置生效

java -version

我这里是ok了
在这里插入图片描述
在Master节点上安装Hadoop2

注意:是在Master节点上完成hadoop安装和配置。

下载Hadoop可以到这个网址https://mirrors.cnnic.cn/apache/hadoop/common/下载,选择版本时请选择Hadoop2.x.y版本。

下载时请下载 hadoop-2.x.y.tar.gz 这个格式的文件,这是编译好的,另一个包含 src 的则是 Hadoop 源代码,需要进行编译才可使用。

下载时也强烈建议下载(假如有) hadoop-2.x.y.tar.gz.mds 这个文件,该文件包含了检验值可用于检查hadoop-2.x.y.tar.gz 的完整性,否则若文件发生了损坏或下载不完整,Hadoop 将无法正常运行。(假如想知道怎么验证文件完整性,请自行百度搜索,因为我这里下载的不是hadoop-2.x.y.tar.gz.mds就不做演示了)

插一句题外话:假如嫌浏览器下载太慢,那么可以复制下载链接到迅雷打开下载,BT下载就是香。

下载好了之后我们执行解压安装

sudo tar -zxf ~/Download/hadoop-2.7.7.tar.gz -C /usr/local    #注意对应自己hadoop压缩包所在的位置
cd /usr/local/
sudo mv ./hadoop-2.7.7/ ./hadoop            # 将文件夹名改为hadoop
sudo chown -R hadoop:hadoop ./hadoop        # 修改文件权限

接虾来输入以下命令来检查 Hadoop 是否安装成功,成功则会显示 Hadoop 版本信息

cd /usr/local/hadoop
./bin/hadoop version

ojbk
在这里插入图片描述
配置PATH变量

将 Hadoop 安装目录加入 PATH 变量中,这样就可以在任意目录中直接使用 hadoo、hdfs 等命令了。

在 Master 节点上

vi ~/.bashrc
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
source ~/.bashrc	#使配置生效

如下图所示:
配置PATH变量配置PATH变量

保存后执行 source ~/.bashrc 使配置生效。

在Master节点上配置Hadoop2
在Master上安装hadoop之后,紧接着,我们在Master节点上配置hadoop,这里并不具体解释每个配置文件是什么意思,感兴趣的童鞋可以自行跳转链接去查。

Hadoop 默认模式为单机模式,无需进行其他配置即可运行。

如果要做Hadoop集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件:slaves、core-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml

这里的配置是进入相应的xml文件找到一对configuration空标签,然后替换如下内容

cd /usr/local/hadoop/etc/hadoop

修改core-site.xml

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://Master:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
</configuration>

修改 hdfs-site.xml,因为只有一个分片,所以dfs.replication为1,dfs.datanode.data.dir也只有一个

<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>Master:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
</configuration>

修改mapred-site.xml(实际上它默认文件名为 mapred-site.xml.template)

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>Master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>Master:19888</value>
        </property>
</configuration>

修改 yarn-site.xml

<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>Master</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

修改 slaves

将作为 DataNode 的主机名写入该文件,每行一个。

在伪分布式配置时,默认为 localhost的,因为节点即作为 NameNode 也作为 DataNode执行。

分布式配置如果让 Master 节点既作为 NameNode,也作为DataNode,就保留 localhost;如果让Master节点作为NameNode,就删掉localhost。

我这里选择删除localhost

把Master 上的 /usr/local/Hadoop 文件夹复制到Slave1节点上

假如之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件和日志文件。在 Master 节点上执行

cd /usr/local
sudo rm -r ./hadoop/tmp     # 删除 Hadoop 临时文件
sudo rm -r ./hadoop/logs/*   # 删除日志文件
tar -zcf ~/hadoop.master.tar.gz ./hadoop   # 先压缩再复制
cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop	#在线复制文件到Slave1上

在Slave1上执行

sudo rm -r /usr/local/hadoop    # 删掉旧的
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local	#解压新的
sudo chown -R hadoop /usr/local/hadoop		#修改文件权限

同样,如果有其他 Slave 节点,也要执行将 hadoop.master.tar.gz 传输到 Slave 节点、在 Slave 节点解压文件等操作。

在 Master 节点执行 NameNode 的格式化,之后不需要

hdfs namenode -format  

如图

在这里插入图片描述
开启集群

注意:CentOS系统默认开启了防火墙,在开启 Hadoop 集群之前,需要关闭集群中每个节点的防火墙。有防火墙会导致 ping 得通但 telnet 端口不通,从而导致 DataNode 启动了,但 Live datanodes 为 0 的情况。我们前面的操作中已经关闭防火墙了,如果防火墙没关闭的请关闭再开启集群。

在Master执行

start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver

这时可以通过jps可以查看各个节点所启动的进程。正确的话,在 Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程
在这里插入图片描述
在Slave1节点上可以看到DataNode 和 NodeManager
在这里插入图片描述
如图,集群搭建成功,高兴得像只两百斤的小胖子

关闭集群也是在Master上关闭,按顺序执行命令

stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.sh stop historyserver

记一个bug,有事没事不要初始化namenode玩(血泪坑)。初始化一遍就好,假如初始化多遍导致Slave1节点上datanode不能启动,那么请看看这篇博客:[Hadoop启动datanode失败,clusterId有问题

监控集群

立一个小坑,有空再补。

发布了19 篇原创文章 · 获赞 15 · 访问量 7211

猜你喜欢

转载自blog.csdn.net/atuo200/article/details/104937094