03Hadoop集群搭建配置

至今为止我们做好的准备:

1)准备 3 台客户机(关闭防火墙、静态 IP、主机名称)

2)安装 JDK (Hadoop101)

3)配置系统环境变量 (Hadoop101)

4)安装 Hadoop (Hadoop101)

5)配置 ssh 和分发脚本

6)配置Hadoop环境变量

7)配置集群

8)启动并测试集群

SSH无密钥登陆的配置

​ 首先,为什么需要配置虚拟机之间的无密钥登录,这是因为我们对设置文件的配置,要在各个节点之间统一,所以要频繁进行通信,ssh无密钥登录为配置文件分发脚本服务。

​ 无密钥的原理是加密中的非对称加密,node1连接node2,需要node1生成公钥和密钥对,然后node1将公钥传输给node2,这样在node1用ssh连接node2时,node2将一段验证文用公钥加密,然后传输给node1,而node1用私钥对其进行解密,传输给node2,node2收到解密后的验证后和自己发送的验证进行对比,如果一样这样就唯一确定了node1的身份,就可以直接连接。

  1. 生成公钥和私钥

进入

image-20211126215532200

目录,

ssh-keygen -t rsa

三次回车,

image-20211126215638216

生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)

image-20211126215724845

  1. 将公钥拷贝到要免密登录的目标机器上
 ssh-copy-id  [user@]hadoop101
 ssh-copy-id  [user@]hadoop102
 ssh-copy-id  [user@]hadoop103
 
 ssh -v [user@]hadoop101 #测试
  1. 在另外两台机器上也同时配置一下ssh无密钥登录。

image-20211126224617693

编写集群分发脚本 xsync

SCP
  1. scp(secure copy)安全拷贝可以实现服务器与服务器之间的数据拷贝。

  2. 基本语法

image-20211126224836783

  1. 实际操作

    将Hadoop101虚拟机上的/opt下的module拷贝到另外两台虚拟机,也就是java和hadoop软件包。

    scp -r /opt/module/* root@hadoop102:/opt/module
    scp -r /opt/module/* root@hadoop103:/opt/module
    
rsync 远程同步工具

​ rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

​ rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更 新。scp 是把所有文件都复制过去。

  1. 基本语法

image-20211126225546317

自己编写xsync 集群分发脚本(尚硅谷)
vim /usr/bin/xync

脚本内容不做解释

#!/bin/bash
#1 arguments count
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi
#2.foreach files
for host in hadoop101 hadoop102 hadoop103
do
    echo ====================  $host  ====================
    #3.foreach dir

    for file in $@
    do
        #4. file if exit
        if [ -e $file ]
            then
                #5. get father dir
                pdir=$(cd -P $(dirname $file); pwd)

                #6.get file name
                fname=$(basename $file)
                ssh $host "mkdir -p $pdir"
                rsync -av $pdir/$fname $host:$pdir
            else
                echo $file does not exists!
        fi
    done
done

修改权限

chmod +x xsync

测试脚本

xsync /usr/bin

image-20211126230907222

同步之前的环境变量配置

xsync /etc/profile.d/my_env.sh

在Hadoop102和103上重新加载环境变量

source /etc/profile

全分布式配置

​ 全部脚本和环境已经准备好,这样我们再三台虚拟机上就都有了java和hadoop环境,都可以单机模式运行,但我们要配置的为全分布式模式,要配置完全分布式模式需要我们对集群的具体hadoop环境部署进行规划,在本例中采用以下的规划方法。

hadoop101hadoop102hadoop103
HDFSNameNode、DataNodeDataNodeSecondaryNameNode、DataNode
YARNNodeManagerResourceManager、NodeManagerNodeManager
配置文件说明

​ Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

默认配置文件:

image-20211126235555526

默认配置文件的内容也可以在官网的文档中获取。

自定义配置文件 :

core-site.xml、 hdfs-site.xml、 yarn-site.xml、 mapred-site.xml 四个配置文件存放在$HADOOP_HOME/etc/hadoop 这个路径上, 用户可以根据项目需求重新进行修改配置。

配置集群
  1. 配置 core-site.xml

    image-20211127001548420

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!-- 指定 NameNode 的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop101:8020</value>
    </property>
    <!-- 指定 hadoop 数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>
    </property>
    <!-- 配置 HDFS 网页登录使用的静态用户为 root -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
    </property>
</configuration>
  1. 配置 hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!-- nn web 端访问地址-->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop101:9870</value>
    </property>
    <!-- 2nn web 端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop103:9868</value>
    </property>
</configuration>
  1. 配置 yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
        <description>指定 MR 走 shuffle</description>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop102</value>
        <description>指定 ResourceManager 的地址</description>
    </property>
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
        NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
        RED_HOME</value>
        <description>环境变量的继承</description>
    </property>
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>512</value>
        <description>为每个容器请求分配的最小内存限制资源管理器(512M)</description>
	</property>
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>4096</value>
        <description>为每个容器请求分配的最大内存限制资源管理器(4G)</description>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>4</value>
        <description>虚拟内存比例,默认为2.1,此处设置为4倍</description>
    </property> 
</configuration>
  1. 配置 mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
        <description>执行MapReduce的方式:yarn/local</description>
    </property>
    
    <!-- 不配置在报错-->
    <property>
      <name>yarn.app.mapreduce.am.env</name>
      <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
    </property>
    <property>
      <name>mapreduce.map.env</name>
      <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
    </property>
    <property>
      <name>mapreduce.reduce.env</name>
      <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
    </property>

</configuration>
  1. 配置workers

    # 删除第一行localhost,然后添加以下三行

    hadoop101

    hadoop102

    hadoop103

分发配置文件
xsync /opt/module/hadoop-3.1.3/etc/hadoop/

查看分发情况,确保配置文件被修改成功。

发起集群
启动集群
  1. 如果集群是第一次启动,需要在 hadoop101 节点格式化 NameNode。(注意: 格式化 NameNode, 会产生新的集群 id, 导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。 如果集群在运行过程中报错,需要重新格式化 NameNode 的话, 一定要先停止 namenode 和 datanode 进程, 并且要删除所有机器的 data 和 logs 目录,然后再进行格式化。 )
hdfs namenode -format  
  1. 进入/opt/module/hadoop-3.1.3目录,启动 HDFS
sbin/start-dfs.sh

会发现报错

image-20211127004315649

这是因为我们使用的root用户启动,所以把sbin下的start-dfs.sh、stop-dfs.sh添加如下内容。

HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

同时也在sbin下的start-yarn.sh、stop-yarn.sh添加如下内容。

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

分发脚本

xsync ./sbin/

再次启动dfs,成功。

image-20211127005250202

  1. 配置了 ResourceManager 的节点(hadoop102) 启动 YARN
sbin/start-yarn.sh

启动成功。

image-20211127005500284

  1. Web 端查看 HDFS 的 NameNode
    (a)浏览器中输入: http://hadoop101:9870
    (b)查看 HDFS 上存储的数据信息
  2. Web 端查看 YARN 的 ResourceManager
    (a)浏览器中输入: http://hadoop102:8088
    (b)查看 YARN 上运行的 Job 信息

查看进行,启动信息符合前面的表格设计。

image-20211127010103320

image-20211127010123552

image-20211127010203259

集群基本测试

  1. 普通命令测试
#上传文件 1.txt是单机测试用例中的字符文本
hadoop fs -put 1.txt /
hadoop fs -put /opt/software/hadoop-3.1.3.tar.gz  /
#统计字数测试
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /1.txt /output
  1. 启动写入基准测试
#测试10个文件,每个文件50M,一共500M
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 50MB

image-20211127014842999

  1. 测试读取速度
#测试10个文件,每个文件50M,一共500M
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 50MB

image-20211127015209546

  1. 测试期间,会在HDFS集群上创建 /benchmarks目录,测试完毕后,我们可以清理该目录。
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -clean

百度网盘资料包

链接:https://pan.baidu.com/s/1fa7sHVFdeS6bzzNeEfmnqQ
提取码:0xgs

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值