技术标签: spark scala Hadoop big data
Spark 是一种由 Scala 语言开发的快速、通用、可扩展的大数据分析引擎。
Spark主要由五部分组成:
Spark一直被认为是Hadoop的升级版,在数据处理方面,基于内存,优于hadoop的MapReduce
框架,但需要注意的是Spark取代不了Hadoop,Spark没有存储,只是负责处理,而且Spark可以独立运行,也可以集成到Hadoop中,去替代MapReduce。
Spark
多个作业之间数据通信是基于内存,而 Hadoop
是基于磁盘。Spark架构是一个标准的Master-slave架构。
Spark 驱动器节点,用于执行 Spark 任务中的 main 方法,负责实际代码的执行工作。
Driver 在 Spark 作业执行时主要负责:
实际上,我们无法准确地描述 Driver 的定义,因为在整个的编程过程中没有看到任何有关Driver 的字眼。所以简单理解,所谓的 Driver 就是驱使整个应用运行起来的程序,也称之为Driver 类。
Spark Executor 是集群中工作节点(Worker)中的一个 JVM 进程,负责在 Spark 作业中运行具体任务(Task),任务彼此之间相互独立。
Spark 应用启动时,Executor 节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有 Executor 节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他 Executor 节点上继续运行。
Executor 有两个核心功能:
Spark 集群的独立部署环境中,不需要依赖其他的资源调度框架,自身就实现了资源调度的功能,所以环境中还有其他两个核心组件:Master 和 Worker,这里的 Master 是一个进程,主要负责资源的调度和分配,并进行集群的监控等职责,类似于 Yarn 环境中的 RM, 而Worker 呢,也是进程,一个 Worker 运行在集群中的一台服务器上,由 Master 分配资源对
数据进行并行的处理和计算,类似于 Yarn 环境中 NM。
集群资源管理器(例如,Standlone Manager,Mesos,YARN)
Hadoop 用户向 YARN 集群提交应用程序时,提交程序中应该包含 ApplicationMaster,用于向资源调度器申请执行任务的资源容器 Container,运行用户自己的程序任务 job,监控整个任务的执行,跟踪整个任务的状态,处理任务失败等异常情况。
说的简单点就是,ResourceManager
(资源)和 Driver
(计算)之间的解耦合靠的就是ApplicationMaster。
如果Driver需要资源,那么会向ApplicationMaster进行申请,AM 会进而向ResourceManager进一步申请资源。
每个job被划分为多个stage,一个stage中包含一个taskset
在 Spark 中,一个任务对应一个分区,通常不会跨分区操作数据。但如果遇到 reduceByKey
等操作,Spark 必须从所有分区读取数据,并查找所有键的所有值,然后汇总在一起以计算每个键的最终结果 ,这称为 Shuffle
。
Shuffle 是一项昂贵的操作,因为它通常会跨节点操作数据,这会涉及磁盘 I/O,网络 I/O,和数据序列化。某些 Shuffle 操作还会消耗大量的堆内存,因为它们使用堆内存来临时存储需要网络传输的数据。Shuffle 还会在磁盘上生成大量中间文件,从 Spark 1.3 开始,这些文件将被保留,直到相应的 RDD 不再使用并进行垃圾回收,这样做是为了避免在计算时重复创建 Shuffle 文件。如果应用程序长期保留对这些 RDD 的引用,则垃圾回收可能在很长一段时间后才会发生,这意味着长时间运行的 Spark 作业可能会占用大量磁盘空间,通常可以使用 spark.local.dir
参数来指定这些临时文件的存储目录。
由于 Shuffle 操作对性能的影响比较大,所以需要特别注意使用,以下操作都会导致 Shuffle:
repartition
和 coalesce
;groupByKey
和 reduceByKey
,但 countByKey
除外;cogroup
和 join
。RDD 是 Spark 提供的最重要的抽象概念,它是一种有容错机制的特殊数据集合,可以分布在集群的结点上,以函数式操作集合的方式进行各种并行操作。
通俗点来讲,可以将 RDD 理解为一个分布式对象集合,本质上是一个只读的分区记录集合。每个 RDD 可以分成多个分区,每个分区就是一个数据集片段。一个 RDD 的不同分区可以保存到集群中的不同结点上,从而可以在集群中的不同结点上进行并行计算。
RDD 和它的父 RDD(s) 之间的依赖关系分为两种不同的类型:
如下图,每一个方框表示一个 RDD,带有颜色的矩形表示分区:
区分这两种依赖是非常有用的:
1、Value数据类型的Transformation算子,这种变换不触发提交作业,针对处理的数据项是Value型的数据。
2、Key-Value数据类型的Transformation算子,这种变换不触发提交作业,针对处理的数据项是Key-Value型的数据。
3、Action算子,这类算子会触发SparkContext提交作业。
文章浏览阅读347次。标签:状态栏样式,statusBarStyle状态栏的样式系统的默认样式是黑色的,但可以修改,方法有2种方法1:// 返回状态栏的样式- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}// 控制状态栏的现实与隐藏- (BOOL)prefersStatusBarHidden{return..._怎么改成苹果的状态栏
文章浏览阅读1k次。1 org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 10 in XML document from class path resource [applicationContext.xml] is invalid; nested exception is org.xml.sax.SAXParseE..._cvc-elt.1.a: cannot find the declaration of element 'beans'.
文章浏览阅读3.5k次。maven当中避免重复发明轮子的方法,一种是继承,一种是引用(参考我参考目录下的文章)。maven中配置引 用关系的方法是,<type>pom</type>和<scope>import</scope>,很 简单,这样就引入一个pom文件,这样<dependencies>里面的<groupId> org.springframew..._pom
文章浏览阅读667次。无论在学校还是工作中,记笔记都是让生活高效有序的有效方式。常见的个人笔记软件包括: 微软的OneNote 国产的印象笔记 今天,我们将要介绍一款IOS扁平风的宝藏App - Notion。本文是一篇个人向的点评,从实际使用及个人偏好出发,仅代表个人观点。1 OneNote作为微软出品,它有着一如既往的Office风格,说不上丑也说不上好看。可个人使用,也可作为企业团队协作或知识共享的平台。功能不算强大,算是一款无功无过的企业级标准产品。2 印象笔记(Evernote)_notion getting start
文章浏览阅读1.5w次,点赞2次,收藏47次。透镜畸变和畸变校准(OpenCV)透镜畸变理想的相机模型应该是小孔成像模型,但由于透镜制造和相机镜头安装等因素,必然会导致畸变的存在。畸变主要分为径向畸变、切向畸变和薄棱镜畸变。1.径向畸变径向畸变主要由透镜本身导致的,远离透镜中心的光线比靠近中心的光线弯曲的更严重。图1显示矩形网格因镜像畸变而产生的位移。从前面看,光心越向外,矩形网格上的点的位移越大。图1 透镜的径向畸变图,箭头显示径向畸变图像上_薄透镜畸变
文章浏览阅读750次。1、定义类lcl_event_handler、定义方法用于实现类CL_GUI_ALV_GRID的事件、实现类、实现方法; 2、创建类对象实例CREATE GR_EVENT_HANDLER; 3、注册双击DOUBLE_CLICK事件: SET HANDLER GR_EVENT_HANDLER-&amp;amp;gt;HANDLER_DOUBLE_CLICK FOR GV_ALVGRID。 ..._abap oo alv 面向对象
文章浏览阅读1w次,点赞14次,收藏105次。ESP32 TTGO1、屏幕驱动常用API2、示例代码ESP32 TTGO开发环境:VS Code (便于查看函数) ESP32 TTGO一块高颜值的开发板,自带1.14寸屏幕使用ST7789驱动,使用TFT_eSPI库。文档链接:https://github.com/Xinyuan-LilyGO/TTGO-T-Displaygithub下载文件,拷贝到自己的arduino 库文件里面就可以使用了。下图所示引脚分配:1、屏幕驱动常用API实例化屏幕:TFT_eSPI::TFT_eS_esp ttgo
文章浏览阅读3.8k次,点赞5次,收藏47次。这篇文章将介绍使用 TensorFlow Lite for Microcontrollers 的基础知识。它包括训练模型,将其转换为 TensorFlow Lite 版本使用以及在微控制器上运行的完整的端到端工作流程。_flowlite_esp32 tflite
文章浏览阅读1.1k次,点赞2次,收藏3次。对 STC8H8K64U 的 USB 功能测试, 因为存在很多问题并且未能解释/解决, 就不写到系列里了, 把记录放上来抛砖引玉吧. 也许是使用的方法不对, 这些记录对其他人也许会有帮助. 待有更多资料再试_stc打狗棒识别不到usb
文章浏览阅读1.3k次。SSH一到手,第一件事情就是更改默认的端口号,避免被黑客很容易的就找到端口号做成肉鸡。更改端口号是通过修改SSH的配置文件实现的,登录ssh后,输入1 vim /etc/ssh/sshd_config 注:vim编辑器详细使用方法http://wiki.ubuntu.org.cn/Vim向下找到#Port 22这段输入1 i 进入vim插入模式,进行编辑..._shh配置文件内端口号修改
文章浏览阅读208次。得到二维数据中指定列值array_column数组去重array_unique序列化存储serializedb[′data′]=serialize(db[&amp;#x27;data&amp;#x27;]=serialize(db[′data′]=serialize(data);//序列化存储data=unserialize(data=unserialize(data=unseria......_str_replace(php_eol,"",$update);
文章浏览阅读5.9k次。微信公众号开发的时候经常需要获取用户的微信信息,用户的微信昵称是一个非常重要的参数.但是,很多用户的微信昵称中含有一些特殊的表情.如:等,这些特殊的表情符号并不能被数据库识别,因此在进行用户信息的存取时需要我们手动处理.如下,便是处理方式:1.导入maven依赖:<!-- 处理emoji --><dependency> <groupId>com.git...