spark

Spark 源码和应用开发环境的构建

﹥>﹥吖頭↗ 提交于 2020-03-04 16:51:27
引言 Spark 现在无疑是大数据领域最热门的技术之一,读者很容易搜索到介绍如何应用 Spark 技术的文章,但是作为开发人员,在了解了应用的概念之后,更习惯的是打开开发环境,开发一些应用来更深入的学习 spark 知识,在遇到问题的时候,也希望能够深入调试 Spark 源代码来解决问题。但是由于 Spark 技术本身较新,对于初学者,在构建开发调试环境的过程中,总会遇到这样那样的问题。而其使用的 Scala 语言,SBT 构建工具相对于 Java 语言,Maven 构建工具而言,也比较小众,因些在 Web 上能够参考的信息相对也比较少。本文结合作者的实践,从 Spark 的源码开始编译整个项目,同时给出了一些在编译过程中可能出现的问题,供使用参考。文中各步骤展示的编译方法主要用于方便学习 Spark 源码,若仅需要编写 Spark 应用则不需要如此繁复的流程,具体引用方法可参考最后一章。 环境要求 系统:Windows/Linux/Mac OS IDE:Eclipse/IntelliJ 其他依赖:Scala,Sbt,Maven Eclipse 下开发调试环境的配置 该小节中使用的各项工具分别为:Windows 7+Eclipse Java EE 4.4.2+Scala 2.10.4+Sbt 0.13.8+Maven3.3.3,测试的 Spark 版本为 1.4.0。 1.配置

CDH升级Spark2异常java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FSDataInputStream

安稳与你 提交于 2020-03-04 16:43:27
最近为了适配客户版本,搭建了CDH5.16版本的数据数据环境。而默认的Spark是1.6版本的,为配合客户需要升级成Spark2,由于机器资源有限制,先把Spark1.6删除了,下载SPARK2-2.1.0.cloudera3-1.cdh5.13.3.p0.569822-el7.parcel包,进行了安装。安装完成之后,运行Spark的相关命令就报java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FSDataInputStream异常,我使用的命令是spark2-submit时报错,其实所有Spark相关命令都是一样的错误。 特别需要注意是: 使用Spark的命令的机器需要安装Gateway组件,然后需要deploy client configuration(部署客户端配置)。 个人认为既然使用CDH Manager,如果还去机器上直接改配置的,那还要CDH Manager干啥?网上有很多答案,都说教人要改这改那的,这命令那么命令的,可能别人也没搞明白为啥会出那样的问题。 错误信息如下 : [root@hadoop60 ~]# spark2-submit Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs

xshell复制多行文本在有"/"的时候怎么不管用?

大憨熊 提交于 2020-03-04 15:30:25
大佬们好,我遇到了一个问题,像下面这样,我先随便拿了一段代码,复制进去,下面这段代码有换行符 bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode client \ ./examples/jars/spark-examples_2.11-2.4.5.jar \ 100 复制到 [root@WSWS1 spark-2.4.5-bin-hadoop2.7] 然后点粘贴,可是没有按enter键,奇怪的是代码自动执行了一段 执行结果显示是这样的: [root@WSWS1 spark-2.4.5-bin-hadoop2.7]# bin/spark-submit \ Exception in thread "main" org.apache.spark.SparkException: Cannot load main class from JAR file:/opt/module/spark/%20 [root@WSWS1 spark-2.4.5-bin-hadoop2.7]# --class org.apache.spark.examples.SparkPi \ -bash: --class: 未找到命令 [root@WSWS1 spark-2.4.5-bin

实时计算与SparkSteaming的对比

谁说我不能喝 提交于 2020-03-04 15:14:22
实时计算概述 实时计算 阿里云实时计算(Alibaba Cloud Realtime Compute)是一套基于Apache Flink构建的一站式、高性能实时大数据处理平台,广泛适应于流式数据处理、离线数据处理等场景,最重要的一点是免运维,可以为企业节省了大量的成本。 产品模式 阿里云的实时计算产品模式有Flink云原生版和独享模式。目前Flink云原生版支持部署于容器服务ACK提供的Kubernetes。独享模式是指在阿里云ECS上单独为用户创建的独立计算集群。单个用户独享计算集群的物理资源(网络、磁盘、CPU或内存等),与其它用户的资源完全独立。独享模式分为包年包月和按量付费两种方式。 Flink简介 Flink是开源的流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。它的特点是支持高吞吐、低延迟、高性能的流处理,支持带有事件时间的窗口(Window)操作,支持有状态计算的Exactly-once语义,支持基于轻量级分布式快照(Snapshot)实现的容错,同时支持Batch on Streaming处理和Streaming处理,Flink在JVM内部实现了自己的内存管理,支持迭代计算,支持程序自动优化,避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存。 Flink架构图 阿里云的程序提交主要从客户端进行提交。其中

spark streamingRDD队列流

♀尐吖头ヾ 提交于 2020-03-04 04:13:45
用streamingContext.queueStream(queueOfRDD)创建基于RDD的Dstream 每隔1s创建一个RDD,加到队列里,每隔2s对Dstream进行处理 cd 。。。。 vim RDDQueueStream.py #!/usr/bin/env python3 import time from pyspark import SparkContext from spark.streaming import StreamingContext if__name__=“ main ”: sc = SparkContext(appName=‘PythonStreamingQueueStream’) ssc =StreamingContext(sc,2) #下面创建一个RDD队列流加了5次 rddQueue = [] for i in range(5): rddQueue += [ssc.saprkContext.parallelize([j for j in range(1,1001)],10)]#10是分区,每次生成一千个元素 time.sleep(1)#每隔1s筛一个RDD队列 Input = ssc.queueStream(rddQueue) mappedStream = input.map(lamda x:(x%10,1)) reducedStream =

hadoop3.2.1+hive3.1.2+scala2.12.10+spark3.0.0+zookeeper3.5.7+hbase2.0.6安装教程(亲测成功)

吃可爱长大的小学妹 提交于 2020-03-03 18:48:15
概述:学习hadoop大数据,安装hadoop生态圈的相关软件全过程 本文是根据网上的安装教程,结合小白自身安装经历,一步一步踩坑安装成功的。在安装过程中出现了诸多问题,如环境配置、版本不一致、权限等。折腾了两天之后,成功安装了hadoop/hive/scala/spark/zookeeper/hbase,因此写此博客保存安装记录,以便后续再安装更熟练,也分享给大家安装经历。本文适合完全没有安装过hadoop及其相关组件的用户,高手请忽略。我们开始吧! 准备 安装环境: Windows10+VMWare15(ubuntu18.04) hadoop相关组件各版本: hadoop3.2.1,hive3.1.2,scala2.12.10,spark3.0.0,zookeeper3.5.7,hbase2.0.6 安装包地址: 用国内镜像源,推荐一个速度快的,清华镜像 https://mirrors.tuna.tsinghua.edu.cn/apache 注意:hadoop3.2.1,hive3.1.2,spark3.0.0,zookeeper3.5.7可以在清华镜像网中下载,而没有hbase2.0.6这个版本(下载地址 https://archive.apache.org/dist/hbase/2.0.6/ ) scala下载地址: https://www.scala-lang.org

spark操作geoip的domain数据库

本小妞迷上赌 提交于 2020-03-03 09:42:15
val ipv4 = sc.textFile("hdfs://hbase11:9000/sparkTsData/GeoIP2-Domain-Blocks-IPv4.csv").map(_.split(",")).map(p=> (p(1),p(0))) val ipv6 = sc.textFile("hdfs://hbase11:9000/sparkTsData/GeoIP2-Domain-Blocks-IPv6.csv").map(_.split(",")).map(p=> (p(1),p(0))) val ip = ipv4 union ipv6 ip.saveAsTextFile("hdfs://hbase11:9000/sparkTsData/combineIp") val ipSorted = ip.countByKey() val ipSortedRdd = sc.parallelize(ipSorted.toList) ipSortedRdd.collect ipSortedRdd.filter(p=> p._2.toLong > 1).count val ipSortedRddDup = ipSortedRdd.filter(p=> p._2.toLong > 1) 来源: https://www.cnblogs.com/mayidudu/p/5761479

Spark之RDD

允我心安 提交于 2020-03-02 22:58:43
一、什么是RDD RDD(Resilient Distributed Dataset)叫做 弹性分布式数据集 , 是Spark中最基本的数据抽象 ,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。 1.1 RDD属性 (1)Partition 即数据集的基本组成单位。对于RDD来说,每个分片都会被一个计算任务处理,并决定并行计算的粒度。用户可以在创建RDD时指定RDD的分片个数,如果没有指定,那么就会采用默认值。默认值就是程序所分配到的集群的CPU Core的总数目。 (2)一个计算每个分区的函数。 Spark中RDD的计算是以分片为单位的,每个RDD都会实现compute函数以达到这个目的。compute函数会对迭代器进行复合,不需要保存每次计算的结果。 (3)RDD之间的依赖关系。 RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系。在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。 (4)一个Partitioner,即RDD的分片函数。控制分区数和分区策略 当前Spark中实现了两种类型的分片函数

spark RDD 详解

扶醉桌前 提交于 2020-03-02 22:24:26
概念 RDD具有以下一些特点: 创建:只能通过转换( transformation,如map/filter/groupBy/join等,区别于动作action)从两种数据源中创建RDD:1)稳定存储中的数据;2)其他RDD。 只读:状态不可变,不能修改 分区:支持使RDD中的元素根据那个key来分区( partitioning),保存到多个结点上。还原时只会重新计算丢失分区的数据,而不会影响整个系统。 路径:在RDD中叫世族或血统( lineage),即RDD有充足的信息关于它是如何从其他RDD产生而来的。 持久化:支持将会·被重用的RDD缓存(如in-memory或溢出到磁盘) 延迟计算:像DryadLINQ一样,Spark也会延迟计算RDD,使其能够将转换管道化(pipeline transformation) 操作:丰富的动作( action),count/reduce/collect/save等。 关于转换(transformation)与动作(action)的区别,前者会生成新的RDD,而后者只是将RDD上某项操作的结果返回给程序,而不会生成新的RDD RDD底层实现原理 RDD是一个分布式数据集,顾名思义,其数据应该分部存储于多台机器上。事实上,每个RDD的数据都以Block的形式存储于多台机器上,下图是Spark的RDD存储架构图

流式大数据处理的三种框架:Storm,Spark和Samza

放肆的年华 提交于 2020-03-02 21:15:36
流式大数据处理的三种框架:Storm,Spark和Samza 2017-06-01 Spark技术日报 本文来自CSDN博客,ID「秋夜无霜」 原文:http://blog.csdn.net/shichen2010/article/details/72758300 许多分布式计算系统都可以实时或接近实时地处理大数据流。本文将对三种Apache框架分别进行简单介绍,然后尝试快速、高度概述其异同。 Apache Storm 在Storm中,先要设计一个用于实时计算的图状结构,我们称之为拓扑(topology)。这个拓扑将会被提交给集群,由集群中的主控节点(master node)分发代码,将任务分配给工作节点(worker node)执行。一个拓扑中包括spout和bolt两种角色,其中spout发送消息,负责将数据流以tuple元组的形式发送出去;而bolt则负责转换这些数据流,在bolt中可以完成计算、过滤等操作,bolt自身也可以随机将数据发送给其他bolt。由spout发射出的tuple是不可变数组,对应着固定的键值对。 Apache Spark Spark Streaming是核心Spark API的一个扩展,它并不会像Storm那样一次一个地处理数据流,而是在处理前按时间间隔预先将其切分为一段一段的批处理作业。Spark针对持续性数据流的抽象称为DStream