框架搭建_配置文件工具类思路介绍|学习笔记

简介: 快速学习框架搭建_配置文件工具类思路介绍

开发者学堂课程【2020版大数据实战项目之DMP广告系统(第四阶段)框架搭建_配置文件工具类思路介绍】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/679/detail/11800


框架搭建_配置文件工具类思路介绍


内容介绍:

一、课前介绍

二、创建配置

三、配置生成表

四、工具的设计思路


一、课前介绍

介绍过 config 的加载。接下来正式使用 config ,使用方式比较难,通过这一小节可以知道,在真正项目开发的时候,该怎么去加载配置文件,以及配置文件的工具类。优化代码应该写成什么样。第一步,创建一个配置文件,叫做 spark ,配置文件是为 spark 准备的,放一些创建 spark 所使用的参数,这是第一步。第二步我们简单讲解一下参数大概是什么内容。第三步导入配置,读取配置的工具,刚才已经导入过,所以这一步,就不再赘述。第四步,配置文件的工具,就是读取配置文件工具的设计思路。第五步,创建配置文件工具类,这个视频会比较长,而且东西会相当的难,这段代码其实是很有实力的,所以,按部就班的去完成内容。


二、创建配置

配置文件叫做 spark.conf ,提前把这些内容拷贝一下。进入到 idea 当中,在 resources 下创建一个新的 file ,叫做 spark.conf 。把刚才复制的内容放进来,这时配置文件就已经搞定了。这里面都是为 spark 准备的一些参数,这些名字也就对应了 spark 的参数名,这里很多参数,这些参数也没有时间一个一个去说,那么进入到笔记当中,大致看一下内容。


三、配置列成表

Spark.worker. Timeout 。是 master 和 worker 之间进行通信,有时 worker 可能会因为不可抗力的因素,比如说机器爆炸了,闪电刚好落下来砸中机器,机器跪了, worker 就没有办法继续提供服务。所以 master 要有一定的机制淘汰某些已经跪掉的 worker , master 和 worker 之间会有心跳包的保持, master 多长时间没有收到 worker 的心跳包,就认为 worker 已经失效了。是通过参数进行配置的。

spark.network. Timeout 。比 timeout 更大范围的 timeout ,也是超时时间,这个超时时间是 worker 跟 excute之间的通信,不同的 execute 之间的通信。不同的 block manager之间的通信,他们的网络通信时长,超时时间都由参数进行相应的控制。

Spark. Cores.max 。 spark 有可能把任务给部署到集群当中,集群会有一些管理工具,集群当中管理集群的机器, spark 能申请到多少个 cpu 核心,就是这个参数进行控制。

Spark. Task. Maxfailures 首先 spark 本身是支持弹性容错,就是说某一个 task 失败,不会把整个 job 都挡掉,所以 spark 会有能够容忍的最大的失败数,最大的失败数,其实就是 Task. Maxfailures , Maxfailures 设置的就是最大允许多少任务失败,如果超过这个数,那么 spark 就得把整个 job 给关掉。

Spark.speculation 就是推测执行的意思, hadoop 当中也支持推测执行,比如说有十个任务同时在运行,有一个 task 比别人都慢,这个时候就可能会再去跑一份 task ,哪个快,我就按照谁的结果。这个机制叫做推测执行。

Spark.drive.allowmutilplecontext 。后面是完全没有意义的。一般不要这样去做,只在必不可免的情况下,只在实在没有办法时,才设置这个参数,这个参数的意思是,是否允许多个 contacts ,默认情况下是不允许的,如果允许多个,那么这些 contact 也只有一个活动,所以没有意义。

Spark.serializer 。是需要画工具的意思。

Spark.buffer.pagesize 。这个参数比较重要,但是一般情况下不会设置它,它也比较难,在读取磁盘或者读取内存时,是按页读的,就是一页一页地读,这个东西就叫做 page 。为什么要有buffer.pagesize 是因为 spark 自己编写了一套管理内存的工具,是在什么时候加入的呢?在钨丝计划的时候,前面我也讲过,有一个钨丝计划,让 spark 可以使用对外内存,对外内存也叫做 unsafe 内存。大家要注意一般情况下不给普通开发者使用的,要自己去管理内存,它没有相应的垃圾回收机制,第一步就是一些参数。在真的用到的时候,还要再进行查询。


四、配置工具的设计思路

第三步是去导入 maven 还有 typesafe 的 config 。我们说一说配置工具的设计思路。去具体的写配置工具。首先要想一个问题,在设计一个工具的时候,应该做什么。一般情况下初学者,也包括刚工作的时候,假如说在设计一个新东西的时候,一定会犯一个错误,就是提笔就上。原因比较多方面,一方面可能是这些东西没有经验,所以不知道应该去规避哪些问题。还有一方面可能是着急。第一步有很多人会选择直接就写工具,其实第一步应该缓下来,让自己静下来去想一想,这个工具是干什么用的,你的需求是什么,一定要先想清楚这一件事。即使不能把整个流程设计好,把结构设计好,但一定要想清楚需求是什么。如果没有办法想清楚这一点,设计出来的东西是不会好的。那所有的初学者,包括一些工作了七八年的人在设计出来的东西还是不尽人意,就是因为没有想清楚这个东西要怎么用。

首先,就是为了去读取配置文件。要让一个工具类去读取配置文件,而不是在代码的某个地方自己去读取是因为我们要解耦,第一,是要解耦,第二,是要复用。使用 typesafe.config 这样的工具来加载配置文件。加载的配置文件在 sparksession 创建的时候使用。 看到都是 spark 的配置,既然已经明确了需求,那就实现这个需求大致有几种方式。

第一种方式,就是在配置文件当中有好多项,第一项,是Key ,是 val ,大概十项左右。像第一种做法,可以直接通过 config 一个一个去读,是比较自然的选择方式,但是不是特别好。还有一种配置方式加载的方式,可以直接通过隐式转换,为 spark station 设置配置。比如说在创建 sparksession 对象的时候,能调用 loud consider 的方法,为 spark station 加载。那么在代码里面所写的东西就很少。把这两个方式给大家总结一下。

首先第一种,创建 spark session 的时候,还是先明确需求,现在的需求就是创建提供工具类加载配置文件,最终目的是创建 spark session 对象的时候使用。接下来我们再去看一看两种方式。

方式一,可以在创建 sparksession 的时候使用这样的方式。

Sparksession.config(“...”,config get...

Config(“...”,config get...)

有几个参数,就要写几行这种没有用的代码。

还有一种方式,

Sparksession.loadconfig().getorcreate() 希望通过这个方法,直接把所有该加载的配置全都加载出来。那么就不需要多写一行代码,直接把所有的参数全都加载下,那大家觉得哪种方式好呢?有人说第一种,我不能说第一种不好,因为第一种足够简单,但是还要再挑战一下自我,写一点难的东西。所以工具类,就选择第二种方式。第二种方式相对比较难,大家要注意啊, Spark session ,本来没有 load config 这个方法,现在想编写一个 load config 方法,给 spark session 去使用,该怎么去编写。如何动态的为 spark session 类加一个方法叫做 load concent ,前面在 scala 部分学过一个知识点,叫演示转换。在演示转换的时候,可以把 spark session 转成其他的类,一个类当中只要有了 config 的方法,就可以了。这就是要做的功能,通过隐式转换来做,这个部分选择这样的方式原因很简单,scala 有很多自己独有的特性,这些特性非常好用,也是 scala 最核心的特性,其中有一个叫做隐式转换,任何其他的语言当中都没有的。大家要知道,或者有的是没有它的高级。 scala 的隐式转换真的特别厉害,所以我们要去了解它。

相关文章
|
存储 Kubernetes 数据安全/隐私保护
在kubernetes上部署consul集群
本教程将帮助你在kubernetes上部署一个拥有3个节点的consul集群 备注:consul教程见Consul; 预览 consul 集群的三个节点部署方式使用 StatefulSet consul集群成员之间使用TLS进行安全通信 TLS and encryption keys 预备知识 本教程利用了Kubernetes 1.
4774 0
|
网络协议 网络性能优化 开发者
Python网络编程基础(Socket编程)UDP Socket编程
【4月更文挑战第8天】Python网络编程中,UDP与TCP协议各有特点。TCP提供可靠连接,确保数据顺序与完整性,适合文件传输等;UDP则无连接,速度快,常用于实时音视频,牺牲了数据可靠性。Python的socket库支持两者,开发者可根据需求选择。
|
11月前
业务增量数据入仓以及增全量合并工作
增量数据入库与增量全合并工作
389 1
|
前端开发 JavaScript 网络架构
react对antd中Select组件二次封装
本文介绍了如何在React中对Ant Design(antd)的Select组件进行二次封装,包括创建MSelect组件、定义默认属性、渲染Select组件,并展示了如何使用Less进行样式定义和如何在项目中使用封装后的Select组件。
456 2
react对antd中Select组件二次封装
|
缓存 负载均衡 安全
正向代理和反向代理
本文详细介绍了代理和反向代理的概念及应用场景。代理作为一种中间人服务,可细分为正向代理与反向代理。前者位于客户端与网络间,有助于匿名浏览、访问控制、缓存加速及增强安全性;后者则位于网络与服务器间,主要用于负载均衡、缓存、安全性提升、SSL终止及内容过滤等。两者各有侧重,可根据具体需求选择使用。例如,Squid 是常用的正向代理框架,而 Nginx 则常用于反向代理。了解并合理运用两者,能有效提升网络性能与安全性。
678 4
|
安全 Java API
技术笔记:SpringBoot集成Swagger3.0(详细)
技术笔记:SpringBoot集成Swagger3.0(详细)
根据经纬度计算两点距离的方法
根据经纬度计算两点距离的方法
200 0
|
存储 数据采集 SQL
最强最全面的数仓建设规范指南 (二)
本文将全面讲解数仓建设规范,从数据模型规范,到数仓公共规范,数仓各层规范,最后到数仓命名规范,包括表命名,指标字段命名规范等!
2172 0
|
数据库 C# 算法
C#字符串长度
在ArcGIS属性表中,如果是Shape文件,其他字段名称长度不能超过10个字符(一个汉字算两个字条),如果是在数据库中的文件,其他字符名称长度就可超过10个字符。   在我的记忆中,中文字符应该算两个字符,实际在C#中,不管中文、英文、全角、半角,其他长度都是相同的。
1329 0
|
机器学习/深度学习 人工智能 算法
机器学习之PyTorch和Scikit-Learn第6章 学习模型评估和超参数调优的最佳实践Part 3
在前面的章节中,我们使用预测准确率来评估各机器学习模型,通常这是用于量化模型表现很有用的指标。但还有其他几个性能指标可以用于衡量模型的相关性,例如精确率、召回率、F1分数和马修斯相关系数(MCC)等。
537 0