Apache Spark

Apache Spark Delta Lake 写数据使用及实现原理代码解析

天大地大妈咪最大 提交于 2019-11-30 14:24:48
Apache Spark Delta Lake 写数据使用及实现原理代码解析 Delta Lake 写数据是其最基本的功能,而且其使用和现有的 Spark 写 Parquet 文件基本一致,在介绍 Delta Lake 实现原理之前先来看看如何使用它,具体使用如下: df.write.format("delta").save("/data/yangping.wyp/delta/test/") //数据按照 dt 分区 df.write.format("delta").partitionBy("dt").save("/data/yangping.wyp/delta/test/") // 覆盖之前的数据 df.write.format("delta").mode(SaveMode.Overwrite).save("/data/yangping.wyp/delta/test/") 大家可以看出,使用写 Delta 数据是非常简单的,这也是 Delte Lake 介绍的 100% 兼容 Spark。 Delta Lake 写数据原理 前面简单了解了如何使用 Delta Lake 来写数据,本小结我们将深入介绍 Delta Lake 是如何保证写数据的基本原理以及如何保证事务性。 得益于 Apache Spark 强大的数据源 API,我们可以很方便的给 Spark 添加任何数据源

spark-2.4.3-bin-without-hadoop 启动报错 failed to launch: nice -n 0

孤人 提交于 2019-11-30 14:24:40
错误日志 [root @xy01 spark-2.4.3-bin-without-hadoop]# ./sbin/start-master.sh starting org.apache.spark.deploy.master.Master, logging to /opt/software/spark-2.4.3-bin-without-hadoop/logs/spark-root-org.apache.spark.deploy.master.Master-1-xy01.out failed to launch: nice -n 0 /opt/software/spark-2.4.3-bin-without-hadoop/bin/spark-class org.apache.spark.deploy.master.Master --host xy01 --port 7077 --webui-port 4650 Spark Command: /opt/software/jdk1.8.0_151/bin/java -cp /opt/software/spark-2.4.3-bin-without-hadoop/conf/:/opt/software/spark-2.4.3-bin-without-hadoop/jars/* -Xmx1g org.apache.spark.deploy

Worker和Master

好久不见. 提交于 2019-11-30 13:29:05
Worker和Master是Spark独立集群里用到的类。如果是yarn环境部署,是不需要这两个类的。 Master是Spark独立集群的控制者,Worker是工作者,一个Spark独立集群需要启动一个Master和多个Worker。Spark提供了Master选举功能,保障Master挂掉的时候能选出另一个Master,做一个切换的动作,这块原理和ZooKeeper类似,这里知道概念就可以了。 Master的功能一是管理Worker的注册和注销、状态变更等,维护集群的元数据;而是管理Driver的提交运行。 当spark程序运行driver时,会通过StandaloneScheduleBackend来调度分区任务的执行,这时候在StandaloneScheduleBackend里面会有一个StandaloneAppClient负责与Master通信,发送RegisterApplication消息给Master,Master将等待运行的app信息记录下来,等待schedule方法的调度,RegisterApplication里包含了要执行的Driver的信息(Driver就是我们的spark程序的main方法要做的事)。 Master在进度调度(schedule方法)的时候,然后选择一个Worker作为Driver的执行者,这时会发送LaunchDriver消息给Worker

hadoop和spark的区别你搞明白了吗

♀尐吖头ヾ 提交于 2019-11-30 11:15:20
学习hadoop已经有很长一段时间了,好像是二三月份的时候朋友给了一个国产Hadoop发行版下载地址,因为还是在学习阶段就下载了一个三节点的学习版玩一下。在研究、学习hadoop的朋友可以去找一下看看(发行版 大快DKhadoop,去大快的网站上应该可以下载到的。) 在学习hadoop的时候查询一些资料的时候经常会看到有比较hadoop和spark的,对于初学者来说难免会有点搞不清楚这二者到底有什么大的区别。我记得刚开始接触大数据这方面内容的时候,也就这个问题查阅了一些资料,在《FreeRCH大数据一体化开发框架》的这篇说明文档中有就Hadoop和spark的区别进行了简单的说明,但我觉得解释的也不是特别详细。我把个人认为解释的比较好的一个观点分享给大家: 它主要是从四个方面对Hadoop和spark进行了对比分析: 1、目的:首先需要明确一点,hadoophe spark 这二者都是大数据框架,即便如此二者各自存在的目的是不同的。Hadoop是一个分布式的数据基础设施,它是将庞大的数据集分派到由若干台计算机组成的集群中的多个节点进行存储。Spark是一个专门用来对那些分布式存储的大数据进行处理的工具,spark本身并不会进行分布式数据的存储。 2、两者的部署:Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储

StandaloneAppClient是什么?

冷暖自知 提交于 2019-11-30 11:04:28
StandaloneAppClient是什么?这个很容易搞混淆。其实StandaloneAppClient不是SparkApplication,它主要是用在ScheduleBackend中的。 独立集群环境中,ScheduleBackend是用的StandaloneScheduleBackend,它继承了CoarseGrainedSchedulerBackend类。 StandaloneScheduleBackend里面用了一个叫StandaloneAppClient的类,这个StandaloneAppClient很具有迷惑性,其实它的主要功能是替换CoarseGrainedSchedulerBackend的资源申请的方法,改为向Master申请资源,我们看看相关代码片段就行了。 先看他启动的时候: private def tryRegisterAllMasters(): Array[JFuture[_]] = { for (masterAddress <- masterRpcAddresses) yield { registerMasterThreadPool.submit(new Runnable { override def run(): Unit = try { if (registered.get) { return } logInfo("Connecting to

deploy目录下的SparkSubmit类

為{幸葍}努か 提交于 2019-11-30 10:16:09
之前说的各种脚本:spark-submit,spark-class也好,还是launcher工程也好,主要工作是准备各种环境、依赖包、JVM参数等运行环境。实际的提交主要还是Spark Code中的deploy下的SparkSubmit类来负责的。 deploy目录下的SparkSubmit类,前面提到过,主要入口方法是runMain。 我们先看看其他方法吧。 1、prepareSubmitEnvironment 这个方法准备提交的环境和参数。 先判断集群管理方式(cluster manager):yarn、meros、k8s,standalone。部署方式(deploy mode ): client还是cluster。 后面要根据这些信息设置不同的Backend和Wapper类等。 提交模式这一段真不好讲,因为它包含了太多种类的部署环境了,个性化较强,要慢慢看了。 cluster方式只看两种:yarn cluster和standalone cluster。把yarn和standalone两个搞懂了,其他的也就很好理解了。 这个方法返回一个四元组: @return a 4-tuple: * (1) the arguments for the child process, * (2) a list of classpath entries for the child, * (3) a

Spark-submit脚本

十年热恋 提交于 2019-11-30 09:48:32
spark程序的提交是通过spark-submit脚本实现的,我们从它开始一步步解开spark提交集群的步骤。 spark-submit的主要命令行:exec "${SPARK_HOME}"/bin/spark-class org.apache.spark.deploy.SparkSubmit "$@" 是执行spark-class脚本,并将spark.deploy.SparkSubmit类作为第一个参数。 1、 spark-class 最关键的就是下面这句了: CMD=() while IFS= read -d '' -r ARG; do CMD+=("$ARG") done < <("$RUNNER" -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main "$@") exec "${CMD[@]}" 首先循环读取ARG参数,加入到CMD中。然后执行了 "$RUNNER" -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main "$@ 这个是真正执行的第一个spark的类。 该类在launcher模块下,简单的浏览下代码: public static void main(String[] argsArray) throws Exception { ... List

Spark SQL,如何将 DataFrame 转为 json 格式

老子叫甜甜 提交于 2019-11-30 08:17:31
今天主要介绍一下如何将 Spark dataframe 的数据转成 json 数据。用到的是 scala 提供的 json 处理的 api。 用过 Spark SQL 应该知道,Spark dataframe 本身有提供一个 api 可以供我们将数据转成一个 JsonArray,我们可以在 spark-shell 里头举个栗子来看一下。 import org.apache.spark.sql.SparkSession val spark = SparkSession.builder().master("master").appName("test").config("spark.sql.warehouse.dir", warehouseLocation).enableHiveSupport().getOrCreate(); //提供隐式转换功能,比如将 Rdd 转为 dataframe import spark.implicits._ val df:DataFrame = sc.parallelize(Array(("abc",2),("efg",4))).toDF() df.show() /*-------------show ----------- +---+---+ | _1| _2| +---+---+ |abc| 2| |efg| 4| +---+---+ */ /

七、MapReduce的Shuffle和Spark的Shuffle异同?谈一谈各自的特点和过程。

混江龙づ霸主 提交于 2019-11-30 08:03:01
1、MapReduce的Shuffle机制: 在MapReduce框架中, shuffle是连接Map和Reduce之间的桥梁 ,Map大的输出要用到Reduce中必须经过shuffle这个环节, shuffle的性能高低直接影响了整个程序的性能和吞吐量。 Shuffle是MapReduce框架中的一个特定的phase,介于Map phase和Reduce phase之间,当Map的输出结果要被Reduce使用时,输出结果需要按key哈希,并且分发到每一个Reducer上去,这个过程就是shuffle。 由于shuffle涉及到了磁盘的读写和网络的传输,因此shuffle性能的高低直接影响到了整个程序的运行效率。 2:Spark的Shuffle机制: Spark中的Shuffle是 把一组无规则的数据尽量转换成一组具有一定规则的数据。 Spark计算模型是 在分布式的环境下计算的 ,这就不可能在单进程空间中容纳所有的计算数据来进行计算 ,这样数据就按照Key进行分区,分配成一块一块的小分区,打散分布在集群的各个进程的内存空间中,并不是所有计算算子都满足于按照一种方式分区进行计算。 当需要对数据进行排序存储时,就有了重新按照一定的规则对数据重新分区的必要, Shuffle就是包裹在各种需要重分区的算子之下的一个对数据进行重新组合的过程。 在逻辑上还可以这样理解

Spark on Yarn集群搭建

早过忘川 提交于 2019-11-30 07:56:17
由于最近学习大数据开发,spark作为分布式内存计算框架,当前十分火热,因此作为首选学习技术之一。Spark官方提供了三种集群部署方案: Standalone, Mesos, Yarn。其中 Standalone 为spark本身提供的集群模式,搭建过程可以参考官网,本文介绍Spark on Yarn集群部署过程。使用3台普通机器搭建Spark集群, 软件环境: Ubuntu 16.04 LTS Ubuntu 16.04 LTS CentOS7 Scala-2.10.6 Hadoop-2.7.2 spark-1.6.1-bin-hadoop2.6 Java-1.8.0_77 硬件环境: 一个Master节点 Intel® Core™ i5-2310 CPU @ 2.90GHz × 4 4G内存 300G硬盘 两个Slave节点 Intel® Core™ i3-2100 CPU @ 3.10GHz × 4 4G内存 500G硬盘 一、配置/etc/hosts及免密码登录,时间同步/主机名修改 本文下载安装的软件都放在 home 目录下。 1. 主机hosts文件配置 在每台主机上修改host文件 sudo vim /etc/hosts 218.199.92.227 fang-ubuntu1(Master) 218.199.92.226 fang-centos(Slave) 218