数仓相关思考3
数仓相关思考3
1.ODS层表为什么要指定输入格式为com.hadoop.mapred.DeprecatedLzoTextInputFormat
表的输入格式和表中存储数据的格式相关,输入格式的作用是为select语言提供一个输入格式,以便于读取表中的数据!
ODS层表中存储的数据格式为 textfile ,但是使用了lzo压缩,为了可以正常读取和切片数据文件,必须设置为 DeprecatedLzoTextInputFormat!
2.ODS层表能否切片?为什么?
能否切片,主要取决于数据的存储格式!如果数据存储的是textfile,还要进一步判断文件的压缩格式是否支持切片!
- textfile: 一般情况下,可切。
如果采取了压缩,还需要查看压缩格式是否可切!
如果采取了lzo压缩,在切片时,需要有索引文件,才能切片!- sequenceFile: 都可切
- parquet: 都可切
- orc: 都可切
3.什么情况需要把Hive的默认输入格式由CombineHiveInputFormat改为HiveInputFormat
读取的表中,除了数据还有其他文件,不希望其他文件作为数据被读入,就需要设置!
4.ODS层表的建模过程
- 表创建的是external 表
- ods层表的特点是直接将采集的数据导入,不做修改,因此ods层表的字段个数,数量和顺序都需要参考采集数据中字段的数量,个数,顺序,类型!
- ods层数据是每日导入,因此建表使用分区表,指定导入数据的日期作为分区字段
- ods层所有的数据都是 textfile + lzo压缩,
因此指定inputformat为DeprecatedLzoTextInputFormat- 指定表的存储位置为指定的位置
- ods层的业务数据,每个字段都是使用\t分割,使用row format指定每行的分隔符
5.shell中单引号,双引号的作用和使用的注意事项
单引号和双引号都是在需要将一些特殊字符例如空格,作为一个字符串的整体时,使用!
单引号中 不 会 脱 义 , 双 引 号 中 不会脱义,双引号中 不会脱义,双引号中会脱义,会被认为是引用一个变量!注意事项:如果最外层是双引号,那么其中字符串的 都 会 被 脱 义 , 如 果 最 外 层 是 单 引 号 , 都会被脱义,如果最外层是单引号, 都会被脱义,如果最外层是单引号,不会被脱义
6.事实表的分类,每种不同类型事实表的特征和数据的导入方式
事务型事实表: 如果一个事实,一旦发生,不会被修改,那么这个事实的表就是事务型事实表
同步数据时,只需要同步新增的数据!
插入数据: insert overwrite 某个分区
周期型快照事实表: 确定一个事实快照的采样周期,在周期结束时,使用快照的形式,记录事实。
核心:确定采样的周期
插入数据: insert into 某个表
累积型快照事实表: 在事实的生命周期中,只对几个关键的采样点感兴趣,希望以累积的形式呈现事实变化趋势,采取累积型快照事实表!
插入数据时,涉及更新操作: insert overwrite (old + new )
7.简述HiveOnSpark的运行原理
HiveOnMR : MR不支持DAG运算!复杂的hql,可能会被解析为多个job,多个job根据依赖关系依次运行!
HQL -----> YARN上提交一个 JobSet(多个Job)
HiveOnSpark : Spark支持DAG运算!
App: 包含SparkContext的程序,称为app!
Job: 每提交一次行动算子,这个行动算子被初始化为一个Job!Job需要在app中运行!
HQL ------> spark Job
第一次执行一个HQL语句时,会先在集群上提交一个App.这个App就一直在YARN上运行!
Hive客户端,会保持和App的一个连接,称为一个session(回话)!
只要hive客户端不关闭,session一直保持!
Hive客户端,每执行一个HQL,将hql发送给app,app根据HQL对应的模版,运行对应的job!
HiveOnTez: 支持DAG运算!
第一次执行一个HQL语句时,会先在集群上提交一个App.这个App就一直在YARN上运行!
Hive客户端,会保持和App的一个连接,称为一个session(回话)!
区别于spark,这个session会有默认的超时时间(30s),一旦30s不再提交HQL,session关闭,
app也会stop!
还没有评论,来说两句吧...