- 博客(217)
- 收藏
- 关注
原创 字节跳动春招开始拉,欢迎大家积极投递。
字节跳动校招内推码: 99JUJMF投递链接: https://jobs.toutiao.com/s/eJFqujF
2021-02-26 11:42:46
545
原创 Spark 数据倾斜
一、Spark 数据倾斜介绍1.1 数据倾斜介绍Spark 中的数据倾斜问题主要指 shuffle 过程中出现的数据倾斜问题,是由于不同的 key 对应的数据量不同导致的不同 task 所处理的数据量不同的问题。例如,reduce 点一共要处理 100 万条数据,第一个和第二个 task 分别被分配到了 1 万条数据,计算 5 分钟内完成,第三个 task 分配到了 98 万数据,此时第三个 task 可能需要 10 个小时完成,这使得整个 Spark 作业需要 10 个小时才能运行完成,这就是数据倾
2020-09-15 00:14:52
625
原创 Spark 调优
一、常规性能调优1.1 最优资源配置Spark 性能调优的第一步,就是为任务分配更多的资源,在一定范围内,增加资源的分配与性能的提升是成正比的,实现了最优的资源配置,在此基础上再考虑进行后面论述的性能调优策略。资源的分配在使用脚本提交 Spark 任务时进行指定,标准的 Spark 任务提交脚本如下所示:bin/spark-submit \--class com.atguigu.spark.Analysis \--master yarn--deploy-mode cluster--num-e
2020-09-14 01:29:42
1506
原创 Spark 内存管理
一、堆内和堆外内存规划作为一个 JVM 进程,Executor 的内存管理建立 JVM 的内存管理之上,Spark 对 JVM 的堆内(On-heap)空间进行了更为详细的分配,以充分利用内存。同时,Spark 引入了堆外(Off-heap)内存,使之可以直接在工作节点的系统内存中开辟空间,进一步优化了内存的使用。堆内内存受到 JVM 统一管理,堆外内存是直接向操作系统进行内存堆申请和释放。1、堆内内存堆内内存的大小,由 Spark 应用程序启动时的 - executor-memory 或 spar
2020-09-07 20:29:04
430
原创 Spark Shuffle 解析
一、Spark Shuffle 介绍Shuffle 的中文解释为“洗牌操作”,可以理解成将集群中所有节点上的数据进行重新整合分类的过程。其思想来源于Hadoop 的 MapReduce,Shuffle 是连接 map 阶段和 reduce 阶段的桥梁。由于分布式计算中,每个阶段的各个计算节点只处理任务的一部分数据,若下一个阶段需要依赖前面阶段的所有计算结果时,则需要对前面阶段的所有计算结果进行重新整合和分类,这就需要经历 Shuffle 过程。在 Spark 中,RDD 之间的关系包含窄依赖和宽依赖,其
2020-09-05 21:21:43
375
原创 Spark 中任务调度机制
一、Spark 任务调度机制概述在生产环境下,Spark 集群的部署方式一般为 YARN-Cluster 模式,下面内核分析中默认集群的部署方式为 YARN-Cluster 模式。Driver 线程主要是初始化 SparkContext 对象,准备运行所需的上下文,然后一方面保持与 ApplicationMaster 的 RPC 连接,通过 ApplicationMaster 申请资源,另一方面根据用户业务逻辑开始调度任务,将任务下发到已有的空闲 Executor 上。当 ResourceManage
2020-09-04 23:19:39
1716
原创 Spark 中通讯架构
一、Spark 通信架构介绍Spark 中通信框架的发展:1、Spark 早期版本中采用 Akka 作为内部通信部件。2、Spark 1.3 中引入 Netty 通信框架,为了解决 Shuffle 的大数据传输问题使用。3、Spark 1.6 中 Akka 和 Netty 可以配置使用,Netty 完全实现了 Akka 在 Spark 中的功能。4、Spark 2 系列中,不再使用 Akka,使用 Netty。二、Spark 通讯架构解析架构图为:1、RpcEndpointRPC 通信终
2020-09-02 15:07:39
331
原创 SparkStreaming 介绍及 wordcount 案例
一、介绍1、Spark Streaming 是什么?Spark Streaming 用于流式数据的处理。Spark Streaming 支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ 和简单的 TCP 套接字等等。数据输入后可以用 Spark 进行运算,而结果也能保存在很多地方,如 HDFS,数据库等。2、DStream和 Spark 基于 RDD 的概念很相似,Spark Streaming 使用离散化流(discretized stream)作为抽象表示,叫作
2020-08-16 10:47:34
497
原创 SparkSQL 基础编程
一、介绍Spark Core 中,如果想要执行应用程序,需要首先构建上下文环境对象 SparkContext,Spark SQL 其实可以理解为对Spark Core 的一种封装,不仅仅在模型上进行了封装,上下文环境对象也进行了封装。在老的版本中,SparkSQL 提供两种 SQL 查询起始点:一个叫 SQLContext,用于 Spark 自己提供的 SQL 查询;一个叫HiveContext,用于连接 Hive 的查询。SparkSession 是 Spark 最新的 SQL 查询起始点,实质上是
2020-08-12 22:27:40
588
原创 Spark 中的累加器及广播变量
一、累加器1、原理累加器用来把 Executor 端变量信息聚合到 Driver 端。在 Driver 程序中定义的变量,在 Executor 端的每个 Task 都会得到这个变量的一份新的副本,每个 task 更新这些副本的值后,传回 Driver 端进行 merge。2、系统累加器package spark.core.accumulatorimport org.apache.spark.{SparkConf, SparkContext}/** * 系统自带累加器 */object
2020-08-12 09:27:43
207
原创 Spark 中 RDD 持久化
1、RDD Cache 缓存1、介绍RDD 通过 Cache 或者 Persist 方法将前面的计算结果缓存,默认情况下会把数据以序列化的形式缓存在 JVM 的堆内存中。但是并不是这两个方法被调用时立即缓存,而是触发后面的 action 算子时,该 RDD 将会被缓存在计算节点的内存中,并供后面重用。2、代码package spark.core.lastingimport org.apache.spark.{SparkConf, SparkContext}import org.apache.s
2020-08-12 00:19:08
190
原创 Spark 中 RDD 的依赖关系
一、RDD 血缘关系RDD 只支持粗粒度转换,即在大量记录上执行的单个操作。将创建 RDD 的一系列 Lineage(血统)记录下来,以便恢复丢失的分区。RDD 的 Lineage 会记录 RDD 的元数据信息和转换行为,当该 RDD 的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。通过 rdd.toDebugString 方法可以看到 RDD 的血缘关系:package spark.core.dependentimport org.apache.spark.{SparkC
2020-08-11 11:41:35
354
原创 Spark 中 RDD 序列化
一、闭包检测从计算的角度,算子以外的代码都是在 Driver 端执行,算子里面的代码都是在 Executor 端执行。那么在 scala 的函数式编程中,就会导致算子内经常会用到算子外的数据,这样就形成了闭包的效果,如果使用的算子外的数据无法序列化,就意味着无法传值给 Executor 端执行,就会发生错误,所以需要在执行任务计算前,检测闭包内的对象是否可以进行序列化,这个操作我们称之为闭包检测。二、序列化方法与属性driver 侧的代码中的运算数据需要 extends Serializable,才可
2020-08-11 10:06:00
1074
原创 Spark 算子使用案例 -- 统计广告点击量 Top3
1、数据准备数据格式:时间戳,省份,城市,用户,广告,中间字段使用空格分隔。数据的粒度是用户,每一条数据是用户在何时何地点击了广告。1516609143867 6 7 64 161516609143869 9 4 75 181516609143869 1 7 87 121516609143869 2 8 92 91516609143869 6 7 84 241516609143869 1 8 95 51516609143869 8 1 90 291516609143869 3 3 36
2020-08-11 09:09:26
1966
原创 Spark 中的算子
一、转换算子1.1 map 算子1、算子签名def map[U: ClassTag](f: T => U): RDD[U]2、算子说明将处理的数据逐条进行映射转换,这里的转换可以是类型的转换,也可以是值的转换。3、代码演示package spark.core.conversion_operator.mapimport org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext}/** *
2020-08-10 21:24:35
591
原创 scala 中的变量
一、变量1.1 scala 变量使用步骤1、声明/定义变量 (scala 要求变量声明时初始化)2、使用package variable/** * scala 变量输出的三种方式 */object Point2 { def main(args: Array[String]): Unit = { // 1、使用 + var name: String = "tom" var sal: Double = 1.2 println ("hello" + sal +
2020-07-20 23:32:57
609
原创 Spark 中 RDD 的创建
在 Spark 中创建 RDD 的创建方式可以分为四种:1、从集合(内存)中创建 RDDpackage spark.core.rddimport org.apache.spark.{SparkConf, SparkContext}/** * 从集合(内存)中创建 RDD * 1、parallelize * 2、makeRDD * 从底层代码实现来讲,makeRDD 方法其实就是 parallelize 方法。 */object Spark_RDD_Memory { def mai
2020-07-12 22:07:33
733
原创 Spark 中 RDD 介绍
一、RDD 为何会产生?Hadoop 的 MapReduce 是一种基于数据集的工作模式,面向数据,这种工作模式一般是从存储上加载数据集,然后操作数据集,最后写入物理存储设备。数据更多面临的是一次性处理。MR 的这种方式在两个方面的效率很低。第一种是迭代式的算法,比如机器学习中 ALS、凸优化梯度下降等。这些都需要基于数据集或者数据集的衍生数据反复查询反复操作,MR 这种模式不太合适,即使多 MR 串行处理,性能和时间也是一个问题,数据的共享依赖于磁盘,读取磁盘会耗费大量时间。第二种就是 olap 场景
2020-07-11 22:43:53
635
原创 spark 架构与核心概念
1、架构图2、概念介绍基本概念:Application:用户编写的 Spark 应用程序。Driver:Spark 中的 Driver 即运行上述 Application 的 main 函数并创建 SparkContext,创建 SparkContext 的目的是为了准备 Spark 应用程序的运行环境,在 Spark 中有 SparkContext 负责与 ClusterManager 通信,进行资源申请、任务的分配和监控等,当 Executor 部分运行完毕后,Driver 同时负责将 Spa
2020-07-09 00:04:56
447
原创 hive 中 hql 题
问题 1:(1) 需求找出所有科目成绩都大于某一学科平均成绩的学生。(2) 建表drop table if exists score;create table score( uid string, subject_id string, score int) row format delimited fields terminated by '\t';(3) 数据1001 01 901001 02 901001 03 901002 01 851
2020-05-17 21:53:03
762
原创 LeetCode算法 -- LRU缓存机制(第11题)
一、题目描述二、分析题目2.1 LRU 算法介绍计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新内容腾位置。但问题是,删除哪些内容呢?我们肯定希望删掉哪些没什么用的缓存,而把有用的数据继续留在缓存里,方便之后继续使用。那么,什么样的数据,我们判定为有用的的数据呢?LRU 缓存淘汰算法就是一种常用策略。LRU 的全称是 Least Recently Used,也就是说我们认为最近使用过的数据应该是有用的,很久都没用过的数据应该是无用的,内存满了就优先删那些很久没用过的数据。2.2 LRU
2020-05-17 12:17:13
495
原创 二叉树的前中后遍历(递归和非递归)
一、三种遍历的思想前序遍历:根结点 -> 左子树 -> 右子树中序遍历:左子树 -> 根结点 -> 右子树后序遍历:左子树 -> 右子树 -> 根结点以下面这棵二叉树,三种遍历的结果分别为:前序遍历:1 2 4 5 7 8 3 6中序遍历:4 2 7 5 8 1 3 6后序遍历:4 7 8 5 2 6 3 1二、前序遍历2.1 递归依据上文提到的遍历思路:根结点 -> 左子树 -> 右子树。 // 前序遍历(递归) pub
2020-05-13 14:47:33
314
原创 java 多线程面试题
1、https://blog.youkuaiyun.com/lixiaoxiong55/article/details/81586291?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.none
2020-05-09 21:29:07
222
原创 LeetCode算法 -- 买卖股票的最佳时机(第10题)
一、题目描述二、解法package question3;/** * @description: 暴力法求解 * @author: hyr * @time: 2020/5/9 9:08 */public class Solution { public static void main(String[] args) { int prices[] = {7, 1, 5, 3, 6, 4}; System.out.println("最大利润为:" + m
2020-05-09 20:18:08
284
原创 LeetCode算法 -- 合并两个有序数组(第9题)
一、题目介绍二、数组拷贝解法2.1 解法介绍因为数组 1 的总长度是大于等于 m+n 的,所以把数组 2 的元素都拷贝到数组1中。数组 1 中的元素有 m 个,所以数组 2 中的第一个元素拷贝到数组 1 中对应的下标就是m,第二个元素拷贝过来对应的下标是 m+1,一直到 m+n-1 拷贝完后,将数组 1 整体排序一遍就搞定了,这里用了 Arrays.sort()内部为快速排序,时间复杂度为 O((n+m) * log(n+m)),空间复杂度 O(1)。这种方法没有利用两个数组本身已经有序这一点。
2020-05-09 09:05:56
366
原创 LeetCode算法 -- 最大子序和(第8题)
一、题目说明二、暴力法求解2.1 暴力法思路暴力法就是将数组中的所有子数组都找出来,然后对每个子数组内的元素进行求和,选取和最大的子数组,它的和就是最大子序和。2.2 java 代码 /** * 暴力法,枚举数组的所有子串进行求和 */ public int maxSubArray(int nums[]) { int length = ...
2020-05-07 21:51:45
297
原创 电信项目总结
一、项目整体架构二、数据生产模块介绍1、数据字段2、数据产生方法通过编写 java 代码,模拟生产数据。然后将代码打成 jar 包,放在服务器上,运行 jar 包,将数据存储在文件中。三、数据采集模块介绍1、配置 kafka,启动 zookeeper 和 kafka 集群。2、创建 kafka 主题。3、启动 kafka 控制台消费者(此消费者只用于测试使用)。4、配置 fl...
2020-05-05 21:08:46
1634
原创 电商数仓项目总结
一、项目整体架构二、数据说明2.1 用户行为数据1、启动日志数据是一个单 json 数据2、事件日志数据组成:时间戳、公共字段、事件日志事件:(1) 商品列表(2) 商品点击(3) 商品详情(4) 广告(5) 消息通知(6) 用户后台活跃(7) 评论(8) 收藏(9) 点赞(10) 错误日志2.2 业务数据1、订单表2、订单详情表3、sku 商品表4、...
2020-05-05 11:05:09
6509
5
原创 电商数仓(ads 层)
一、ads 层介绍对电商系统各大主题指标分别进行分析,本项目中分析了四大主题·:设备主题、会员主题、商品主题、营销主题。二、业务术语1、用户用户以设备为判断标准,在移动统计中,每个独立设备认为是一个独立用户。Android 系统根据 IMEI 号,IOS 系统根据 OpenUDID 来标识一个独立用户,每部手机一个用户。2、新增用户首次联网使用应用的用户。如果一个用户首次打开某 APP...
2020-05-05 10:56:44
8962
1
原创 电商数仓(dwt 层)
一、dwt 层介绍dws 层统计的是每日数据,dws 层数据服务 dwt 层数据,dwt 层统计的是不同主题的累积数据。二、数据表2.1 设备主题宽表 dwt_uv_topic1、数据来源dwt_uv_topic、dws_uv_detail_daycount。2、建表drop table if exists dwt_uv_topic; create external table d...
2020-05-03 14:39:07
6937
原创 电商数仓(dws 层)
一、dws 层介绍统计各个主题对象的当天行为,服务于 DWT 层的主题宽表,以及一些业务明细数据,应对特殊需求(例如,购买行为,统计商品复购率)。二、dws 层用户行为数据2.1 每日设备行为 dws_uv_detail_daycount1、介绍每日设备行为,主要按照设备 id 统计。2、数据来源dwd_start_log3、建表drop table if exists dws...
2020-05-03 11:11:56
6018
原创 电商数仓(dwd 层)
一、dwd 层介绍1、对用户行为数据解析。2、对核心数据进行判空过滤。3、对业务数据采用维度模型重新建模,即维度退化。二、dwd 层用户行为数据2.1 用户行为启动表 dwd_start_log1、数据来源ods_start_log -> dwd_start_log2、表的创建drop table if exists dwd_start_log; CREATE EXTER...
2020-05-01 22:04:13
8304
1
原创 电商数仓(ods 层)
一、ods 层介绍1、保持数据原貌不做任何修改,起到备份数据的作用。2、数据采用 LZO 压缩,减少磁盘存储空间。100G 数据可以压缩到 10G 以内。3、创建分区表,防止后续的全表扫描,在企业开发中大量使用分区表。4、创建外部表,在企业开发中,除了自己用的临时表,创建内部表外,绝大多数场景都是创建外部表。二、用户行为数据1、启动日志表 ods_start_log// 创建启动日志...
2020-04-30 20:20:03
5169
1
原创 二叉树的广度优先遍历和深度优先遍历
一、二叉树介绍二叉树,顾名思义,就是一种树结构。树的每个结点最多有两个子节点,通常称为左节点和右节点,下图为示例二叉树。二、深度优先遍历深度优先遍历(Depth First Search),简称 DFS,其原则是,沿着一条路径一直找到最深的那个节点,当没有子节点的时候,返回上一级节点,寻找其另外的子节点,继续向下遍历,没有就向上返回一级,直到所有的节点都被遍历到,每个节点只能访问一次。上...
2020-04-20 10:03:45
1919
原创 大数据开发笔试题(二)
1、关于 java 的异常处理机制,以下说法正确的是:AA、当某个线程抛出 OutofMemoryError 时,其他线程可能不受影响B、当大量抛出 RuntimeException,不会影响系统的吞吐量C、java.lang.Exception 是 java.lang.Error 的父类D、finally 块代码一定会被执行解析:1、在程序内存溢出之后,溢出的内存的线程所占的内存会被...
2020-04-12 11:20:30
3902
原创 排序算法 -- 快速排序(QuickSort)
一、快排的介绍https://blog.youkuaiyun.com/weixin_40804043/article/details/86516464https://blog.youkuaiyun.com/vayne_xiao/article/details/53508973?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFro...
2020-04-08 19:46:17
174
原创 sql中的行列转换
文章一:https://blog.youkuaiyun.com/weixin_30788239/article/details/97526079?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog...
2020-04-08 09:45:21
276
原创 kafka面试题
1、Kafka 架构2、Kafka 压力测试Kafka 官方自带压力测试脚本(kafka-consumer-perf-test.sh、kafka-producer-perf-test.sh)。Kafka 压测时,可以查看到哪个地方出现了瓶颈(CPU,内存,网络 IO)。一般都是网络 IO 达到瓶颈。3、Kafka 机器数量Kafka 机器数量 = 2 * (峰值生产速度 * 副本数/10...
2020-04-07 10:07:31
263
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人