Apache Spark

spark 2.1.1安装

我只是一个虾纸丫 提交于 2020-02-26 02:06:09
spark 环境安装 spark的存储需要使用hdfs,所以这里先安装hadoop2.7,安装配置完成之后再安装spark 1. hadoop2.7安装 为了防止网速过慢,这里推荐一个网址 hadoop2.7.7 1.1 获取安装包 wget http://archive.apache.org/dist/hadoop/common/hadoop-2.7.5/hadoop-2.7.5.tar.gz 1.2 解压到自己想放的目录 tar -zxvf hadoop-2.7.7.tar.gz -C /export/servers/ 1.3 配置hadoop环境变量 export HADOOP_HOME=/export/servers/hadoop-2.7.7 export PATH=:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH 1.4 使配置生效 source /etc/profile 1.5 创建目录用于hadoop配置 mkdir /mnt/hadoop mkdir /mnt/hadoop/tmp mkdir /mnt/hadoop/var mkdir /mnt/hadoop/dfs mkdir /mnt/hadoop/dfs/name mkdir /mnt/hadoop/dfs/data 1.6 修改hadoop配置文件 1.6.1 core

scala 调 spark sql MySQL客户端代理对象

旧巷老猫 提交于 2020-02-25 23:15:13
import java.sql.{Connection, DriverManager, PreparedStatement, ResultSet} import org.apache.commons.pool2.impl.{DefaultPooledObject, GenericObjectPool, GenericObjectPoolConfig} import org.apache.commons.pool2.{BasePooledObjectFactory, PooledObject} import .business.tornado.event.esTokafka.model.EsExportRecord import test.config.Constans import test.util.PropertiesUtil // 创建用于处理MySQL查询结果的类的抽象接口 trait QueryCallback { def process(rs: ResultSet) } /** * MySQL客户端代理对象 * * @param jdbcUrl MySQL URL * @param jdbcUser MySQL 用户 * @param jdbcPassword MySQL 密码 * @param client 默认客户端实现 */ case class

大数据成神之路?那么你一定要看这里

送分小仙女□ 提交于 2020-02-25 20:40:28
今天介绍的这位好友是我们的群主【王知无】,从大数据到Java到Scala再到Python,他都略知一二。【文末有二维码】 2019年开始写大数据成神之路系列,包含Java基础、Haoop系列、Spark系列、Flink系列等等,目的是帮助那些大数据新手或者Java转行大数据的同学们快速掌握大数据知识。 2019年群主同学在公众号和Github更新了近200篇系列文章,还一对一的帮助了大概50名同学修改简历,简直是棒棒哒。其中有多名读者成功入职BAT等公司。 2020年他还打算在公众号更新【全套大数据面试题】,目的是帮助更多人学习进入大数据领域。 如果你也在学习大数据,学习Java,对算法感兴趣。那么赶紧看看他的 《大数据技术与架构,19年文章精选》 快点关注他的公众号吧! 你也可以加他好友,备注【交流】,让他拉你进大数据交流群,关注大数据成神之路! 声明:本号所有文章除特殊注明,都为原创,公众号读者拥有优先阅读权,未经作者本人允许不得转载,否则追究侵权责任。 关注我的公众号,后台回复【JAVAPDF】获取200页面试题! 5万人关注的大数据成神之路,不来了解一下吗? 5万人关注的大数据成神之路,真的不来了解一下吗? 5万人关注的大数据成神之路,确定真的不来了解一下吗? 欢迎您关注 《大数据成神之路》 来源: oschina 链接: https://my.oschina.net

spark 自定义partitioner分区 java版

拈花ヽ惹草 提交于 2020-01-10 10:42:46
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在遍历spark dataset的时候,通常会使用 forpartition 在每个分区内进行遍历,而在默认分区(由生成dataset时的分区决定)可能因数据分布原因导致datasetc处理时的数据倾斜,造成整个dataset处理缓慢,发挥不了spark多executor(jvm 进程)多partition(线程)的并行处理能力,因此,普遍的做法是在dataset遍历之前使用repartition进行重新分区,让数据按照指定的key进行分区,充分发挥spark的并行处理能力,例如: dataset.repartition(9,new Column("name")).foreachPartition(it -> { while (it.hasNext()) { Row row = it.next(); .... } }); 先看一下准备的原始数据集: 按照上面的代码,预想的结果应该是,相同名字在记录在同个partition(分区),不同名字在不同的partition,并且一个partition里面不会有不同名字的记录,而实际分区却是这样的 (查看分区分布情况的代码在之前一篇文章 spark sql 在mysql的应用实践 有说明,如果调用reparation时未指定分区数量9,则默认为200,使用 spark

Hive几个常见窗口函数分组控制

做~自己de王妃 提交于 2020-01-09 09:14:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 简介 常规的窗口函数当然没有什么好说的,非常简单,这里介绍一下分组的,重点是分组、排序之后的rows between用法。 关键是理解rows between中关键字含义: 关键字 含义 preceding 往前 following 往后 current row 当前行 unbounded 开始行 unbounded preceding 表示从前面的起点 unbounded following 表示到后面的终点 直接看有些抽象,下面看例子。 max select country,time,charge, max(charge) over (partition by country order by time) as normal, max(charge) over (partition by country order by time rows between unbounded preceding and current row) as unb_pre_cur, max(charge) over (partition by country order by time rows between 2 preceding and 1 following) as pre2_fol1, max(charge) over

布隆过滤器之Counting Bloom Filter

橙三吉。 提交于 2020-01-07 17:15:16
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Bloom Filter是一种空间效率很高的概率型数据结构,由位数组和一组哈希函数组成。特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在” 。总体规则是:位数组中存放的是:集合中每个元素的哈希转二进制后对应的值,对于新加入的元素根据其哈希值去判断是否已经存在于集合中。 结构 Bloom Filter使用 位数组 来实现过滤,初始状态下位数组每一位都为0,如下图所示: 假如此时有一个集合S = {x1, x2, … xn},Bloom Filter使用k个独立的hash函数,分别将集合中的每一个元素映射到{1,…,m}的范围。对于任何一个元素,被映射到的数字作为对应的位数组的索引,该位会被置为1。比如元素x1被hash函数映射到数字8,那么位数组的第8位就会被置为1。下图中集合S只有两个元素x和y,分别被3个hash函数进行映射,映射到的位置分别为(0,3,6)和(4,7,10),对应的位会被置为1: 现在假如要判断另一个元素是否是在此集合中,只需要 被这3个hash函数进行映射,查看对应的位置是否有0存在,如果有的话,表示此元素肯定不存在于这个集合,否则有可能存在 。下图所示就表示z肯定不在集合{x,y}中: 对有可能存在的解释 假设X进行三次hash后对应的bit位是(0,3,6)

Spark Streaming调优 kafka

随声附和 提交于 2019-12-30 14:13:18
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 当使用Spark Streaming的Direct方式接受Kafka数据时, 如果kafka中的数据过多, 会导致spark数据积压, 无法准时完成作业, 甚至OOM。 Spark的运行指标及调优的目标 共两个运行指标:调度延迟与执行延迟。 调优的目标是在SparkStreaming设定的批次时间间隔内, spark能够完整处理完一个批次, 而不会出现无法准时完成作业, 数据堆压等问题。 PS: 要提升数据处理的吞吐量, 就提升kafka的分区数 限制Kafka的最大流量 配置项 spark.streaming.kafka.maxRatePerPartition , 设置了每秒钟从每个分区中所获得的数据条数的最大值, 每个批次处理的数据条数 = 批次时间 * 分区数 * N 背压机制(back pressure) 弹性地调整Kafka的流量 在上一节中的配置项难以调控, 具体的值不易设置, 可以使用back pressure机制来动态地调整从kafka获得的数据量。 back pressure机制会根据上一批次的运行情况来动态调整获取的数据量。 打开back pressure: 设置 spark.streaming.backpressure.enabled 为 true 二者结合来调控kafka的流量

sparkCore源码解析之RangePartitioner源码[具体流程见上篇]

若如初见. 提交于 2019-12-29 17:50:40
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>    分区过程概览 RangePartitioner分区执行原理: 计算总体的数据抽样大小sampleSize,计算规则是:至少每个分区抽取20个数据或者最多1M的数据量。 根据sampleSize和分区数量计算每个分区的数据抽样样本数量最大值sampleSizePrePartition 根据以上两个值进行水塘抽样,返回RDD的总数据量,分区ID和每个分区的采样数据。 计算出数据量较大的分区通过RDD.sample进行重新抽样。 通过抽样数组 candidates: ArrayBuffer[(K, wiegth)]计算出分区边界的数组BoundsArray 在取数据时,如果分区数小于128则直接获取,如果大于128则通过二分法,获取当前Key属于那个区间,返回对应的BoundsArray下标即为partitionsID RangePartitioner class RangePartitioner(partitions,rdd) { // 1. 计算样本大小 val sampleSize = math.min(20.0 * partitions, 1e6) // 2. 计算样本最大值 val sampleSizePerPartition = math.ceil(3.0 * sampleSize / rdd

sparkCore-RDD详解

自作多情 提交于 2019-12-29 17:44:35
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1.1 什么是RDD 1.1.1 产生背景 当初设计RDD主要是为了解决三个问题: Fast :Spark之前的Hadoop用的是MapReduce的编程模型,没有很好的利用分布式内存系统,中间结果都需要保存到external disk,运行效率很低。RDD模型是in-memory computing的,中间结果不需要被物化(materialized),它的 persistence 机制,可以保存中间结果重复使用,对需要迭代运算的机器学习应用和交互式数据挖掘应用,加速显著。Spark快还有一个原因是开头提到过的 Delay Scheduling 机制,它得益于RDD的Dependency设计。 General: MapReduce 编程模型只能提供有限的运算种类(Map和Reduce),RDD希望支持更广泛更多样的operators(map,flatMap,filter等等),然后用户可以任意地组合他们。 The ability of RDDs to accommodate computing needs that were previously met only by introducing new frameworks is, we believe, the most credible evidence

sparkCore源码解析之RangePartitioner

∥☆過路亽.° 提交于 2019-12-29 17:44:25
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> HashPartitioner分区可能导致每个分区中数据量的不均匀。而RangePartitioner分区则尽量保证每个分区中数据量的均匀,将一定范围内的数映射到某一个分区内。分区与分区之间数据是有序的,但分区内的元素是不能保证顺序的。   RangePartitioner分区执行原理: 计算总体的数据抽样大小sampleSize,计算规则是:至少每个分区抽取20个数据或者最多1M的数据量。 根据sampleSize和分区数量计算每个分区的数据抽样样本数量最大值sampleSizePrePartition 根据以上两个值进行水塘抽样,返回RDD的总数据量,分区ID和每个分区的采样数据。 计算出数据量较大的分区通过RDD.sample进行重新抽样。 通过抽样数组 candidates: ArrayBuffer[(K, wiegth)]计算出分区边界的数组BoundsArray 在取数据时,如果分区数小于128则直接获取,如果大于128则通过二分法,获取当前Key属于那个区间,返回对应的BoundsArray下标即为partitionsID 1. 获取区间数组 1.1. 给定样本总数 给定总的数据抽样大小,最多1M的数据量(10^6),最少20倍的RDD分区数量,也就是每个RDD分区至少抽取20条数据 class