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

伪分布集群的搭建请看下面两个链接

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

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

说是集群,实际上只有一个master和一个slave,为了不让CPU烧熟桌子

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

安装CentOS6.4,两台

一台做Master,一台做Slave1

首先虚拟机上搭两个CentOS,可参考自在Windows使用VirtualBox安装CentOS教程,这步搭过虚拟机的同蟹都懂

在使用CentOS6过程中请注意,CentOS6和CentOS7的个别命令有些许不一样

配置网络

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

修改网络配置文件

Master节点上修改网卡配置

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

首先是改

BOOTPROTO=static
ONBOOT=yes

再然后是增加

IPADDR=192.168.100.10   
NETMASK=255.255.255.0    
GATEWAY=192.168.100.2   
DNS1=8.8.8.8      

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

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

关闭防火墙

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

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

配网络时的注意点

假如Slave1是通过Master快照克隆创建的,在配置网络时要多做一步,就是要生成新的MAC地址(克隆出的主机IP地址和MAC地址皆一样,要更改IP地址和MAC地址)并配置,可见:虚拟机克隆后MAC地址IP地址修改,否则会重启网卡会报出异常:device eth0 does not seem to be present, delaying initialization。

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

Master上改主机名

vi /etc/sysconfig/network 

添加HOSTNAME=Master

Slave1上改主机名

vi /etc/sysconfig/network 

添加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 Slave1

Slave1上

ping baidu.com
ping Master

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

更换yum源

然后把CentOS的默认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	#生成缓存

创建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之后,我们检验是否能用ssh登录到本机

ssh localhost

如图,ssh是可以正常使用的,但这里每次登录时要输入密码
在这里插入图片描述
exit命令退出ssh连接后

设置免密码登录

我们设置ssh无密码登录

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

在这里插入图片描述

cat ./id_rsa.pub >> ./authorized_keys   #让Master节点能无密码ssh本机
ssh-copy-id Slave1	#使Master能免密码登录Slave1
chmod 600 ./authorized_keys    #修改文件权限为只读

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

ssh localhost
ssh Slave1

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

在Slave1节点上配置免密码ssh登录本机和免密码登录Master是一样的,这里不重复去写了。

要唠叨一下的就是:实现本节点免密码ssh其他节点的原理就是把本节点的公钥给要连接的其他节点,让其他节点能验明自己的节点身份,才能免密码登录其他节点,这涉及到一种身份验证问题。

接下来虾一步

安装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

vim ~/.bashrc

在文件后面加一行

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

让环境变量生效

source ~/.bashrc  

检验变量是否设置生效

java -version

我这里是ok了
在这里插入图片描述

安装Hadoop2

下载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

配置PATH变量

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

在 Master 节点上配置PATH变量

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

配置Hadoop2

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>

core-site.xml配置项解释:

fs.defaultFS:定义默认的文件系统主机和端口;

hadoop.tmp.dir:Hadoop的临时目录;

修改 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>

hdfs-site.xml配置项解释:

dfs.namenode.secondary.http-address:secondary namenode HTTP服务器地址和端口;
dfs.replication:数据块分片数;

dfs.namenode.name.dir:存放namenode的fsimage的目录;

dfs.datanode.data.dir:存放datanode块的目录;

修改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>

mapred-site.xml配置项解释:

mapreduce.framework.name:执行框架设置为 Hadoop YARN;

mapreduce.jobhistory.address:Hadoop历史服务器地址;

mapreduce.jobhistory.webapp.address:查看Hadoop历史服务器的历史记录的UI界面的访问地址

修改 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>

`yarn-site.xml配置项:

yarn.resourcemanager.hostname:ResourceManager` 对客户端暴露的地址。客户端通过该地址向RM提交应用程序,杀死应用程序;

yarn.nodemanager.aux-services:NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序

修改 slaves

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

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

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

我这里选择删除localhost

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

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

cd /usr/local
tar -zcf ~/hadoop.master.tar.gz ./hadoop   # 先压缩再复制
cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop	#在线复制文件到Slave1上

在Slave1上执行

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不能启动,那么有两种debug方法

  1. 请看看这篇博客:[Hadoop启动datanode失败,clusterID有问题,简而言之,就是把namenode上的clusterID复制到不能正常启动的datanode节点上。
  2. 在所有datanode节点上找到{hadoop.tmp.dir}/dfs/data目录,删除。然后在Masterj节点上再次初始化集群:hdfs namenode -format。{hadoop.tmp.dir}具体路径看个人配置(在配置文件core-site.xml中)。

以上两种方法都能解决因为初始化集群多次而产生的clusterID不一致导致datanode不能正常启动的问题。
但我还是建议采取第一种方法,毕竟当hadoop集群真正用于生产环境中,要尽量避免删数据。

监控集群

监控集群建立在hadoop集群启动之上,当hadoop启动之后

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

我们可以通过虚拟机CentOS里自带的火狐浏览器进入集群监控的web界面,但这里我选择在宿主机查看集群监控的web界面(虚拟机分配的内存太小,不想卡出翔)。

在宿主机添加IP到主机名的映射
在C:/Windows/Systems/drivers/etc/hosts中添加

192.168.100.10   Master Master.cn
192.168.100.11   Slave1 Slave1.cn

在这里插入图片描述查看集群监控的web界面

查看HDFS集群状态

地址配置在:hdfs-site.xml中的dfs.namenode.http-address
默认访问地址:http://namenode的ip:50070
我这里的是:http://Master:50070
在这里插入图片描述
查看secondarynamenode的集群状态

地址配置在:hdfs-site.xml中的dfs.namenode.secondary.http-address
默认访问地址:http://namenode的ip:50090
我这里的是:http://Master:50090
在这里插入图片描述
查看yarn集群的状态
地址配置在:yarn-site.xml中的yarn.resourcemanager.webapp.address
默认访问地址:http://namenode的ip:50090
我这里的是:http://Master:8088
在这里插入图片描述至于能从这些web界面获取到什么信息:Hadoop大数据开发基础 | 集群监控

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值