《R与Hadoop大数据分析实战》一2.4 编写Hadoop MapReduce示例程序

简介:

本节书摘来自华章出版社《R与Hadoop大数据分析实战》一书中的第2章,第2.4节,作者 (印)Vignesh Prajapati,更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.4 编写Hadoop MapReduce示例程序

现在要通过一个很简单且普通的单词统计(word count)来学习MapReduce。该例子的目标是统计每个单词在文章中出现的次数。这些文章作为MapReduce的输入文件。
在该例中,已经准备了一些文本文件,我们希望计算所有单词在这些文件中出现的频率。我们通过Hadoop MapReduce来进行设计。
本节中,将使用旧版API接口学习Hadoop MapReduce编程。假设读者已经配置了Hadoop的环境变量(请参考第1章的内容)。同时,我们不使用R语言统计单词,而是只使用Hadoop技术。
基本上,Hadoop MapReduce有3个主要对象:Mapper、Reducer和Driver。他们通过Java的3个类来实现开发,分别是:Map类,Reduce类以及Driver类。其中Map类完成Map阶段操作,Reduce类完成Reduce阶段操作,Driver类通过main方法完成MapReduce的初始化工作。
在前面讲解Hadoop MapReduce原理的内容中,我们已经讨论了什么是Mapper、Reducer和Driver对象。现在将要学习如何定义它们,并在Java中编程。在后续的内容中,我们将会学习如何把R语言同Hadoop技术结合起来。
这里有很多语言和框架可以建立MapReduce,但是它们之间有着不同的特性。多种经过修改的因素可导致MapReduce提供商延迟。详细请参考Cloudera中第10章的内容:http://blog.cloudera.com/blog/2009/05/10-MapReduce-tips/
为了使MapReduce的开发更简单,我们可以在Eclipse中配置Maven,Maven支持了MapReduce的旧版API接口。

2.4.1 MapReduce job运行的步骤

MapReduce job的运行步骤:

  1. 在执行初始化步骤的Java类中,需要开发Hadoop MapReduce程序来定义每一个商业问题。在本例中,要考虑单词统计问题。所以我们要为MapReduce程序设计3个Java类,他们分别是Map.java、Reduce.java以及WordCount.java,用于计算文本文件中单词的出现频率。
    Map.java:单词统计中的Map类

image
image

Reduce.java:单词统计中的Reduce类
image
image

WordCount.java:单词统计中Driver任务的Driver主文件
image
image
image

  1. 编译java类
    image

image

  1. 从编译好的java类中创建.jar文件
    image
  2. 启动Hadoop进程
    image
  3. 检查所有的进程
    image
  4. 创建HDFS系统目录:/wordcount/input/
    image
  5. 提取用于单词统计示例的输入数据集。我们需要文本文件用于单词统计示例,把Hadoop提供的文本文件(CHANGES.txt、LICENSE.txt、NOTICE.txt以及README.txt)复制到Hadoop目录中,我们将使用这些文件。在这个MapReduce算法中我们也可以使用其他来源于互联网输入的数据集而不是使用现成的文本文件。我们也可以处理从互联网提取的数据,但是这里使用现成的输入文件。
  6. 复制所有的文本文件到HDFS文件系统中
    image
  7. 使用如下命令运行Hadoop MapReduce job
    image
  8. 查看最终的输出数据
    image

在运行MapReduce期间,你需要监控job和所有节点的状态。下面是MapReduce
jobs在web浏览器中的监控器:
localhost:50070: NameNode Web interface (for HDFS)。
localhost:50030: JobTracker Web interface (for MapReduce layer)。
localhost:50060: TaskTracker Web interface (for MapReduce layer)。
学习如何监控和调试Hadoop MapReduce job
本节我们将会学习在不使用任何命令时,如何监控和调试Hadoop MapReduce job。
使用Hadoop MapReduce后台界面是解决该问题的最简单方式。我们可以在浏览器中键入URL:http://localhost:50030来进入JobTracker进程管理后台。登陆后将会显示Hadoop MapReduce jobs的相关信息,下面是截图:

image

这里我们可以检查运行中的job的信息和状态,每个job中Map和Reduce任务的状态,以及已经完成的job、运行失败的job、运行失败的Map和Reduce任务。此外,我们可以点击失败的job(以及Map和reduce任务)链接来调试job。点击后会在标准输出设备上显示该job在运行过程中产生的错误提示信息。
浏览HDFS数据
本节中,我们会学习到如何在不使用批处理命令时完成HDFS目录的浏览。NameNode进程管理后台提供了该功能,我们只需要在浏览器中键入:http://localhost:50070。

image

这个UI界面可以告诉我们集群的整体情况(包括内存状态)、NameNode日志,以及集群中活跃和死亡节点的信息。同时也运行我们浏览Hadoop目录下的数据,该数据主要是MapReduce jobs所使用的输入和输出数据。

2.4.2 MapReduce可解决的商业问题

到目前为止,我们已经学习了什么是MapReduce以及如何编程。现在,我们要学习在商业分析时MapReduce常出现的一些问题。每一个了解Hadoop MapReduce的读者都可以通过修改单词统计的例子来更容易的编程并解决商业问题。主要的改变就是数据的分解和背后的数据处理逻辑。主要的工作是数据收集、数据清洗以及数据的存储。
服务器网络日志处理(server web log processing):通过MapReduce的这一定义,我们可以执行网页日志分析。网页服务器日志提供关于网页请求的信息,例如请求页面的统一资源定位符、日期、时间以及协议。通过这些信息我们能够从网页服务器日志中确定我们网站的高峰负载,以及根据网站通信量测量网页服务器的配置。所以,晚间确定无通信量时将会通过缩小服务器比例帮助我们节省资金。一些商业案例也可以通过网页日志服务器分析来解决。
带有网站统计的网页分析法(web analytics with website statistics):网站统计可以提供更多关于访问者元数据的详细信息,例如来源、活动、访问者类型、访问者位置、搜索关键词、请求页面的统一资源定位符、浏览器以及花费在页面上的总时间。Google分析学是众多受欢迎的免费网站服务供应商中的一个。通过分析所有信息,我们可以理解访问者访问一个网站的行为方式。通过这些描述性分析,我们能确定网页的重要性或者是其他依据访问者成瘾确定的网页属性的重要性。对于一个电子商务网站来说,我们可以根据访问总数、页面浏览数、每位访问者在其页面上花费时间来确定受欢迎的商品。预测分析也能在网页数据上实施从而来预测商业发展趋势。
搜索引擎(search engine):假设我们拥有大量文档并且需要在文档中搜寻一个特定的关键词,带有HadoopMapReduce的倒排索引将会帮助我们找到关键词,所以我们能够建立一个大数据的搜索引擎。
股票市场分析(stock market analysis):例如,我们已经搜集了很长一段时间的股票市场数据(大数据),现在我们想要确定并预测下一阶段的模式。这要求对所有历史数据集实训。然后我们就可以利用几种带有HadoopMapReduce机器学习函数库来计算上述时期内股票市场变化的频率。
当然MapReduce还可以在很多重要的商业活动中得到应用。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
5天前
|
存储 分布式计算 Hadoop
大数据处理架构Hadoop
【4月更文挑战第10天】Hadoop是开源的分布式计算框架,核心包括MapReduce和HDFS,用于海量数据的存储和计算。具备高可靠性、高扩展性、高效率和低成本优势,但存在低延迟访问、小文件存储和多用户写入等问题。运行模式有单机、伪分布式和分布式。NameNode管理文件系统,DataNode存储数据并处理请求。Hadoop为大数据处理提供高效可靠的解决方案。
23 2
|
5天前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
7天前
|
SQL 分布式计算 Hadoop
利用Hive与Hadoop构建大数据仓库:从零到一
【4月更文挑战第7天】本文介绍了如何使用Apache Hive与Hadoop构建大数据仓库。Hadoop的HDFS和YARN提供分布式存储和资源管理,而Hive作为基于Hadoop的数据仓库系统,通过HiveQL简化大数据查询。构建过程包括设置Hadoop集群、安装配置Hive、数据导入与管理、查询分析以及ETL与调度。大数据仓库的应用场景包括海量数据存储、离线分析、数据服务化和数据湖构建,为企业决策和创新提供支持。
38 1
|
24天前
|
消息中间件 SQL 分布式计算
大数据Hadoop生态圈体系视频课程
熟悉大数据概念,明确大数据职位都有哪些;熟悉Hadoop生态系统都有哪些组件;学习Hadoop生态环境架构,了解分布式集群优势;动手操作Hbase的例子,成功部署伪分布式集群;动手Hadoop安装和配置部署;动手实操Hive例子实现;动手实现GPS项目的操作;动手实现Kafka消息队列例子等
20 1
大数据Hadoop生态圈体系视频课程
|
4月前
|
分布式计算 资源调度 搜索推荐
《PySpark大数据分析实战》-02.了解Hadoop
大家好!今天为大家分享的是《PySpark大数据分析实战》第1章第2节的内容:了解Hadoop。
44 0
《PySpark大数据分析实战》-02.了解Hadoop
|
4月前
|
存储 搜索推荐 算法
【大数据毕设】基于Hadoop的音乐推荐系统的设计和实现(六)
【大数据毕设】基于Hadoop的音乐推荐系统的设计和实现(六)
155 0
|
4月前
|
分布式计算 Hadoop Java
【大数据实训】基于Hadoop的2019年11月至2020年2月宁波天气数据分析(五)
【大数据实训】基于Hadoop的2019年11月至2020年2月宁波天气数据分析(五)
52 1
|
8月前
|
数据采集 分布式计算 搜索推荐
Hadoop学习---7、OutputFormat数据输出、MapReduce内核源码解析、Join应用、数据清洗、MapReduce开发总结(一)
Hadoop学习---7、OutputFormat数据输出、MapReduce内核源码解析、Join应用、数据清洗、MapReduce开发总结(一)
|
8月前
|
数据采集 缓存 分布式计算
Hadoop学习---7、OutputFormat数据输出、MapReduce内核源码解析、Join应用、数据清洗、MapReduce开发总结(二)
Hadoop学习---7、OutputFormat数据输出、MapReduce内核源码解析、Join应用、数据清洗、MapReduce开发总结(二)
|
8月前
|
分布式计算 Hadoop 数据处理
Hadoop基础学习---6、MapReduce框架原理(二)
Hadoop基础学习---6、MapReduce框架原理(二)