网站模版怎样使用,社交app开发,网站建设php,包头seo优化在聊 MapReduce 之前不妨先看个例子#xff1a;假设某短视频平台日活用户大约在7000万左右#xff0c;若平均每一个用户产生3条行为日志#xff1a;点赞、转发、收藏#xff1b;这样就是两亿条行为日志#xff0c;再假设每条日志大小为100个字节#xff0c;那么一天就会产…在聊 MapReduce 之前不妨先看个例子假设某短视频平台日活用户大约在7000万左右若平均每一个用户产生3条行为日志点赞、转发、收藏这样就是两亿条行为日志再假设每条日志大小为100个字节那么一天就会产生将近20个GB左右的数据
面对这么大的数据量如何对这些数做一些统计分析呢
以Java为例如果写一个程序从一个近20个GB的日志文件里一条一条读取日志并计算直到两亿数据全部计算完毕你认为会花费多长时间
不妨做个实验随机生产从0到100的数字并将其写入文件当中最终生成一个大小为20个GB左右的文件
public void generateData() throws IOException {File file new File(D:\\微信公众号\菜鸟进阶站.txt);if (!file.exists()) {try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}BufferedWriter bos new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true)));for (long i 1; i Integer.MAX_VALUE * 3.4; i) {String data String.valueOf(random.nextInt(100)1);bos.write(data);if (i % 1000000 0) {bos.write(\n);}}bos.close();
}使用代码来统计哪一个数字出现的次数最多执行过程忘记截图了最后得出结论整个统计过程大概用了12分钟左右目前还仅仅是 GB级别如果是 TB、PB呢
作为科技巨头的大佬Google谷歌对该问题给出了答案
谷歌从2003年到2006年先后发表了三篇论文GFS、MapReduce和Big Table。俗称三架马车也正是这三驾马车正式打开了大数据的大门今天我们主要聊一聊其中的MapReduce
该模型可以让开发者不用去考虑复杂的分布式架构使得编写分布式代码就像单机版一样简单自动将大任务拆分成小任务分发到不同的机器上面进行并行计算
简单来说 MapReduce的核心思想就是分而治之
说到分而治之就让我想起来小时候语文老师给我们的留的作业抄写鲁迅的所有文章。这工作量可算是巨大的了
为了能按时提交作业我便将作业撕成了3份张三一份、李四一份、王五一份让他们分别区抄写其中的一部分最后由我将3份作业订装在一起交给老师这整个过程中将作业撕开分别交给3个人便是 Map最后我把作业组装起来便是 Reduce
上述过程只是一个笼统的概念。细的说其实 MapReduce 大致话可以分为 Map、shuffle、Reduce 3个过程
首先根据数据量大小生产多个 Map任务每个 Map任务会读取原数据并进行逻辑处理最终生产一个 KV键值对同时对每条数据根据 key 的值计算所属分区并打上一个逻辑标识用来决定改数据回去到哪一个 Reduce
Shuffle 过程包含在 Map 和 Reduce 的两端Map 端的 Shuffle 会对数据进行一个排序得到一个有序的文件该文件按照分区排序并且每个分区内部的键值对都按照 Key 的值进行升序排序Reduce 端的 Shuffle会去拉取属于自己分区的数据并进行一个合并排序 Reduce 端根据业务需求会对数据做进一步的处理并输出结果
从上述过程中可以看出Reduce 数量也就是分区的数量分区相同的数据会经过 Shuffle 到达同一个 Reduce 当中
以 WordCount 为例该程序用来统计每个单词出现的次数现在假设有份巨大的文件我们将该文件进行切分切分成三个 Map 任务每个 Map 会对每行的内容按空格切分每切下一个单词我们就将其组成一个 KV 键值对其中 Key 代表这个单词 Value 代表该单词出现的次数 由于我们的目标是统计每个单词出现的次数因此我们只需要一个 Reduce 即可在经过 MapShuffle 排序后在每个 Map 端会生成一个有序的文件 Reduce 端的 Shuffle 会去拉取属于自己分区的数据并作为一个合并排序最后 Reduce 会遍历每个单词对于的数组进行累加并进行结果的直接输出