小伙伴们要的干货来了!探讨编程语言c与大数据开发实践

IEEE Spectrum的

第三次“最受欢迎编程语言”中

C语言居首

有人说是大数据赢了

今天我们与小伙伴们

探讨C与大数据的开发实践

大数据是使用工具和技术处理大量和复杂数据集合的术语

能够处理大量数据的技术称为MapReduce

何时使用MapReduce

MapReduce特别适合涉及大量数据的问题

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

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

1 计数和统计 2 整理 3 过滤 4 排序

Apache Hadoop

在本文中

我们将使用Apache Hadoop

开发MapReduce解决方案

推荐使用Hadoop

它已经是事实上的标准

同时也是开源免费的软件

另外在Amazon,Google和Microsoft等

云提供商租用或搭建Hadoop集群

还有其他多个优点:

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

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

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

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

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

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

Hadoop安装

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

映射器(Mapper)

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

the  1water  1on   1on  1water  1on    1...   1

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

reducer

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

water 2the   1on    3

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

使用PHP做单词计数器

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

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

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

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

hadoop dfs -mkdir wordcount

我们的PHP代码从mapper开始

下面是 reducer 代码。

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

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

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

输出将存储在文件夹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看起来像这样

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

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

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

最终在hadoop集群上运行它

查看平均值

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

这会生成一个名为chart.jpg的文件。看起来像这样:

原文发布于微信公众号 - 老九学堂(xuetang9)

原文发表时间:2018-06-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编舟记

一名Clojurian的Emacs配置

我是一名热衷于函数式编程的Clojurian(Clojure粉),网络ID是lambeta(λβ),读作/‘læmeitə/,个人的博客网站是https://l...

3922
来自专栏向治洪

Java中的ReentrantLock和synchronized两种锁机制的对比

原文:http://www.ibm.com/developerworks/cn/java/j-jtp10264/index.html 多线程和并发性并不是什...

2325
来自专栏编程微刊

2018上半年GitHub上最热门的开源项目

6936
来自专栏挖掘大数据

干货:最受欢迎编程语言c与大数据开发实践

IEEE Spectrum的第三次“最受欢迎编程语言”中,C语言居首,有人说是大数据赢了。本文将探讨c与大数据的开发实践。大数据是使用工具和技术处理大量和复杂数...

6810
来自专栏Kirito的技术分享

天池中间件大赛百万队列存储设计总结【复赛】

维持了 20 天的复赛终于告一段落了,国际惯例先说结果,复赛结果不太理想,一度从第 10 名掉到了最后的第 36 名,主要是写入的优化卡了 5 天,一直没有进展...

2113
来自专栏ImportSource

必懂的NoSQL理论-Map-Reduce(上)

本文主要内容:基本的Map-Reduce Map-Reduce 基本原理 面向聚合的数据库能够兴起很大一部分原因是由于集群的增长。数据库运行在集群环境中意...

35810
来自专栏风火数据

出一套高端大数据开发面试题

一千个读者眼中有一千个哈姆雷特,一千名 大数据 程序员心目中就有一千套 大数据面试题。本文就是笔者认为可以用来面试大数据 程序员的面试题。

1253
来自专栏IT派

Python家族全家福,看你到底有多少熟人?

包管理 管理包和依赖的工具。 pip – Python 包和依赖关系管理工具。 pip-tools – 保证 Python 包依赖关系更新的一组工具。 cond...

6215
来自专栏牛客网

爱奇艺面经,Java后台开发

1,介绍下快排和归并各自的思路,优缺点 (讲了讲思路,然后说了下稳定性,最坏情况复杂度)知道Java里面的sort是哪种实现吗?(不知道,和面试官说了说Cpp里...

40615
来自专栏程序员互动联盟

程序语言变形记

随着科技的发展我们生活中接触到的应用程序越来越多,它给我们的生活带来了很大的便利。移动端安卓,苹果大肆横行;pc上QQ,浏览器大行天下。我们在享受这些软件给我们...

3295

扫码关注云+社区

领取腾讯云代金券