SQL调优
count(distinct user_id) 和 group by user_id 之后 求 count 两者有什么区别?首先要清楚,count(distinct) 的原理机制,首先他是将数据通过map端发往一个reduce,之后reduce接收到数据之后,会将数据放入到 hashset中去重,之后cleanUp() 方法,在执行最后的逻辑,比如:计算hashset的size等。
这里就出现了一些问题
1)数据都发往一个reduce会造成数据倾斜,
2)程序从分布式变成单机程序,影响效率
3)程序执行过程中,只产生一个job
但也不是绝对的,当数据量很小的时候,此时我们并不需要采分布式执行,一个job运行足矣,但是,当数据量比较大的时候,这时count(distinct) 就暴露除了大大的弊端,所以,此时,不应该采用此法来实现去重
group() by count() 当数据量比较大的时候,采用此法,先分组,这时已经在map端实现了去重机制,之后数据发往reduce 数据量已经变得很小了,并且此法涉及到shuffle ,所以reduce的压力不会集中在某个上,并且会产生多个job。
...
Spark面试题汇总
Spark任务提交后的流程只要能说出来sparkContext, DAG, Stage, Executor 就大致上应该了解些。
详细答案参考:
(1)构建Spark Application的运行环境(启动SparkContext),SparkContext向资源管理器(可以是Standalone、Mesos或YARN)注册并申请运行Executor资源;
(2)资源管理器分配Executor资源并启动StandaloneExecutorBackend,Executor运行情况将随着心跳发送到资源管理器上;
(3)SparkContext构建成DAG图,将DAG图分解成Stage,并把Taskset发送给Task Scheduler。Executor向SparkContext申请Task
(4)Task Scheduler将Task发放给Executor运行同时SparkContext将应用程序代码发放给Executor。
(5)Task在Executor上运行,运行完毕释放所有资源。
spark工作机制如下:
用户在client端提交作业后,会由Driver运行main方法并创建sp ...
MySQL常见面试题
MySQL存储引擎1、InnoDB存储引擎
默认事务型引擎,最重要最广泛的存储引擎,性能非常优秀。
数据存储在共享表空间,可以通过配置分开。也就是多个表和索引都存储在一个表空间中,可以通过配置文件改变此配置。
对主键查询的性能高于其他类型的存储引擎。
内部做了很多优化,从磁盘读取数据时会自动构建hash索引,插入数据时自动构建插入缓冲区。
通过一些机制和工具支持真正的热备份。
支持崩溃后的安全恢复。
支持行级锁。
支持外键。
2、MyISAM存储引擎
拥有全文索引、压缩、空间函数。
不支持事务和行级锁、不支持崩溃后的安全恢复。
表存储在两个文件,MYD和MYI。
设计简单,某些场景下性能很好,例如获取整个表有多少条数据,性能很高。
全文索引不是很常用,不如使用外部的ElasticSearch或Lucene。
MySQL锁机制表锁是日常开发中的常见问题,因此也是面试当中最常见的考察点,当多个查询同一时刻进行数据修改时,就会产生并发控制的问题。共享锁和排他锁,就是读锁和写锁。
共享锁(Shared Lock S锁,读锁)
不堵塞,多个用户可以同时读一个资源,互不干扰,且阻止其 ...
Yarn的工作机制
Yarn的组成及工作流程详解YARN 是 Hadoop 资源管理器,无论是 MapReduce 应用还是 Spark 应用,应该都会用到 Yarn
先介绍几个角色:
ResourceManager
一个集群只有一个 RM,它是 YARN 的总指挥,负责协调集群上的计算资源,它有以下两个组件:
ApplicationsManager:这个不是 ApplicationMaster,注意区分。它会接受 Job 的提交请求,调度 Container 用于启动 ApplicationMaster,以及负责 ApplicationMaster 的失败重启。
Scheduler:调度器纯粹为应用程序分配资源,它不会监控应用的状态,这里的调度就是基于 Container 这个抽象的资源容器,包含内存、CPU、磁盘、网络等。
NodeManager
一个集群中有多个 NodeManager,它负责启动 Container,监控 Container 的资源使用情况(cpu、内存、磁盘、网络),并将这些信息汇报给 RM。一个 NodeManager 上可以有多个 Container。
Contain ...
Spark学习
SparkRDD 的算子分为两类
Transformation转换操作:返回一个新的 RDD
Action动作操作:返回值不是 RDD(无返回值或返回其他的)
注意:
RDD 不实际存储真正要计算的数据,而是记录了数据的位置在哪里,数据的转换关系(调用了什么方法,传入什么函数)
RDD 中的所有转换都是惰性求值/延迟执行的,也就是说并不会直接计算。只有当发生一个要求返回结果给 Driver 的 Action 动作时,这些转换才会真正运行
之所以使用惰性求值/延迟执行,是因为这样可以在 Action 时对 RDD 操作形成 DAG 有向无环图进行 Stage 的划分和并行优化,这种设计让 Spark 更加有效率地运行
持久化/缓存 API 详解:RDD 通过 persist 或 cache 方法可以将前面的计算结果缓存,但是并不是这两个方法被调用时立即缓存,而是触发后面的 action 时,该 RDD 将会被缓存在计算节点的内存中,并供后面重用
总结:
RDD 持久化/缓存的目的是为了提高后续操作的速度
缓存的级别有很多,默认只存在内存中, ...
数据挖掘与可视化
1. 大数据可视化概述
数据可视化是为了帮助用户通过认知数据,进而发现这些数据所反映的实质
数据可视化的三种类型
科学可视化
信息可视化
可视化分析
数据可视化的标准通常包含:实用性、完整性、真实性、艺术性、交互性
数据可视化的目标
应用角度:
通过数据可视化有效呈现数据中的重要特征
通过数据可视化揭示事物内部客观规律以及数据间的内在联系
通过数据可视化辅助人们理解事物概念和过程
通过数据可视化对模拟和测量进行质量监控
通过数据可视化提高科研开发效率
宏观角度:
数据可视化的目标主要包含有信息记录、信息分析和信息传播
数据可视化的作用
数据表达
数据操作
数据分析
数据可视化的流程
数据采集 -> 数据处理 -> 可视化映射 -> 用户感知
2. 数据预处理概述
数据的类型
结构化数据(日期、产品名称)
半结构化数据(日志文件、HTML、XML、JSON)
非结构化数据(文档、图片、视频、音频)
数据预处理流程
数据清洗 -> 数据集成 -> 数据归约 -> 数据变换
3. 数据分析技术分类(有监督学习)
逻辑回归 ...
数仓面经总结
美团拉链表的制作,数据量有多少,为什么不用快照表呢
拉链表会跟踪每个维度的变化,包括每次修改的历史,包含开始时间、结束时间、当前记录标识等字段
快照表只保留某个特定时刻的维度数据快照,不追踪变更,仅包含某个时间点的数据
数仓分层有哪些,具体做了什么,数仓分层作用
数仓分层架构包括ods、dwd、dwm、dws、ads
ODS层是接入层,从数据源(api、数据库等)将数据同步到数仓中,中间不做任何处理操作
DWD层是明细层,对ODS层的数据进行清洗、关联、转换、维度退化、建设主题域等操作
DWM层是轻度汇总层,是DWD和DWS层的过渡层次,对DWD层的生产数据进行轻度汇总和汇总统计,把复杂指标前置处理,提升公共指标的复用性,减少重复加工
DWS层汇总层,按主题域、颗粒度(如买卖家)划分,按照周期粒度、维度聚合,形成字段较多的宽表,用于提供后续的业务查询和应用。更重要的是要在DWS层完成指标口径统一和沉淀
ADS层是应用层,按照应用域,颗粒度划分(如买卖家)划分,按照应用主题将对应的数据标签补充至应用层,形成用户画像或专项应用
价值:分层的核心就是以空间换时间
使数据更清晰,简化复杂 ...
数仓开发学习笔记
数仓开发ODS层(接入层/贴源层)ods层用来对接数据源,同步用的
全量(full)——状态
增量(inc)——行为
业务分两大类:全量表和增量表
日志文件
业务表
全量表: DataX, 表结构与业务表保持一致
mysql : column[id, name, age]
data: 1001 zhangsan 30
hive: column[id, name, age]
增量表: Maxwell
JSON
最外层JSON对象的属性作为表的字段
DIM层维度层保存维度表,所以建模理论应该遵循维度建模理论
维度层中的维度表,主要用于统计分析
数据存储方式应该为列式存储:orc
数据压缩效率越高越好(时间短):snappy
维度模型
维度(状态)表
事实(行为)表
事实表是用来做统计的
维度表是用来做分析的
全量维度表:以天为单位将数据全部同步到维度表的相同时间分区中
补全数据
补全行: union
补全列: join
如果不影响结果用left join, 不用join
分区覆盖:insert overwrite ...
Hive
Hive学习知识概述Hive主要核心组件包含两个,一个是元数据的管理,一个是SQL解析器
启动Hive MetaStore
12# 启动 Hive MetaStore 服务$HIVE_HOME/bin/hive --service metastore &
ifconfig查看没有ens33连不上网络问题解决
ifconfig命令后没显示ens33
今天开启centos7时,连接不上网络,原先是🆗的,使用ifconfig进行查看
1234567891011121314151617[root@localhost ~]# ifconfiglo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions ...