Hadoop集群搭建(三台Linux服务器)
搭建之前注意的几点问题
-
根据尚硅谷老师的讲课进行的总结,首先配置一台hadoop,然后进行克隆。
-
我的三台机器ip分别是:
192.168.40.191,192.168.40.192,192.168.40.193 -
记得要修改hostname和hosts文件
三台机器的hostname都要修改,而且要各不相同。我的hostname分别修改为:
-- 192.168.40.191 修改为:
hadoop191
-- 192.168.40.192 修改为:
hadoop192
-- 192.168.40.193 修改为:
hadoop193
hosts文件中需要配置集群的信息,所以三台机器的hosts文件要相同。
192.168.40.191 hadoop191
192.168.40.192 hadoop192
192.168.40.193 hadoop193
环境以及版本
- centos 7
- jdk8
- Hadoop2.7.2
基本命令
-- 启动HDFS 在191节点上启动
su atguigu
cd /opt/module/hadoop-2.7.2
sbin/start-dfs.sh
-- 停止HDFS
sbin/stop-dfs.sh
-- 启动YARN 在192上启动 因为ResourceManager在192上
su atguigu
cd /opt/module/hadoop-2.7.2
sbin/start-yarn.sh
-- 停止YARN
sbin/stop-yarn.sh
Linux环境准备
- 准备三台Linux虚拟机,可以先准备一台然后进行克隆。这里是先准备一台,然后克隆。
- 安装1.8版本的jdk
- 启动虚拟机,创建一个用户(为Hadoop准备的用户)。以后就用这个用户来操作Hadoop,用户名称自己定。
-- 新增用户,我用的名称和老师的一样(‘atguigu’ 就是‘at硅谷’)
addruser atguigu
-- 重置密码,我的密码是123456
passwd atguigu
-- 修改配置文件,在文件中添加下面的信息,增加新用户的权限 如下图
vim /etc/sudoers
atguigu ALL=(ALL) ALL
- 创建目录,并将目录的权限付给新用户atguigu现在的用户是root,使用root用户创建目录,并将新建目录的权限付给atguigu用户。
-- 我是在opt目录下进行的操作,也可以在/usr/local下创建目录,都可以。
cd /opt
-- 创建两个目录
mkdir module -- 存储Hadoop解压后的目录
mkdir software -- 存储tar包
-- 给用户赋予目录权限,要在/opt目录下操作
chown -R atguigu module/ software/
chown -R atguigu:atguigu module/ software/
-- 测试atguigu用户有没有这两个目录的权限,
-- 具体做法可以试试能不能在module目录中新增一个文件夹,
-- 可以的话就说明atguigu有了权限了。
cd /opt/moudle
mkdir test
新建的两个目录如下图
- 修改hostname和hosts文件,不要有多余的空格或者空行。
-- 一共三台机器,这是其中的一台,命名为hadoop191,其他两台待会配置。
vim /etc/hostname
-- 文件中输入hadoop191,意思是起别名为hadoop191,可以自由配置别名。
hadoop191
配置hosts
vim /etc/hosts
- 输入下面内容,要和自己实际情况相符。因为是集群,所以要写上集群的信息,也就是三台机器的ip和对应的hostname
- 前面是虚拟机的ip,后面是起的别名,可以自由配置别名,但是要和hostname中的一致。
192.168.40.191 hadoop191
192.168.40.192 hadoop192
192.168.40.193 hadoop193
首先安装Hadoop
在其中一台机器上进行安装,我机器的ip为192.168.40.191,重命名为hadoop191
- 上传Hadoop压缩包到新建的software目录,可以使用xftp,也可以使用命令来上传。使用命令的话如下
cd /opt/software
-- 输入命令 ‘rz’敲回车,然后选择文件进行上传
rz
- 将tar包解压到module目录。
- 解压完成后配置配置文件,将Hadoop的目录添加到profile中,和配置Java路径类似。
-- 这里我使用的是atguigu用户,他没有权限修改profile,所以使用sudo命令
sudo vim /etc/profile
-- 在最后添加一下内容。注意:Hadoop路径一定要和自己的对应
##HADOOP
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$HADOOP_HOME/bin:$PATH
-- 刷新配置文件
source /etc/profile
-- 测试是否成功,输入命令出现下图说明成功了
hadoop version
配置集群分发脚本
Hadoop集群模式配置之前先配置集群分发脚本
这里首先列一下常用的脚本文件
-- 数据copy
scp -r $pdir/$fname $user@hadoop192$host:$$pdir/$fname
-- 比如
scp -r opt/software/hadoop-common-2.7.2.jar root@192.168.0.1:/opt/software/
-- 数据同步命令,
rsync -rvl '要同步的文件' root@192.168.40.190:/opt/
创建集群分发脚本,方便集群配置文件的管理。
-- 老师在根目录下创建目录bin,
-- 我是在/usr/local/bin,都一样。
-- 只要满足该文件可以全局查看就可以了
-- 创建文件夹,并在文件夹中添加文件
cd /usr/local/bin
touch xsync
vim xsync
在xsync文件中添加以下内容。
注意:最后的for循环中的ip,要和自己实际的三台服务器ip一致,因为他会循环分发给各个服务器,也就是集群分发。
192.168.40.191,
192.168.40.192,
192.168.40.193
#!/bin/bash
#1.获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2.获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3.获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4.获取当前用户名称
user=`whoami`
#5.循环(191,192,193三台机器是我的集群ip)
for((host=191; host<194; host++)); do
echo ------------------- hadoop$host --------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
具体操作如下,现在还用不到
进入目录,输入命令。就可以将某一节点上的配置文件分发到所有的节点上了。
cd /usr/local
xsync bin/
到这里一台机器配置好了,接下来可以直接克隆出其他两台机器了。
克隆配置好的机器
- 经过上面的配置,Hadoop单节点就配置完成了。克隆出其他两台几点就是三台了;
- 克隆结束后需要修改hostname文件,我的三台机器分别修改为了:hadoop191,hadoop192,hadoop193;
- hosts文件在单节点配置过了,可以检查一下hosts文件是不是有集群的信息。
Hadoop集群配置
配置过程如下图
集群规划
我的规划是三条节点分别是:192.168.40.191,192.168.40.192,192.168.40.193。
在配置的过程中使用的用户是我们前面创建的‘atguigu’,如果出现权限不够的情况,使用root用户再次执行一下下面的命令,权限够就忽略此步骤。
-- 在opt目录下操作
chown -R atguigu module/ software/
chown -R atguigu:atguigu module/ software/
我操作的是191这台虚拟机,先配置一台然后通过上面的集群分发脚本进行配置文件同步。
第一步 配置其中一台Hadoop,我选的是hadoop191
- 1-1 配置core-site.xml文件
cd /opt/module/hadoop-2.7.2/etc/hadoop
vim core-site.xml
在文件中添加下面内容
<!-- 指定 HDFS 中 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop191:9000</value>
</property>
<!-- 指定 Hadoop 运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/hdfs/tmp</value>
</property>
- 1-2 配置HDFS文件
1-2.1 配置hadoop-env.sh,在里面配置Java路径
-- 查看java路径
echo $JAVA_HOME
vim hadoop-env.sh
1-2.2 配置hdfs-sit.xml,添加下面的内容
vim hdfs-sit.xml
<!-- 指定 Hadoop 辅助接点的名称 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop193:50090</value>
</property>
- 1-3 配置 YARN
1-3.1 配置yarn-env.sh,添加java路径,和2.1差不多,就不贴图了
-- 查看java路径
echo $JAVA_HOME
vim yarn-env.sh
1-3.2 配置yarn-site.xml,和2.2差不多,就不贴图了。
vim yarn-site.xml
注意这里的hadoop192要和你的hostname中的保持一致
YARN的ResourceManager的地址,我配置到了192上,因为HDFS配置到了191上,他两个最好分开
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop192</value>
</property>
- 1-4 配置mapred-env.sh和mapred-site.sh
1-4.1 配置mapred-env.sh,添加java路径
-- 添加java路径
-- 查看java路径
echo $JAVA_HOME
vim mapred-env.sh
1-4.2 配置mapred-site.xml,首先要修改名称
-- 将mapred-site.xml.template改为mapred-site.xml
mv mapred-site.xml.template mapred-site.xml
-- 改完名称之后 修改改文件
vim mapred-site.xml
<!-- 指定MR运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
第二步 分发hadoop配置文件
- 上面的配置文件已经配置好了,现在将配置好的文件分发给其他两台服务器。
cd /opt/module/hadoop-2.7.2/etc
-- 指定同步命令,同步的过程需要输入密码
xsync hadoop/
第三步 查看分发情况
- 登录到其他两台节点上,查看其中的一个配置文件,内容相同则配置成功。
cd /opt/module/hadoop-2.7.2/etc/hadoop
cat core-site.xml
第四步 配置ssh
使用atguigu用户。
-- 进入根目录
cd ..
-- 查看文件,其中有一个.ssh文件
ls -al
- 4-1 191节点需要控制其他节点的namenode,所以在191节点上配置namenode的公钥。
cd /home/atguigu/.ssh
-- 输入生成命令。三次回车之后就可以生成了
ssh-keygen -t rsa
生成了两个文件:公钥和私钥
需要把公钥copy到本节点和其他两台节点上。
-- 直接在191的.ssh目录下输入下面命令,回车就可以了
cd /home/atguigu/.ssh
-- copy到191节点(本节点也需要ssh公钥)
ssh-copy-id hadoop191
-- copy到192节点
ssh-copy-id hadoop192
-- copy到193节点
ssh-copy-id hadoop193
此时在191服务器上通过ssh访问192或者193就不用输入密码了
-- 任意目录中都可以
ssh hadoop192
- 4-2 192节点需要控制其他节点的NodeManager,所以192节点也需要配置公钥。我这里是192节点,具体看第一步中的3.配置 YARN中的“指定YARN的ResourceManager的地址”是怎么配置的。在192上操作:
cd /home/atguigu/.ssh
-- 输入命令,敲击三次回车
ssh-keygen -t rsa
copy公钥到其他节点,包括本节点
ssh-copy-id hadoop191
ssh-copy-id hadoop192
ssh-copy-id hadoop193
- 4-3 191节点上还要配置root用户的ssh
su root
-- 注意,这里是root用户的.ssh目录
cd /root/.ssh
-- 输入命令,敲击三次回车
ssh-keygen -t rsa
-- copy到其他节点,包括本节点
ssh-copy-id hadoop191
ssh-copy-id hadoop192
ssh-copy-id hadoop193
- 到此ssh配置完成
第五步 配置群起集群
- 5-1 配置slaves,在文件中增加集群节点信息。
cd /opt/module/hadoop-2.7.2/etc/hadoop
vim slaves
添加上集群节点信息,不允许有空格,不允许有空行,否则出错。
hadoop191
hadoop192
hadoop193
- 5-2 配置好191节点后,直接将slaves文件复制到192,193节点上就可以了。
-- 在本目录下,输入下面的命令,直接进行复制,不用输入密码,之前配置过了
xsync slaves
第六步 启动集群
- 6-1 格式化(只需要格式化一次,之后启动不需要格式化了)
假如之前启动过,需要首先关闭启动的程序,然后删除相应的文件,比如data文件夹。
cd /opt/module/hadoop-2.7.2
bin/hdfs namenode -format
- 6-2 启动,先启动HDFS,再启动YARN
启动HDFS,HDFS配置在了191节点上
-- 191节点
cd /opt/module/hadoop-2.7.2
sbin/start-dfs.sh
启动YARN,YARN配置在了192节点上
-- 192节点
cd /opt/module/hadoop-2.7.2
sbin/start-yarn.sh
- 至此启动完成,浏览器访问。我这里上传了两个文件,进行了测试,发现没有问题。
- 上传测试,之前我们上传了一个hadoop-2.7.2.tar.gz包,可以上传这个进行测试,上传之后,浏览器中就有相应的文件了。
cd /opt/module/hadoop-2.7.2
-- 上传
bin/hdfs dfs -put /opt/software/hadoop-2.7.2.tar.gz /
至此集群搭建完毕。接下来是集群时间同步。
Hadoop集群时间同步(三台机器)