spark

Spark2.0-RDD分区原理分析

纵饮孤独 提交于 2020-03-24 09:00:02
3 月,跳不动了?>>> Spark分区原理分析 介绍 分区是指如何把RDD分布在spark集群的各个节点的操作。以及一个RDD能够分多少个分区。 一个分区是大型分布式数据集的逻辑块。 那么思考一下:分区数如何映射到spark的任务数?如何验证?分区和任务如何对应到本地的数据? Spark使用分区来管理数据,这些分区有助于并行化分布式数据处理,并以最少的网络流量在executors之间发送数据。 默认情况下,Spark尝试从靠近它的节点读取数据到RDD。由于Spark通常访问分布式分区数据,为了优化transformation(转换)操作,它创建分区来保存数据块。 存在在HDFS或Cassandra中的分区数据是一一对应的(由于相同的原因进行分区)。 默认情况下,每个HDFS的分区文件(默认分区文件块大小是64M)都会创建一个RDD分区。 默认情况下,不需要程序员干预,RDD会自动进行分区。但有时候你需要为你的应用程序,调整分区的大小,或者使用另一种分区方案。 你可以通过方法 def getPartitions: Array[Partition] 来获取RDD的分区数量。 在spark-shell中执行以下代码: val v = sc.parallelize(1 to 100) scala> v.getNumPartitions res2: Int = 20 /

Spark 读写hive 表

本小妞迷上赌 提交于 2020-03-23 05:51:37
spark 读写hive表主要是通过sparkssSession 读表的时候,很简单,直接像写sql一样sparkSession.sql("select * from xx") 就可以了。 这里主要是写数据,因为数据格式有很多类型,比如orc,parquet 等,这里就需要按需要的格式写数据。 首先 , 对于特殊的格式这里就要制定    dataFrame.write.format("orc")的方式。 其次, 对于写入分区表有2种方式,insertInto 和saveAsTable,   a) insertInto 不需要制定分区 ,分区应该是你创建表的时候已经写明了的。 insertInto() can't be used together with partitionBy().Partition columns have already be defined for the table. It is not necessary to use partitionBy().   b) saveAsTable 抛异常: 提示你用 insertInto, 忘了把日志保存了。暂时记着吧。     类似问题: http://blog.csdn.net/lc0817/article/details/78211695?utm_source=debugrun&utm_medium

Spark学习摘记 —— Spark转化操作API归纳

匆匆过客 提交于 2020-03-22 12:52:47
本文参考 在阅读了《Spark快速大数据分析》动物书后,大概了解到了spark常用的api,不过书中并没有给予所有api详细的案例,而且现在spark的最新版本已经上升到了2.4.5,动物书中的spark版本还停留在1.2.0版本,所以就有了这篇文章,在最新的2.4.5版本下测试常用的api 由于spark的惰性计算特性,RDD只有在第一次行动操作中被用到时才会真正进行计算,因此我打算将文章内容分为"转化操作API"和"行动操作API"两部分,同时因为pair RDD(RDD中的元素是键值对)的部分api较为特殊,所以我打算单独再写一篇文章 本文仅介绍转化操作API,前5个api是针对一个RDD的转化操作,后续的api是针对两个RDD的转化操作 环境 idea + spark 2.4.5 + scala 2.11.12 map()函数 目的: 将函数应用于RDD中的每个元素,将返回值构成新的RDD 代码: val testList = List ( 1 , 2 , 3 , 3 ) val testRdd = sc . parallelize ( testList ) testRdd . map ( ele => ele * ele ). foreach ( ele => print ( s " $ ele " )) 输出: 1 4 9 9 更高效的操作: 每个RDD被分为多个分区

04、Spark Standalone集群搭建

冷暖自知 提交于 2020-03-21 04:50:09
04、Spark Standalone集群搭建 4.1 集群概述 独立模式是Spark集群模式之一,需要在多台节点上安装spark软件包,并分别启动master节点和worker节点。master节点是管理节点,负责和各worker节点通信,完成worker的注册与注销。worker节点是任务执行节点,通过worker节点孵化出执行器子进程来执行任务。 4.2 集群规划 这里使用4台主机部署Spark集群,主机名称分别是s101、s102、s103和s104。 s101 #Master节点 s102 #Worker节点 s103 #Worker节点 s104 #Worker节点 4.3 集群搭建 4.3.1 安装Spark软件包 按照前文安装spark软件包的方式分别在以上四台主机上安装Spark,注意目录和权限尽量保持一致,以便集群容易维护和管理。也可以将之前的Spark安装目录和环境变量文件分发到以上四台主机。具体安装步骤略。 4.3.2 配置hadoop软连接 在以上四台机的spark配置目录下,创建core-site.xml和hdfs-site.xml软连接文件指向hadoop的配置文件。 #进入配置目录 $>cd /soft/spark/conf #创建软连接 $>ln -s /soft/hadoop/etc/hadoop/core-site.xml core-site

Spark大数据分析框架的核心部件

為{幸葍}努か 提交于 2020-03-20 22:28:41
3 月,跳不动了?>>> Spark大数据分析框架的核心部件 Spark大数据分析框架的核心部件包含RDD内存数据结构、Streaming流计算框架、GraphX图计算与网状数据挖掘、MLlib机器学习支持框架、Spark SQL数据检索语言、Tachyon文件系统、SparkR计算引擎等主要部件。这里做一个简单的介绍。 一、RDD内存数据结构 大数据分析系统一般包括数据获取、数据清洗、数据处理、数据分析、报表输出等子系统。Spark为了方便数据处理、提升性能,专门引入了RDD数据内存结构,这一点与R的机制非常类似。用户程序只需要访问RDD的结构,与存储系统的数据调度、交换都由提供者驱动去实现。RDD可以与Haoop的HBase、HDFS等交互,用作数据存储系统,当然也可以通过扩展支持很多其它的数据存储系统。 因为有了RDD,应用模型就与物理存储分离开来,而且能够更容易地处理大量数据记录遍历搜索的情况,这一点非常重要。因为Hadoop的结构主要适用于顺序处理,要翻回去反复检索数据的话效率就非常低下,而且缺乏一个统一的实现框架,由算法开发者自己去想办法实现。毫无疑问,这具有相当大的难度。RDD的出现,使这一问题得到了一定程度的解决。但正因为RDD是核心部件、实现难度大,这一块的性能、容量、稳定性直接决定着其它算法的实现程度。从目前看,还是经常会出现RDD占用的内存过载出问题的情况。

tachyon与hdfs,以及spark整合

核能气质少年 提交于 2020-03-20 22:13:41
3 月,跳不动了?>>> Tachyon 0.7.1伪分布式集群安装与测试: http://blog.csdn.net/stark_summer/article/details/48321605 从官方文档得知,Spark 1.4.x和Tachyon 0.6.4版本兼容,而最新版的Tachyon 0.7.1和Spark 1.5.x兼容,目前所用的Spark为1.4.1,tachyon为 0.7.1 tachyon 与 hdfs整合 修改tachyon-env.sh export TACHYON_UNDERFS_ADDRESS=hdfs://master:8020Dtachyon.data.folder=$TACHYON_UNDERFS_ADDRESS/tmp/tachyon/data12 上传文件到hdfs hadoop fs -put /home/cluster/data/test/bank/ /data/spark/ hadoop fs -ls /data/spark/bank/Found 3 items-rw-r--r-- 3 wangyue supergroup 4610348 2015-09-11 20:02 /data/spark/bank/bank-full.csv-rw-r--r-- 3 wangyue supergroup 3864 2015-09-11 20

分布式内存文件系统Tachyon介绍

人盡茶涼 提交于 2020-03-20 22:13:24
3 月,跳不动了?>>> 1 、 Tachyon 介绍 1.1 Tachyon 简介 随着实时计算的需求日益增多,分布式内存计算也持续升温,怎样将海量数据近乎实时地处理,或者说怎样把离线批处理的速度再提升到一个新的高度是当前研究的重点。近年来,内存的吞吐量成指数倍增长,而磁盘的吞吐量增长缓慢,那么将原有计算框架中文件落地磁盘替换为文件落地内存,也是提高效率的优化点。 目前已经使用基于内存计算的分布式计算框架有: Spark 、 Impala 及 SAP 的 HANA 等。但是其中不乏一些还是有文件落地磁盘的操作,如果能让这些落地磁盘的操作全部落地到一个共享的内存中,那么这些基于内存的计算框架的效率会更高。 Tachyon 是 AmpLab 的 李浩源 所开发的一个分布式内存文件系统,可以在集群里以访问内存的速度来访问存在 Tachyon 里的文件。 Tachyon 是架构在最底层的分布式文件存储和上层的各种计算框架之间的一种中间件,其主要职责是将那些不需要落地到 DFS 里的文件落地到分布式内存文件系统中来达到共享内存,从而提高效率。同时可以减少内存冗余、 GC 时间等, Tachyon 的在大数据中层次关系如下图所示: Tachyon 允许文件以内存的速度在集群框架中进行可靠的共享,就像 Spark 和 MapReduce 那样。通过利用信息继承、内存侵入, Tachyon

分布式内存文件系统:Tachyon

↘锁芯ラ 提交于 2020-03-20 21:58:10
3 月,跳不动了?>>> Tachyon 是一个分布式内存文件系统,可以在集群里以访问内存的速度来访问存储在 Tachyon 里的文件。Tachyon是架构在最底层的分布式文件系统和上层的各种计算框架之间的一种中间件,其主要职责是将那些不需要落地到DFS里的文件,落地到分布式内存文件系统中,来达到共享内存,从而提高效率,减少内存冗余,减少GC时间等。 Tachyon架构 Tachyon的架构是传统的Master—Slave架构,这里和Hadoop类似,TachyonMaster里WorkflowManager是 Master进程,因为是为了防止单点问题,所以通过Zookeeper做了HA,可以部署多台Standby Master。Slave是由Worker Daemon和Ramdisk构成。Ramdisk使用off heap memory。Master和Worker直接的通讯协议是Thrift。 下图是Tachyon的架构 : Fault Tolerant Tachyon的容错机制是怎么样的呢? Tachyon使用lineage这个我们在Spark的RDD里已经很熟悉的概念,通过异步的向Tachyon的底层文件系统做Checkpoint。 当我们向Tachyon里面写入文件的时候,Tachyon会在后台异步的把这个文件给checkpoint到它的底层存储,比如HDFS,S3..

Spark必背面试题

守給你的承諾、 提交于 2020-03-20 18:27:15
3 月,跳不动了?>>> 1,spark的工作机制 用户在客户`端提交作业后,会由Driver运行main方法并创建SparkContext上下文, SparkContext向资源管理器申请资源, 启动Execotor进程, 并通过执行rdd算子,形成DAG有向无环图,输入DAGscheduler, 然后通过DAGscheduler调度器, 将DAG有向无环图按照rdd之间的依赖关系划分为几个阶段,也就是stage, 输入task scheduler, 然后通过任务调度器taskscheduler将stage划分为task set分发到各个节点的executor中执行。 2,spark中stage是如何划分的 在DAG调度的过程中,Stage阶段的划分是根据是否有shuffle过程,也就是存在ShuffleDependency宽依赖的时候,需要进行shuffle,这时候会将作业job划分成多个Stage 整体思路:从后往前推,遇到宽依赖就断开,划分为一个 stage;遇到窄依赖就将这个 RDD 加入该 stage 中 3, spark的shuffle和调优 Spark中一旦遇到宽依赖就需要进行shuffle的操作,本质就是需要将数据汇总后重新分发的过程, 也就是数据从map task输出到reduce task输入的这段过程, 在分布式情况下,reduce

kafka 分区 spark excutor task rdd

混江龙づ霸主 提交于 2020-03-20 12:36:10
kafka分区,excutor,task,RDD分区的关系: 数据的流:数据流向从kafka>sparkStreaming>RDD 1 kafka中的 topic 的 patition 分区的设置,kafka 的 partition 分区数 ,sparkStreaming 直连方式从kafka中拉数据的话,sparkStreaming 创建的 RDD 的分区数和 kafka partitions分区数是一致的 ,而RDD的分区数对应着集群中的tack的数量,也就是对应着 excutor 的数量和其核数。因此这个要参照集群中的计算资源来进行设置,设置kafka patition。 2 sparkStreaming 的 excutor 数决定着集群并发执行 task 的数量,task用来执行 RDD 的 patition 的数据的,一个task 跑一个RDD 分区数据,因此kafka patition数量设置好了的前提下,尽量让其一批执行完毕。 3 RDD分区,在直连方式下,创建的RDD partitions数与kafka partitions数一致。 来源: https://www.cnblogs.com/Mr--zhao/p/12530749.html