数据处理

Hadoop【2.1】 Shuffle概述

时光毁灭记忆、已成空白 提交于 2020-02-26 00:15:39
在每个maptask的结束,我们拿到的是<K,V>的队列,在Reduce中,输入的是<K,Iterable V>。在中间有一个被称为Shuffle的工作,将Maptask的数据按Key排序。其主要的工作,大体上讲1.完整地从map task端拉取数据到reduce端。2.在跨节点拉取数据时,尽可能地减少对带宽的不必要消耗。3.减少磁盘IO对task执行的影响。(主要的优化工作在于更多的使用内存而非磁盘IO) 部分转自 https://www.cnblogs.com/sunfie/p/4928662.html ; MapTask的Shuffle 从四个方面来讲Map这块的Shuffle,map结果写入磁盘 ; 缓存数据的分区(Partition)分组(Combiner)排序(Sort) ; 文件合并 (Merge); 1.map结果写入磁盘 对于并行的map工作,产生了许多结果输出,首先我们讲各个节点上得到的结果存到一个环形内存缓冲区里(填到80%就往外拿数据了,不然满了,剩下20%继续读map的数据),当缓冲区全满了,那map就阻塞吧,直到写磁盘结束了再继续。写出去的文件叫做溢出文件(Spill),这个溢写是由单独线程来完成,不影响往缓冲区写map结果的线程,溢写线程启动时不应该阻止map结果的输出。 2.缓存数据的分区(Partition)分组(Combiner)排序(Sort)

scala基础语法-----Spark基础

女生的网名这么多〃 提交于 2020-02-26 00:04:23
注:最近在上网课,然后这学期开了一门spark,以下文字来自课堂发的资料,不知道发在这上面算不算侵权,主要是为了自己复习方便,侵权删。 然后我根据上课内容进行了一些练习,代码在最下方。 scala基本语法 我们可以根据scala 菜鸟教程来学习 地址为: https://www.runoob.com/scala/scala-tutorial.htm 1.变量声明 /** * 定义变量使用var或者val关 键 字 * 语法: * var | val 变量名称(: 数据类型) =变量值 */ // 使用val修饰的变量, 值不能为修改,相当于java中final修饰的变量 val name = "tom" name=”李四” //错误 // 使用var修饰的变量,值可以修改 var age = 18 age=40 //正确 ,可以修改 // 定义变量时,可以指定数据类型,也可以不指定,不指定时编译器会自动推测变量的数据类型 val name2 : String = "jack" 2.变量声明字符串的格式化输出 val al name = "JackMa" val price = 998.88d val url = "www.baidu.com" // 普通输出,注意这里是可以使用逗号分隔的,但是在java中,我们是需要用“+”号拼接 println ( "name=" + name

hadoop基础三:YARN简介、组件

六眼飞鱼酱① 提交于 2020-02-25 22:50:56
YARN定位 云计算三层服务: IaaS、PaaS、SaaS YARN属于PaaS层。 YARN设计目标 通用的统一资源管理系统 同时运行长应用程序和短应用程序 长应用程序 通常情况下,永不停止运行 Service(hadoop、Spark、Storm)、HTTP Server等 短应用程序 短时间(秒级、分钟级、小时级)内会运行结束的程序 MR job、Spark Job等 YARN服务组件 1、组件 Client ResourceManager、Application Master NodeManager、Container YARN总体上仍然是Master/Slave结构,在整个资源管理框架中,ResourceManager为Master,NodeManager为Slave。 ResourceManager负责对各个NodeManager上的资源进行统一管理和调度 当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个程序的。 ApplicationMaster,它负责向ResourceManager申请资源,并要求NodeManger启动可以占用一定资源的任务。 由于不同的ApplicationMaster被分布到了不同的节点上,因此他们之间不会相互影响。 2、其他组件 JobHistoryServer、TimelineServer、mr-jobhistory

机器学习研究与开发平台的选择

本小妞迷上赌 提交于 2020-02-25 18:19:41
    目前机器学习可以说是百花齐放阶段,不过如果要学习或者研究机器学习,进而用到生产环境,对平台,开发语言,机器学习库的选择就要费一番脑筋了。这里就我自己的机器学习经验做一个建议,仅供参考。     首先,对于平台选择的第一个问题是,你是要用于生产环境,也就是具体的产品中,还是仅仅是做研究学习用? 1. 生产环境中机器学习平台的搭建     如果平台是要用于生产环境的话,接着有一个问题,就是对产品需要分析的数据量的估计,如果数据量很大,那么需要选择一个大数据平台。否则的话只需要一个单机版的平台就可以了。 1.1 生产环境中机器学习大数据平台的搭建     生产环境里面大数据平台,目前最主流的就是Spark平台,加上辅助的分布式数据处理容器,比如YARN,或者Mesos.如果需要实时的收集在线数据,那么就加上Kafka。简言之,一个通用的大数据处理平台就是集成Spark + YARN(Mesos) + Kafka. 我现在做的产品项目都是基于Spark + YARN+ Kafka的,目前来看,这个平台选择基本上是主流的方向。     当然,有人会说,这么多开源软件,一起集成起来好麻烦,大坑肯定不少,有没有一个通用的平台,可以包括类似Spark + YARN+ Kafka的大数据平台功能呢?目前据我所知,做的比较好的有CDAP(http://cdap.io)。它对Spark,

大数据的技术生态圈:Hadoop,hive,spark

冷暖自知 提交于 2020-02-24 23:14:22
一文教你看懂大数据的技术生态圈:Hadoop,hive,spark 责任编辑:editor005 | 来源: 企业网D1Net 2015-03-02 13:50:51 本文摘自:中国大数据 /*--> */ /*--> */ 大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的。你可以把它比作一个厨房所以需要的各种工具。锅碗瓢盆,各有各的用处,互相之间又有重合。你可以用汤锅直接当碗吃饭喝汤,你可以用小刀或者刨子去皮。但是每个工具有自己的特性,虽然奇怪的组合也能工作,但是未必是最佳选择。 大数据,首先你要能存的下大数据。 传统的文件系统是单机的,不能横跨不同的机器。HDFS(Hadoop Distributed FileSystem)的设计本质上是为了大量的数据能横跨成百上千台机器,但是你看到的是一个文件系统而不是很多文件系统。比如你说我要获取/hdfs /tmp/file1的数据,你引用的是一个文件路径,但是实际的数据存放在很多不同的机器上。你作为用户,不需要知道这些,就好比在单机上你不关心文件分散在什么磁道什么扇区一样。HDFS为你管理这些数据。 存的下数据之后,你就开始考虑怎么处理数据。虽然HDFS可以为你整体管理不同机器上的数据,但是这些数据太大了。一台机器读取成T上P的数据(很大的数据哦

ML平台_Angel参考

吃可爱长大的小学妹 提交于 2020-02-24 14:27:05
Angel 是腾讯开源基于参数服务器(Parameter Server)理念的机器学习框架( 为支持超大维度机器学习模型运算而生 ) 。 核心设计理念围绕模型,它将高维度的大模型切分到多个参数服务器节点 , 并通过高效的模型更新接口和运算函数 , 以及灵活的同步协议,实现机器学习算法的高效运行 。,开源代码地址: https://github.com/Tencent/angel 。 Angel 由 Java 和 Scala 开发,基于 Yarn 调度运行, 既能独立运行 ,高效运行特有的算法, 亦能作为 PS Service,支持 Spark 或其它深度学习框架,为其加速 。它基于腾讯内部的海量数据进行了反复的实践和调优,并具有广泛的适用性和稳定性,模型维度越高,优势越明显。 解释 BSP :(Bulk Synchronous Parallel 整体同步并行计算模型),BSP的概念由Valiant(1990)提出的,“块”同步模型,是一种异步MIMD-DM模型, 支持消息传递系统 , 块内异步并行 , 块间显式同步 ,该模型基于一个master协调,所有的worker同步(lock-step)执行, 数据从输入的队列中读取 SSP:( Stale Synchronous Parallel) ASP:( Asynchronous Parallel) 研发背景 腾讯公司是一家消息平台

机器学习研究与开发平台的选择

北城以北 提交于 2020-02-22 00:01:03
    目前机器学习可以说是百花齐放阶段,不过如果要学习或者研究机器学习,进而用到生产环境,对平台,开发语言,机器学习库的选择就要费一番脑筋了。这里就我自己的机器学习经验做一个建议,仅供参考。     首先,对于平台选择的第一个问题是,你是要用于生产环境,也就是具体的产品中,还是仅仅是做研究学习用? 1. 生产环境中机器学习平台的搭建     如果平台是要用于生产环境的话,接着有一个问题,就是对产品需要分析的数据量的估计,如果数据量很大,那么需要选择一个大数据平台。否则的话只需要一个单机版的平台就可以了。 1.1 生产环境中机器学习大数据平台的搭建     生产环境里面大数据平台,目前最主流的就是Spark平台,加上辅助的分布式数据处理容器,比如YARN,或者Mesos.如果需要实时的收集在线数据,那么就加上Kafka。简言之,一个通用的大数据处理平台就是集成Spark + YARN(Mesos) + Kafka. 我现在做的产品项目都是基于Spark + YARN+ Kafka的,目前来看,这个平台选择基本上是主流的方向。     当然,有人会说,这么多开源软件,一起集成起来好麻烦,大坑肯定不少,有没有一个通用的平台,可以包括类似Spark + YARN+ Kafka的大数据平台功能呢?目前据我所知,做的比较好的有CDAP(http://cdap.io)。它对Spark,

Elasticsearch6.x数据处理(三)

ⅰ亾dé卋堺 提交于 2020-02-21 07:19:37
1.处理冲突 当使用 index API更新文档的时候,我们读取原始文档,做修改,然后将整个文档(whole document)一次性重新索引。 最近的索引请求会生效——Elasticsearch中只存储最后被索引的任何文档。如果其他人同时也修改了这个文档,他们的修改将会丢失。 很多时候,这不是问题。 也许我们的主数据存储是关系数据库,我们只是将数据复制到Elasticsearch中以使其可搜索。 也许两个人几乎不可能同时更改同一个文档。 或者,如果偶尔失去变化,对我们的业务来说也许并不重要。 但有时失去变化 非常重要 。 想象一下,我们正在使用Elasticsearch来存储我们在线商店中库存的小部件数量。 每次我们出售小部件时,我们都会减少Elasticsearch中的库存数量。 有一天,管理层决定进行销售。 突然间,我们每秒都在销售几个小部件。 想象一下,两个并行运行的Web进程,每个进程都处理一个小部件的销售,如下图显示没有并发控制的结果 。    在数据库领域,通常使用两种方法来确保在并发更新时不会丢失更改 : 悲观的并发控制 这种方法广泛用于关系数据库,它假定可能发生冲突的更改,因此阻止对资源的并发访问以防止冲突。 一个典型的例子是在读取数据之前锁定一行,确保只有放置锁的线程才能对该行中的数据进行更改。 乐观的并发控制 由Elasticsearch使用,

大数据hadoop生态圈

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

NameNode和SecondaryNameNode

China☆狼群 提交于 2020-02-19 12:48:25
NN和2NN工作机制 NameNode中的元数据是存储在哪里的? 首先,我们做个假设,如果存储在NameNode节点的磁盘中,因为经常需要进行随机访问,还有响应客户请求,必然是效率过低。因此,元数据需要存放在内存中。但如果只存在内存中,一旦断电,元数据丢失,整个集群就无法工作了。因此产生在磁盘中备份元数据的FsImage。 这样又会带来新的问题,当在内存中的元数据更新时,如果同时更新FsImage,就会导致效率过低,但如果不更新,就会发生一致性问题,一旦NameNode节点断电,就会产生数据丢失。因此,引入Edits文件(只进行追加操作,效率很高)。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。这样,一旦NameNode节点断电,可以通过FsImage和Edits的合并,合成元数据。 但是,如果长时间添加数据到Edits中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行FsImage和Edits的合并,如果这个操作由NameNode节点完成,又会效率过低。因此,引入一个新的节点SecondaryNamenode,专门用于FsImage和Edits的合并。 nn和2nn工作机制 第一阶段:NameNode启动 (1)第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动