Hadoop单节点配置、虚拟机集群配置

一、在单节点上配置Hadoop

一、基础环境配置

Ubuntu 20.04/Hadoop3.2/JDK8/Hadoop单节点配置/Hadoop集群配置/超级详细,本人自己的配置流程

1、基础环境

Ubuntu 20.04 LTS、Hadoop3.2、JDK8

1、Ubuntu 20.04 LTS

Ubuntu 20.04 LTS下载(从阿里云):https://mirrors.aliyun.com/ubuntu-releases/focal/ubuntu-20.04.5-live-server-amd64.iso

下载速度还可以,Ubuntu 20.04 LTS的安装教程这里不做介绍,需要自己查

2、Hadoop3.2

hadoop-3.2.0.tar.gz 下载地址 http://archive.apache.org/dist/hadoop/core/hadoop-3.2.0/

或者从百度云盘下载 链接:https://pan.baidu.com/s/1PXXE9d6xi43nYMPN6YCsAw
提取码:72el

3、JDK8

jdk-8u351-linux-x64.tar.gz下载地址oracle官网 https://download.oracle.com/otn/java/jdk/ 需要登录Oracle账号,下载的版本为

或者从百度云盘下载 链接:https://pan.baidu.com/s/1yiRzvgLLudm0d5OTMgdSGQ
提取码:q7yy

2、修改主机名字
[sst@hadoop01 ~]$ sudo hostnamectl set-hostname ‘hadoop01’
3、配置静态ip

虚拟机选择桥接模式

第一步:cd /etc/netplan

[sst@hadoop01 ~]$ cd /etc/netplan
[sst@hadoop01 ~]$ vim 01-network-manager-all.yaml

第二步:修改01-network-manager-all.yaml

修改结果入下

network:
	ethernets:
		ens33:
				dhcp4: no
				dhcp6: no
				addresses: [192.168.31.200/24]
				gateway4: 192.168.31.1
				nameservers:
						addresses: [192.168.31.1]
	version: 2
4、设置无密码 ssh

现在检查您是否可以在没有密码的情况下通过 ssh 连接到本地主机:

  $ ssh 192.168.31.200				#本机ip

如果没有密码,则无法通过 ssh 连接到本地主机,请执行以下命令:

  $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
  $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  $ chmod 0600 ~/.ssh/authorized_keys
二、安装JDK
1、加压jdk /usr/local/java/
[sst@hadoop01 ~]$ sudo mkdir /usr/local/java
[sst@hadoop01 ~]$ sudo tar -zxvf jdk-8u351-linux-x64.tar.gz -C /usr/local/java/
2、随后配置jdk环境
[sst@hadoop01 ~]$ sudo vim /etc/profile

vi 或者vim都可以打开/etc/profile 文件,添加以下代码

29 export JAVA_HOME=/usr/local/java/jdk1.8.0_351                                      
30 export PATH=$PATH:$JAVA_HOME/bin

如图所示
在这里插入图片描述

3、修改完成后更新配置
[sst@hadoop01 ~]$ source /etc/profile
三、安装配置Hadoop
1、加压hadoop
[sst@hadoop01 ~]$ sudo tar -zxvf hadoop-3.2.0.tar.gz -C /usr/local

可以看到/usr/local目录下存在hadoop-3.2.0文件夹

[sst@hadoop01 ~]$ cd /usr/local
[sst@hadoop01 /usr/local]$ ls
bin  etc  games  hadoop-3.2.0  include  java  lib  man  sbin  share  src

[sst@hadoop01 /usr/local]$ sudo mv ./hadoop-3.2.0/ ./hadoop            #将文件夹名改为hadoop
[sst@hadoop01 /usr/local]$ sudo chown -R sst ./hadoop 				# 修改文件夹所属用户为sst

修改后ls查看
在这里插入图片描述

2、验证hadoop是否安装成功
[sst@hadoop01 /usr/local]$ cd /usr/local/hadoop
[sst@hadoop01 /usr/local/hadoop]$ ./bin/hadoop version

显示Hadoop版本
在这里插入图片描述

3、配置hadoop环境
[sst@hadoop01 /usr/local/hadoop/etc/hadoop]$ vim ~/.bash_profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_351                                      
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$PATH
[sst@hadoop01 /usr/local/hadoop/etc/hadoop]$ source ~/.bash_profile
4、创建文件夹

进入到解压后的hadoop目录

[sst@hadoop01 ~]$ cd /usr/local/hadoop/etc/hadoop
[sst@hadoop01 /usr/local/hadoop/etc/hadoop]$
#创建以下文件夹
[sst@hadoop01 /usr/local/hadoop]$ mkdir tmp
[sst@hadoop01 /usr/local/hadoop]$ mkdir tmp/dfs
[sst@hadoop01 /usr/local/hadoop]$ mkdir tmp/dfs/name     #用于存放name
[sst@hadoop01 /usr/local/hadoop]$ mkdir tmp/dfs/data

5、修改Hadoop配置文件

配置文件作用

  • core-site.xml 指定hdfs的访问方式
  • hdfs-site.xml 指定namenode 和 datanode 的数据存储位置
  • mapred-site.xml 配置mapreduce
  • yarn-site.xml 配置yarn

修改hadoop-env.sh

[sst@hadoop01 /usr/local/hadoop/etc/hadoop]$ vim hadoop-env.sh
#找到下面内容添加java home
export JAVA_HOME=/usr/local/java/jdk1.8.0_351

如图:
在这里插入图片描述

修改 core-site.xml 在 <configuration>节点中添加

<property>
  <name>fs.defaultFS</name>
  <value>hdfs://hadoop01:9000</value>
</property>

修改hdfs-site.xml:

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

配置主机映射:将主机静态ip绑定到 hadoop01

[sst@hadoop ~]$ vim /etc/hosts     

在这里插入图片描述

来到hadoop的bin目录

[sst@hadoop01 /usr/local/hadoop/bin]$ cd /usr/local/hadoop/bin
[sst@hadoop01 /usr/local/hadoop/bin]$ ./hdfs namenode -format	#(格式化,这个命令只运行一次)

启动hdfs 进入到 /usr/local/hadoop

[sst@hadoop01 /usr/local/hadoop]$ sbin/start-dfs.sh

启动成功结果
在这里插入图片描述

命令行输入jps,可以查看当前hadoop启动的进程
在这里插入图片描述

在浏览器输入网址 http://192.168.31.200:9870/ 可以查看当前资源使用情况
在这里插入图片描述

完成后,使用以下命令停止守护程序:

  $ sbin/stop-dfs.sh

---------------------------------------至此,单节点配置成功!!----------------------------------------------------------------------

二、在多节点上配置Hadoop

一、拷贝虚拟机
1、找到当前ubuntu安装的文件夹

在这里插入图片描述

2、拷贝该文件夹到其他电脑用

在这里插入图片描述

3、找到 .vmx后缀文件

在这里插入图片描述

4、在vmware 中一次选择

文件 —> 打开

找到拷贝过来的文件夹,选择 .vmx后缀结尾的文件选择打开
在这里插入图片描述
在这里插入图片描述

5、修改虚拟机设置

复制完成,先不要打开虚拟机,先修改虚拟机设置,

注意,我们三台虚拟机是装在三台不同电脑上,所以要保证这三台电脑的连接了同一个局域网下,且虚拟机的网络适配器要选择桥接模式,这样保证不同虚拟上的ip处于同一个局域网内,实现互相通信。 本机在复制前设置的静态ip是192.168.31.200,都在192.168.31.1~192.168.31.255这个网段内。

无论是所有节点虚拟机都要选择桥接模式,且不同如果虚拟机
在这里插入图片描述

除了设置桥接模式,这里还需要3台虚拟机生成不同的MAC地址(因为我们是把一台虚拟机复制了三份,所以默认的MAC都是一样的)

点击上图的 高级,弹出下框,在MAC地址(M)后,点击 生成 即可
在这里插入图片描述

二、开启虚拟机

注意:最好不要三台虚拟机同时启动,以为目前三天虚拟配置的是同一静态ip(避免不必要冲突可能),而是逐一配置好IP后再同时开启

1、开启虚拟机弹框选择则 移动虚拟机
2、修改静态ip

第一步:cd /etc/netplan

[sst@hadoop01 ~]$ cd /etc/netplan
[sst@hadoop01 ~]$ vim 01-network-manager-all.yaml

第二步:修改01-network-manager-all.yaml

修改结果入下(三台虚拟机的静态ip分别为192.168.31.200、192.168.31.201、192.168.31.202)

network:
	ethernets:
		ens33:
				dhcp4: no
				dhcp6: no
				addresses: [192.168.31.200/24]          #只有这里不同
				gateway4: 192.168.31.1
				nameservers:
						addresses: [192.168.31.1]
	version: 2
3、修改主机名字

三台虚拟机分别设置名字为 hadoop01、hadoop02、hadoop03

[sst@hadoop01 ~]$ sudo hostnamectl set-hostname ‘hadoop01’
4、修改hosts文件

这是为了方便集群配置时,只给主机名,系统能根据主机名映射到ip地址

vim /etc/hosts
#将一下添加到hosts文件,三台虚拟机都一样配置一下三条
192.168.31.200 hadoop01
192.168.31.201 hadoop02
192.168.31.202 hadoop03
5、配置无密钥登录

注意:1、此步骤需要在以上4步分别在三台虚拟机配置完成后,同时开机三台虚拟机,才能执行。

2、三台虚拟都需要配置

第一步:先清除之前单机配置ssh

rm -rf ~/.ssh			#清除家目录下的 .ssh文件夹

如果没有密码,则无法通过 ssh 连接到本地主机,请执行以下命令:

[sst@hadoop01 ~] $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa     #生成公钥和私钥,敲完此命令后,连续按3个回车即可。
 #以上操作在三台机器执行完后在进行下面操作
 #执行以下命令会时需要输入不同虚拟机的sst的用户密码,
 #执行以下命令将会将本机的的公钥 即~/.ssh/id_rsa.pub的内容追加写入到远程机器的~/.ssh/authorized_keys
[sst@hadoop01 ~]$ ssh-copy-id hadoop01
[sst@hadoop01 ~]$ ssh-copy-id hadoop02
[sst@hadoop01 ~]$ ssh-copy-id hadoop03
#这里之所以需要三台机器都要拷贝,是因为一份是将本机id_rsa.pub拷贝到本机的authorized_keys
三、修改Hadoop配置文件
1、cd到我们安装Hadoop和文件夹
[sst@hadoop01 ~/.ssh]$ cd /usr/local/hadoop/
#再进入配置文件所在文件夹
[sst@hadoop01 /usr/local/hadoop]$ cd etc/hadoop/
2、修改vim core-site.xml文件
[sst@hadoop01 /usr/local/hadoop/etc/hadoop]$ vim core-site.xml		#配置内容如下
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop01:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>                                                                                                 
    </property>

</configuration>
3、修改hdfs-site.xml文件
[sst@hadoop01 /usr/local/hadoop/etc/hadoop]$ vim hdfs-site.xml 		#配置内容如下
<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/usr/local/hadoop/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/usr/local/hadoop/tmp/dfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>  
4、修改mapred-site.xml文件
[sst@hadoop01 /usr/local/hadoop/etc/hadoop]$ vim mapred-site.xml 		#配置内容如下
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop01:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop01:19888</value>
    </property>
    
</configuration>   

以下是在出现运行hadoop后,执行了计算任务时报错,新增的配置,

报错提示,需要在mapred-site.xml增加以下几项配置
	<property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value></property>
HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}


遇到此报错后,以下是解决办法

首先执行以下命令

[sst@hadoop01 /usr/local/hadoop/etc/hadoop]$ hadoop classpath
/usr/local/hadoop/etc/hadoop:/usr/local/hadoop/share/hadoop/common/lib/*:/usr/local/hadoop/share/hadoop/common/*:/usr/local/hadoop/share/hadoop/hdfs:/usr/local/hadoop/share/hadoop/hdfs/lib/*:/usr/local/hadoop/share/hadoop/hdfs/*:/usr/local/hadoop/share/hadoop/mapreduce/lib/*:/usr/local/hadoop/share/hadoop/mapreduce/*:/usr/local/hadoop/share/hadoop/yarn:/usr/local/hadoop/share/hadoop/yarn/lib/*:/usr/local/hadoop/share/hadoop/yarn/*
[sst@hadoop01 /usr/local/hadoop/etc/hadoop]$

然后将${full path of your hadoop distribution directory}替换成返回的路径

以下是修改后的mapred-site.xml配置文件

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop01:10020</value>
    </property>
        <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop01:19888</value>                                                                                                       
    </property>
    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=/usr/local/hadoop/etc/hadoop:/usr/local/hadoop/share/hadoop/common/lib/*:/usr/local/hadoop/share/hadoop/common/*:/usr/local/hadoop/share/hadoop/hdfs:/usr/local/hadoop/share/hadoop/hdfs/lib/*:/usr/local/hadoop/share/hadoop/hdfs/*:/usr/local/hadoop/share/hadoop/mapreduce/lib/*:/usr/local/hadoop/share/hadoop/mapreduce/*:/usr/local/hadoop/share/hadoop/yarn:/usr/local/hadoop/share/hadoop/yarn/lib/*:/usr/local/hadoop/share/hadoop/yarn/*</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=/usr/local/hadoop/etc/hadoop:/usr/local/hadoop/share/hadoop/common/lib/*:/usr/local/hadoop/share/hadoop/common/*:/usr/local/hadoop/share/hadoop/hdfs:/usr/local/hadoop/share/hadoop/hdfs/lib/*:/usr/local/hadoop/share/hadoop/hdfs/*:/usr/local/hadoop/share/hadoop/mapreduce/lib/*:/usr/local/hadoop/share/hadoop/mapreduce/*:/usr/local/hadoop/share/hadoop/yarn:/usr/local/hadoop/share/hadoop/yarn/lib/*:/usr/local/hadoop/share/hadoop/yarn/*</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=/usr/local/hadoop/etc/hadoop:/usr/local/hadoop/share/hadoop/common/lib/*:/usr/local/hadoop/share/hadoop/common/*:/usr/local/hadoop/share/hadoop/hdfs:/usr/local/hadoop/share/hadoop/hdfs/lib/*:/usr/local/hadoop/share/hadoop/hdfs/*:/usr/local/hadoop/share/hadoop/mapreduce/lib/*:/usr/local/hadoop/share/hadoop/mapreduce/*:/usr/local/hadoop/share/hadoop/yarn:/usr/local/hadoop/share/hadoop/yarn/lib/*:/usr/local/hadoop/share/hadoop/yarn/*</value></property>

</configuration>

解决以上报错可能有更好的办法,之所出现报错可能有些地方配置文件没配好。

5、修改yarn-site.xml文件
[sst@hadoop01 /usr/local/hadoop/etc/hadoop]$ vim yarn-site.xml 		#配置内容如下
<configuration>
<!-- Site specific YARN configuration properties -->                                                        
    
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>hadoop01:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>hadoop01:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>hadoop01:8031</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>                           
</configuration>
6、修改workers文件
[sst@hadoop01 /usr/local/hadoop/etc/hadoop]$ vim workers 		#配置内容如下
hadoop01
hadoop02
hadoop03
7、重新初始化节点

在重新初始化hdfs namenode -format前,还有一步要做

因为我们是在单机迁移过来的,,之前执行过一次hdfs namenode -format,所以每个节点都已经namenode节点了,这里要先清除

[sst@hadoop01 /usr/local/hadoop]$ rm -rf logs			#先清除所有logs文件夹
[sst@hadoop01 /usr/local/hadoop]$ mkdir logs			#创建logs文件夹
[sst@hadoop01 /usr/local/hadoop]$  cd tmp/dfs			#cd dfs文件
[sst@hadoop01 /usr/local/hadoop/tmp/dfs]$ rm -rf data name namesecondary	#删除dfs下的三个文件夹
[sst@hadoop01 /usr/local/hadoop/tmp/dfs]$ mkdir data name   		#删除data name两个文件夹

以上清理需要在三台虚拟机都要一模一样操作。

#以上操作完成后再主机节点也是hadoop01重新初始化namenode节点
[sst@hadoop01 /usr/local/hadoop/bin]$ cd /usr/local/hadoop/bin
[sst@hadoop01 /usr/local/hadoop/bin]$ ./hdfs namenode -format	#(格式化,这个命令只运行一次)
四、启动Hadoop
1、启动Hadoop

进入到 /usr/local/hadoop,执行命令sbin/start-all.sh,启动所有节点

[sst@hadoop01 /usr/local/hadoop]$ sbin/start-all.sh
2、启动成功结果

在这里插入图片描述

命令行输入jps,可以查看当前hadoop启动的进程
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在浏览器输入网址 http://192.168.31.200:9870/ 可以查看namenode节点情况使用情况

可以看到总容量118.69GB,因为我每天台虚拟机配40GB的磁盘空间,可以看到活跃节点3个
在这里插入图片描述

点击查看 Live Nodes
在这里插入图片描述

在浏览器输入网址 http://192.168.31.200:8088/,可以查看当前计算任务及其硬件资源使用情况,不过这里我没运行,所以看不到
在这里插入图片描述

点击节点,可以看到有3个节点资源,每个节点有8GB内存可用
在这里插入图片描述

3、关闭Hadoop
  1. 完成后,使用以下命令停止守护程序:

     $ sbin/stop-all.sh
    

----------------------------------------------------------- 至此,Hadoop集群配置成功。!!!-----------------------------------------------------------

三、上传Shakespeare文件到HDFS–(这部分是我的课程作业)

事先将 Shakespeare文件夹保存到sst的用户家目录下
在这里插入图片描述

1、查看当前HDFS文件系统根目录有啥,
[sst@hadoop01 ~]$ hadoop fs -ls /

在这里插入图片描述

可以卡到为空,下面执行put命令,将本地Shakespeare文件夹上传到HDFS,在用ls命令查看

[sst@hadoop01 ~]$ hadoop fs -put Shakespeare /
[sst@hadoop01 ~]$ hadoop fs -ls /
Found 1 items
drwxr-xr-x   - sst supergroup          0 2022-12-03 11:24 /Shakespeare

2、查看play文件夹里的文件
[sst@hadoop01 ~]$ hadoop fs -ls /Shakespeare/data/play

在这里插入图片描述

-------------------------------------------------------至此,上传文件至HDFS完成------------------------------------------------------------------------------

四、完成入门程序

使用mapreduce分别统计Shakespeare文件中play 和sonnet的单词数量

1、Hadoop Streaming 实现wordcount

代码默认找计算的单词位置是play,计数sonnet只需替换即可

1、编写代码文件mapper.py
import sys

#输入为标准输入stdin
for line in sys.stdin:
    #删除开头和结尾的空行
    line = line.strip()
    #以默认空格分隔单词到words列表
    words = line.split()
    for word in words:
        #输出所有单词,格式为“单词 1”以便作为Reduce的输入
        print("%s %s"%(word,1))
2、编写代码文件reducer.py
import sys

current_word = 'play'			#如果统计sonnets,则换成'sonnets',这里采用严格匹配,
								#如果需要忽略大小写和单复数,可采用正则表达式
current_count = 0
word = None

#获取标准输入,即mapper.py的标准输出
for line in sys.stdin:
    #删除开头和结尾的空行
    line = line.strip()

    #解析mapper.py输出作为程序的输入,以tab作为分隔符
    word,count = line.split()
    #转换count从字符型到整型
    try:
        count = int(count)
    except ValueError:
        #count非数字时,忽略此行
        continue

    #要求mapper.py的输出做排序(sort)操作,以便对连续的word做判断
    if current_word == word:
        current_count += count

#输出统计结果
print("%s\t%s"% (current_word,current_count))

注:hadoop-streaming会主动将map的输出数据进行字典排序

3、编写streaming.sh

此文件是启动提交mapreduce计算任务

#!/bin/bash
# hadoop streaming jar包所在位置
STREAM_JAR_PATH="/root/bigdata/hadoop/share/hadoop/tools/lib/hadoop-streaming-3.2.0.jar"   
INPUT_FILE_PATH_1="/Shakespeare/data/play"  #要进行词频统计的文档在hdfs中的路径
#当统计'sonnet'词频时,只需将路径更改成此路径即可 "/Shakespeare/data/sonnet"

OUTPUT_PATH="/output"                         #MR作业后结果的存放路径

hadoop fs -rm -r -skipTrash $OUTPUT_PATH    # 输出路径如果之前存在 先删掉否则会报错

hadoop jar $STREAM_JAR_PATH \   
    -input $INPUT_FILE_PATH_1 \ # 指定输入文件位置
    -output $OUTPUT_PATH \      #指定输出结果位置
    -mapper "python mapper.py" \   #指定mapper执行的程序
    -reducer "python reducer.py" \  # 指定reduce阶段执行的程序
    -file ./mapper.py \            # 通过-file 把python源文件分发到集群的每一台机器上  
    -file ./reducer.py                                                                             
4、先将以上三个文件保存到家目录

在这里插入图片描述

5、执行脚本

注意:需要执行前ubuntu需转好pthon3,正常安装的Ubuntu20.04版本已经自带了python3.8,其他版本如果没装python3,需先安装

[sst@hadoop01 ~]$ ./streaming.sh
6、查看运行过程和结果

执行过程中,命令行输入jps,可看到比没启动streaming多了个YarnChild进程
在这里插入图片描述

在http://192.168.31.200:8088/ 查看节点使用情况 看到内存有使用

首页也会出现运行的任务,状态是RUNNING,结束后状态时FINISHED ,最终状态是SUCCESSED,下图两条记录,一条是真正运行,一条是运行结束成功的。
在这里插入图片描述

下图是运行时节点资源使用情况
在这里插入图片描述

任务结束后,控制台提示
在这里插入图片描述

查看计算结果

[sst@hadoop01 ~]$ hadoop fs -cat /output/part-00000

在这里插入图片描述

hadoop fs -cat /output1/part-00000

在这里插入图片描述

五、两次单词统计耗时(这部分也是作业)

1、查看耗时

打开 http://192.168.31.200:8088/ ,

在任务列表,点击ID, 可以查看运行任务的详细信息

下图为任务列表
在这里插入图片描述

在这里插入图片描述

下图显示统计play是的任务信息,可见总耗时37秒
在这里插入图片描述

下图显示统计sonnets是的任务信息,可见总耗时2分6秒
在这里插入图片描述

2、数据对比
playsonnet
文件数量37154
单文件单词量23000左右150左右
计数结果208154
任务耗时37秒2分6秒
3、分析

本次实验结果统计出词频接近,但是2个任务耗时相差较大。分析原因是由文件数量和单文件词汇量相差太大造成的。sonnet是小文件,且文件数量少,plays的是大文件,文件数量少。

首先,HDFS不适合批量存储小文件,文件的元数据保存在NameNode的内存中,一个文件/目录/文件块一般占有150字节的元数据内存空间,小文件数量过多会批量占用NameNode的内存,会造成寻道时间>=读取文件时间,导致程序运行速度下降。

其次,在执行mapreduce任务前应将小文件进行合并,因为大量的小文件会产生大量的map任务,增大map任务装载次数,而任务的装载比较耗时,从而导致mapreduce运行较慢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值