网络延迟。sparkdriverstacktrace是电脑程序的驱动器节点,由于网络延迟会导致出现数据库连接不上的情况。解决方法如下:
1、首先重新启动计算机。
2、其次点击重新进入sparkdriverstacktrace节点。
3、最后点击左上角的刷新即可。
题主是否想询问“spark读取不到最新数据的原因是什么?”原因有缓存问题、数据源问题。
1、缓存问题:如果数据是被缓存的,而且读取的是缓存数据,那么就无法读取到最新数据。此时需要清除缓存或者使用unpersist()方法来删除缓存。
2、数据源问题:如果数据源没有及时更新,那么就无法读取到最新数据。例如,如果数据源是一个文件,而且文件没有及时更新或者写入,那么就无法读取到最新的数据。
自己写的Spark入门实战教程,适合于有一定hadoop和数据分析经验的朋友。
Spark简介
Spark是一个开源的计算框架平台,使用该平台,数据分析程序可自动分发到集群中的不同机器中,以解决大规模数据快速计算的问题,同时它还向上提供一个优雅的编程范式,使得数据分析人员通过编写类似于本机的数据分析程序即可实现集群并行计算。
Spark项目由多个紧密集成的组件组成。
核心是Spark Core组件
,它实现了Spark的基本功能,包括:任务调度、内存管理、错误恢复、与存储系统交互等模块,特别的,Spark Core还定义了d性分布式数据集(RDD)的API,是Spark内存计算与并行计算的主要编程抽象。
在Spark Core上有一系列软件栈,用于满足了各种不同数据分析计算任务需求,包括连接关系型数据库或Hadoop Hive的SQL/HQL的查询组件Spark SQL,对实时数据进行流式计算的组件Spark Steaming,支持常见机器学习算法并行计算组件MLlib,支持并行图计算组件GraphX等。
为了进一步支持在数千个计算节点上的伸缩计算,Spark Core底层支持在各种集群管理器上运行,包括Hadoop YARN、Apache Mesos,或者Spark自带的Standalone独立调度器。
Spark部署
安装Spark比较简单,只要在机器上配置好最新版JAVA环境,下载编译好的Spark软件包后即可在本地运行。当然,也可以根据具体环境,使用Maven编译需要的Spark功能。
Spark部署有两种方式,一是本地部署,二是集群部署。前者只需启动本地的交互式环境spark-shellsh脚本即可,常用在本机快速程序测试,后者的应用场景更多些,具体根据集群环境不同,可部署在简易的Spark独立调度集群上、部署在Hadoop YARN集群上、或部署在Apache Mesos上等。
其中,Spark自带的独立调度器是最简单实现Spark集群环境的一种方式,只需在多台联网计算机上安装好Spark,然后在其中一台启动集群管理器(通过start-mastersh脚本),然后再在其他计算机上启动工作节点(通过start-slavesh脚本),并连接到管理器上即可。
Spark编程
使用Spark编程,需要先在本机安装好Spark环境,然后启动Spark上下文管理器连接到本机(本地部署)或是集群上的集群管理器(集群部署),再使用Spark提供的抽象接口编程即可。
支持Spark的原生语言是Scala,一种支持JVM的脚本语言,可以避免其他语言在做数据转化过程的性能或信息丢失。但随着Spark项目的不断完善,使用Python和PySpark包、或者R和SparkR包进行Spark编程也都是不错的选择。
不论使用何种编程语言,使用Spark进行数据分析的关键在于掌握Spark抽象的编程范式,其基本流程包括4步:
初始化SparkContext
。SparkContext即是Spark上下文管理器(也称为驱动器程序),它主要负责向Spark工作节点上发送指令并获得计算结果,但数据分析人员无需关注具体细节,只需使用SparkContext接口编程即可。
创建RDD
。d性分布数据集RDD是Spark在多机进行并行计算的核心数据结构,因此使用Spark进行数据分析,首先需使用SparkContext将外部数据读入到Spark集群内。
设计数据转化 *** 作
。即 *** 作的结果是返回一个新的RDD,即在图计算中只是一个中间节点。类比于Hadoop的Map()映射算子,但又不仅于此,Spark还支持filter()过滤算子、distinct()去重算子、sample()采样算子,以及多个RDD集合的交差补并等集合 *** 作。
设计数据执行 *** 作
。即 *** 作的结果向SparkContext返回结果,或者将结果写入外部 *** 作系统。类比于Hadoop的Reduce()算子,按某函数 *** 作两个数据并返回一个同类型的数据,此外Spark还支持collect()直接返回结果算子、count()计数算子、take()/top()返回部分数据算子、foreach()迭代计算算子等 *** 作。
Spark编程范式的本质是有向无环图方式的惰性计算
,即当使用上述方式进行编程后,Spark将自动将上述RDD和转化算子转换为有向无环图的数据工作流,只有当触发执行算子时,才按需进行数据工作流的计算。此外,为进一步提高计算效率,Spark默认将在内存中执行,并自动进行内存分配管理,当然分析人员也可根据需求通过persist()算子将中间步骤数据显式的将内存数据持久化到磁盘中,以方便调试或复用。
在R环境下使用Spark实例
最新版的RStudio已经较完整的集成了Spark数据分析功能,可以在SparkR官方扩展接口基础上更方便的使用Spark,主要需要安装两个包,分别是sparklyr和dplyr。其中,sparklyr包提供了更简洁易用的Spark R编程接口,dplyr包提供了一个语法可扩展的数据 *** 作接口,支持与主流SQL/NoSQL数据库连接,同时使数据 *** 作与数据集数据结构解耦合,并且和Spark原生算子可基本对应。
若第一次运行,先在本机安装必要的包和Spark环境:
之后运行下面的小例子,可以发现,除了需要初始化SparkContext、导入RDD数据和导出数据外,其他数据处理 *** 作都与在本机做数据分析是一样的。
此外,除了dplyr接口外,sparklyr还封装了一套特征工程和常用机器学习算法,足以满足80%常见的数据分析与挖掘工作,至于剩余的20%定制算法或是流处理、图计算等任务,便需要了解更多高阶的Spark接口来实现了。
生产上,我们往往将Spark SQL作为Hive的替代方案,来获得SQL on Hadoop更出色的性能。因此,本文所讲的是指存储于HDFS中小文件,即指文件的大小远小于HDFS上块(dfsblocksize)大小的文件。
比如我们拿TPCDS测试集中的store_sales进行举例, sql如下所示
首先我们得到其执行计划,如下所示,
store_sales的原生文件包含1616逻辑分片,对应生成1616 个Spark Task,插入动态分区表之后生成1824个数据分区加一个NULL值的分区,每个分区下都有可能生成1616个文件,这种情况下,最终的文件数量极有可能达到2949200。1T的测试集store_sales也就大概300g,这种情况每个文件可能就零点几M。
比如,为了防止Shuffle阶段的数据倾斜我们可以在上面的sql中加上 distribute by rand() ,这样我们的执行计划就变成了,
这种情况下,这样我们的文件数妥妥的就是sparksqlshufflepartitions N,因为rand函数一般会把数据打散的非常均匀。当sparksqlshufflepartitions设置过大时,小文件问题就产生了;当sparksqlshufflepartitions设置过小时,任务的并行度就下降了,性能随之受到影响。
最理想的情况,当然是根据分区字段进行shuffle,在上面的sql中加上 distribute by ss_sold_date_sk 。 把同一分区的记录都哈希到同一个分区中去,由一个Spark的Task进行写入,这样的话只会产生N个文件,在我们的case中store_sales,在1825个分区下各种生成了一个数据文件。
但是这种情况下也容易出现数据倾斜的问题,比如双11的销售数据就很容易在这种情况下发生倾斜。
前面已经提到根据分区字段进行分区,除非每个分区下本身的数据较少,分区字段选择不合理,那么小文件问题基本上就不存在了,但是也有可能由于shuffle引入新的数据倾斜问题。
我们首先可以尝试是否可以将两者结合使用, 在之前的sql上加上 distribute by ss_sold_date_sk,cast(rand() 5 as int) , 这个类似于我们处理数据倾斜问题时候给字段加上后缀的形式。如,
按照之前的推算,每个分区下将产生5个文件,同时null值倾斜部分的数据也被打散成五份进行计算,缓解了数据倾斜的问题 ,我们最终将得到1825 5=9105个文件,如下所示
如果我们将5改得更小,文件数也会越少,但相应的倾斜key的计算时间也会上去。
在我们知道那个分区键倾斜的情况下,我们也可以将入库的SQL拆成几个部分,比如我们store_sales是因为null值倾斜,我们就可以通过 where ss_sold_date_sk is not null 和 where ss_sold_date_sk is null 将原始数据分成两个部分。前者可以基于分区字段进行分区,如 distribute by ss_sold_date_sk ;后者可以基于随机值进行分区, distribute by cast(rand() 5 as int) , 这样可以静态的将null值部分分成五个文件。
对于倾斜部分的数据,我们可以开启Spark SQL的自适应功能, sparksqladaptiveenabled=true 来动态调整每个相当于Spark的reduce端task处理的数据量,这样我们就不需要人为的感知随机值的规模了,我们可以直接
然后Spark在Shuffle 阶段会自动的帮我们将数据尽量的合并成 sparksqladaptiveshuffletargetPostShuffleInputSize (默认64m)的大小,以减少输出端写文件线程的总量,最后减少个数。
对于 sparksqladaptiveshuffletargetPostShuffleInputSize 参数而言,我们也可以设置成为 dfsblocksize 的大小,这样可以做到和块对齐,文件大小可以设置的最为合理。
在我们的 猛犸大数据平台 上面,随便的建立几个SQL作业,不用会Spark也可以用SQL把大数据玩得666!
双击每个工作节点,我们也可以对我们的SQL作业进行参数的调整
选中我们对应的实验组,点击执行后,可以查看任务的运行状态。
从各组的实验结果来看
实验组一的小文件控制还是可喜可贺的。对于我们1t的tpcds测试数据,null值分区字段下只有40个文件,其他每个数据分区也只有一个数据文件,总目录1825,总文件数1863 在解决数据倾斜问题的基础上,也只比纯按照分区字段进行distibute by多了39个文件。
本文讲述的是如何在纯写SQL的场景下,如何用Spark SQL做数据导入时候,控制小文件的数量。
使用MySQL数据库,有一个容易出现的问题——Too many connections。连接数超过。
我们知道,由于SUPER权限有很多特权,因此不会把这个权限给予应用的账号。但是,当应用异常或者数据库异常,达到最大连接数的时候,用管理账号登录,有时候仍然会报Too many connections。此时,如果应用不能及时处理,数据库这边就很难办了。
所以,当应用异常并且频繁尝试建立连接的时候,常能占据那第max_connections+1个连接。super账号由于拿不到线程,因此也是Too many connections了。
在考虑Hadoop生态系统中的各种引擎时,重要的是要了解每个引擎在某些用例下效果最佳,并且企业可能需要使用多种工具组合才能满足每个所需的用例。话虽如此,这里是对Apache Spark的一些顶级用例的回顾。
一、流数据
Apache Spark的关键用例是其处理流数据的能力。由于每天要处理大量数据,因此对于公司而言,实时流传输和分析数据变得至关重要。Spark Streaming具有处理这种额外工作负载的能力。一些专家甚至认为,无论哪种类型,Spark都可以成为流计算应用程序的首选平台。提出此要求的原因是,Spark Streaming统一了不同的数据处理功能,从而使开发人员可以使用单个框架来满足其所有处理需求。
当今企业使用Spark Streaming的一般方式包括:
1、流式ETL –在数据仓库环境中用于批处理的传统ETL(提取,转换,加载)工具必须读取数据,将其转换为数据库兼容格式,然后再将其写入目标数据库。使用Streaming ETL,在将数据推送到数据存储之前,将对其进行连续的清理和聚合。
2、数据充实 –这种Spark Streaming功能通过将实时数据与静态数据相结合来充实实时数据,从而使组织能够进行更完整的实时数据分析。在线广告商使用数据充实功能将历史客户数据与实时客户行为数据结合起来,并根据客户的行为实时提供更多个性化和针对性的广告。
3、触发事件检测 – Spark Streaming使组织可以检测到可能对系统内部潜在严重问题的罕见或异常行为(“触发事件”)并做出快速响应。金融机构使用触发器来检测欺诈性交易并阻止其欺诈行为。医院还使用触发器来检测潜在的危险健康变化,同时监视患者的生命体征-向正确的护理人员发送自动警报,然后他们可以立即采取适当的措施。
4、复杂的会话分析 –使用Spark Streaming,与实时会话有关的事件(例如登录网站或应用程序后的用户活动)可以组合在一起并进行快速分析。会话信息还可以用于不断更新机器学习模型。诸如Netflix之类的公司使用此功能可立即了解用户在其网站上的参与方式,并提供更多实时**推荐。
二、机器学习
许多Apache Spark用例中的另一个是它的机器学习功能。
Spark带有用于执行高级分析的集成框架,该框架可帮助用户对数据集进行重复查询,这从本质上讲就是处理机器学习算法。在此框架中找到的组件包括Spark的可扩展机器学习库(MLlib)。MLlib可以在诸如聚类,分类和降维等领域中工作。所有这些使Spark可以用于一些非常常见的大数据功能,例如预测智能,用于营销目的的客户细分以及情感分析。使用推荐引擎的公司将发现Spark可以快速完成工作。
网络安全是Spark 机器学习功能的一个很好的商业案例。通过使用Spark堆栈的各种组件,安全提供程序可以对数据包进行实时检查,以发现恶意活动的痕迹。在前端,Spark Streaming允许安全分析人员在将数据包传递到存储平台之前检查已知威胁。到达存储区后,数据包将通过其他堆栈组件(例如MLlib)进行进一步分析。因此,安全提供商可以在不断发展的过程中了解新的威胁-始终领先于黑客,同时实时保护其客户。
三、互动分析
Spark最显着的功能之一就是其交互式分析功能。MapReduce是为处理批处理而构建的,而Hive或Pig等SQL-on-Hadoop引擎通常太慢,无法进行交互式分析。但是,Apache Spark足够快,可以执行探索性查询而无需采样。Spark还与包括SQL,R和Python在内的多种开发语言接口。通过将Spark与可视化工具结合使用,可以交互地处理和可视化复杂的数据集。
下一版本的Apache Spark(Spark 20)将于今年的4月或5月首次亮相,它将具有一项新功能- 结构化流 -使用户能够对实时数据执行交互式查询。通过将实时流与其他类型的数据分析相结合,预计结构化流将通过允许用户针对Web访问者当前会话运行交互式查询来促进Web分析。它也可以用于将机器学习算法应用于实时数据。在这种情况下,将对旧数据进行算法训练,然后将其重定向以合并新的数据,并在其进入内存时从中学习。
四、雾计算
尽管大数据分析可能会引起广泛关注,但真正激发技术界想象力的概念是物联网(IoT)。物联网通过微型传感器将对象和设备嵌入在一起,这些微型传感器彼此之间以及与用户进行通信,从而创建了一个完全互连的世界。这个世界收集了大量数据,对其进行处理,并提供革命性的新功能和应用程序供人们在日常生活中使用。但是,随着物联网的扩展,对大量,种类繁多的机器和传感器数据进行大规模并行处理的需求也随之增加。但是,利用云中的当前分析功能很难管理所有这些处理。
那就是雾计算和Apache Spark出现的地方。
雾计算将数据处理和存储分散化,而不是在网络边缘执行这些功能。但是,雾计算为处理分散数据带来了新的复杂性,因为它越来越需要低延迟,机器学习的大规模并行处理以及极其复杂的图形分析算法。幸运的是,有了Spark Streaming等关键堆栈组件,交互式实时查询工具(Shark),机器学习库(MLib)和图形分析引擎(GraphX),Spark不仅具有雾计算解决方案的资格。实际上,随着物联网行业逐渐不可避免地融合,许多行业专家预测,与其他开源平台相比,Spark有可能成为事实上的雾基础设施。
现实世界中的火花
如前所述,在线广告商和诸如Netflix之类的公司正在利用Spark获得见识和竞争优势。其他也从Spark受益的著名企业是:
Uber –这家跨国在线出租车调度公司每天都从其移动用户那里收集TB级的事件数据。通过使用Kafka,Spark Streaming和HDFS构建连续的ETL管道,Uber可以在收集原始非结构化事件数据时将其转换为结构化数据,然后将其用于进一步和更复杂的分析。
Pinterest –通过类似的ETL管道,Pinterest可以利用Spark Streaming即时了解世界各地的用户如何与Pins互动。因此,当人们浏览站点并查看相关的图钉时,Pinterest可以提出更相关的建议,以帮助他们选择食谱,确定要购买的产品或计划前往各个目的地的行程。
Conviva –这家流媒体视频公司每月平均约有400万个视频供稿,仅次于YouTube。Conviva使用Spark通过优化视频流和管理实时视频流量来减少客户流失,从而保持一致的流畅,高质量的观看体验。
何时不使用Spark
尽管它具有通用性,但这并不一定意味着Apache Spark的内存中功能最适合所有用例。更具体地说,大数据分析Apache Spark的应用实例Spark并非设计为多用户环境。Spark用户需要知道他们有权访问的内存对于数据集是否足够。添加更多的用户使此 *** 作变得更加复杂,因为用户必须协调内存使用量才能同时运行项目。由于无法处理这种类型的并发,用户将需要为大型批处理项目考虑使用备用引擎,例如Apache Hive。
随着时间的流逝,Apache Spark将继续发展自己的生态系统,变得比以前更加通用。在大数据已成为规范的世界中,组织将需要找到最佳方式来利用它。从这些Apache Spark用例可以看出,未来几年将有很多机会来了解Spark的真正功能。
随着越来越多的组织认识到从批处理过渡到实时数据分析的好处,Apache Spark的定位是可以在众多行业中获得广泛而快速的采用。
Spark是处理海量数据的快速通用引擎。作为大数据处理技术,Spark经常会被人们拿来与Hadoop比较。
Hadoop已经成了大数据技术的事实标准,Hadoop MapReduce也非常适合于对大规模数据集合进行批处理 *** 作,但是其本身还存在一些缺陷。具体表现在:
1、Hadoop MapRedue的表达能力有限。所有计算都需要转换成Map和 Reduce两个 *** 作,不能适用于所有场景,对于复杂的数据处理过程难以描述。
2、磁盘I/O开销大。Hadoop MapReduce要求每个步骤间的数据序列化到磁盘,所以I/O成本很高,导致交互分析和迭代算法开销很大,而几乎所有的最优化和机器学习都是迭代的。所以,Hadoop MapReduce不适合于交互分析和机器学习。
3、计算延迟高。如果想要完成比较复杂的工作,就必须将一系列的MapReduce作业串联起来然后顺序执行这些作业。每一个作业都是高时延的,而且只有在前一个作业完成之后下一个作业才能开始启动。因此,Hadoop MapReduce不能胜任比较复杂的、多阶段的计算服务。
Spark借鉴Hadoop MapReduce技术发展而来,继承了其分布式并行计算的优点的同时,改进了MapReduce的许多缺陷。具体优势如下:
1、Spark提供广泛的数据集 *** 作类型(20+种),支持Java,Python和Scala API,支持交互式的Python和Scala的shell。比Hadoop更加通用。
2、Spark提供Cache机制来支持需要反复迭代的计算或者多次数据共享,减少数据读取的I/O开销。Spark使用内存缓存来提升性能,因此进行交互式分析也足够快速,缓存同时提升了迭代算法的性能,这使得Spark非常适合数据理论任务,特别是机器学习。
3、Spark提供了内存计算,把中间结果放到内存中,带来了更高的迭代运算效率。通过支持有向无环图(DAG)的分布式并行计算的编程框架,减少迭代过程中数据需要写入磁盘的需求,提高处理效率。
此外,Spark还能与Hadoop无缝衔接,Spark可以使用YARN作为它的集群管理器,可以读取HDFS、HBase等一切Hadoop的数据。
Spark在最近几年发展迅速,相较于其他大数据平台或框架,Spark的代码库最为活跃。截止目前,最新发布的版本为Spark330。
也有许多数据治理工具,为了实现实时、通用的数据治理而采用Spark技术。以飞算推出的SoData数据机器人为例,是一套实时+批次、批流一体、高效的数据开发治理工具,能够帮助企业快速实现数据应用。
相较于传统数据加工流程,SoData数据机器人实现了流批一体数据同步机制,基于Spark和Flink框架进行深度二次开发,实现数据采集、集成、转换、装载、加工、落盘全流程实时+批次处理的极致体验,秒级延迟,稳定高效平均延迟5-10s,快速响应企业数据应用需求。
除了具备Spark数据处理的优势,SoData数据机器人的Spark体系还支持从各种数据源执行SQL生成Spark字典表,边开发边调试的Spark-SQL开发,支持任意结果集输出到各类数据库。可视化的运维、开发方式也能在极大降低数据开发、治理、应用门槛的同时,提升效率。
在某综合医院的信息化建设中,SoData数据机器人曾在5分钟内完成原本需要8-9小时才能完成的数据迁移工作。
目前,SoData数据机器人已应用于金融、医疗、能源等多个行业,将持续通过创新技术,为各行业组织机构带来更优质、快速的数据开发、治理、应用体验。
以上就是关于sparkdriverstacktrace导致数据库连接不上全部的内容,包括:sparkdriverstacktrace导致数据库连接不上、spark读取不到最新数据、spark怎么把两个数据库通过姓名匹配成一个等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)