一、本次分享内容
脱敏概述
业务流程
硬件环境
技术链路
实现:代码和脚本
总结:面试点
二、概述
三、脱敏功能实现中的异常情况
1. 合规审查
2. 安全
3. 脱敏算法
- 是否可逆:加密算法,散列算法
- 破解概率
- 脱敏后的值是否需要关联:长度
4. 客户体验:字段多,以什么方式设置脱敏规则
5. 数据量
- 存储格式
- 压缩格式
- 跑批调度时间
6. 如何在hdfs之间传输数据,开启kerberos、sentry、https是否有影响。中断了咋办,权限怎么解决。
7. 脱敏后的数据加载到hive表,修复分区,远程调用
8. Spark中调用linux脚本:异步
9. 如何监控程序的运行,日志
四、业务流程
1. 脱敏规则配置
2. 脱敏规则执行
五、环境介绍
1. 生产环境
{1} 大数据集群:
- 15台物理机,32核、320G内存
- 2台应用虚拟机,2台oracle虚拟机(16核,64G内存)
{2} AI模型跑批、测试集群:
- 5台物理机
- 1亿条数据、170个字段、脱敏18个字段、118G、25min
{3} Spark2.2.0,cdh5.16.2
{4} 均开启kerberos和sentry
2. 演示环境
- 大集群:4个虚拟机,开启kerberos、sentry
- 小集群:1个虚拟机
六、演示功能、看代码 + 脚本
七、技术链路
1. Kerberos
https://blog.csdn.net/qq_34224565/article/details/104193770
- 工作模型
- Kerberos有认证有效期:过了有效期,需要重新认证
2. distcp
基于mapreduce的hdfs数据迁移工具
https://blog.csdn.net/qq_34224565/article/details/106407978
支持大文件的断点续传,通过设置-append参数
速度
权限
3. 脱敏算法
{1} 可恢复脱敏使用加密算法
- 加密类型分为两种,对称加密与非对称加密,对称加密就是加解密用相同的秘钥。
- 面试官主要问非对称加密,这种加密方式存在两个密钥,公钥和私钥,公钥加密的数据只能由私钥解密,私钥加密的数据也只能由公钥加密。
- 公钥(正如其名,这是一个可以公开的密钥值),
- 私钥(对外保密)。 A发送信息给B时,使用公共密钥加密信息。 一旦B收到A的加密信息,B则使用私人密钥破译信息密码(被B的公钥加密的信息,只有B的唯一的私钥可以解密,这样,就在技术上保证了这封信只有B才能解读——因为别人没有B的私钥)。
- 使用私人密钥加密的信息只能使用公共密钥解密(这一功能应用与数字签名领域,我的私钥加密的数据,只有我的公钥可以解读,具体内容参考数字签名的信息)反之亦然,以确保您的信息安全。
- 常用的算法
- 对称:DES、3DES、TDEA、AES等
- 非对称:RSA、Elgamal、背包算法等
- 编码base64
并不是加密,而是编码,在某些场合也用来实现加密的功能
{2} 不可恢复脱敏使用散列算法md5
- md5是一种散列算法,不可逆。
并不是用来加密的,一开始是用于对比两个食物是否为同一个,是一种签名,每个人的签名都应该是不一致的,因此需要对比两个对象时,可以不对比对象本身,而对比他们的签名(散列值)
长度固定,32个字符 - 它并不是绝对安全的,有一定的概率出现碰撞,也就是签名重复。毕竟数是无限的,而md5值是有限的。但在一般场景应用很广,比如密码脱敏、文件完整性的校验。
在实际的项目开发中,用户的密码,一般会经过md5后存入数据库,验证的原理跟上文一致。楼上说的很对,一般存储密码是都会加salt后在计算md5值:md5(password + salt)或者多次md5:md5(md5(password)),这样其实可保证密码的安全性。
{3} 直接脱敏:返回固定的3个星号即可
4. 程序中调用linux脚本
{1} 执行方式
- 同步
- 异步
{2} 命令
- distcp
- msck repair table $tableName
脱敏后的数据加载到hive表
远程调用hive命令
5. 监控程序运行,获取程序运行状态
- 将applicationID上传到hdfs
- 调用yarn的api
http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/ResourceManagerRest.html
6. parquet
{1} 数据结构
{2} 特点,为啥要选用它
- 支持嵌套数据结构
- 更高的压缩比
parquet的gzip的压缩比率最高,若不考虑备份可以达到27倍。spark parquet默认采用gzip压缩。 - 列式存储
- 每一列中的数据类型相同,所以可以针对不同类型的列使用不同的编码和压缩方式,这样可以增大压缩效率。不压缩、gzip、snappy分别能达到11/27/19的压缩比
- 读取数据的时候可以把映射(Project)下推,和谓词下推,跳过不满足条件的列。
- 由于每一列的数据类型相同,可以使用更加适合CPU pipeline的编码方式,减小CPU的缓存失效
- 自带schema、包含如何解析的信息
- 完美支持hive、impala、pig、spark,spark默认的存储格式,parquet结合spark,可以完美实现分区过滤
{3} 同其他存储格式的区别
{4} 压缩格式之间的区别
总结:知识(面试)点
实际面试中,这一个题目实际上就能占用半小时左右的时间,如果就某个问题深入一下,估计一个小时就没了。所以大家要尽量把面试官带到自己的节奏,让他问你自己想让他问的问题。
1. 业务
{1} 脱敏规则,敏感级别
{2} 配置、执行
2. 技术
{1} 硬件环境:cdh
- 节点数量、配置
- 2个集群
{2} distcp
- 断点续传
- namenode挂掉
- 速度
- 权限:kerberos互信
{3} kerberos
- 概念、工作模型
- 使用:有效期,线程工厂和调度池的使用
{4} 脱敏算法
- 跟脱敏规则结合、场景
{5} 编程相关:
- spark UDF、
- 脚本调用、
- hive数据加载
{6} parquet
- 数据结构
- 特点
- 存储格式、压缩格式