当先锋百科网

首页 1 2 3 4 5 6 7

搭建之前注意的几点问题

  • 根据尚硅谷老师的讲课进行的总结,首先配置一台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环境准备

  1. 准备三台Linux虚拟机,可以先准备一台然后进行克隆。这里是先准备一台,然后克隆。
  2. 安装1.8版本的jdk
  3. 启动虚拟机,创建一个用户(为Hadoop准备的用户)。以后就用这个用户来操作Hadoop,用户名称自己定。
-- 新增用户,我用的名称和老师的一样(‘atguigu’ 就是‘at硅谷’)
addruser atguigu
-- 重置密码,我的密码是123456
passwd atguigu
-- 修改配置文件,在文件中添加下面的信息,增加新用户的权限 如下图
vim /etc/sudoers
atguigu    ALL=(ALL)       ALL

在这里插入图片描述

  1. 创建目录,并将目录的权限付给新用户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

新建的两个目录如下图
在这里插入图片描述

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

  1. 上传Hadoop压缩包到新建的software目录,可以使用xftp,也可以使用命令来上传。使用命令的话如下
cd /opt/software
-- 输入命令 ‘rz’敲回车,然后选择文件进行上传
rz

在这里插入图片描述

  1. 将tar包解压到module目录。
  1. 解压完成后配置配置文件,将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集群时间同步(三台机器)