自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(217)
  • 收藏
  • 关注

原创 字节跳动春招开始拉,欢迎大家积极投递。

字节跳动校招内推码: 99JUJMF投递链接: https://jobs.toutiao.com/s/eJFqujF

2021-02-26 11:42:46 489

原创 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 515

原创 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 1379

原创 Spark 内存管理

一、堆内和堆外内存规划作为一个 JVM 进程,Executor 的内存管理建立 JVM 的内存管理之上,Spark 对 JVM 的堆内(On-heap)空间进行了更为详细的分配,以充分利用内存。同时,Spark 引入了堆外(Off-heap)内存,使之可以直接在工作节点的系统内存中开辟空间,进一步优化了内存的使用。堆内内存受到 JVM 统一管理,堆外内存是直接向操作系统进行内存堆申请和释放。1、堆内内存堆内内存的大小,由 Spark 应用程序启动时的 - executor-memory 或 spar

2020-09-07 20:29:04 355

原创 Spark Shuffle 解析

一、Spark Shuffle 介绍Shuffle 的中文解释为“洗牌操作”,可以理解成将集群中所有节点上的数据进行重新整合分类的过程。其思想来源于Hadoop 的 MapReduce,Shuffle 是连接 map 阶段和 reduce 阶段的桥梁。由于分布式计算中,每个阶段的各个计算节点只处理任务的一部分数据,若下一个阶段需要依赖前面阶段的所有计算结果时,则需要对前面阶段的所有计算结果进行重新整合和分类,这就需要经历 Shuffle 过程。在 Spark 中,RDD 之间的关系包含窄依赖和宽依赖,其

2020-09-05 21:21:43 304

原创 Spark 中任务调度机制

一、Spark 任务调度机制概述在生产环境下,Spark 集群的部署方式一般为 YARN-Cluster 模式,下面内核分析中默认集群的部署方式为 YARN-Cluster 模式。Driver 线程主要是初始化 SparkContext 对象,准备运行所需的上下文,然后一方面保持与 ApplicationMaster 的 RPC 连接,通过 ApplicationMaster 申请资源,另一方面根据用户业务逻辑开始调度任务,将任务下发到已有的空闲 Executor 上。当 ResourceManage

2020-09-04 23:19:39 1519

原创 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 272

原创 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 421

原创 SparkSQL on Hive 环境配置

一、环境配置二、案例

2020-08-15 22:41:33 583

原创 SparkSQL 基础编程

一、介绍Spark Core 中,如果想要执行应用程序,需要首先构建上下文环境对象 SparkContext,Spark SQL 其实可以理解为对Spark Core 的一种封装,不仅仅在模型上进行了封装,上下文环境对象也进行了封装。在老的版本中,SparkSQL 提供两种 SQL 查询起始点:一个叫 SQLContext,用于 Spark 自己提供的 SQL 查询;一个叫HiveContext,用于连接 Hive 的查询。SparkSession 是 Spark 最新的 SQL 查询起始点,实质上是

2020-08-12 22:27:40 519

原创 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 174

原创 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 156

原创 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 305

原创 Spark 中 RDD 序列化

一、闭包检测从计算的角度,算子以外的代码都是在 Driver 端执行,算子里面的代码都是在 Executor 端执行。那么在 scala 的函数式编程中,就会导致算子内经常会用到算子外的数据,这样就形成了闭包的效果,如果使用的算子外的数据无法序列化,就意味着无法传值给 Executor 端执行,就会发生错误,所以需要在执行任务计算前,检测闭包内的对象是否可以进行序列化,这个操作我们称之为闭包检测。二、序列化方法与属性driver 侧的代码中的运算数据需要 extends Serializable,才可

2020-08-11 10:06:00 984

原创 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 1834

原创 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 527

原创 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 545

原创 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 648

原创 Spark 中 RDD 介绍

一、RDD 为何会产生?Hadoop 的 MapReduce 是一种基于数据集的工作模式,面向数据,这种工作模式一般是从存储上加载数据集,然后操作数据集,最后写入物理存储设备。数据更多面临的是一次性处理。MR 的这种方式在两个方面的效率很低。第一种是迭代式的算法,比如机器学习中 ALS、凸优化梯度下降等。这些都需要基于数据集或者数据集的衍生数据反复查询反复操作,MR 这种模式不太合适,即使多 MR 串行处理,性能和时间也是一个问题,数据的共享依赖于磁盘,读取磁盘会耗费大量时间。第二种就是 olap 场景

2020-07-11 22:43:53 567

原创 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 405

原创 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 632

原创 LeetCode算法 -- LRU缓存机制(第11题)

一、题目描述二、分析题目2.1 LRU 算法介绍计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新内容腾位置。但问题是,删除哪些内容呢?我们肯定希望删掉哪些没什么用的缓存,而把有用的数据继续留在缓存里,方便之后继续使用。那么,什么样的数据,我们判定为有用的的数据呢?LRU 缓存淘汰算法就是一种常用策略。LRU 的全称是 Least Recently Used,也就是说我们认为最近使用过的数据应该是有用的,很久都没用过的数据应该是无用的,内存满了就优先删那些很久没用过的数据。2.2 LRU

2020-05-17 12:17:13 419

原创 二叉树的前中后遍历(递归和非递归)

一、三种遍历的思想前序遍历:根结点 -> 左子树 -> 右子树中序遍历:左子树 -> 根结点 -> 右子树后序遍历:左子树 -> 右子树 -> 根结点以下面这棵二叉树,三种遍历的结果分别为:前序遍历: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 285

原创 java 多线程面试题

1、https://blog.csdn.net/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 196

原创 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 237

原创 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 308

原创 LeetCode算法 -- 最大子序和(第8题)

一、题目说明二、暴力法求解2.1 暴力法思路暴力法就是将数组中的所有子数组都找出来,然后对每个子数组内的元素进行求和,选取和最大的子数组,它的和就是最大子序和。2.2 java 代码 /** * 暴力法,枚举数组的所有子串进行求和 */ public int maxSubArray(int nums[]) { int length = ...

2020-05-07 21:51:45 247

原创 电信项目总结

一、项目整体架构二、数据生产模块介绍1、数据字段2、数据产生方法通过编写 java 代码,模拟生产数据。然后将代码打成 jar 包,放在服务器上,运行 jar 包,将数据存储在文件中。三、数据采集模块介绍1、配置 kafka,启动 zookeeper 和 kafka 集群。2、创建 kafka 主题。3、启动 kafka 控制台消费者(此消费者只用于测试使用)。4、配置 fl...

2020-05-05 21:08:46 1553

原创 电商数仓项目总结

一、项目整体架构二、数据说明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 6240 5

原创 电商数仓(ads 层)

一、ads 层介绍对电商系统各大主题指标分别进行分析,本项目中分析了四大主题·:设备主题、会员主题、商品主题、营销主题。二、业务术语1、用户用户以设备为判断标准,在移动统计中,每个独立设备认为是一个独立用户。Android 系统根据 IMEI 号,IOS 系统根据 OpenUDID 来标识一个独立用户,每部手机一个用户。2、新增用户首次联网使用应用的用户。如果一个用户首次打开某 APP...

2020-05-05 10:56:44 8511 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 6746

原创 电商数仓(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 5737

原创 电商数仓(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 7789 1

原创 电商数仓(ods 层)

一、ods 层介绍1、保持数据原貌不做任何修改,起到备份数据的作用。2、数据采用 LZO 压缩,减少磁盘存储空间。100G 数据可以压缩到 10G 以内。3、创建分区表,防止后续的全表扫描,在企业开发中大量使用分区表。4、创建外部表,在企业开发中,除了自己用的临时表,创建内部表外,绝大多数场景都是创建外部表。二、用户行为数据1、启动日志表 ods_start_log// 创建启动日志...

2020-04-30 20:20:03 4886 1

原创 二叉树的广度优先遍历和深度优先遍历

一、二叉树介绍二叉树,顾名思义,就是一种树结构。树的每个结点最多有两个子节点,通常称为左节点和右节点,下图为示例二叉树。二、深度优先遍历深度优先遍历(Depth First Search),简称 DFS,其原则是,沿着一条路径一直找到最深的那个节点,当没有子节点的时候,返回上一级节点,寻找其另外的子节点,继续向下遍历,没有就向上返回一级,直到所有的节点都被遍历到,每个节点只能访问一次。上...

2020-04-20 10:03:45 1676

原创 大数据开发笔试题(二)

1、关于 java 的异常处理机制,以下说法正确的是:AA、当某个线程抛出 OutofMemoryError 时,其他线程可能不受影响B、当大量抛出 RuntimeException,不会影响系统的吞吐量C、java.lang.Exception 是 java.lang.Error 的父类D、finally 块代码一定会被执行解析:1、在程序内存溢出之后,溢出的内存的线程所占的内存会被...

2020-04-12 11:20:30 3781

原创 排序算法 -- 快速排序(QuickSort)

一、快排的介绍https://blog.csdn.net/weixin_40804043/article/details/86516464https://blog.csdn.net/vayne_xiao/article/details/53508973?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFro...

2020-04-08 19:46:17 144

原创 sql中的行列转换

文章一:https://blog.csdn.net/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 233

原创 sqoop 面试题

2020-04-07 10:14:05 323

原创 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 222

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除