MapReduce编程实践(Hadoop-2.7.2)


MapReduce是谷歌公司的核心计算模型,Hadoop开源实现了MapReduce。MapReduce将复杂的、运行于大规模集群上的并行计算过程高度抽象到了两个函数:Map和Reduce,并极大地方便了分布式编程工作,编程人员在不会分布式并行编程的情况下,也可以很容易将自己的程序运行在分布式系统上,完成海量数据的计算。

本实践所用的环境是Ubuntu16.04、Hadoop-2.7.2,开发工具是Eclipse。

一、启动Hadoop

在学习MapReduce编程实践前,我们需要启动Hadoop。执行如下命令

$ cd /usr/local/hadoop
$ ./sbin/start-dfs.sh #启动hadoop

1.创建用户目录

需要注意的是,Hadoop系统安装好以后,第一次使用HDFS时,需要首先在HDFS中创建用户目录。本实践全部采用hadoop用户登录Linux系统,因此,需要在HDFS中为hadoop用户创建一个用户目录,命令如下:

$ cd /usr/local/hadoop
$ ./bin/hdfs dfs –mkdir  –p /user/hadoop

该命令中表示在HDFS中创建一个“/user/hadoop”目录,“–mkdir”是创建目录的操作,“-p”表示如果是多级目录,则父目录和子目录一起创建,这里“/user/hadoop”就是一个多级目录,因此必须使用参数“-p”,否则会出错。

下面,可以使用如下命令创建一个input目录:

$ ./bin/hdfs dfs –mkdir input

在创建该input目录时,采用了相对路径形式,实际上,这个input目录创建成功以后,它在HDFS中的完整路径是“/user/hadoop/input”。

二、使用MapReduce对单词进行计数

1.上传文件

首先,准备一个txt文件,将其移动到“/home/hadoop/”目录下。本实践使用的txt文件名为File.txt。

然后,可以使用如下命令把本地文件系统的“/home/hadoop/File.txt”上传到HDFS中的当前用户目录的input目录下,也就是上传到HDFS的“/user/hadoop/input/”目录下:

$ ./bin/hdfs dfs -put /home/hadoop/File.txt  input

可以使用ls命令查看一下文件是否成功上传到HDFS中,具体如下:

$ ./bin/hdfs dfs –ls input

该命令执行后会显示类似如下的信息:

Found 1 items   
-rw-r--r--   1 hadoop supergroup         2645484 2020-12-10 23:18 input/File.txt

2.利用Web界面管理HDFS

打开Linux自带的Firefox浏览器,输入localhost:50070,即可看到HDFS的web管理界面。
HDFS管理界面
如图所示,File.txt文件已经被上传到HDFS。

三、在eclipse中创建WordCount项目

1.新建WordCount项目

首先,启动Eclipse,启动以后会弹出如下图所示界面,提示设置工作空间(workspace)。workspace
可以直接采用默认的设置“/home/hadoop/workspace”,点击“OK”按钮。可以看出,由于当前是采用hadoop用户登录了Linux系统,因此,默认的工作空间目录位于hadoop用户目录“/home/hadoop”下。
Eclipse启动以后,呈现的界面如下图所示。
site
选择“File–>New–>Java Project”菜单,开始创建一个Java工程,弹出如下图所示界面。
new project
在“Project name”后面输入工程名称“WordCount”,选中“Use default location”,让这个Java工程的所有文件都保存到“/home/hadoop/workspace/WordCount”目录下。在“JRE”这个选项卡中,可以选择当前的Linux系统中已经安装好的JDK,比如jdk1.8.0_162。然后,点击界面底部的“Next>”按钮,进入下一步的设置。

2.为项目添加需要用到的JAR包

进入下一步的设置以后,会弹出如下图所示界面。
import1
需要在这个界面中加载该Java工程所需要用到的JAR包,这些JAR包中包含了与Hadoop相关的Java API。这些JAR包都位于Linux系统的Hadoop安装目录下,对于本实践而言,就是在“/usr/local/hadoop/share/hadoop”目录下。点击界面中的“Libraries”选项卡,然后,点击界面右侧的“Add External JARs…”按钮,弹出如下图所示界面。
import2
在该界面中,上面有一排目录按钮(即“usr”、“local”、“hadoop”、“share”、“hadoop”、“mapreduce”和“lib”),当点击某个目录按钮时,就会在下面列出该目录的内容。
为了编写一个MapReduce程序,一般需要向Java工程中添加以下JAR包:
(1)“/usr/local/hadoop/share/hadoop/common”目录下的hadoop-common-3.1.3.jar和haoop-nfs-3.1.3.jar;
(2)“/usr/local/hadoop/share/hadoop/common/lib”目录下的所有JAR包;
(3)“/usr/local/hadoop/share/hadoop/mapreduce”目录下的所有JAR包,但是,不包括jdiff、lib、lib-examples和sources目录。
(4)“/usr/local/hadoop/share/hadoop/mapreduce/lib”目录下的所有JAR包。
比如,如果要把“/usr/local/hadoop/share/hadoop/common”目录下的hadoop-common-3.1.3.jar和haoop-nfs-3.1.3.jar添加到当前的Java工程中,可以在界面中点击相应的目录按钮,进入到common目录,然后,界面会显示出common目录下的所有内容。

请在界面中用鼠标点击选中hadoop-common-2.7.2.jar和hadoop-nfs-2.7.2.jar,然后点击界面右下角的“确定”按钮,就可以把这两个JAR包增加到当前Java工程中,出现的界面如下图所示。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值