调用MapReduce对文件中各个单词出现的次数进行统计

本教程详细介绍了如何在Ubuntu虚拟机中搭建Hadoop环境,从安装Virtual Box、Ubuntu、JDK到配置Hadoop、编写MapReduce程序,实现对文件中单词的计数。通过HDFS上传文件,调用Java API执行MapReduce任务,最终展示统计结果。
摘要由CSDN通过智能技术生成

调用MapReduce对文件中各个单词出现的次数进行统计

一、需求描述

1.将待分析的文件上传到HDFS。
2.调用MapReduce对文件中各个单词出现的次数进行统计。
3.将统计结果下载本地。

二、环境介绍

本实验采用Virtual Box虚拟机管理工具安装Ubuntu18.04,之后在Ubuntu中安装配置JDK1.8环境以及Hadoop3.2.2。

2.1 在Windows上安装Virtual Box

(1)获取VirtualBox 6.1.30 安装包
到Virtual Box官网:https://www.virtualbox.org/,在官网中选择Windows主机版本下载。若不清楚如何使用可以查看官方文档.
(2)安装Virtual Box
点击该安装包后,会出现安装界面,点击下一步。

  • 设置安装路径,点击下一步
  • 选择所需功能,按需选择即可

    若提示安装过程中需要中断网络,按是即可。
    准备按安装面,选择安装即可。若有需要修改的参数,则选择上一步进行修改。
    耐心等待1-3分钟即可。

2.2 在Virtual Box安装Ubuntu18.04

(1)获取Ubuntu18.04

  • Ubuntu官网,选择所需版本下载。

  • 这里选择ubuntu-18.04.6-desktop-amd64.iso 标准版下载,可根据需要下载所需版本。

    注:建议选择LTS版本,每个 Ubuntu LTS 总共维护 10 年:5 年标准支持 + 5 年 ESM。另:2021年12月24日在官方网站下载网络速度正常。

(2)在Virtual Box新建一个Ubuntu虚拟机

  • 打开Virtual Box,按快捷键CTRL+N:新建虚拟机。也可以选中编组新建虚拟机。配置保存文件夹,虚拟机类型、名称,Ubuntu版本,单击下一步。
  • 按物理机电脑配置给虚拟机内存,单击下一步

    注:若是使用图形化界面的Ubuntu,并打算运行集成开发环境eclipse等,建议多给些内存,防止eclipse等闪退。
  • 创建新的虚拟硬盘,选中创建
  • 选择虚拟硬盘文件类型,默认即可
  • l 选择动态分配磁盘大小,点击下一步
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WCZQtyd8-1640578532237)(file:///C:\Users\咸鱼\AppData\Local\Temp\ksohtml\wps85A.tmp.jpg)]
  • 选择文件位置和大小,选择创建

    至此,在Virtual Box创建Ubuntu虚拟机完成

(3)装载映像文件到Virtual Box

  • 启动虚拟机
  • 单击注册,选择保存Ubuntu的路径
  • 选择对应版本Ubuntu
    - 单击启动
    至此,Ubuntu 映像文件装载成功

(4)启动并安装Ubuntu虚拟机

  • 可以设置中文,并选择安装Ubuntu
  • l 键盘布局选择汉语,单击继续
  • 更新和其他软件,正常安装,单击继续即可

    注:建议不要下载更新,会非常慢
  • l 安装类型默认即可,单击现在安装
    注:若出现弹窗显示是否写入磁盘,单击继续即可
  • 选择时区,选择中国上海,单击继续
    在这里插入图片描述
  • 设置计算机名、用户名、密码,单击继续
    在这里插入图片描述
  • 开始安装,需要亿点点时间

    注:建议断网,安装更快

    至此,Ubuntu安装完毕。重启启动Ubuntu即可。

2.3 安装前的准备工作

(1)安装增强功能

  • 选择设备->分配光驱->选中VBoxLinuxAdditions.iso
  • 单击文件->选中VBox_GAs_6.1.26->任意位置右键->选中在终端中打开
  • 运行VBoxLinuxAdditions.run脚本
bai@bai:/media/bai/VBox_GAs_6.1.26$ sudo ./VBoxLinuxAdditions.run 
[sudo] bai 的密码: 
Verifying archive integrity... All good.
Uncompressing VirtualBox 6.1.26 Guest Additions for Linux........
VirtualBox Guest Additions installer
Removing installed version 6.1.26 of VirtualBox Guest Additions...
Copying additional installer modules ...
Installing additional modules ...
VirtualBox Guest Additions: Starting.
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel 
modules.  This may take a while.
VirtualBox Guest Additions: To build modules for other installed kernels, run
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup <version>
VirtualBox Guest Additions: or
VirtualBox Guest Additions:   /sbin/rcvboxadd quicksetup all
VirtualBox Guest Additions: Building the modules for kernel 5.4.0-91-generic.

This system is currently not set up to build kernel modules.
Please install the gcc make perl packages from your distribution.
VirtualBox Guest Additions: Running kernel modules will not be replaced until 
the system is restarted
 
  • 重启即可
bai@bai:/media/bai/VBox_GAs_6.1.26$ sudo reboot

(2)更新APT,防止部分软件无法安装

  • 重启后应当在家目录(~),若不在用如下命令返回
 bai@bai:/media/bai/VBox_GAs_6.1.26$ cd
  • 更新软件源
bai@bai:~$ sudo apt-get update
命中:1 http://cn.archive.ubuntu.com/ubuntu bionic InRelease
获取:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
获取:3 http://cn.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB] 
获取:4 http://cn.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
已下载 252 kB,耗时 2秒 (126 kB/s)                            
正在读取软件包列表... 完成

(3)利用apt-get命令安装vim

bai@bai:~$ sudo apt-get install vim
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
将会同时安装下列软件:
  vim-runtime
建议安装:
  ctags vim-doc vim-scripts
下列【新】软件包将被安装:
  vim vim-runtime
升级了 0 个软件包,新安装了 2 个软件包,要卸载 0 个软件包,有 15 个软件包未被升级。
需要下载 6,588 kB 的归档。
解压缩后会消耗 32.0 MB 的额外空间。
您希望继续执行吗? [Y/n] Y
获取:1 http://cn.archive.ubuntu.com/ubuntu bionic-updates/main amd64 vim-runtime all 2:8.0.1453-1ubuntu1.7 [5,435 kB]
获取:2 http://cn.archive.ubuntu.com/ubuntu bionic-updates/main amd64 vim amd64 2:8.0.1453-1ubuntu1.7 [1,153 kB]
已下载 6,588 kB,耗时 27秒 (240 kB/s)                                         
正在选中未选择的软件包 vim-runtime。
(正在读取数据库 ... 系统当前共安装有 165575 个文件和目录。)
正准备解包 .../vim-runtime_2%3a8.0.1453-1ubuntu1.7_all.deb  ...
正在添加 vim-runtime 导致 /usr/share/vim/vim80/doc/help.txt 转移到 /usr/share/vim/vim80/doc/help.txt.vim-tiny
正在添加 vim-runtime 导致 /usr/share/vim/vim80/doc/tags 转移到 /usr/share/vim/vim80/doc/tags.vim-tiny
正在解包 vim-runtime (2:8.0.1453-1ubuntu1.7) ...
正在选中未选择的软件包 vim。
正准备解包 .../vim_2%3a8.0.1453-1ubuntu1.7_amd64.deb  ...
正在解包 vim (2:8.0.1453-1ubuntu1.7) ...
正在设置 vim-runtime (2:8.0.1453-1ubuntu1.7) ...
正在设置 vim (2:8.0.1453-1ubuntu1.7) ...
update-alternatives: 使用 /usr/bin/vim.basic 来在自动模式中提供 /usr/bin/vim (vim)
update-alternatives: 使用 /usr/bin/vim.basic 来在自动模式中提供 /usr/bin/vimdiff (vimdiff)
update-alternatives: 使用 /usr/bin/vim.basic 来在自动模式中提供 /usr/bin/rvim (rvim)
update-alternatives: 使用 /usr/bin/vim.basic 来在自动模式中提供 /usr/bin/rview (rview)
update-alternatives: 使用 /usr/bin/vim.basic 来在自动模式中提供 /usr/bin/vi (vi)
update-alternatives: 使用 /usr/bin/vim.basic 来在自动模式中提供 /usr/bin/view (view)
update-alternatives: 使用 /usr/bin/vim.basic 来在自动模式中提供 /usr/bin/ex (ex)
正在处理用于 man-db (2.8.3-2ubuntu0.1) 的触发器 ...

注:vim是vi的增强版,主要体现在如下几个方面:无限制的撤消;可以运行在多平台;语法高亮;对vi完全兼容。

(4)安装SSH、配置SSH无密码登录

  • 安装SSH server
bai@bai:~$ sudo apt-get install openssh-server
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
将会同时安装下列软件:
  ncurses-term openssh-sftp-server ssh-import-id
建议安装:
  molly-guard monkeysphere rssh ssh-askpass
下列【新】软件包将被安装:
  ncurses-term openssh-server openssh-sftp-server ssh-import-id
升级了 0 个软件包,新安装了 4 个软件包,要卸载 0 个软件包,有 15 个软件包未被升级。
需要下载 637 kB 的归档。
解压缩后会消耗 5,320 kB 的额外空间。
您希望继续执行吗? [Y/n] Y
获取:1 http://cn.archive.ubuntu.com/ubuntu bionic-updates/main amd64 ncurses-term all 6.1-1ubuntu1.18.04 [248 kB]
获取:2 http://cn.archive.ubuntu.com/ubuntu bionic-updates/main amd64 openssh-sftp-server amd64 1:7.6p1-4ubuntu0.5 [45.5 kB]
获取:3 http://cn.archive.ubuntu.com/ubuntu bionic-updates/main amd64 openssh-server amd64 1:7.6p1-4ubuntu0.5 [332 kB]
获取:4 http://cn.archive.ubuntu.com/ubuntu bionic-updates/main amd64 ssh-import-id all 5.7-0ubuntu1.1 [10.9 kB]
已下载 637 kB,耗时 3秒 (187 kB/s)  
正在预设定软件包 ...
正在选中未选择的软件包 ncurses-term。
(正在读取数据库 ... 系统当前共安装有 167342 个文件和目录。)
正准备解包 .../ncurses-term_6.1-1ubuntu1.18.04_all.deb  ...
正在解包 ncurses-term (6.1-1ubuntu1.18.04) ...
正在选中未选择的软件包 openssh-sftp-server。
正准备解包 .../openssh-sftp-server_1%3a7.6p1-4ubuntu0.5_amd64.deb  ...
正在解包 openssh-sftp-server (1:7.6p1-4ubuntu0.5) ...
正在选中未选择的软件包 openssh-server。
正准备解包 .../openssh-server_1%3a7.6p1-4ubuntu0.5_amd64.deb  ...
正在解包 openssh-server (1:7.6p1-4ubuntu0.5) ...
正在选中未选择的软件包 ssh-import-id。
正准备解包 .../ssh-import-id_5.7-0ubuntu1.1_all.deb  ...
正在解包 ssh-import-id (5.7-0ubuntu1.1) ...
正在设置 ncurses-term (6.1-1ubuntu1.18.04) ...
正在设置 openssh-sftp-server (1:7.6p1-4ubuntu0.5) ...
正在设置 ssh-import-id (5.7-0ubuntu1.1) ...
正在设置 openssh-server (1:7.6p1-4ubuntu0.5) ...

Creating config file /etc/ssh/sshd_config with new version
Creating SSH2 RSA key; this may take some time ...
2048 SHA256:5kDSgl4H7cEHly/ZV3CCXl4iSRnnQIgq2JQtCeMBZF0 root@bai (RSA)
Creating SSH2 ECDSA key; this may take some time ...
256 SHA256:iNfpkF4SoqVxKQm0YVEEnmNEmqR+eqxjsVEg8AQOCW4 root@bai (ECDSA)
Creating SSH2 ED25519 key; this may take some time ...
256 SHA256:pFr7Mn9sF5Bh1zF2zCdIp17mhBHhizdsnF2gT9u6oIw root@bai (ED25519)
Created symlink /etc/systemd/system/sshd.service → /lib/systemd/system/ssh.service.
Created symlink /etc/systemd/system/multi-user.target.wants/ssh.service → /lib/systemd/system/ssh.service.
正在处理用于 man-db (2.8.3-2ubuntu0.1) 的触发器 ...
正在处理用于 ufw (0.36-0ubuntu0.18.04.1) 的触发器 ...
正在处理用于 ureadahead (0.100.0-21) 的触发器 ...
正在处理用于 systemd (237-3ubuntu10.52) 的触发器 ...

注:Ubuntu默认已安装了SSH client,故不需要安装

  • 使用命令登录本机
bai@bai:~$ ssh localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:iNfpkF4SoqVxKQm0YVEEnmNEmqR+eqxjsVEg8AQOCW4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
bai@localhost's password: 
Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 5.4.0-91-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

15 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

Your Hardware Enablement Stack (HWE) is supported until April 2023.

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
  • 设置免密登录
bai@bai:~$ exit
注销
Connection to localhost closed.
bai@bai:~$ cd ~/.ssh/	# 若没有该目录,请先执行一次ssh localhost
bai@bai:~/.ssh$ ssh-keygen -t rsa	# 会有提示,都按回车就可以
Generating public/private rsa key pair.
Enter file in which to save the key (/home/bai/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/bai/.ssh/id_rsa.
Your public key has been saved in /home/bai/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:WB6pFjm39fJ7qvCpV76ObLPIdWsFHdhXCNxg1Vm6lyM bai@bai
The key's randomart image is:
+---[RSA 2048]----+
|           .+B.o*|
|       . . .o =oo|
|      + = .  ..o |
|       O + .. ...|
|      + S . .E.o.|
|     .     o. o..|
|        . .oo.   |
|       . *++oo.  |
|        ++B**+   |
+----[SHA256]-----+
bai@bai:~/.ssh$ cat ./id_rsa.pub >> ./authorized_keys  # 加入授权
  • 再次登录本机(此时实现免密登录)
bai@bai:~/.ssh$ ssh localhost
Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 5.4.0-91-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

15 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

New release '20.04.3 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Your Hardware Enablement Stack (HWE) is supported until April 2023.
Last login: Sat Dec 25 11:42:49 2021 from 127.0.0.1

2.4 配置安装Java环境

(1)获取JDK

  • 进入Java官网,选中对应安装包下载即可
  • 打勾,单击下载

    注:这里可能需要注册一个Oracle账户
    (2)将JDK传入Ubuntu系统
    第一种:直接拖拽法
  • 创建一个存放各类安装包的文件夹
bai@bai:~$ mkdir Downloads

打开文件夹->选择Downloads->将所需要的文件从物理机拖拽进入虚拟机

注:此种方法需要安装增强功能才可以使用

第二种:文件管理器

  • 选择控制->文件管理器
  • 将物理机文件传递给虚拟机
  • 显示传递完成

    注:之后再传入任何东西到Ubuntu均用此两种方法。

(3)安装JDK

  • 进入对应文件夹创建jvm文件
bai@bai:~$ cd /usr/lib
bai@bai:/usr/lib$ sudo mkdir jvm	# 创建jvm目录存放jdk文件
[sudo] bai 的密码: 
  • 进入对应文件夹解压jdk文件
bai@bai:/usr/lib$ cd ~/Downloads	# 进入对应目录
bai@bai:~/Downloads$ sudo tar -zxf ./jdk-8u311-linux-x64.tar.gz -C /usr/lib/jvm #把JDK文件解压到/usr/lib/jvm目录下

注:tar -v 可以查看具体的解包过程,这里可加可不加

  • 进入jvm目录查看jdka安装包版本
bai@bai:~/Downloads$ cd /usr/lib/jvm
bai@bai:/usr/lib/jvm$ ls
jdk1.8.0_311
  • 配置环境变量
bai@bai:/usr/lib/jvm$ vim ~/.bashrc	# 进入用户配置文件

键入如下内容:

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_311
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

配置文件立即生效

bai@bai:/usr/lib/jvm$ source ~/.bashrc
  • 查看Java版本
bai@bai:/usr/lib/jvm$ java -version
java version "1.8.0_311"
Java(TM) SE Runtime Environment (build 1.8.0_311-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.311-b11, mixed mode)

2.5 安装Hadoop3.3.1

(1)从官方网站获取Hadoop,并传入Ubuntu
l 下载地址(官方并下载速度过慢,建议使用镜像站下载)
1、Hadoop3.3.1官方网站下载地址
2、Hadoop3.3.1华为镜像下载地址

  • 将Hadoop传入Ubuntu
    同2.4采用直接拖拽或文件管理器方式,再此不多介绍

(2)安装Hadoop3.3.1

  • 解压Hadoop
bai@bai:~$ sudo tar -zxf ~/Downloads/hadoop-3.3.1.tar.gz -C /usr/local
[sudo] bai 的密码:
  • 将文件夹改名Hadoop并修改文件权限
bai@bai:~$ cd /usr/local/
bai@bai:/usr/local$ sudo mv ./hadoop-3.3.1/ ./hadoop
bai@bai:/usr/local$ sudo chown -R bai:bai ./hadoop	

注:修改权限时给用户:用户组 bai:bai,即装系统时的用户

  • 查看Hadoop版本
bai@bai:~$ cd /usr/local/hadoop/
bai@bai:/usr/local/hadoop$ ./bin/hadoop version
Hadoop 3.3.1
Source code repository https://github.com/apache/hadoop.git -r a3b9c37a397ad4188041dd80621bdeefc46885f2
Compiled by ubuntu on 2021-06-15T05:13Z
Compiled with protoc 3.7.1
From source with checksum 88a4ddb2299aca054416d6b7f81ca55
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-3.3.1.jar

(3)Hadoop伪分布式配置

  • 进入文件夹/usr/local/hadoop/etc/hadoop
bai@bai:/usr/local/hadoop$ cd /usr/local/hadoop/etc/hadoop
  • 进入修改core-site.xml配置文件
    进入文件core-site.xml:
bai@bai:/usr/local/hadoop/etc/hadoop$ vim core-site.xml

修改配置文件:

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>
  • 进入修改hdfs-site.xml配置文件
    进入配置文件
bai@bai:/usr/local/hadoop/etc/hadoop$ vim hdfs-site.xml

修改配置文件

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/data</value>
    </property>
</configuration>
  • 执行Name Node格式化
bai@bai:/usr/local/hadoop/etc/hadoop$ cd /usr/local/hadoop
bai@bai:/usr/local/hadoop$ ./bin/hdfs namenode -format
WARNING: /usr/local/hadoop/logs does not exist. Creating.
2021-12-25 14:14:33,160 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = bai/127.0.1.1
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 3.3.1
STARTUP_MSG:   classpath = /usr/local/hadoop/etc/hadoop:/usr/local/hadoop/share/hadoop/common/lib/jul-to-slf4j-1.7.30.jar:/usr/local/hadoop/share/hadoop
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值