spark

IDEA本地运行spark生成数据到hive中出错

拟墨画扇 提交于 2020-03-20 07:20:23
在window下通过idea开发,在代码中需要spark,使用loacl模式,生成一些数据存放到hive中,使用的也是spark自带的hive库。 在idea 运行时报错: Error while instantiating 'org.apache.spark.sql.hive.HiveSessionState': java.lang.RuntimeException: The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: --------- 报错信息可以看到是root想在/tmp/hive目录下写数据,而没有权限。 首先本地是否有/tmp/hive目录,再次确认此目录的权限。 解决办法: 从网上看到有帖子解决 系统中首先要配置hadoop环境和winutils工具 打开cmd命令提示符窗口,输入以下命令: winutils.exe ls F:\tmp\hive winutils.exe chmod 777 F:\tmp\hive winutils.exe ls F:\tmp\hive 3.再次运行idea程序,最终还是报错 实际解决办法: 系统中还是要安装hadoop环境和winutils工具; 打开cmd窗口,切换到idea程序所在的盘符下。 我的开发路径在e:

Spark sql ---JSON

孤街浪徒 提交于 2020-03-18 11:51:52
介绍Spark SQL的JSON支持,这是我们在Databricks中开发的一个功能,可以在Spark中更容易查询和创建JSON数据。随着网络和移动应用程序的普及,JSON已经成为Web服务API以及长期存储的常用的交换格式。使用现有的工具,用户通常会使用复杂的管道来在分析系统中读取和写入JSON数据集。在Apache Spark 1.1中发布Spark SQL的JSON支持,在Apache Spark 1.2中增强,极大地简化了使用JSON数据的端到端体验。 现有做法 实际上,用户经常面临使用现代分析系统处理JSON数据的困难。要将数据集写入JSON格式,用户首先需要编写逻辑将其数据转换为JSON。要阅读和查询JSON数据集,通常的做法是使用ETL流水线将JSON记录转换为预定义的结构。在这种情况下,用户必须等待该进程完成才能使用其数据。对于写作和阅读,定义和维护模式定义通常会使ETL任务更加繁重,并消除了半结构化JSON格式的许多优点。如果用户想要使用新的数据,则他们在创建外部表时必须费力定义模式,然后使用自定义的JSON序列化/反序列化库,或者使用JSON UDF的组合来查询数据。 例如,考虑具有以下JSON模式的数据集: {"name":"Yin", "address":{"city":"Columbus","state":"Ohio"}} {"name":"Michael

Spark专业术语定义

霸气de小男生 提交于 2020-03-18 04:46:38
1.1.1. Application/App:Spark应用程序 指的是用户编写的Spark应用程序/代码,包含了Driver功能代码和分布在集群中多个节点上运行的Executor代码。 Spark应用程序,由一个或多个作业JOB组成(因为代码中可能会调用多次Action),如下图所示: 1.1.2. Driver:驱动程序 Spark中的Driver即运行上述Application的Main()函数并且创建SparkContext,其中创建SparkContext的目的是为了准备Spark应用程序的运行环境。 在Spark中由SparkContext负责和ClusterManager通信,进行资源的申请、任务的分配和监控等; 当Executor部分运行完毕后,Driver负责将SparkContext关闭。 通常SparkContext代表Driver,如下图所示: 1.1.3. Cluster Manager:资源管理器 指的是在集群上获取资源的外部服务,常用的有: Standalone,Spark原生的资源管理器,由Master负责资源的分配; Haddop Yarn,由Yarn中的ResourcesManager负责资源的分配; Messos,由Messos中的Messos Master负责资源管理, 如下图所示: 1.1.4. Worker:计算节点

mapreduce与spark区别

只愿长相守 提交于 2020-03-17 09:38:15
https://blog.csdn.net/wyz0516071128/article/details/81219342 尽管二者在server端采用了一致的并发模型,但在任务级别(特指 Spark任务和MapReduce任务)上却采用了不同的并行机制:Hadoop MapReduce采用了多进程模型,而Spark采用了多线程模型。 总体上看,Spark采用的是经典的scheduler/workers模式, 每个Spark应用程序运行的第一步是构建一个可重用的资源池,然后在这个资源池里运行所有的ShuffleMapTask和ReduceTask(注 意,尽管Spark编程方式十分灵活,不再局限于编写Mapper和Reducer,但是在Spark引擎内部只用两类Task便可表示出一个复杂的应用 程序,即ShuffleMapTask和ReduceTask),而MapReduce应用程序则不同,它不会构建一个可重用的资源池,而是让每个 Task动态申请资源,且运行完后马上释放资源。 来源: https://www.cnblogs.com/gouhaiping/p/12508464.html

浅析SparkRPC源码(spark2.11)

南楼画角 提交于 2020-03-16 21:25:16
某厂面试归来,发现自己落伍了!>>> Spark的RPC 一步一步走下去: RpcAddress RpcEndPointRef 当我们需要向一个具体的RpcEndpoint发送消息时,一般我们需要获取到该RpcEndpoint的引用,然后通过该应用发送消息。 部分方法: RpcEnv RpcEnv的部分方法: RpcEndpoint 正如他所说我们前去看他的生命周期: 那么RpcEndpoint表示一个个需要通信的个体都有哪些?如master,worker,driver Driver这里就不在做演示了,有兴趣的可以自行进入源码中查看。 在调用中,我们发现了一个RpcCallContext的特性,在receiveAndReply被作为参数。 所以关注了一下他: 整片博客中由许多方法,类并未列出,看时做一个参考即可。在自己的idea中查看源码。仅做一个引导。 瞎琢磨一阵,做个小总结: 打个比喻:若是将Spark类比为一个人的话,Spark RPC无疑就是它的血液部分。所以说Spark RPC可以说是Spark分布式集群的基础。 在整个RPC中: RpcEnv为RpcEndpoint提供处理消息的环境。RpcEnv负责RpcEndpoint整个生命周期的管理,包括:注册endpoint,endpoint之间消息的路由,以及停止endpoint。

Parquet的那些事(二)Spark中的Schema兼容问题

 ̄綄美尐妖づ 提交于 2020-03-16 17:49:23
Parquet是一种存储格式,其本身与任何语言、平台都没有关系,也不需要与任何一种数据处理框架绑定。但是一个开源技术的发展,必然需要有合适的生态圈助力才行,Spark便是Parquet的核心助力之一。作为内存型并行计算引擎,Spark被广泛应用在流处理、离线处理等场景,其从1.0.0便开始支持Parquet,方便我们操作数据。 在Spark中操作Parquet文件有两种方式,一种是直接加载文件,另一种是透过Hive表来读取数据。我们姑且称之为文件加载、表加载。这两种方式在API层面都非常简洁,它隐藏了底层推导Schema、并行加载数据等细节。 # By File df = spark . read . parquet ( "s3://mydata/type=security" ) # By Table df = spark . read . table ( "data_mine.security_log" ) 在实际使用中,我们经常会遇到 Schema兼容 的问题,其根源是Schema不一致,主要有以下两种情况: 存放在HDFS/S3上面的Parquet文件具有不同的Schema Hive Metastore Schema与Parquet文件自带的Schema不一致 不管是需求变化、产品迭代还是其他原因,总是会出现Schema变化的情况,导致不同Parquet文件的Schema不同

SPARK的安装

杀马特。学长 韩版系。学妹 提交于 2020-03-15 11:38:13
spark 版本: spark-1.0.2-bin-hadoop2.tgz 下载链接: http://www.apache.org/dist/spark/spark-1.0.2/ Scala 版本: scala-2.10.4.tgz 下载链接: http://www.scala-lang.org/files/archive/ 1 、 解压文件 , 并配置环境变量 将下载的spark-1.0.2-bin-hadoop2.tgz 、 scala-2.10.4.tgz 解压到 /home/h adoop路径下。 sudo mv spark/usr/local/ sudo mv scala/usr/local/ # vi ~/.bashrc 打开 .bashrc 文件,添加下面配置信息 eexport SCALA_HOME=/usr/local/scala export SPARK_HOME=/usr/local/spark export PATH=$PATH:$SCALA_HOME/bin:$SPARK_HOME/bin 2、 cp conf/spark-env.sh.template conf/spark-env.sh 在spark-env.sh中添加以下内容: export SPARK_MASTER_IP=master //主节点 export SPARK_MASTER_PORT

Spark配置参数

ぐ巨炮叔叔 提交于 2020-03-14 21:37:56
以下是整理的Spark中的一些配置参数,官方文档请参考 Spark Configuration 。 Spark提供三个位置用来配置系统: Spark属性:控制大部分的应用程序参数,可以用SparkConf对象或者Java系统属性设置 环境变量:可以通过每个节点的 conf/spark-env.sh 脚本设置。例如IP地址、端口等信息 日志配置:可以通过log4j.properties配置 Spark属性 Spark属性控制大部分的应用程序设置,并且为每个应用程序分别配置它。这些属性可以直接在 SparkConf 上配置,然后传递给 SparkContext 。 SparkConf 允许你配置一些通用的属性(如master URL、应用程序名称等等)以及通过 set() 方法设置的任意键值对。例如,我们可以用如下方式创建一个拥有两个线程的应用程序。 val conf = new SparkConf() .setMaster("local[2]") .setAppName("CountingSheep") .set("spark.executor.memory", "1g") val sc = new SparkContext(conf) 动态加载Spark属性 在一些情况下,你可能想在 SparkConf 中避免硬编码确定的配置。例如

Spark MapReduce实现移动聚合操作(移动平均、求和、计数等)

≡放荡痞女 提交于 2020-03-13 01:42:19
1. 需求 在处理时间序列或者是有序数据时候,经常会越到这样的情形:1、求客户最近一个月的平均消费金额;2、求客户最近一个月的消费次数;3、求与客户在最近一个月内发生大额消费的客户数量 上述问题中,问题1与问题2是典型的求指定客户在指定时间段的行为统计值,可以通过客户进行分组然后过滤统计即可,而问题三则是求解与该客户在指定时间段内发生某种行为的客户数量,即没有具体的聚合Key,从而不同按照问题1与问题2进行分组的方式求解,而通过类似时间序列中求一个序列的移动平均方法来求解 针对上述两类情形,下面分别提供了两个函数,这个两个函数,一个是aggregateByKey,根据key聚合,并对聚合后的每一条记录采用窗口函数获取聚合数据,即该函数是对每一个key对应的value进行移动聚合操作。另一个是aggregateByAll,根据key进行排序,通过窗口函数获取结果进行聚合。这两个函数都是根据窗口函数进行聚合操作,但不同点在于作用范围不同。 窗口函数与聚合函数用户定义可以自由定义,通过定义不同的窗口函数与聚合函数,可以实现不同的移动逻辑以及聚合运算。 2. 实现思路 2.1 aggregateByKey aggregateByKey实现起来比较简单,因为一般情况先,单个key对应的value不会很大(单个executor的内存是可以装得下的)

Spark MapReduce实现移动聚合操作(移动平均、求和、计数等)

左心房为你撑大大i 提交于 2020-03-13 01:34:24
1. 需求 在处理时间序列或者是有序数据时候,经常会越到这样的情形:1、求客户最近一个月的平均消费金额;2、求客户最近一个月的消费次数;3、求与客户在最近一个月内发生大额消费的客户数量 上述问题中,问题1与问题2是典型的求指定客户在指定时间段的行为统计值,可以通过客户进行分组然后过滤统计即可,而问题三则是求解与该客户在指定时间段内发生某种行为的客户数量,即没有具体的聚合Key,从而不同按照问题1与问题2进行分组的方式求解,而通过类似时间序列中求一个序列的移动平均方法来求解 针对上述两类情形,下面分别提供了两个函数,这个两个函数,一个是aggregateByKey,根据key聚合,并对聚合后的每一条记录采用窗口函数获取聚合数据,即该函数是对每一个key对应的value进行移动聚合操作。另一个是aggregateByAll,根据key进行排序,通过窗口函数获取结果进行聚合。这两个函数都是根据窗口函数进行聚合操作,但不同点在于作用范围不同。 窗口函数与聚合函数用户定义可以自由定义,通过定义不同的窗口函数与聚合函数,可以实现不同的移动逻辑以及聚合运算。 2. 实现思路 2.1 aggregateByKey aggregateByKey实现起来比较简单,因为一般情况先,单个key对应的value不会很大(单个executor的内存是可以装得下的)