Hive orc 格式 + snappy 压缩是比较常用的存储加压缩格式。
今天处理下面的场景时,解决了一些问题,记录下来:
flume消费kafka的数据实时写入hdfs,通过创建分区表,t + 1 时,需要看到昨天的数据:
flume 通过snappy 将数据写入hdfs,可以通过在fliume.conf中配置以下
agent.sinks.hdfs_sink.hdfs.path = /user/hive/warehouse/ods.db/kafka_2_hdfs_test/ods_sale_alter/dt=%Y-%m-%d
tier1.sinks.hdfs_sink.hdfs.idleTimeout=0
这个参数是某个topic停止活动时间超过设置的值时,就把hdfs上文件结尾的.tmp去掉,并开始写入新文件。设置为0,表示忽略停止时间。
hadoop -mv abc.tmp abc
DROP TABLE IF EXISTS test_orc_snappy; CREATE EXTERNAL TABLE test_orc_snappy ( x_json string ) PARTITIONED BY (`dt` string) ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t" STORED AS orc LOCATION ‘/user/hive/warehouse/ods.db/kafka_2_hdfs_test/test_orc_snappy‘ TBLPROPERTIES ("orc.compress"="SNAPPY");
然而,我忽略了一件很重要的事,文件虽然用了snappy压缩,但是没有转化为orc格式。
假如我们还想继续使用orc格式,那就只能把这张表当做底层表,在上层表比如 dw 层,中通过insert into的方式,
转为orc格式的表。
CREATE EXTERNAL TABLE test_snappy ( x_json string ) PARTITIONED BY (`dt` string) ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t" STORED AS textfile LOCATION ‘/user/hive/warehouse/ods.db/kafka_2_hdfs_test/ods_sale_alter‘ TBLPROPERTIES ("orc.compress"="SNAPPY")
使用textFile就可以了。
原文:https://www.cnblogs.com/drjava/p/10458266.html