MapReduce

spark为什么比MapReduce速度快

会有一股神秘感。 提交于 2020-03-08 00:01:10
比mapreduce在内存中快100倍, 比mapreduce在磁盘中快10倍 重要原因: 1)mapreduce中间结果数据只能够保存在磁盘,spark可以保存在内存中。 比如说一个任务有2个job,在mapreduce中会存在shuffle,同样spark里面也会存在shuffle * 它们的shuffle产生的数据都会落地到磁盘 * mapreduce中前面的job运行完成后,当前该job的结果只能保存在磁盘,后面的job需要依赖于前面job的结果,这个时候只能进行大量的磁盘io操作 (2)mapreduce里面如果有大量的任务(Map任务和Reduce任务),比如说此时一共有1000个任务,每一个任务都是以进程的方式运行在yarn中。在spark中同样也有1000个任务,每一个任务都是以线程方式运行在spark集群中,开启一个进程跟开启一个线程代价和时间都是不一样的。进程的开启需要的资源远远大于线程。 来源: CSDN 作者: 弗瑞得姆 链接: https://blog.csdn.net/aiyin9511/article/details/104717716

Spark RDD与MapReduce

旧城冷巷雨未停 提交于 2020-03-07 13:16:47
什么是Map、什么是Reduce MapReduce是一个分布式编程计算模型,用于大规模数据集的分布式系统计算。 我个人理解,Map(映射、过滤)就是对一个分布式文件系统(HDFS)中的每一行(每一块文件)执行相同的函数进行处理; Reduce(规约、化简)就是对Map处理好的数据进行两两运算,因此reduce函数必须要有两个参数。 Map/Reduce的执行原理其实可以参考python的map/reduce函数: https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00141861202544241651579c69d4399a9aa135afef28c44000 Spark中的MapReduce RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。 RDD也支持常见的MapReduce操作。 RDD操作: 转换操作: 每一次转换操作都会产生不同的RDD,供给下一个“转换

YARN框架机制

我们两清 提交于 2020-03-06 22:38:52
YARN框架:资源调度 在执行job.waitforcompletion(true)时候会启动一个进程 Runjar ,相当于MapReduce程序提交客户端,靠这个与集群通信 1.Runjar向ResourceManager申请一个job 2.ResourceManager给Runjar返回一个job资源提交的路径(staging- dir)和为本job产生一个jobID 3.Runjar提交资源到HDFS上去 4.Runjar向ResourceManager汇报提交结果 5.ResourceManager把本job加入任务队列 6.NodeManager通过 心跳机制 向ResourceManager获取任务 7.NodeManage产生container,分配运行资源容器,包括CPU、内存等资源;同时也会把文件资源加载到容器 此时在container中代码、配置文件、资源都有了需要执行MapReduce,那么在哪台机器上运行,每个节点执行几个map,几个reduce,这些YARN就不知道了,YARN只做资源管理,它不能去启动mapreduce 由MapReduce框架封装的MRAPPMaster实现,就是mapreduce的应用程序的管理者,它是由YARN框架启动的 8.启动MRAPPMaster,到此YARN框架任务基本完成 9.MRAPPMaster向

使用ecplise开发MapReduce

拥有回忆 提交于 2020-03-06 17:56:12
一、环境准备    1.添加插件到eclipse plugins目录下就可以了    2.把Window编译后的hadoop的文件放到 hadoop的bin目录下       3.配置环境变量   HADOOP_HOME=E:\hadoop\hadoop-2.7.7   Path=%HADOOP_HOME%\bin;%HADOOP_HOME%\sbin    4.在eclipse中添加hadoop   Window >> Preferences       若是找不到Hadoop Map/Reduce  删除eclipse安装目录configuration文件中的org.eclipse.update文件夹,重启eclipse即可。    5.切换到Map/Reduce视图  >>Window->Show View->Other->MapReduce Tools,双击打开      6.建立链接      7.准备数据集  设置为utf-8格式 >> 打开文件 >> 另存为 >> 编码utf-8   8.hadoop-2.7.7\share\hadoop 中的common、hdfs、mapreduce、yarn中的jar包导入到项目的lib目录 二、新建Map/Reduce项目   new >> other >> Map/Reduce Project       三、代码   1

MapReduce实现wordcount统计

十年热恋 提交于 2020-03-06 12:33:34
继承Mapper的泛型 public class WCMapper extends Mapper<LongWritable, Text, Text, LongWritable> LongWritable->起始偏移量 Text->输入的文本 Text->输出的文本 LongWritable->计数 4个泛型中,前两个是指定mapper输入数据的类型,KEYIN是输入的key的类型,VALUEIN是输入的value的类型 map 和 reduce 的数据输入输出都是以 key-value对的形式封装的 默认情况下,框架传递给我们的mapper的输入数据中,key是要处理的文本中一行的起始偏移量,这一行的内容作为value 序列化问题: key-value数据要在网络中传输,必须实现序列化,java自带序列化功能,但是数据比较冗余,对于MapReduce海量数据分析过程中会有不利,因此实现hadoop自己的序列化。 继承Mapper,重写map方法 mapreduce框架每读一行数据就调用一次该方法 具体业务逻辑就写在这个方法体中,而且我们业务要处理的数据已经被框架传递进来,在方法的参数中 key-value @Override protected void map(LongWritable key, Text value,Context context) throws

Hadoop自己编译Hadoop安装包

。_饼干妹妹 提交于 2020-03-06 10:38:25
CentOS-6.7 编译 hadoop-2.6.5 (只需输入红色命令即可) 目录 1、阅读编译文档 .............................................................................................................................1 2、准备编译环境 .............................................................................................................................2 3、安装 gcc .....................................................................................................................................2 4、安装 gcc-c++ ..............................................................................................................................2

hadoop2.6.1源码编译64位

时光总嘲笑我的痴心妄想 提交于 2020-03-06 10:37:45
一、 问题 Apache官网上提供的hadoop本地库是32位的,如果我们的Linux服务器是64位的话,就会出现问题。 我们在64位服务器执行hadoop命令时,则会报以下错误: WARNutil.NativeCodeLoader: Unable to load native-hadoop library for yourplatform... using builtin-java classes where applicable 原因是hadoop-2.6.0.tar.gz安装包是在32位机器上编译的,64位的机器加载本地库.so文件时出错,不影响使用。 为了解决上述问题,我们就需要自己编译一个64位的hadoop版本。 二、编译hadoop2.6.1需要的软件 jdk 1.7 gcc 4.4.5 | gcc-c++ maven 3.3.3 protobuf 2.5.0 (google序列化工具) cmake 2.8.12.2 make ant 1.9.6 finbugs(可选择) 注意: finbugs不是编译所必须的软件,可以不下载。 三、编译软件的准备工作 1. jdk的安装 解压 tar -zxvf jdk-7u79-linux-x64.tar.gz 配置环境变量,编辑/etc/profile文件 export JAVA_HOME=/opt/jdk1.7.0_25

Hadoop源码编译

谁说我不能喝 提交于 2020-03-06 10:37:00
Hadoop不提供64位编译好的版本,只能用源码自行编译64位版本。学习一项技术从安装开始,学习hadoop要从编译开始。 1.操作系统编译环境 yum install cmake lzo-devel zlib-devel gcc gcc-c++ autoconf automake libtool ncurses-devel openssl-devel libXtst 2.安装JDK 下载JDK1.7,注意只能用1.7,否则编译会出错 http://www.Oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html tar zxvf jdk-7u75-linux-x64.tar.gz -C /app export JAVA_HOME=/app/jdk1.7.0_75 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar PATH=$PATH:$JAVA_HOME/bin 注:在安装protobuf前需要安装C编译器,运行以下命令: yum install autoconfautomake libtool cmake ncurses-devel openssl

CentOS 6.4 64位 源码编译hadoop 2.2.0

故事扮演 提交于 2020-03-06 10:36:07
CentOS 6.4 64位 源码编译hadoop 2.2.0 搭建环境:Centos 6.4 64bit 1、安装JDK 参考这里 2、安装maven maven官方下载地址,可以选择源码编码安装,这里就直接下载编译好的 wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.zip 解压文件后,同样在/etc/profie里配置环境变量 vim /etc/profie export MAVEN_HOME=/opt/maven3.1.1 export PATH=$PATH:$MAVEN_HOME/bin source /etc/profile 验证配置是否成功: mvn -version Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 23:22:22+0800) Maven home: /opt/maven3.1.1 Java version: 1.7.0_45, vendor: Oracle Corporation Java home: /opt/jdk1.7/jre Default locale: en_US, platform encoding: UTF

Hadoop手动编译

烈酒焚心 提交于 2020-03-06 10:35:34
相信各位读者们在运行Hadoop时或多或少的都会遇到一些很让人费解的警告,举个栗子: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 大家应该不陌生。之所以会出现这个问题是因为没有使用本地编译的Hadoop二进制文件运行Hadoop,而是使用了官网下载的预编译的Hadoop。虽然运行起来没有什么问题,但是每次启动的时候都显示这一句警告很不爽有木有? 废话不多说,我们现在开始。 本人是用的 CentOS 6.8 64bit 版本的Linux系统来运行Hadoop集群的。 首先,下载编译所需要的软件包 : apache-ant-1.9.4-bin.tar.gz findbugs-3.0.0.tar.gz protobuf-2.5.0.tar.gz apache-maven-3.0.5-bin.tar.gz 最后,还有Hadoop得到源码包,如hadoop-2.4.0-src.tar.gz 安装编译所需软件: 解压apache-maven-3.0.5-bin.tar.gz 把Maven的环境变量配到/etc/profile中,随后source /etc/profile使修改生效