1.4 orc文件中提供了三个级别的索引
文件级别:记录文件中所有script的位置信息,以及文件中存储的每列数据的统计信息
条带级别:记录每个stripe所存储的数据统计信息
行组级别:在script中,每10000行构成一个行组,该级别的索引信息就是记录这个行组中存储的数据统计信息
1.5 效率和数据类型
通过orc文件的索引,可以快速定位要查询的数据块,规避不满足查询条件的数据块和文件,相比读取传统的数据文件,进行查找时需要遍历全部数据,使用orc可以避免磁盘和网络的I/O浪费,从而提高查询效率。提升整个集群的工作负载。
hive以orc文件格式存储时,描述这些数据的字段信息,字段类型信息以及编码等信息都和orc中存储的数据放在一起。
orc文件都是自描述的,不依赖外部的数据,也不存储在hive元数据库中。
数据类型:boolean,tinyint、smallint、int、bigint、float、double、string、varchar、char、binary,timestamp和date、
复杂类型:struct、list、map、union
所有类型都可以接受null值。
1.6 acid事务的支持
0.14版本之前,hive表的数据只能新增或者整块删除分区表,而不能对表进行单个记录的修改。0.14版本以后,orc文件类型能够确保hive在工作时的原子性、一致性、隔离性、持久性的ACID事务能够被正确的使用。可以对单条数据进行更新。
hive 的事务适合对大批量的数据进行更新,不适合频繁的小批量数据。
下面是创建hive事务表的方法
–(1)开启配置
----开启并发支持,支持删除和更新事务
set hive.support.concurrentcy=true;
----支持acid事务的表必须为分桶表
set hive.enforce.bucketing=true;
-----动态分区,开启事务需要开启动态分区非严格模式
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
----所有的org.apache.hadoop.hive.sql.lockmgr.DummyTxnManager 不支持事务
set hive.txn.manager=org.apache.hadoop.hive.sql.lockmgr.DummyTxnManager
—开启在相同的一个meatore实例运行初始化和清理的线程
set hive.compactor.initiator.on=true;
–设置每个metastore实例运行的线程数
set hive.compactor.worker.threads=1
–(2)创建表
– 必须支持分桶
create table student_txn
( id int,
name String
)cluster by (id) into 2 buckets
stored as orc
– 表属性中添加支持事务
tblproperties(‘transactional’ = ‘true’)
–(3) 插入数据,更新数据
insert into table student_txn values(‘1000’,‘student_1001’);
update student_txn set name=‘student_lzn’ where id=‘1001’;
1.7 orc相关的配置
orc.compress: 压缩类型,none,zlib,snappy
orc.compress.size: 压缩块的大小,默认值262114(256kb)
orc.stripe.size: 写stripe,可以使用的内存缓冲池大小,默认67108864(64mb)
orc.row.index.stride: 行组级别的索引数量大小,默认10000,必须设定为大于10000的数。
orc.create.index: 是否创还能行组级别索引,默认true
orc.bloom.filter.columns: 需要创建的布隆过滤器的组
orc.bloom.filter.fpp: 使用布隆过滤器的假正(false positive)概率,默认为0.05
hive中使用布隆过滤器可以用较少的空间判定数据是否存在表中(如果不存在,那么100%就是不存在,存在的话再去查找确认存在)。
hive表配置属性:
hive.stats.gather.num.threads: 收集统计信息的线程数,默认10。只适用于orc这类已经实现StatsProvidingReader接口的文件格式。
hive.exec.core.memory.pool: 写orc文件,可以使用的已分配堆内存的最大比例。
hive.exec.orc.default.stripe.size: 每个stripe文件,可以会用的缓冲池大小,默认64MB。
hive.exec.orc.default.block.size: 每个stripe存储文件块大小,默认256MB。
hive.exec.orc.dictionary.key.size.threshold: 阈值,默认0.8。如果字典中的键数大于所有非空数据行数的这一阈值,则关闭字典编码。
hive.exec.orc.default.row.index.stride: hive表行组级索引数量大小,默认10000。
hive.exec.orc.default.block.padding: 写orc文件时,是否填充已有的hdfs文件块,默认false。
hive.exec.orc.block.padding.tolerance: 阈值,默认0.05,允许填充到hdfs文件块的最小文件。
hive.exec.orc.default.compress: 定义orc文件压缩编码、解码器。默认为zlib。
hive.merge.orcfile.stripe.level: 默认true。这时如果hive.merge.mapfile、hive.merge.mapredfiles或者hive.merge.tezfiles也开启,在写入数据到orc文件时,将会一strip级别合并小文件。
hive.exec.orc.zerocopy: 默认false,使用零拷贝方式读取orc文件。
hive.exec.orc.skip.corrupt.data: 默认false,处理数据时,遇到异常抛出,为true,则跳过异常。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
正体系化!**
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
[外链图片转存中…(img-ZLDk4Ro7-1712520621654)]