集群规划

主机名 Hadoop10 Hadoop11 Hadoop12
网络 192.168.10.10 192.168.10.11 192.168.10.12
用户 hadoop
root
hadoop
root
hadoop
root
HDFS NameNode
DateNode
DateNode Secondary NameNode
DataNode
YARN NodeManager NodeManager
ResourceManager
NodeManager

1.CentOS 7虚拟机操作系统

安装虚拟机系统,省略

2.系统的基本配置

1)网络配置

第一步:网卡配置

使用 vi编辑器编辑系统的网卡配置文件,配置以下项目

  • 网卡的开机自启
  • 使用静态IP
  • 网关和DNS
vi /etc/sysconfig/network-scripts/ifcfg-ens33

修改内容如下:

ONBOOT="yes"
BOOTPROTO="static"

添加以下内容:

IPADDR=192.168.10.10
GATEWAY=192.168.10.2
DNS1=192.168.10.2

我们目前操作的机器是hadoop10,为其配置的IP地址是192.168.10.10,这需要和VMware软件的网卡配置保存IP域一样

Hosts主机映射文件配置

根据我们的集群规划,我们得知有3台主机,所以我们也知道3台主机的IP,那么可以事先将映射文件配置好

vi /etc/hosts

添加写入以下内容

192.168.10.10		hadoop10
192.168.10.11		hadoop11
192.168.10.12		hadoop12

重启网卡使配置生效

systemctl restart network

重启完之后可以检查

ip addr

观察对应的网卡IP是否正常

配置完网卡之后,就可以使用xshell等ssh工具进行连接操作,之后的操作全部都是远程完成

Windows对虚拟机SSH远程连接需要注意

首先网卡配置完成后就可以SSH连接了,使用IP地址即可,但是为保证连接的方便,一般我们在Windows中也是使用一个主机名来连接服务器,但是Windows并不认识我们的主机,所以同样需要配置Windows的hosts映射文件

修改文件C:WindowsSystem32driversetc

打开hosts文件,追加以下内容

192.168.10.10		hadoop10
192.168.10.11		hadoop11
192.168.10.12		hadoop12

VMware网卡配置

我们使用的是nat模式网卡,需要保证该网卡如下图所示
网卡配置

2)用户配置

新建用户

目前我们只有root用户,必须知道的原则是:root用户是一个非常敏感的用户,在对服务器进行操作的时候,非迫不得已,不得使用root用户

根据集群规划,创建新的用户,用户名为:hadoop

useradd hadoop

为其设置密码

passwd hadoop

输入需要的密码,两次,可以忽略警告

为新用户赋予sudo加权

hadoop用户配置sudo执行权限,方便使用

vi /etc/sudoers

修改/etc/sudoers文件,在%wheel这行下面添加一行,如下所示:

## Allow root to run any commands anywhere

root   ALL=(ALL)   ALL



## Allows people in group wheel to run all commands

%wheel  ALL=(ALL)  ALL

hadoop  ALL=(ALL)  NOPASSWD:ALL

追加的是这一行:

hadoop  ALL=(ALL)  NOPASSWD:ALL

注意:hadoop这一行不要直接放到root行下面,因为所有用户都属于wheel组,你先配置了hadoop具有免密功能,但是程序执行到%wheel行时,该功能又被覆盖回需要密码.所以hadoop要放到%wheel这行下面.

按ESC键,shift+:键,输入wq!强制保存

SSH连接须知

我们一开始使用的是root用户操作,在此之后,我们连接将只使用hadoop用户

关闭防火墙

注意:这只是为了我们学习方便,在实际的工作中绝对不可以,只能在防火墙配置需要放行的端口,而不能自接关闭防火墙

1).关闭防火墙的开机自启(为了以后不用做这一步)

sudo systemctl disable firewalld

2).关闭当前防火墙

sudo systemctl stop firewalld.service

3.配置JDK

1).准备两个文件夹

sudo mkdir /opt/software
sudo mkdir /opt/module
  • software文件夹用作我们资料的上传
  • module我们一些软件将安装在此目录

/opt目录只有root用户可以操作,所以我们上面创建文件夹使用了sudo加权

2).将文件夹的所有者赋予hadoop用户

sudo chown hadoop -R 777 /opt/software
sudo chown hadoop -R 777 /opt/module

3).上传JDK安装文件至/opt/module目录

4).解压JDK至/opt/module目录

tar -zxvf /opt/software/jdk-8u181-linux-x64.tar.gz -C /opt/module/

5).检查是否解压成功

注意,默认此时我们的jdk路径是:/opt/module/jdk1.5.0_181,这在配置环境变量是需要用到

6).配置jdk的环境变量

​ 新建我们自己的环境变量文件

sudo vi /etc/profile.d/my_env.sh

​ 写入以下内容

export JAVA_HOME=/opt/module/jdk1.8.0_181
export PATH=$PATH:$JAVA_HOME/bin

​ 刷新环境变量

source /etc/profile

7).检查

[hadoop@hadoop101 opt]$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

你可以将环境变量文件所有权赋予hadoop用户,这样的话以后更方便

:sudo chown hadoop -R /etc/profile.d/my_env.sh

4.安装配置Hadoop

1).解压hadoop压缩包至/opt/module

tar -zxvf /opt/software/hadoop-3.1.3.tar.gz -C /opt/module

2).配置Hadoop环境变量

编辑my_env.sh文件,追加写入以下内容:

export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:HADOOP_HOME/bin
export PATH=$PATH:HADOOP_HOME/sbin

3).刷新环境变量

4).检查

5.配置Hadoop分布式集群

Hadoop的配置文件分为两类

默认配置文件

自定义配置文件

默认的配置文件一般情况下是不能动的,里面存在几千行的配置,绝大多数的配置是默认即可的

一般情况下,用户对hadoop的配置修改都是对自定义配置文件进行操作,自定义配置文件的优先级更高,也就是说,自定义配置会覆盖默认配置

所以,默认的配置文件是兜底,你只需要在自定义配置文件中覆盖你需要修改的部分

自定义配置文件的作用就是覆盖默认配置文件的配置项

自定义配置文件在hadoop的安装目录下的./etc/hadoop中:

  • core-site.xml
  • hdfs-site.xml
  • yarn-site.xml
  • mapred-site.xml

这4个配置文件按照名称就告知了里面应该写何种配置,根据默认配置文件的理解,这4个自定义配置文件是空的

4个自定义配置文件一般情况下我们按照配置文件的文件名对里面需要修改的配置项分类,但是!这4个配置文件没有区别,也就是说,你把所有的配置内容写在其中一个配置文件中同样可以

配置集群

目前我们只有一台主机hadoop10,其他的两台还没有,但是这并不影响我们操作,我们就配置这一台,然后克隆出另外两台因为对于Hadoop的配置来说,集群所有的机器都是一致的

1).core-site.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
       <!-- 指定NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop10:8020</value>
    </property>

    <!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>
    </property>

    <!-- 配置HDFS网页登录使用的静态用户为atguigu -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>jose</value>
    </property>
</configuration>

2).hdfs-site.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
<!-- nn web端访问地址-->
	<property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop10:9870</value>
    </property>
	<!-- 2nn web端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop12:9868</value>
    </property>
    <property>
 <!-- namenode 数据存放地址-->
     <name>dfs.namenode.name.dir</name>
     <value>/opt/module/hadoop-3.1.3/name</value>
   </property>
  <!--  datanode 数据存放地址-->
   <property>
     <name>dfs.datanode.data.dir</name>
     <value>/opt/module/hadoop-3.1.3/data</value>
   </property>
</configuration>

3).yarn-site.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->
<configuration>
<!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop11</value>
    </property>

    <!-- 环境变量的继承添加Maperd环境变量的继承(因为node节点上执行任务会创建容器,所以继承宿主机的环境变量配置) -->
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
    <!--运行所需要的服务,如果运行jar包没有报连接失败可以不用加-->
    <property>
       <name>yarn.application.classpath</name>
       <value>/opt/module/hadoop/etc/hadoop:/opt/module/hadoop/share/hadoop/common/lib/*:/opt/module/hadoop/share/hadoop/common/*:/opt/module/hadoop/share/hadoop/hdfs:/opt/module/hadoop/share/hadoop/hdfs/lib/*:/opt/module/hadoop/share/hadoop/hdfs/*:/opt/module/hadoop/share/hadoop/mapreduce/lib/*:/opt/module/hadoop/share/hadoop/mapreduce/*:/opt/module/hadoop/share/hadoop/yarn:/opt/module/hadoop/share/hadoop/yarn/lib/*:/opt/module/hadoop/share/hadoop/yarn/*</value>
    </property>
<!-- Site specific YARN configuration properties -->

</configuration>

4).mapred-site.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

</configuration>

5).#### works配置文件

存在路径同样是在./etc/hadoop中,该配置文件描述了集群要哪些机器

打开此文件

该文件内容如下:

hadoop10
hadoop11
hadoop12

该文件不允许存在任何空格和空行

6).配置Hadoop用户环境变量

编辑my_env.sh文件,追加写入以下内容:

# USER_PRO
export HDFS_NAMENODE_USER=hadoop
export HDFS_DATANODE_USER=hadoop
export HDFS_SECONDARYNAMENODE_USER=hadoop
export YARN_RESOURCEMANAGER_USER=hadoop
export YARN_NODEMANAGER_USER=hadoop

刷新环境变量

检查

6.后续集群的文件分发准备

因为在之后的集群中,多台机器经常需要保证某些文件的内容一致,那么就需要我们有一个文件同步的方案,在这里我们选择rsync做文件同步,相比scp更为高效

rsync是一个第三方软件,需要安装,我们选择yum来安装软件

配置yum

配置yum的镜像为清华源

sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' 
         -e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.tuna.tsinghua.edu.cn|g' 
         -i.bak 
         /etc/yum.repos.d/CentOS-*.repo

生成新的缓存

yum makecache

安装rsync

安装命令:

sudo yum install rsync -y

如果你已经克隆了机器,那么所有机器都得做

创建分发脚本

rsync可以做到机器

1).在/home/hadoop/目录下创建bin目录

mkdir /home/hadoop/bin

2).在该目录下创建脚本文件:

touch /home/hadoop/bin/xsync

3).在该文件中写入以下内容:

#!/bin/bash
if [ $# -lt 1 ]
then
  echo Error:无效参数
  exit;
fi

for host in hadoop10 hadoop11 hadoop12
do
  echo ===========正在传输:$host=============
  for file in $@
  do
    if [ -e $file ]
    then
      pdir=$(cd -P $(dirname $file);pwd)
      fname=$(basename $file)
      ssh $host "mkdir -p $pdir"
      rsync -av $pdir/$fname $host:$pdir
    else
      echo Error:$file 不存在!
    fi
  done
done

4).为该脚本文件赋予可执行的权限:

chmod +x /home/hadoop/bin/xsync

如果脚本文件是你在Windows中编辑的,那么会存在一个问题,Windows的换行是rn,而Linux没有r换行的概念,那么该脚本运行时可能报错,使用以下命令解决

sed 's/r//' -i /home/hadoop/bin/xsync

7.克隆集群机器

我们目前只有一台hadoop10机器,而且配置都完成了,那么我们需要以此为母版克隆出hadoop11hadoop12

1).克隆主机

2).修改克隆出来的机器的ip地址

vi /etc/sysconfig/network-scripts/ifcfg-ens33

修改内容如下:

hadoop11:

将ifcfg-ens33文件内容IPADDR=192.168.10.10
修改为:
IPADDR=192.168.10.11

hadoop12:

将ifcfg-ens33文件内容IPADDR=192.168.10.10
修改为:
IPADDR=192.168.10.12

3).修改克隆出来的机器的主机名

vi /etc/hostname

修改内容如下:

hadoop11:

将hostname文件内容修改为:
hadoop11

hadoop12:

将hostname文件内容修改为:
hadoop12

因为克隆可能带来Mac地址的冲突而导致没有ip的情况

以下两种方式解决问题:

1.重新生成Mac地址

2.通过关闭网络管理来实现

​ 1).关闭

systemctl stop Network
systemctl disable NetworkManager

​ 2).更新网络配置

service network restart

8.集群系统的免密登录

hadoop10机器为例:

1).生成密钥

ssh-keygen -t rsa

直接多次回车即可

2).分发密钥(签发)

ssh-copy-id hadoop10
ssh-copy-id hadoop11
ssh-copy-id hadoop12

包括自己本身也要签发

签发时需要对方的密码和用户名,其实完整的命令是ssh-copy-id hadoop@hadoop102

因为你签发的时候使用的是hadoop用户名,而我们的三台机器都有相同的hadoop用户,使用用户名在上面的笔记中就省略了

以上操作三台机器都要操作

9.hadoop集群初始化

hadoop101执行

hdfs namenode -format

如果初始化失败,或者在后续中jps启动失败了,那么如何初始化

1).检查xml配置

2).删除所有生成文件

rm -rf /tmp/* /opt/module/hadoop-3.1.3/data /opt/module/hadoop-3.1.3/logs

该命令必须在所有机器上执行一遍

3).重新初始化

启动hdfs命令(hadoop10)

start-dfs.sh

启动yarn命令(hadoop12)

start-yarn.sh

4).查看进程

jps

hadoop10进程如下:

71600 Jps
71549 NodeManager
70863 DataNode
70782 NameNode

hadoop11进程如下:

71600 Jps
71195 ResourceManager
71549 NodeManager
70863 DataNode

hadoop12进程如下:

71600 Jps
71019 SecondaryNameNode
71549 NodeManager
70863 DataNode

5).访问管理页面
Web端查看HDFS的NameNode

在浏览器输入:
http://第一台主机名或IP:9870
如:http://hadoop10:9870

Web端查看YARN的ResourceManager

在浏览器输入:
http://第二台主机名或IP:8088
如:http://hadoop11:8088

10.MapReduce 单词计数

先将所要计算的文件上传到 Hadoop

hadoop dfs -put /my.txt

计算单词

hadoop jar /opt/module/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /opt/my.txt /out

查看文件

hdfs dfs -cat /out/part-r-00000

如果出现org.apache.hadoop.dfs.SafeModeException: Cannot delete/user/hadoop/input. Name node is in safe mode.

则是hadoop开启了安全模式,需要关闭,用以下语句(退出安全模式):

hadoop dfsadmin -safemode leave

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/ruo1101/p/17464254.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!