概述
常见的维表Join方式有四种:
- 预加载维表
- 热存储维表
- 广播维表
- Temporal table function join
下面分别使用这四种方式来实现一个join的需求,这个需求是:一个主流中数据是用户信息,字段包括用户姓名、城市id;维表是城市数据,字段包括城市ID、城市名称。要求用户表与城市表关联,输出为:用户名称、城市ID、城市名称。
用户表表结构如下:
| 字段名 | 数据类型 | 数据样例 |
|---|---|---|
| 用户姓名 | String | User1 |
| 城市ID | Int | 1001 |
| 时间戳 | Long | 1000 |

常见的维表Join方式有四种:
下面分别使用这四种方式来实现一个join的需求,这个需求是:一个主流中数据是用户信息,字段包括用户姓名、城市id;维表是城市数据,字段包括城市ID、城市名称。要求用户表与城市表关联,输出为:用户名称、城市ID、城市名称。
用户表表结构如下:
| 字段名 | 数据类型 | 数据样例 |
|---|---|---|
| 用户姓名 | String | User1 |
| 城市ID | Int | 1001 |
| 时间戳 | Long | 1000 |
HBase产生背景介绍:
由于 HAOOP 不支持随机读写的操作, 仅支持顺序性读写操作, 适合于进行批量化处理操作
HBase是采用 java 语言开发, HBase基于HDFS , 是一个 支持高效的随机读写能力的noSQL型数据库
HBase支持三种方式进行查询数据:
MapReduce: 分布式计算框架
分而治之:
生活中: 搬砖 图书馆数书 计算从1~100和
整个分而治之思想主要有二大阶段:
分(map阶段): 将一个任务拆分为多个小的任务
合(reduce阶段): 将每个小的任务结果进行聚合汇总在一起
MapReduce既然是一个分布式计算框架, 必然需要有输入 和 输出, 数据在map执行之前进行读取数据, 在reduce之后将数据写出去
数据经历阶段:
1) 数据读取阶段: 不断持续的一直读取数据, 默认一行一行的读取数据, 每读取一行 就需要执行一次map的操作 数据传递 采用 kv方式: 读取过来数据 一般称为 k1和v1
2) map阶段: 接收k1和v1, 对数据进行处理, 形成新的键值对 k2和 v2
3) reduce阶段: 接收k2和v2 进行聚合统计操作, 然后转换为k3和v3
4) 数据输出阶段: 将k3和v3输出到目的地
数据仓库的基本介绍
数据仓库和数据库的区别:
什么样容器可以作为数据仓库呢? 只要能够存储数据, 并且可以对数据进行查询容器都可以
数据分析:
四代计算引擎
第一代引擎:MR
第二代引擎:Hive(MR,Spark,Tez) 部分支持DAG(有向无环图)
第三代引擎:Spark和Impala(完全支持DAG)
第四代计算引擎:批流统一FLink(完全支持DAG)
技术发展:
面试题:Hadoop的基于进程的计算和Spark基于线程方式优缺点?
只需要回答进程和线程的区别
线程基本概念
l 线程是CPU的基本调度单位
l 一个进程一般包含多个线程, 一个进程下的多个线程共享进程的资源
l 不同进程之间的线程相互不可见
l 线程不能独立执行
l 一个线程可以创建和撤销另外一个线程
| 架构类型 | 定义 | 定位 |
|---|---|---|
| 数据中台 | 集中管理企业数据资产的平台,实现数据的共享和高效利用 | 支持业务部门的数据需求,提供数据服务和分析能力 |
| 数据仓库 | 面向主题的、集成的、相对稳定的、反映历史变化的数据集合 | 支持管理决策 |
| 数据湖 | 存储原始数据的仓库,允许用户按需对数据进行查询、分析和处理 | 支持多种数据类型和格式,进行探索性分析和数据挖掘 |
大数据系统几乎都是分布式的,CAP 定理是分布式系统的基本定理,是理解分布式系统的起点。
分布式系统有三个指标:
布隆过滤器 (Bloom Filter)是由Burton Howard Bloom于1970年提出,它是一种space efficient的概率型数据结构,用于判断一个元素是否在集合中。在垃圾邮件过滤的黑白名单方法、爬虫(Crawler)的网址判重模块中等等经常被用到。哈希表也能用于判断元素是否在集合中,但是布隆过滤器只需要哈希表的1/8或1/4的空间复杂度就能完成同样的问题。布隆过滤器可以插入元素,但不可以删除已有元素。其中的元素越多,false positive rate(误报率)越大,但是false negative (漏报)是不可能的。