Hive ORC + SNAPPY

本文介绍了Hive使用ORC格式结合SNAPPY压缩进行大数据存储的过程,包括Flume从Kafka消费数据实时写入HDFS的配置,避免小文件产生的策略,以及Hive建表时遇到的问题和解决方案。在HDFS中,通过调整Flume配置以确保每天数据写入同一目录,并防止文件以.tmp结尾。在Hive建表时,需注意文件是否已转换为ORC格式,否则可能导致数据格式错误。最后提供了正确的建表语句示例。

Hive orc 格式 + snappy 压缩是比较常用的存储加压缩格式。

 

今天处理下面的场景时,解决了一些问题,记录下来:

flume消费kafka的数据实时写入hdfs,通过创建分区表,t + 1 时,需要看到昨天的数据:

   flume 通过snappy 将数据写入hdfs,可以通过在fliume.conf中配置以下

  1. 保证每天的数据写入同一个目录中:
    agent.sinks.hdfs_sink.hdfs.path = /user/hive/warehouse/ods.db/kafka_2_hdfs_test/ods_sale_alter/dt=%Y-%m-%d 
  2. 避免在hdfs写入过多的小文件:
    tier1.sinks.hdfs_sink.hdfs.idleTimeout=0

    这个参数是某个topic停止活动时间超过设置的值时,就把hdfs上文件结尾的.tmp去掉,并开始写入新文件。设置为0,表示忽略停止时间。

  3. 配置了2的参数后,会造成一个问题,当新的一天,数据开始写入hdfs上另一个目录后,
    比如"dt=2019-03-02","dt=2019-03-01"文件夹下的最后一个文件,还是以.tmp结尾的,在hive建表后,数据格式错误会报错。
    所以需要我们通过脚本,每天修复文件名称:
    hadoop -mv abc.tmp abc
  4. 另外就是hive建表的问题:
    当数据导入hdfs后,我们想针对flume倒
### Hive 创建 ORC 格式表的建表语句 在 Hive 中创建一张使用 ORC 文件格式存储的数据表,可以通过 `CREATE TABLE` 语句指定 `STORED AS ORC` 来实现。如果需要进一步优化性能,还可以设置压缩算法(如 Snappy)。以下是完整的 SQL 示例: #### 数据库准备 ```sql -- 如果数据库不存在,则创建数据库 CREATE DATABASE IF NOT EXISTS mydatabase; -- 切换至目标数据库 USE mydatabase; ``` #### 表结构定义 ```sql -- 创建分区表并指定 ORC 存储格式以及 Snappy 压缩方式 CREATE TABLE IF NOT EXISTS my_orc_table ( id BIGINT COMMENT '唯一标识符', name STRING COMMENT '名称字段', value DOUBLE COMMENT '数值型字段' ) PARTITIONED BY (year INT, month INT) -- 定义分区列 STORED AS ORC -- 指定存储格式为 ORC TBLPROPERTIES ("orc.compress"="SNAPPY"); -- 设置压缩算法为 SNAPPY [^3] ``` 上述语句中: - `id`, `name`, 和 `value` 是表中的具体字段。 - `PARTITIONED BY` 关键字用于声明分区字段,在此例子中按年份 (`year`) 和月份 (`month`) 进行分区。 - `STORED AS ORC` 明确指定了该表将以 ORC 文件格式存储。 - `"orc.compress"="SNAPPY"` 配置了 Snappy 压缩算法来提升 I/O 性能。 #### 插入数据到 ORC 表 通过以下命令可以向已创建好的 ORC 表插入数据: ```sql INSERT INTO my_orc_table PARTITION(year=2023, month=10) VALUES (1, 'Alice', 98.7), (2, 'Bob', 56.3); ``` #### 查询 ORC 表数据 查询 ORC 表中的记录可执行如下标准 SQL 语句: ```sql SELECT * FROM my_orc_table WHERE year = 2023 AND month = 10 LIMIT 10; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值