- 博客(48)
- 收藏
- 关注
原创 ElasticSearch核心概念
1、lucene和elasticsearch的前世今生 2、elasticsearch的核心概念 3、elasticsearch核心概念 vs. 数据库核心概念1、lucene和elasticsearch的前世今生lucene,最先进、功能最强大的搜索库,直接基于lucene开发,非常复杂,api复杂(实现一些简单的功能,写大量的java代码),需要深入理解原理(各种索引结构)...
2018-03-19 15:51:19
322
原创 Elasticsearch的功能、特点介绍
1、Elasticsearch的功能,干什么的 2、Elasticsearch的适用场景,能在什么地方发挥作用 3、Elasticsearch的特点,跟其他类似的东西不同的地方在哪里1、Elasticsearch的功能(1)分布式的搜索引擎和数据分析引擎搜索:百度,网站的站内搜索,IT系统的检索 数据分析:电商网站,最近7天牙膏这种商品销量排名前10的商家有哪些;新闻网站,最...
2018-03-19 15:31:24
2430
原创 Elasticsearch倒排索引
Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统1、什么是搜索? 2、如果用数据库做搜索会怎么样? 3、什么是全文检索、倒排索引和Lucene? 4、什么是Elasticsearch?1、什么是搜索?百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜欢的电影,或者说找一本喜欢的书,或者找一条感兴趣的新闻(提到搜索的第一印...
2018-03-19 15:12:14
772
转载 企业大数据平台架构
目录:什么是大数据Hadoop介绍-HDFS、MR、Hbase大数据平台应用举例-腾讯公司的大数据平台架构“就像望远镜让我们能够感受宇宙,显微镜让我们能够观测微生物一样,大数据正在改变我们的生活以及理解世界的方式……”。大数据的4V特征-来源公司的“大数据”随着公司业务的增长,大量和流程、规则相关的非结构化数据也爆发式增长。比如:1、业务系统
2017-08-02 17:30:41
6063
原创 Spark SQL下Parquet内幕深度解密
一.SparkSQL下的Parquet意义再思考Twitter用Parquet节省了70%存储费用。如果HDFS是大数据时代分布式文件系统存储的事实标准的话,Parquet则是整个大数据时代文件存储格式的事实标准速度更快:从使用SparkSQL操作普通文件CSV和Parquet文件的速度对比上来看,绝大多数情况下,使用Parquet会比使用CSV等普通文件速度提升10倍左右(在一些变通文件系统无
2017-06-10 00:12:22
822
原创 Spark SQL下的Parquet使用最佳实践和代码实战
一:Spark SQL下的Parquet使用最佳实践1,过去整个业界对大数据的分析的技术栈的Pipeline一般分为一下两种方式:A)Data Source -> HDFS -> MR/Hive/Spark(相当于ETL) -> HDFS Parquet -> SparkSQL/impala -> Result Service(可以放在DB中,也有可能被通过JDBC/ODBC来作为数据服务使用);B
2017-06-10 00:03:08
583
原创 SparkSQL下Parquet中PushDown的实现
Hive中也有PushDown。PushDown可以极大减少数据输入,极大的提高处理效率。SparkSQL实现了PushDown,在Parquet文件中实现PushDown具有很重要的意义。PushDown是一种SQL优化方式,通常用在查询。应用场景:假设通过DataFrame,df.select(a,b,c).filter(by a).filter(by b).select(c).filter(b
2017-06-09 23:34:20
1680
原创 使用Java和Scala在IDE中实战RDD和DataFrame动态转换操作
什么是非动态转换?=> 提前已经知道了RDD具体数据的元数据信息,可以通过JavaBean或Case Class的方式提前创建DataFrame时,通过反射的方式获得元数据信息。什么是动态转换?=> 无法提前知道具体的RDD每个Record的列的个数及每列的类型只有在运行时才能知道。这种情况在生产环境下更常见。因为在生产环境下提前知道数据的元数据信息的可能性不大。另外,生产环境下业务会变化,业务变化
2017-06-09 21:47:29
1004
原创 使用Java和Scala在IDE中实战RDD和DataFrame转换操作
一. RDD与DataFrame转换的重大意义在Spark中RDD可以直接转换成DataFrame。SparkCore的核心是RDD,所有的调度都是基于RDD完成的,对RDD的操作都可以转换成基于DataFrame使用SparkSQL来操作。RDD可能接上数据库,接上NoSQL,其他文件系统等各种数据来源,然后将数据转换为DataFrame,极大简化了大数据的开发,原来写Scala\Java,现在只
2017-06-09 17:05:28
776
原创 使用Java和Scala在IDE中开发DataFrame
Java版本代码如下:import org.apache.spark.SparkConf;import org.apache.spark.SparkContext;import org.apache.spark.sql.DataFrame;import org.apache.spark.sql.SQLContext;/** * 使用Java的方式实战对DataFrame的操作 */pub
2017-06-09 02:07:31
503
原创 SparkSQL on Hive配置与实战
首先要配置好hive,保存元数据到mysql中,这个大家自己查资料!然后配置Spark SQL, 1.配置hive-site.xml 在master1上的/usr/local/spark/spark-1.6.0-bin-hadoop2.6/conf目录创建hive-site.xml文件,内容如下: <configuration> <property> <name>hive.m
2017-06-08 23:19:32
563
原创 Spark SQL和DataFrame的本质
1, Spark SQL和DataFrame(DataSet,还没有深度去使用)2, DataFrame与RDD3, 企业级最佳实践一:Spark SQL和DataFrame1, Spark SQL是除了Spark Core以外最大的和最受关注的组件。a) 其更加强大,可以操作各种数据来源和各种格式的数据;用户可以扩展Spark SQL的功能来支持更多类型的数据(例如Kudu)。b
2017-06-08 14:52:36
707
原创 60分钟内从零起步驾驭Hive实战学习笔记
SparkSQL前身是Shark,Shark强烈依赖于Hive。Spark原来没有做SQL多维度数据查询工具,后来开发了Shark,Shark依赖于Hive的解释引擎,部分在Spark中运行,还有一部分在Hadoop中运行。所以讲SparkSQL必须讲Hive。一.Hive的本质:Hive是分布式数据仓库,同时又是查询引擎,所以SparkSQL取代的只是Hives的查询引擎,在企业实际生产环境下,
2017-06-08 14:49:16
1352
原创 Spark性能调优(十)之Spark统一内存管理
一:Memory Manager在Spark 1.6 版本中,memoryManager 的选择是由spark.memory.useLegacyMode=false决定的。如果采用1.6之前的模型,这会使用StaticMemoryManager来管理,否则使用新的UnifiedMemoryManager,我们先看看1.6之前,对于一个Executor,内存都有哪些部分构成:1,ExecutionMe
2017-06-06 14:49:08
709
原创 Spark性能调优(九)之Spark Tungsten内存使用
一:Tungsten中到底什么是Page? 1.在Spark其实不存在Page这个类的。Page是一种数据结构(类似于Stack,List等),从OS层面上讲,Page代表了一个内存块,在Page里面可以存放数据,在OS中会存放很多不同的Page,当要获得数据的时候首先要定位具体是哪个Page中的数据,找到该Page之后从Page中根据特定的规则(例如说数据的offset和length)取出数据
2017-06-06 14:33:05
465
原创 Spark性能调优(八)之Spark Tungsten-sort Based Shuffle
一:使用Tungsten功能 1, 如果想让您的程序使用Tungsten的功能,可以配置: Spark.Shuffle.Manager = tungsten-sort Tungsten中文blogTungsten英文blogSpark在钨丝计划下要管理两种类型的内存存储方式:堆内和堆外。为了管理他们,所以搞了一个Page。 堆外:指针直接指向数据本身。 堆内:指针首先指向Object
2017-06-06 14:27:44
535
原创 Spark性能调优(七)之钨丝计划
一:“钨丝计划”产生的本质原因1,Spark作为一个一体化多元化的(大)数据处理通用平台,性能一直是其根本性的追求之一,Spark基于内存迭代(部分基于磁盘迭代)的模型极大的满足了人们对分布式系统处理性能的渴望,但是有Spark事采用Scala+Java语言编写的所以运行在JVM平台,当然JVM是一个绝对伟大的平台,因为JVM让整个离散的主机融为一体(网络即OS),但是JVM的死穴GC反过来限制了S
2017-06-06 14:20:32
665
原创 Spark性能调优(六)
一:Shuffle性能调优1,问题:Shuffle output file lost?真正的原因是GC导致的!!!如果GC尤其是Full GC产生通常会导致线程停止工作,这个时候下一个Stage的Task在默认情况下就会尝试重试来获取数据,一般重试3次每次重试的时间为5s,也就是说默认情况下15s内如果还是无法抓到数据的话,就会出现Shuffle output file lost等情况,进而会导致T
2017-06-06 14:05:45
426
原创 Spark性能调优(五)
一:性能优化之数据本地性1,数据本地性对分布式系统的性能而言是一件最为重要的事情(之一),程序运行本身包含代码和数据两部分,单机版本一般情况下很少数据本地性的问题(因为数据在本地),但是对于单机版本的程序由于数据本地性有PROCESS_LOCAL和NODE_LOCAL之分,所以我们还是尽量的让数据处于PROCESS_LOCAL;Spark作为分布式系统更加注意数据本地性,在Spark中数据本地性分为
2017-06-06 14:04:15
394
原创 Spark性能调优(四)
一:Spark性能调优之序列化1,之所以进行序列化,最重要的原因是内存空间有限(减少GC的压力,最大化的避免Full GC的产生,因为一旦产生Full GC则整个Task处于停止状态!!!)、减少磁盘IO的压力、减少网络IO的压力;2,什么时候会必要的产生序列化或反序列化呢?发生磁盘IO和网络通讯的时候会序列化和反序列化,更为重要的考虑序列化和反序列化的时候有另外两种情况:A)Persist(Che
2017-06-06 01:08:19
510
原创 Spark性能调优(三)
一:Spark程序数据结构的优化 1,Java的对象:对象头是16个字节(例如指向对象的指针等元数据信息),如果对象只有一个int的property,则此时会占据20字节,也就是说对象的元数据占用了大部分的空间,所有在封装数据的时候尽量不要使用对象!例如说使用JSON格式来封装数据; 2,Java中的基本的数据类型会自动的封箱操作,例如int会自动变成Integer,这会额外增加对象头的空间占用
2017-06-05 23:53:52
412
原创 Spark性能调优(二)
一:Task性能优化1,慢任务(数据倾斜或机器故障)的性能优化:可以考虑减少每个partition处理的数据量,同时建议开启Spark.speculation;2,尽量减少Shuffle,例如我们要减少groupByKey的操作,因为groupByKey会要求通过网络拷贝(Shuffle)所有的数据,有限考虑使用reduceByKey,因为会首先reduce locally;再例如在进行join操作
2017-06-05 23:44:09
333
原创 Spark性能调优(一)
Spark2.x是钨丝计划的升级。一:Spark性能优化核心基石1, Spark是采用Master-Slaves的模式进行资源管理和任务执行的管理:a) 资源管理:Master-Workers,在一台机器上可以有多个Workers;b) 任务执行:Driver-Executors,当在一台机器上分配多个Workers的时候那么默认情况下每个Worker都会为当前运行的应用程序分配一个Executor
2017-06-05 23:36:58
425
原创 Spark 1.6RPC解析
一:Spark 1.6RPC解析1,Spark 1.6推出RpcEnv,RPCEndpoint,PRCEndpointRef为核心的新型架构下的RPC通信方式,就目前的实现而言,其底层依旧是Akka;2,Akka是基于Actor的分布式消息通信系统,而在Spark 1.6中封装了Akka,提供更高层的Rpc实现,目的是移除对Akka的依赖,为了扩展和自定义Rpc打下基础;二:RPCEnv解析1,Rp
2017-06-05 21:47:20
301
原创 Broadcast彻底解析
一:Broadcast彻底解析1,Broadcast就是将数据从一个节点发送到其他的节点上;例如Driver上有一张表,而Executor中的每个并行的Task(100万个Task)都要查询这张表,那我们通过Broadcast方式就只需要往每个Executor把这张表发送一次就行了,Executor中的每个Task查询这张唯一的表,而不是每次执行的时候都从Driver获得这张表!2,这就好像Serv
2017-06-05 21:38:14
2588
原创 CheckPoint运行原理
一、Checkpoint到底是什么?1,Spark在生产环境下经常会面临Tranformations的RDD非常多(例如一个Job中包含1万个RDD)或者具体Tranformation产生的RDD本身计算特别复杂和耗时(例如计算时长超过1个小时),此时我们必须考虑对计算结果数据的持久化;2,Spark是擅长多步骤迭代,同时擅长基于Job的复用,这个时候如果能够对曾经计算的过程产生的数据进行复用,就可
2017-06-05 21:30:53
531
原创 CacheManager运行原理流程
一:CacheManager分析:1,CacheManager管理的是缓存,而缓存可以是基于内存的缓存,也可以是基于磁盘的缓存;2,CacheManager需要通过BlockManager来操作数据;3.当Task运行的时候会调用RDD的compute方法进行计算,而compute方法会调用iterator方法:/** * Internal method to this RDD; will rea
2017-06-05 21:27:18
721
原创 BlockManager初始化和注册解密、BlockManagerMaster工作解密、BlockTransferService解密、本地数据读写解密、远程数据读写解密
1. BlockManager的注册和初始化 2. BlockManager里面的重要函数详细介绍 一:BlockManager初始化 1. BlockManager的实例对象调用initializes的时候才能正常工作。 启动initializes方法又两个作用:BlockTransferService(网络通信),ShuffleClient/** * Initializes the
2017-06-05 21:16:35
356
原创 BlockManager原理解析
一、BlockManager运行实例观察从Application启动的角度来观察BlockManager;1,在Application启动时会在SparkEnv中注册BlockManagerMaster以及MapOutputTracker,其中a) BlockManagerMaster:对整个集群的Block数据进行管理的;b) MapOutputTracker:跟踪所有mapper的输出的;2,B
2017-06-05 20:32:58
921
原创 Task执行原理解析
1.当Driver中的CoarseGrainedSchedulerBackend给CoarseGrainedExecutorBackend发送LaunchTask之后,CoarseGrainedExecutorBackend在收到LaunchTask消息后,首先会反序列化TaskDescription:val taskDesc = ser.deserialize[TaskDescription](d
2017-06-05 20:14:12
473
原创 TaskScheduler解密:Spark shell案例,TaskScheduler和SchedulerBackend、FIFO与FAIR模式调度解密、Task数据本地性资源分配
TaskSchedulerBackend与SchedulerBackendFIFO与FAIR两种调度模式Task数据本地性资源的分配一、TaskScheduler运行过程(Spark-shell角度) 1.启动Spark-shell 当我们spark-shell本身的时候命令终端返回来的主要是ClientEndpoint和SparkDeploySchedulerBakcend。这是因为此时还
2017-06-05 20:05:04
846
原创 TaskScheduler原理解析
一、TaskScheduler原理解密 1.DAGScheduler在提交TaskSet给底层调度器的时候是面向接口TaskScheduler的,这符合面向对象中依赖抽象而不依赖的原则,带来底层资源调度器的可插拔性,导致Spark可以运行的众多资源调度器模式上,例如Standalone、Yarn、Mesos、Local、EC2、其它自定义的资源调度器。在Standalone的模式下,我们聚焦于T
2017-06-05 19:50:16
4284
原创 Stage划分和Task最佳位置算法解密
1.Stage划分算法解密 Spark Application中可以因为不同的Action触发众多的Job,也就是说一个Application钟可以有很多的Job,每个Job是由一个或者多个Stage构成的,后面的Stage依赖于前面的Stage,也就是说只有前面依赖的Stage计算完毕后,后面的Stage才会运行 2.Stage划分的已经就是宽依赖,什么产生宽依赖?例如reduceByKe
2017-06-05 19:44:33
590
原创 Spark EXecutor彻底解密
一:Spark Executor工作原理1, 需要特别注意是在CoarseGrainedExecutorBackend启动时向Driver注册Executor其实质是注册ExecutorBackend实例,和Executor实例之间没有直接的关系!!!2, CoarseGrainedExecutorBackend是Executor运行所在的进程名称,Executor才是正在处理Task的对象,Exe
2017-06-05 19:39:59
599
原创 Spark Worker原理解析
1.Spark源码剖析 2.Worker启动Driver源码 3.Worker启动Executor源码 4.Worker与Master交互 一:worker启动driver内幕和流程机制1, Cluster中的Driver失败的时候,如果supervise为true,则启动该Driver的Worker会负责重新启动该Driver2, DriverRunner启动进程是通过process
2017-06-05 19:35:55
503
原创 Spark资源调度分配解密
1.分配Driver(Cluster,只有在cluster模式在master才能为dirver分配资源) 2.为Application分配资源 3.两种不同的资源分配方式 4.Spark资源调度方式一:任务调度与资源调度的区别1, 任务调度是通过DAGScheduler、TaskScheduler、SchedulerBackend等进行的作业调度;2, 资源调度是指应用程序如何获得资源;
2017-06-05 18:00:28
548
原创 Master的注册机制和状态管理详解
一 、master对其他组件注册的处理1, master接受注册的对象主要就是:driver,application,worker;需要补充说明executor不会注册给master,executor是注册给driver中的schedulerbackbend的;2, worker是再启动后主动向master注册的,所以如果在生产环境下加入新的worker到已经正在运行的Spark集群上,此时不需要重
2017-06-05 17:51:32
834
原创 Master HA解密
一:Master HA解析1, 生产环境下一般采用ZooKeeper做HA,且建议为3台Master,ZooKeeper会自动化管理Masters的切换;2, 采用ZooKeeper做HA的时候,ZooKeeper会负责保存整个Spark集群运行时候的元数据:Workers、Drivers、Applications、Executors;3, ZooKeeper遇到当前Active级别的Master出
2017-06-05 17:48:04
419
原创 SparkContext解密
Spark Cluster架构图 1, Spark程序在运行的时候分为Driver和Executors两部分;2, Spark的程序编写是基于SparkContext的,具体来说包含两方面:a)Spark编程的核心基础—RDD,是由SparkContext来最初创建(第一个RDD一定是由SparkContext来创建的); b)Spark程序的调度优化也是基于SparkContext; 3,
2017-06-05 17:32:12
558
原创 Spark on Yarn解密及运行流程
一、Hadoop Yarn解析1,Yarn是Hadoop推出整个分布式(大数据)集群的资源管理器,负责资源的管理和分配,基于Yarn我们可以在同一个大数据集群上同时运行多个计算框架,例如Spark、MapReduce、Storm等; 2,Yarn基本工作流程如下图所示: 注意:Container要向NodeManager汇报资源信息,Container(程序员)要向App Mstr(项目经理
2017-06-03 21:50:38
1261
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人