spark 相关
Spark为什么会比mapreduce快?
1.Spark减少了中间过程的磁盘读写,数据很多时候不需要落地,从而提升了效率。
2.Spark基于内存的读写,减少了磁盘IO、node数据交互的通信时间。
3.Spark并非mapreduce心跳的模式,任务调度性能比mapreduce快,适合迭代计算。
4.JVM的优化:Hadoop每次MapReduce操作,启动一个Task便会启动一次JVM,基于进程的操作。而Spark每次MapReduce操作是基于线程的,只在启动Executor是启动一次JVM,内存的Task操作是在线程复用的。
基于内存的迭代式计算
DAG :它可以把整个执行过程做一个图,然后进行优化
Spark存在的问题以及改进思路
1.依然是暴力扫描-需要索引。
如果数据总量几百亿,但很多时候我们只想对其中的含有某些关键词的数据进行分析,Spark依然要从头到尾扫描这几百亿的数据,太浪费资源,我们需要对每个维度的值创建一层索引,通过索引我们可以将不想关的记录直接跳跃过去,只对满足匹配条件的结果进行计算。这样即使总量有百亿,但经过匹配后的记录数可能仅仅是几千万,对这几千万的数据进行统计分析与对整体的100亿的数据进行统计分析,性能肯定要快上千倍万倍。
2.大部分的列均有重复值,Spark没有针对这种情况进行优化。
Spark目前的分组统计和排序计算直接读取数据的真实值,这样计算量以及磁盘IO都很大。
在真实的数据中,数据肯定是有重复的,我们可以对数据排重后按照数据大小进行编号,我们在这里称之为标签。
1)排序和分组仅仅使用标签进行计算。
2)用标签来代替原始值后,原始值仅仅存储一份,索引体积变小。
3)标签根据列的数据重复程度不同,标签的长度可以是1bits~32bits,内存中对应byte,short,int类型,因绝大部分数据都有重复,故short类型居多,占用存储空间也小。
4)使用原始数据的真实值(字符串),进行大小比较太耗费CPU资源,相比于完全数值型的标签,标签计算占用的cpu更少。
5)大多数的计算只需要使用标签,而不需要使用标签对应的原始值,仅仅在计算完毕后,将一少部分标签转换为真实值,给用户即可。
3.部分格式支持列存储,但尚有优化空间。
有相当一部分的场景我们只需要获取TOP N 条结果,以下面这条SQL为例
select a,b,c,d,e,f,g,h,i,j,k,l,m,x from testtable order by x desc limit 10
我们只需要获取前10个最大值的x列即可,目前Spark的处理方式是 将a,b,c,d,e,f,g,h,i,j,k,l,m,x 这14个列的值全部都读取出来,然后在按照x排序取出TOP N,其实最简单的变换下思路即可,我们先只取出x列,其他的13个列的数据并不读取,按照x列排序得到TOP N结果后,在将剩余的N个结果的13个值附加进来即可,这种先排序,后附加其他列的方式,相对于Spark那种将14个列全部读取出来,IO一下降低了13倍。
与数据库思想的碰撞
spark 相关的更多相关文章
- hadoop和spark相关参数的配置
背景 MapReduce和Spark对外提供了上百个配置参数,用户可以为作业定制这些参数以更快,更稳定的运行应用程序.本文梳理了最常用的一些MapReduce和Spark配置参数. MapReduce ...
- spark相关脚本解析
spark-shell/spark-submit/pyspark等关系如下: #spark-submit 逻辑: ########################################### ...
- Spark相关下载
HBase: http://hbase.apache.org/ Hadoop hadoop.apache.org spark http://spark.apache.org/
- Spark相关
非常好的spark分析博客,我们team的,哈哈:http://jerryshao.me/ spark programming guide: https://github.com/mesos/spar ...
- Spark相关错误汇总
前面介绍了Spark开发环境的搭建,下面将在实际开发过程中遇到的一些问题汇总一下: 1.Exception in thread "main" com.typesafe.config ...
- Hadoop/Spark相关面试问题总结
面试回来之后把其中比较重要的问题记了下来写了个总结: (答案在后面) 1.简答说一下hadoop的map-reduce编程模型 2.hadoop的TextInputFormat作用是什么,如何自定义实 ...
- spark相关介绍-提取hive表(一)
本文环境说明 centos服务器 jupyter的scala核spylon-kernel spark-2.4.0 scala-2.11.12 hadoop-2.6.0 本文主要内容 spark读取hi ...
- Spark相关知识点(一)
spark工作机制,哪些角色,作用. spark yarn模式下的cluster模式和client模式有什么区别.
- Hadoop相关日常操作
1.Hive相关 脚本导数据,并设置运行队列 bin/beeline -u 'url' --outputformat=tsv -e "set mapreduce.job.queuename= ...
随机推荐
- Selenium基础知识(详解IDE命令、css及xpath定位一)
1. ide常用命令,参考 http://sariyalee.iteye.com/blog/1743350 2. ide介绍,参考 http://blog.csdn.net/oscar999/art ...
- CssSelector之selenium元素定位
CssSelector是我最喜欢的元素定位方法,Selenium官网的Document里极力推荐使用CSS locator,而不是XPath来定位元素,原因是CSS locator比XPath loc ...
- Mark一下在模仿团购App搭建页面时犯的低级错误
1.关于Xib拖线错误 2.下面这个错误的根源其实是代码提示时直接敲下了回车,没看仔细,导致后来找了好久才发现该错误,郁闷啊!
- mac os 隐藏文件夹的小技巧
无论是谁,电脑里总有些不想让人看到的内容,或是私密日记,或是某播下载的奇怪东西,对于这些东西当然是不想被人看到的.怎么办呢? 有人说了几种方法: 1. 改名字: 2. 把文件夹做成加密DMG: 3. ...
- 使用Vue构建单页应用一
一. 环境准备 1 安装Node.js 最好安装node.js-6.X.X 以上版本,https://nodejs.org/en/ 我使用的是 v6.3.1 Current 版本.Node. ...
- WINDOWS 负载均衡NLB配置中单播与多播区别(转载)
单播 在单播模式下,NLB重新对每个NLB节点中启用NLB的网络适配器分配MAC地址(此MAC地址称为群集MAC地址),并且所有的NLB节点均使用相同的MAC地址(均使用群集MAC地址),同时NLB修 ...
- Java中,如何跳出当前的多重嵌套循环
在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环.(Java中支持带标签的break和continue语句)
- linux 内存操作相关命令
清理内存 echo 1 > /proc/sys/vm/drop_caches 查看内存使用情况 free –m 查看内存条数命令: dmidecode |grep -A16 "Memo ...
- Linux中Zookeeper部署和集群部署
自己网上下载安装包,我下载的是tar.gz安装包直接解压,也可以下载rpm格式 1.下载zookeeper安装包,放到/usr/local/zookeeper安装包网上下载 2.解压文件tar -zx ...
- php源码建博客4--实现MVC结构微型框架
主要: 常量优化路径 自动加载类 优化入口文件 安全访问项目目录 --------------文件结构:-------------------------------------- blog├─App ...