iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么使用MapReduce
  • 938
分享到

怎么使用MapReduce

2023-06-02 15:06:01 938人浏览 独家记忆
摘要

这篇文章给大家分享的是有关怎么使用mapReduce的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。大数据是使用工具和技术处理大量和复杂数据集合的术语。能够处理大量数据的技术称为MapReduce。何时使用MapR

这篇文章给大家分享的是有关怎么使用mapReduce的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

大数据是使用工具和技术处理大量和复杂数据集合的术语。能够处理大量数据的技术称为MapReduce。怎么使用MapReduce

何时使用MapReduce

MapReduce特别适合涉及大量数据的问题。它通过将工作分成更小的块,然后可以被多个系统处理。由于MapReduce将一个问题分片并行工作,与传统系统相比,解决方案会更快。

大概有如下场景会应用到MapReduce:

1 计数和统计

2 整理

3 过滤

4 排序 

Apache Hadoop

在本文中,我们将使用Apache hadoop

开发MapReduce解决方案,推荐使用Hadoop,它已经是事实上的标准,同时也是开源免费的软件。

另外在Amazon,Google和Microsoft等云提供商租用或搭建Hadoop集群

还有其他多个优点:

可扩展:可以轻松清加新的处理节点,而无需更改一行代码

成本效益:不需要任何专门和奇特的硬件,因为软件在正常的硬件都运行正常

灵活:无模式。可以处理任何数据结构 ,甚至可以组合多个数据源,而不会有很多问题。

容错:如果有节点出现问题,其它节点可以接收它的工作,整个集群继续处理。

另外,Hadoop容器还是支持一种称为“流”的应用程序,它为用户提供了选择用于开发映射器和还原器脚本语言的自由度。

本文中我们将使用PHP做为主开发语言。

怎么使用MapReduce

Hadoop安装 

Apache Hadoop的安装配置超出了本文范围。您可以根据自己的平台,在线轻松找到很多文章。为了保持简单,我们只讨论大数据相关的事。

映射器(Mapper)

映射器的任务是将输入转换成一系列的键值对。比如在字计数器的情况下,输入是一系列的行。我们按单词将它们分开,把它们变成键值对(如key:Word,value:1),看起来像这样:

the       1

water    1

on        1

on        1

water    1

on        1

...         1

然后,这些对然后被发送到reducer以进行下一步骤。

reducer

reducer的任务是检索(排序)对,迭代并转换为所需输出。 在单词计数器的例子中,取单词数(值),并将它们相加得到一个单词(键)及其最终计数。如下:

water 2

the   1

on    3

mapping和reducing的整个过程看起来有点像这样,请看下列之图表:

我们将从MapReduce世界的“Hello World”的例子开始,那就是一个简单的单词计数器的实现。 我们将需要一些数据来处理。我们用已经公开的书Moby Dick来做实验。

怎么使用MapReduce

执行以下命令下载这本书:

wget Http://www.gutenberg.org/cache ... 1.txt

hdfs(Hadoop分布式文件系统)中创建一个工作目录

hadoop dfs -mkdir wordcount

我们的php代码从mapper开始

#!/usr/bin/php<?php    // iterate through lines    while($line = fgets(STDIN)){        // remove leading and trailing        $line = ltrim($line);        $line = rtrim($line);        // split the line in words        $words = preg_split('/\s/', $line, -1, PREG_SPLIT_NO_EMPTY);        // iterate through words        foreach( $words as $key ) {            // print word (key) to standard output            // the output will be used in the            // reduce (reducer.php) step            // word (key) tab-delimited wordcount (1)            printf("%s\t%d\n", $key, 1);        }    }?>

下面是 reducer 代码。

#!/usr/bin/php<?php    $last_key = NULL;    $running_total = 0;    // iterate through lines    while($line = fgets(STDIN)) {        // remove leading and trailing        $line = ltrim($line);        $line = rtrim($line);        // split line into key and count        list($key,$count) = explode("\t", $line);        // this if else structure works because        // hadoop sorts the mapper output by it keys        // before sending it to the reducer        // if the last key retrieved is the same        // as the current key that have been received        if ($last_key === $key) {            // increase running total of the key            $running_total += $count;        } else {            if ($last_key != NULL)                // output previous key and its running total                printf("%s\t%d\n", $last_key, $running_total);            // reset last key and running total            // by assigning the new key and its value            $last_key = $key;            $running_total = $count;        }    }?>

你可以通过使用某些命令和管道的组合来在本地轻松测试脚本。

head -n1000 pg2701.txt | ./mapper.php | sort | ./reducer.php

我们在Apache Hadoop集群上运行它:

hadoop jar /usr/hadoop/2.5.1/libexec/lib/hadoop-streaming-2.5.1.jar \ -mapper "./mapper.php" -reducer "./reducer.php" -input "hello/mobydick.txt" -output "hello/result"

输出将存储在文件夹hello / result中,可以通过执行以下命令查看

hdfs dfs -cat hello/result/part-00000

计算年均黄金价格

下一个例子是一个更实际的例子,虽然数据集相对较小,但是相同的逻辑可以很容易地应用于具有数百个数据点的集合上。 我们将尝试计算过去五十年的黄金年平均价格。

我们下载数据集:

wget https://raw.GitHubusercontent. ... a.csv

在HDFS(Hadoop分布式文件系统)中创建一个工作目录

hadoop dfs -mkdir goldprice

将已下载的数据集复制到HDFS

hadoop dfs -copyFromLocal ./data.csv goldprice/data.csv

我的reducer看起来像这样

#!/usr/bin/php<?php    // iterate through lines    while($line = fgets(STDIN)){        // remove leading and trailing        $line = ltrim($line);        $line = rtrim($line);        // regular expression to capture year and gold value        preg_match("/^(.*?)\-(?:.*),(.*)$/", $line, $matches);        if ($matches) {            // key: year, value: gold price            printf("%s\t%.3f\n", $matches[1], $matches[2]);        }    }?>

reducer也略有修改,因为我们需要计算项目数量和平均值。

#!/usr/bin/php<?php    $last_key = NULL;    $running_total = 0;    $running_average = 0;    $number_of_items = 0;    // iterate through lines    while($line = fgets(STDIN)) {        // remove leading and trailing        $line = ltrim($line);        $line = rtrim($line);        // split line into key and count        list($key,$count) = explode("\t", $line);        // if the last key retrieved is the same        // as the current key that have been received        if ($last_key === $key) {            // increase number of items            $number_of_items++;            // increase running total of the key            $running_total += $count;            // (re)calculate average for that key            $running_average = $running_total / $number_of_items;        } else {            if ($last_key != NULL)                // output previous key and its running average                printf("%s\t%.4f\n", $last_key, $running_average);            // reset key, running total, running average            // and number of items            $last_key = $key;            $number_of_items = 1;            $running_total   = $count;            $running_average = $count;        }    }    if ($last_key != NULL)        // output previous key and its running average        printf("%s\t%.3f\n", $last_key, $running_average);?>

像单词统计样例一样,我们也可以在本地测试

head -n1000 data.csv | ./mapper.php | sort | ./reducer.php

最终在hadoop集群上运行它

hadoop jar /usr/hadoop/2.5.1/libexec/lib/hadoop-streaming-2.5.1.jar \ -mapper "./mapper.php" -reducer "./reducer.php" -input "goldprice/data.csv" -output "goldprice/result"

查看平均值

hdfs dfs -cat goldprice/result/part-00000

小奖励:生成图表

我们经常会将结果转换成图表。 对于这个演示,我将使用gnuplot,你可以使用其它任何有趣的东西。

首先在本地返回结果:

hdfs dfs -get goldprice/result/part-00000 gold.dat

创建一个gnu plot配置文件(gold.plot)并复制以下内容

# Gnuplot script file for generating gold pricesset terminal pngset output "chart.jpg"set style data linesset nokeyset gridset title "Gold prices"set xlabel "Year"set ylabel "Price"plot "gold.dat"

生成图表:

gnuplot gold.plot

感谢各位的阅读!关于“怎么使用MapReduce”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: 怎么使用MapReduce

本文链接: https://www.lsjlt.com/news/230458.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么使用MapReduce
    这篇文章给大家分享的是有关怎么使用MapReduce的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。大数据是使用工具和技术处理大量和复杂数据集合的术语。能够处理大量数据的技术称为MapReduce。何时使用MapR...
    99+
    2023-06-02
  • Hadoop MapReduce怎么使用
    本篇内容介绍了“Hadoop MapReduce怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Apache Hadoop&...
    99+
    2023-06-19
  • Hadoop中怎么使用MapReduce
    在Hadoop中使用MapReduce,一般会按照以下步骤进行: 实现Map函数和Reduce函数:首先需要编写Map函数和Red...
    99+
    2024-03-14
    hadoop
  • MapReduce怎么在MongoDB中使用
    本篇文章为大家展示了MapReduce怎么在MongoDB中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。string map = ...
    99+
    2024-04-02
  • Python怎么使用MapReduce编程模型统计销量
    这篇文章主要介绍了Python怎么使用MapReduce编程模型统计销量的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python怎么使用MapReduce编程模型统计销量文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-06-30
  • MapReduce映射怎么定义
    本篇内容主要讲解“MapReduce映射怎么定义”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MapReduce映射怎么定义”吧!定义map:俗称--映射,map之后元素个数不变如:x ...
    99+
    2023-06-02
  • hadoop hdfs和MapReduce怎么创建
    本篇内容主要讲解“hadoop hdfs和MapReduce怎么创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“hadoop hdfs和MapReduce怎么创建”吧!大致步骤如下:新建一个文...
    99+
    2023-06-02
  • Python使用MapReduce编程模型统计销量
    目录1、生成模拟数据2、mapper实现3、reducer实现MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和...
    99+
    2024-04-02
  • hadoop中mapreduce的作用是什么
    MapReduce是Hadoop中的一种编程模型,用于处理大规模数据集的并行计算。它将数据分为若干个小块,并在集群中的多个节点上并行...
    99+
    2024-03-14
    hadoop
  • Hadoop之Mapreduce序列化怎么实现
    这篇“Hadoop之Mapreduce序列化怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Hadoop之Mapred...
    99+
    2023-07-05
  • java mapreduce怎么按键值合并数据
    在Java中,可以使用MapReduce框架来按键值合并数据。以下是一个简单的示例代码:javaimport java.io.IOE...
    99+
    2023-10-20
    java
  • 用Python来写MapReduce的实
    用Python来写分布式的程序。这样速度快。便于调试,更有实际意义。MapReduce适合于对文本文件的处理及数据挖掘用:   在每台机器上: su - hadoop wget http://www.python.org/ftp/...
    99+
    2023-01-31
    来写 Python MapReduce
  • Golang编程并发工具库MapReduce使用实践
    目录环境项目需求mapReduce使用说明需求实现业务逻辑创建任务队列运行结果结论引申阅读环境 go version go1.16.4 windows/amd64 Intel(R) ...
    99+
    2024-04-02
  • 深入探究如何使用Java编写MapReduce程序
    目录MapReduce的原理Map阶段Reduce阶段Shuffle阶段MapReduce程序实现总结 MapReduce的原理 MapReduce由两个主要阶段组成:Map和Red...
    99+
    2023-05-19
    Java编写MapReduce程序 Java编写MapReduce Java MapReduce
  • MapReduce的Shuffle机制是什么
    这篇文章主要介绍“MapReduce的Shuffle机制是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MapReduce的Shuffle机制是什么”文章能帮助大家解决问题。Shuffle过程,...
    99+
    2023-06-27
  • Hive中怎么执行自定义MapReduce作业
    在Hive中执行自定义MapReduce作业需要以下步骤: 将自定义的MapReduce作业打包成jar文件,并上传到Hive所...
    99+
    2024-03-14
    Hive
  • YARN和MapReduce的内存优化怎么配置
    本篇内容主要讲解“YARN和MapReduce的内存优化怎么配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“YARN和MapReduce的内存优化怎么配置”吧!在Hadoop2.x中, YAR...
    99+
    2023-06-02
  • MapReduce的工作原理是什么
    本篇文章为大家展示了MapReduce的工作原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。开始聊mapreduce,mapreduce是hadoop的计算框架,我学hadoop是从hive...
    99+
    2023-06-03
  • MapReduce工作机制是什么
    这篇文章主要介绍了MapReduce工作机制是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MapReduce工作机制是什么文章都会有所收获,下面我们一起来看看吧。MapReduce,本质就是一种编程模型,...
    99+
    2023-06-27
  • hadoop和mapreduce有什么关系
    Hadoop是一个开源的分布式计算框架,而MapReduce是Hadoop框架中的一个编程模型。MapReduce将计算任务分解成多...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作