MapReduce

浅析大数据的技术生态圈(Hadoop,hive,spark)

别说谁变了你拦得住时间么 提交于 2020-02-28 08:40:24
大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的。你可以把它比作一个厨房所以需要的各种工具。锅碗瓢盆,各有各的用处,互相之间又有重合。你可以用汤锅直接当碗吃饭喝汤,你可以用小刀或者刨子去皮。但是每个工具有自己的特性,虽然奇怪的组合也能工作,但是未必是最佳选择。 大数据,首先你要能存的下大数据。 传统的文件系统是单机的,不能横跨不同的机器。 HDFS(Hadoop Distributed FileSystem)的设计本质上是为了大量的数据能横跨成百上千台机器,但是你看到的是一个文件系统而不是很多文件系统。 比如你说我要获取/hdfs/tmp/file1的数据,你引用的是一个文件路径,但是实际的数据存放在很多不同的机器上。你作为用户,不需要知道这些,就好比在单机上你不关心文件分散在什么磁道什么扇区一样。HDFS为你管理这些数据。存的下数据之后,你就开始考虑怎么处理数据。虽然HDFS可以为你整体管理不同机器上的数据,但是这些数据太大了。一台机器读取成T上P的数据(很大的数据哦,比如整个东京热有史以来所有高清电影的大小甚至更大),一台机器慢慢跑也许需要好几天甚至好几周。 对于很多公司来说,单机处理是不可忍受的,比如微博要更新24小时热博,它必须在24小时之内跑完这些处理。那么我如果要用很多台机器处理,我就面临了如何分配工作

十四 MapReduce工作流程

孤街醉人 提交于 2020-02-28 05:35:50
文章目录 1 流程示意图 2 解析 1 流程示意图 2 解析 假如我们有一个文件ss.txt大小为200M的待处理文件,放在input目录下 客户端在submit job之前,获取待处理数据的信息, 然后根据参数配置, 形成一个任务分配的规划.把待处理的文件进行切片,200M大小的文件切成两个分区. ss . txt 0 - 128 M 第一个分区 ss . txt 128 - 200 M 第二个分区 客户端把切片信息还有需要的jar包和配置文件提交提交到Yarn 路径(如果是本地的话提交到本地路径) 如果是提交到yarn,yarn中的Mr appmaster 会获取信息,根据切片信息计算出MapTask的数量(一般是多少个切片多少个Task),创建MapTask分别处理一个切片. MapTask 中的InputFormat 中的RecorderReader会读取文件(按照配置的InputFormat的规则读,默认是TextInputFormat,按行读),获取k-v键值对. 读完的数据,会进入用户定义的Mapper中进行逻辑运算. Mapper 中处理完数据之后会把处理后的数据提交给outputCollector,然后outputCollector会把数据存储在 环形缓冲区 中. 环形缓冲区中左边存储元数据(数据信息),右边会存储数据(真正的k-v值),在写满环形缓冲区总容量

Hadoop的单机模式和官方示例

自古美人都是妖i 提交于 2020-02-28 04:58:32
一、 单机模式说明 >单机模式是Hadoop的默认模式。 又称本地模式、独立模式等。 因为不需要与其他节点交互,单机模式就不使用HDFS,也不加载任何Hadoop的守护进程。 该模式主要用于开发调试MapReduce程序的应用逻辑。 1. 环境准备 在一台linux机器上,安装好hadoop运行环境,安装方式请查看: HADOOP运行环境搭建 2. 配置说明 首先说明, 单机模式在安装之后不需要修改任何配置,配置文件为空即可! 之所以单机模式不需要任何配置文件,是因为配置文件不配置时,系统默认值即为单机模式所需。 配置文件名 | 配置项 | 配置项含义 | 默认值 | 默认值含义 -|-|-|-|- core-site.xml | fs.defaultFS | 默认文件系统的名称,可以是HDFS的NameNode地址或者本地 | file:/// | 文件读取和存储都在本地 mapred-site.xml| mapreduce.framework.name|指定执行MapReduce任务的框架。可以是本地、经典、yarn|local|指定MR运行在本地 二、本地运行官方示例 搭建完成Hadoop运行环境之后,无需任何配置,即可开始本地MapReduce的测试任务,官方在share文件夹下,提供了一些官方样例。 1. 官方Grep案例 1. 在/opt/module/hadoop-2

MapReduce的计数器

半城伤御伤魂 提交于 2020-02-28 03:45:24
第一部分.Hadoop计数器简述 hadoop计数器: 可以让开发人员以全局的视角来审查程序的运行情况以及各项指标,及时做出错误诊断并进行相应处理。 内置计数器(MapReduce相关、文件系统相关和作业调度相关), 也可以通过http://master:50030/jobdetails.jsp查看 MapReduce的输出: 运行jar包的详细步骤: [root@neusoft-master filecontent]# hadoop jar Traffic.jar /data/HTTP_20130313143750.dat /out2 17/02/01 19:58:17 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 17/02/01 19:58:18 INFO client.RMProxy: Connecting to ResourceManager at neusoft-master/192.168.191.130:8080 17/02/01 19:58:18 WARN mapreduce.JobResourceUploader: Hadoop command

Mapreduce执行过程分析(基于Hadoop2.4)——(三)

安稳与你 提交于 2020-02-28 03:39:21
4.4 Reduce类 4.4.1 Reduce介绍 整完了Map,接下来就是Reduce了。YarnChild.main()—>ReduceTask.run()。ReduceTask.run方法开始和MapTask类似,包括initialize()初始化,根据情况看是否调用runJobCleanupTask(),runTaskCleanupTask()等。之后进入正式的工作,主要有这么三个步骤:Copy、Sort、Reduce。 4.4.2 Copy Copy就是从执行各个Map任务的节点获取map的输出文件。这是由ReduceTask.ReduceCopier 类来负责。ReduceCopier对象负责将Map函数的输出拷贝至Reduce所在机器。如果大小超过一定阈值就写到磁盘,否则放入内存,在远程拷贝数据的同时,Reduce Task启动了两个后台线程对内存和磁盘上的文件进行合并,防止内存使用过多和磁盘文件过多。 Step1: 首先在ReduceTask的run方法中,通过如下配置来mapreduce.job.reduce.shuffle.consumer.plugin.class装配shuffle的plugin。默认的实现是Shuffle类: 1 Class<? extends ShuffleConsumerPlugin> clazz = job.getClass

MapReduce: Simplied Data Processing on Large Clusters (译)

帅比萌擦擦* 提交于 2020-02-27 18:18:03
MapReduce: Simplied Data Processing on Large Clusters (译) 摘要: MapReduce是一个编程模型以及用来处理和生成大数据集的一个相关实现。用户通过描述一个map函数,处理一组key/value对进而生成一组key/value对的中间结果,然后描述一个reduce函数,将具有相同key的中间结果进行归并。正如论文所表明的,很多现实世界中的任务都可以用这个模型来表达。 以这种函数式风格写出来的程序在一个由普通机器组成的集群上自动的进行并行化和执行。由一个运行时系统来关注输入数据的划分细节,在机器集合上的程序执行调度,处理机器失败以及管理所需要的机器间的通信。这就允许那些没有并行分布式系统编程经验的程序员很容易的使用大型分布式系统的资源。 我们的MapReduce实现运行在一个有很多普通机器组成的集群上,而且具有高扩展性:一个典型的MapReduce计算将会在一个数千台机器的集群上处理很多T的数据。对于程序员来说,这个系统很好用,目前已经有数百个MapReduce程序实现,在google的集群上每天有上千个MapReduce job在跑。 1.导引 在过去的五年来,作者和google的其他工程师已经实现了数百了用于特殊目的在大量原始数据(比如爬虫爬的文档,web访问日志等等)上进行的运算。为了计算各种类型的衍生数据:比如倒排索引

MapReduce概述

空扰寡人 提交于 2020-02-27 16:01:58
1. MapReduce定义 2. MapReduce优缺点 3. MapReduce核心思想 1)分布式的运算程序往往需要分成至少2个阶段。 2)第一个阶段的MapTask并发实例,完全并行运行,互不相干。 3)第二个阶段的ReduceTask并发实例互不相干,但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出。 4)MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行。 总结:分析WordCount数据流走向深入理解MapReduce核心思想。 4. MapReduce进程 5. 常用数据序列化类型 6.MapReduce编程规范 用户编写的程序分成三个部分:Mapper、Reducer和Driver。 来源: CSDN 作者: 老菜啦 链接: https://blog.csdn.net/weixin_43497444/article/details/104535067

圆形缓冲区-MapReduce中的

假如想象 提交于 2020-02-27 15:54:16
这篇文章来自一个读者在面试过程中的一个问题,Hadoop在shuffle过程中使用了一个数据结构-环形缓冲区。 环形队列是在实际编程极为有用的数据结构,它是一个首尾相连的FIFO的数据结构,采用数组的线性空间,数据组织简单。能很快知道队列是否满为空。能以很快速度的来存取数据。 因为有简单高效的原因,甚至在硬件都实现了环形队列。 环形队列广泛用于网络数据收发,和不同程序间数据交换(比如内核与应用程序大量交换数据,从硬件接收大量数据)均使用了环形队列。 环形缓冲区数据结构 Map过程中环形缓冲区是指数据被map处理之后会先放入内存,内存中的这片区域就是环形缓冲区。 环形缓冲区是在MapTask.MapOutputBuffer中定义的,相关的属性如下: // k/v accounting // 存放meta数据的IntBuffer,都是int entry,占4byte private IntBuffer kvmeta; // metadata overlay on backing store int kvstart; // marks origin of spill metadata int kvend; // marks end of spill metadata int kvindex; // marks end of fully serialized records //

Hadoop计算框架——MapReduce

前提是你 提交于 2020-02-27 15:00:41
MapReduce概述 MapReduce定义 MapReduce是 一个分布式计算框架 ,是用户开发“基于Hadoop的数据分析应用”的核心框架。MapReduce核心功能是将 用户编写的业务逻辑代码和自带默认组件 整合成一个完整的 分布式运算程序 ,并发运行在一个Hadoop集群上 MapReduce的优缺点 优点: 易于编程: 它 简单的实现了一些接口,就可以完成一个分布式程序。 这个分布式程序可以分布到大量廉价的PC机上运行。 良好的扩展性: 当机器资源不足时,可以通过简单的增加机器来扩展它的计算能力。 高容错性: MapReduce有很好的容错性。比如 其中一台机器挂掉,它就可以把计算任务转移到另外一个节点上运行,不至于这个任务运行失败 ,而且这个过程完全是由Hadoop内部完成的。 适合PB级以上的海量数据的离线处理: 可以实现在上千台服务器上并发完成任务,提供数据处理能力。 缺点: 不擅长实时计算:无法像MySQL那样可以在毫秒级或秒级内返回结果。 不擅长流式处理:流式计算的输入数据是动态的,而MapReduce的输入数据集是静态的,不能动态变化。 不擅长DAG(有向图)计算:多个应用程序存在依赖关系,后一个应用程序的输入为前一个应用程序的输出。在这种情况下,MapReduce并不能这样做,而是使用后, 每个MapReduce作业的输出结果都会写入到磁盘

NewBanker wbs架构图

纵然是瞬间 提交于 2020-02-27 14:55:09
架构设计的目的 架构设计的主要目的:是为了解决软件系统复杂度带来的问题 。 个人感悟是:架构即(重要)决策,是在一个“ 有约束的盒子 ”里去求解或接近最优解。这个“ 有约束的盒子 ”是团队经验、成本、资源、进度、业务所处阶段等所编织、掺杂在一起的综合体(人,财,物,时间,事情等)。架构无优劣,但是存在恰当的架构用在合适的软件系统中,而这些就是决策的结果。 软件系统复杂度 软件领域的复杂性 体现在两个方面: 1. 结构的复杂性 结构复杂的系统几乎毫无例外具备两个特点: 组成复杂系统的组件数量更多; 同时这些组件之间的关系也更加复杂。 2. 逻辑的复杂性 意识到结构的复杂性后,我们的第一反应可能就是“降低组件数量”,毕竟组件数量越少,系统结构越简。最简单的结构当然就是整个系统只有一个组件,即系统本身,所有的功能和逻辑都在这一个组件中实现。 不幸的是,这样做是行不通的,原因在于除了结构的复杂性,还有逻辑的复杂性,即如果某个组件的逻辑太复杂,一样会带来各种问题。 逻辑复杂的组件,一个典型特征就是单个组件承担了太多的功能。 架构设计三原则 1 合适原则: 合适优于业界领先 架构无优劣,但存合适性。“汝之蜜糖,吾之砒霜”;架构一定要匹配企业所在的业务阶段;不要面向简历去设计架构,高大上的架构不等于适用;削足适履与打肿充胖都不符合合适原则;所谓合适,一定要匹配业务所处阶段