MapReduce

MIT 6.824 lab1:mapreduce

旧巷老猫 提交于 2020-12-20 23:04:32
这是 MIT 6.824 课程 lab1 的学习总结,记录我在学习过程中的收获和踩的坑。 我的实验环境是 windows 10,所以对lab的code 做了一些环境上的修改,如果你仅仅对code 感兴趣,请移步 : github/zouzhitao mapreduce overview 先大致看一下 mapreduce 到底是什么 我个人的简单理解是这样的: mapreduce 就是一种分布式处理用户特定任务的系统。它大概是这样处理的。 用户提供两个函数 mapFunc(k1,v1)-> list(k2,v2) reduceFunc(k2,list(v2)) -> ans of k2 这个 分布式系统 将用户的任务做分布式处理,最终为每一个 k2 生成答案。下面我们就来描述一下,这个分布式系统是如何处理的。 首先,他有一个 master 来做任务调度。 master 先调度 worker 做 map 任务,设总的 map 任务的数目为 $M$ , 将result 存储在 中间文件 m-i-j 中, $i \in {0,\dots ,M-1}, j \in {0,\dots,R-1}$ 调度 worker 做 reduce 任务,设总的 reduce 任务数目为 $R$, 将答案储存在 $r_j$ 然后将所有的renduce 任务的ans merge起来作为答案放在一个文件中交给用户

MIT6.824 mapReduce lab1 reduce过程实现

烈酒焚心 提交于 2020-12-20 16:47:32
worker 1. worker像master请求reduce任务,master分配reduce任务给worker 2. 经过map过后的文件格式如下:mr-X-Y, where X is the Map task number, and Y is the reduce task number. 执行reduce过程时,需要对X遍历,然后对指定的Y reduce 3. reduce算法过程如下,使用一个map数据结构 interMaps := map[string][]string{}, 实现算法如下: // 收集所有的key string和value []string在map中,然后传递给worker的reducef中 interMaps := map[string][]string{} interFileNames := []string{} for i := 0; i < nMapTask; i++ { interFileName := fmt.Sprintf("mr-%d-%d", i, reduceTaskID) interFileNames = append(interFileNames, interFileName) //留着之后删除中间结果用 // 打开文件 file, err := os.Open(interFileName) if err != nil {

hive性能调优

亡梦爱人 提交于 2020-12-19 04:36:35
hive性能调优 (一)Hadoop 计算框架的特性 什么是数据倾斜 由于数据的不均衡原因,导致数据分布不均匀,造成数据大量的集中到一点,造成数据热点 Hadoop框架的特性 不怕数据大,怕数据倾斜 jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次汇总,产生十几个jobs,耗时很长。原因是map reduce作业初始化的时间是比较长的 sum,count,max,min等UDAF,不怕数据倾斜问题,hadoop在map端的汇总合并优化,使数据倾斜不成问题 count(distinct ),在数据量大的情况下,效率较低,因为count(distinct)是按group by 字段分组,按distinct字段排序,一般这种分布方式是很倾斜的 (二)优化的常用手段 (1)解决数据倾斜问题 (2)减少job数 (3)设置合理的map reduce的task数,能有效提升性能。 (4)了解数据分布,自己动手解决数据倾斜问题是个不错的选择 (5)数据量较大的情况下,慎用count(distinct)。 (6)对小文件进行合并,是行至有效的提高调度效率的方法。 (7)优化时把握整体,单个作业最优不如整体最优。 (三)Hive的数据类型方面的优化 优化原则 (1)按照一定规则分区(例如根据日期)。通过分区,查询的时候指定分区,会大大减少在无用数据上的扫描,

MapReduce统计单词

荒凉一梦 提交于 2020-12-18 19:25:20
一、HDFS个人理解 HDFS是个文件系统,只不过加了个分布式作为文件系统的前缀而已,大概的结构就像LINUX系统。文件大的一个电脑存储不下,怎办?那就想办法存储到不同的机子上呗,于是HDFS就应用而生了。众所周知,文件在硬盘上是以文件块的形式存储。什么句柄啊,真心不懂,只能感知,没人能明白0和1,当然也没必要。 二、Map个人理解 数学函数大家都清楚吧,f(x)=2x,这是一个简单的线性函数。 打开脑洞,将x看成文件中的一行行的字符串,x=“hello hadoop hello mapreduce ” 而此时f(x)的功能是将此字符串按照空格隔开,输出结果为:(hello 1)、(hadoop 1)、(hello 1)、(mapreduce 1)格式。 继续打开脑洞,将x看成一个大文件的一个文件块,比如1万行作为一个文件块,作为x的数值。Hadoop会为每一个文件块构建一个Map任务。 假设,某个HDFS文件有5万行数据,Hadoop将5万行数据切分成5个不同的分片,每个分片有1万行数据,再假设有5台hadoop集群,那么Hadoop会构建5个Map任务,每个Map任务处理一个分片,完全是并行处理的。 三、 Map代码大放送 public static class WordCountMapper extends Mapper<LongWritable,Text,Text

大数据集群资源预估规划【适用于面试与工作集群规划】

落爺英雄遲暮 提交于 2020-12-18 14:02:10
问题导读 1.如何判断数据增量? 2.QPS如何计算? 3.存储空间需要考虑哪些因素? 4.内存估算和哪些因素有关? 我们在实际工作,或者面试中,经常会遇到这么一个问题,集群该如何规划,一台机器多少磁盘,多少内存,多少core等。 关于公司集群规模,有的几台,有的几百或有的则几千台,那么这几百几千台机器他们的配置是怎么样的? 这里先说下大概,对于大多数公司来说,集群有的10来台,而对于电信行业,一个地方的可能有几百台,对于一线互联网集群规模就比较大一些,上千台是比较常见的。 那么如果我们要搭建大数据平台,集群该如何规划?这是我们初步搭建集群的时候,首次遇到的问题。 对于需要多少台机器,其实这个问题,不能一刀切的回答,具体情况具体分析。虽然一开始我们不知道多少台机器,但是我们可以知道影响的关键因素? 那就是数据的增量是多少? 数据的增量,这里我们来说下数据增量: 其实数据的增量不同的公司,也是不一样的,有的公司数据增量也就是几个G,而有的公司数据增量1T以上,比如物联网大数据。除了数据增量,还有其它影响因素,比如使用的计算组件,使用MapReduce和Spark,Flink在内存的使用上,肯定是有区别的。再比如QPS也影响着系统的资源分配。 除了影响因素,那么我们预估集群包含哪些步骤? 1.判断计算数据增量大小 如何计算数据量得大小,这个其实很多企业已有相关得系统

centos6.6安装hadoop-2.5.0(一、本地模式安装)

你。 提交于 2020-12-18 02:10:15
操作系统:centos6.6(一台服务器) 环境:selinux disabled;iptables off;java 1.8.0_131 安装包:hadoop-2.5.0.tar.gz hadoop的本地模式部署(适用于本地开发调试模式) 1、新建安装目录 #mkdir /data/hadoop/hadoopstandalone -p 2、解压压缩包 #tar zxvf hadoop-2.5.0.tar.gz -C /data/hadoop/hadoopstandalone/ 3、运行hadoop之前确保${JAVA_HOME}路径已添加环境变量 #${JAVA_HOME} 4、准备测试文件 #cat /data/hadoop/hadoopstandalone/hadoop-2.5.0/wc.input 5、运行hadoop自带的mapreduce demo #bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount wc.input output #ll output/ _SUCCESS表示JOB运行成功 part-r-00000表示输出文件结果 在hadoop本地模式运行时,会看到LocalJobRunner的字样。 来源: oschina 链接: https:/

【hadoop】hadoop3.2.0的安装并测试

若如初见. 提交于 2020-12-17 06:10:17
前言:前段时间将hadoop01的虚拟机弄的崩溃掉了,也没有备份,重新从hadoop02虚拟上克隆过来的,结果hadoop-eclipse插件一样的编译,居然用不起了,找了3天的原因,最后还是没有解决,只能用hadoop shell 命令去测试了,反正影响不大,只不过用着不方便而已。 心累中........... 正文: 解压安装Hadoop [hadoop@hadoop01 ~]$ cp /home/hadoop/Resources/hadoop-3.2.0.tar.gz ~/ [hadoop@hadoop01 ~]$ tar -zxvf ~/hadoop-3.2.0.tar.gz [hadoop@hadoop01 ~]$ cd hadoop-3.2.0 [hadoop@hadoop01 hadoop-3.2.0]$ ls -l total 184 drwxr-xr-x. 2 hadoop hadoop 203 Jan 8 2019 bin drwxr-xr-x. 3 hadoop hadoop 20 Jan 8 2019 etc drwxr-xr-x. 2 hadoop hadoop 106 Jan 8 2019 include drwxr-xr-x. 3 hadoop hadoop 20 Jan 8 2019 lib drwxr-xr-x. 4 hadoop hadoop

Python MapReduce - Count Frequency of numbers in a file

徘徊边缘 提交于 2020-12-15 03:50:19
问题 I posted a question earlier regarding this. I'm using DVD data sent from here. My Mapper produced the required key and value with the following import sys import re # input comes from STDIN (standard input) for line in sys.stdin: line = line.strip() line = line.split(",") if len(line) == 5: try: cpu = int(line[0]) if cpu < 10: cpu = '(0-10]' elif cpu >= 11 and cpu <= 20: cpu = '(11-20]' elif cpu >= 21 and cpu <= 30: cpu = '(21-30]' elif cpu >= 31 and cpu <= 40: cpu = '(31-40]' elif cpu >= 41

Python MapReduce - Count Frequency of numbers in a file

别说谁变了你拦得住时间么 提交于 2020-12-15 03:45:31
问题 I posted a question earlier regarding this. I'm using DVD data sent from here. My Mapper produced the required key and value with the following import sys import re # input comes from STDIN (standard input) for line in sys.stdin: line = line.strip() line = line.split(",") if len(line) == 5: try: cpu = int(line[0]) if cpu < 10: cpu = '(0-10]' elif cpu >= 11 and cpu <= 20: cpu = '(11-20]' elif cpu >= 21 and cpu <= 30: cpu = '(21-30]' elif cpu >= 31 and cpu <= 40: cpu = '(31-40]' elif cpu >= 41

物品推荐(基于物品的协同过滤算法)

你。 提交于 2020-12-15 01:39:42
用户对物品的评分矩阵 × 物品相似矩阵 = 推荐列表 构建物品相似度矩阵的时候可以通过计算两个物品的余弦相似度得出,于是需要构建每个物品在所有用户中的评分矩阵 本例中,不采用余弦相似度的方式计算物品与物品相似度 在MapReduce作业中,输入数据的格式是:用户,物品,评分 第一步、构建用于评分矩阵,表示如下: 第二步、构建物品相似度矩阵。这里采用的方法是:如果两个物品同时出现在某个用户的评分矩阵中,则计数加1,例如,101和102同时出现在A B E中,因此101和102的相似度计为3,依次类推得出整个相似度矩阵,这个矩阵是一个对称矩阵。这一步的输入是第一步的输出。 代码片段如下: 这样得出的结果类似于这样: 第三步、矩阵相乘。就是用第一步的输出矩阵乘以第二步的输出矩阵,这一步颇为复杂,需要将第二步的输出矩阵缓存起来 话不多说,上代码 来源: oschina 链接: https://my.oschina.net/u/4320063/blog/4188950