自定义LOG投递OSS数据Partition,优化你的计算

本文涉及的产品
对象存储 OSS,20GB 3个月
文件存储 NAS,50GB 3个月
对象存储 OSS,内容安全 1000 次 1年
简介: 数据划分Partition OSS数据存储具有高可靠、低成本等优点,是海量数据存储的最佳选择之一,尤其适用于半结构化的日志存储,并可以结合E-MapReduce(使用Hive、Impala等计算引擎)通过schema-on-read方式加载数据做查询分析。

数据划分Partition

OSS数据存储具有高可靠、低成本的特点,是海量数据存储的最佳选择之一,尤其适用于半结构化的日志存储,并可以结合E-MapReduce(使用Hive、Impala等计算引擎)通过schema-on-read方式加载数据做查询分析。

日志作为一种时间序列(time-series)数据,指定年、月、日进行分析是一种常见做法。例如使用Hive来分析OSS上的日志:

  • 如果没有Partition,计算需要扫描整表(对应于OSS bucket前缀目录下的所有文件)
  • 如果用时间设置了Partition,只需要加载指定OSS日期目录下的Object即可

hive_partitioning

对于大部分的日志分析而言,OSS上的日志通过Partition方式来存储,通过减少计算引擎需要扫描的数据规模可以得到三个好处:

  • 缩短了数据分析的延时
  • 免去计算引擎处理额外数据产生的开销
  • 节约非必要OSS读请求产生的费用

LOG投递OSS设置Partition

阿里云LOG服务贯穿日志的整个生命周期,提供日志收集、存储、实时消费、查询、报警、投递(OSS/MaxCompute/TableStore)等功能。

log_oss_shipper

想了解如何通过LOG采集日志并投递到OSS的整个流程,可以在本文后移步用户案例:梨视频 LOG + OSS + E-MapReduce 实践。接下来要为大家介绍如何使用自定义Partition功能:

1. LOG内为Logstore配置OSS投递规则

将投递任务创建时间使用%Y,%m,%d,%H,%M等格式化生成分区字符串(格式化参考strptime API),以此来定义写到OSS的Object文件所在的目录层次结构,其中斜线/表示一级OSS目录。

日志服务的每个投递任务会写入OSS一个文件,路径格式是oss://OSS-BUCKET/OSS-PREFIX/PARTITION-FROMAT_RANDOM-ID。以创建时间2017/01/20 19:50:43的投递任务为例,说明OSS Prefix和分区格式与OSS目标文件路径关系如下:

OSS Bucket OSS Prefix 分区格式 OSS文件路径
test-bucket test-table %Y/%m/%d/%H/%M oss://test-bucket/test-table/2017/01/20/19/50/43_1484913043351525351_2850008
test-bucket log_ship_oss_example %Y/%m/%d/log_%H%M%s oss://test-bucket/log_ship_oss_example/2017/01/20/log_195043_1484913043351525351_2850008
test-bucket log_ship_oss_example %Y%m%d/%H oss://test-bucket/log_ship_oss_example/20170120/19_1484913043351525351_2850008
test-bucket log_ship_oss_example %Y%m%d/ oss://test-bucket/log_ship_oss_example/20170120/_1484913043351525351_2850008
test-bucket log_ship_oss_example %Y%m%d%H oss://test-bucket/log_ship_oss_example/2017012019_1484913043351525351_2850008

在这里设置分区格式为:%Y/%m/%d/log_%H%M%s:

oss_shipper_partitions_config

参数细节请阅读LOG投递OSS用户指南“分区格式”部分。

2. OSS数据Partition的组织形式

$./osscmd listallobject oss://test-bucket/log_ship_oss_example/
2017-01-20 19:50:53 34.83MB oss://test-bucket/log_ship_oss_example/2017/01/20/log_195043_1484913043351525351_2850008
2017-01-20 19:51:12 34.89MB oss://test-bucket/log_ship_oss_example/2017/01/20/log_195105_1484913065536560919_2850011
2017-01-20 19:51:21 34.83MB oss://test-bucket/log_ship_oss_example/2017/01/20/log_195109_1484913069790140729_2850012
2017-01-20 19:51:31 34.88MB oss://test-bucket/log_ship_oss_example/2017/01/20/log_195123_1484913083833159138_2850013
2017-01-20 19:51:44 34.99MB oss://test-bucket/log_ship_oss_example/2017/01/20/log_195136_1484913096459291992_2850016
2017-01-20 19:52:06 34.83MB oss://test-bucket/log_ship_oss_example/2017/01/20/log_195159_1484913119479868401_2850018
2017-01-20 19:52:11 34.95MB oss://test-bucket/log_ship_oss_example/2017/01/20/log_195204_1484913124490493518_2850019
2017-01-20 19:52:29 34.98MB oss://test-bucket/log_ship_oss_example/2017/01/20/log_195219_1484913139902136845_2850022
2017-01-20 19:52:42 34.90MB oss://test-bucket/log_ship_oss_example/2017/01/20/log_195235_1484913155018441825_2850025
2017-01-21 19:53:02 34.99MB oss://test-bucket/log_ship_oss_example/2017/01/21/log_195255_1484999575415811298_2850027
2017-01-21 19:53:12 34.94MB oss://test-bucket/log_ship_oss_example/2017/01/21/log_195303_1485003383961701486_2850028
2017-01-21 19:53:25 34.80MB oss://test-bucket/log_ship_oss_example/2017/01/21/log_195317_1485085997822904318_2850029
2017-01-21 19:53:48 34.97MB oss://test-bucket/log_ship_oss_example/2017/01/21/log_195340_1485077380309025973_2850032
2017-01-21 19:53:54 34.82MB oss://test-bucket/log_ship_oss_example/2017/01/21/log_195348_1485077388819212161_2850036
2017-01-21 19:54:08 34.96MB oss://test-bucket/log_ship_oss_example/2017/01/21/log_195359_1485077399681928884_2850038
2017-01-21 19:54:24 34.98MB oss://test-bucket/log_ship_oss_example/2017/01/21/log_195415_1485077415925150389_2850040
2017-01-22 19:54:53 34.82MB oss://test-bucket/log_ship_oss_example/2017/01/22/log_195441_1485086081854680230_2850044
2017-01-22 19:54:55 34.89MB oss://test-bucket/log_ship_oss_example/2017/01/22/log_195443_1485086083617274509_2850045
2017-01-22 19:55:06 34.91MB oss://test-bucket/log_ship_oss_example/2017/01/22/log_195459_1485086099107535552_2850046
2017-01-22 19:55:24 34.97MB oss://test-bucket/log_ship_oss_example/2017/01/22/log_195514_1485086114057357853_2850047
2017-01-22 19:55:44 34.97MB oss://test-bucket/log_ship_oss_example/2017/01/22/log_195537_1485086137670335428_2850051
2017-01-22 19:55:54 34.80MB oss://test-bucket/log_ship_oss_example/2017/01/22/log_195543_1485086143710253025_2850052

3. Hive使用OSS Partition

CREATE EXTERNAL TABLE log_ship_oss_example (
    time STRING,
    ip STRING,
    url STRING,
    method STRING,
    status STRING,
    user-agent STRING,
    api-version STRING
  )
  PARTITIONED BY (
    year STRING,
    mon STRING,
    day STRING
  )
  ROW FORMAT serde 'org.apache.hive.hcatalog.data.JsonSerDe'
  STORED AS TEXTFILE
  LOCATION 'oss://${AccessKeyId}:${AccessKeySecret}@test-bucket.oss-cn-hangzhou.aliyuncs.com/log_ship_oss_example';

创建外部表并加载OSS上的Partition之后,就能开始数据分析工作了。相关细节您可以参考:E-MapReduce Hive使用手册

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
目录
相关文章
|
16天前
|
存储 监控 调度
阿里云对象存储OSS之间进行数据转移教程
讲解如何在阿里云对象存储OSS之间进行跨账号、跨地域、以及同地域内的数据迁移,包括数据迁移之前的准备工作和实施数据迁移以及一些后续操作
|
4月前
|
存储 人工智能 Kubernetes
AI 场景深度优化!K8s 集群 OSSFS 2.0 存储卷全面升级,高效访问 OSS 数据
阿里云对象存储OSS是一款海量、安全、低成本、高可靠的云存储服务,是用户在云上存储的高性价比选择…
|
4月前
|
存储 缓存 Apache
StarRocks+Paimon 落地阿里日志采集:万亿级实时数据秒级查询
本文介绍了阿里集团A+流量分析平台的日志查询优化方案,针对万亿级日志数据的写入与查询挑战,提出基于Flink、Paimon和StarRocks的技术架构。通过Paimon存储日志数据,结合StarRocks高效计算能力,实现秒级查询性能。具体包括分桶表设计、数据缓存优化及文件大小控制等措施,解决高并发、大数据量下的查询效率问题。最终,日志查询耗时从分钟级降至秒级,显著提升业务响应速度,并为未来更低存储成本、更高性能及更多业务场景覆盖奠定基础。
|
18天前
|
存储 安全 数据管理
服务器违规资源被删,数据定时备份OSS 云存储才是 “救命稻草”
在数字化时代,数据已成为企业与个人的核心资产。然而,服务器违规、硬件故障等问题频发,导致数据丢失、业务中断,甚至造成不可挽回的损失。为保障数据安全与业务连续性,定时备份至关重要。阿里云国际站OSS提供高效、可靠的云存储解决方案,支持自动定时备份,帮助用户轻松应对数据风险。本文详解OSS备份操作步骤与注意事项,助你为数据穿上“防护甲”,实现安全无忧存储。
|
25天前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL数据库的WAL日志与数据写入的过程
PostgreSQL中的WAL(预写日志)是保证数据完整性的关键技术。在数据修改前,系统会先将日志写入WAL,确保宕机时可通过日志恢复数据。它减少了磁盘I/O,提升了性能,并支持手动切换日志文件。WAL文件默认存储在pg_wal目录下,采用16进制命名规则。此外,PostgreSQL提供pg_waldump工具解析日志内容。
105 0
|
26天前
|
数据采集 运维 监控
|
3月前
|
存储 NoSQL MongoDB
Docker中安装MongoDB并配置数据、日志、配置文件持久化。
现在,你有了一个运行在Docker中的MongoDB,它拥有自己的小空间,对高楼大厦的崩塌视而不见(会话丢失和数据不持久化的问题)。这个MongoDB的数据、日志、配置文件都会妥妥地保存在你为它精心准备的地方,天旋地转,它也不会失去一丁点儿宝贵的记忆(即使在容器重启后)。
320 4
|
4月前
|
存储 人工智能 测试技术
AI 场景深度优化!K8s 集群 OSSFS 2.0 存储卷全面升级,高效访问 OSS 数据
OSSFS 2.0通过轻量化协议设计、协程化技术及FUSE3低级API重构,实现大文件顺序读写与小文件高并发加载的显著提升,在实际测试中表现出高达数十倍的吞吐量增长。适用于机器学习训练、推理等对高带宽低延迟要求严苛的场景,同时支持静态和动态挂载方式,方便用户在ACK集群中部署使用。
421 34
|
3月前
|
算法 Java 测试技术
深度优化OSS上传性能:多线程分片上传 vs 断点续传实战对比
本文深入解析对象存储服务(OSS)文件上传性能优化技术,重点探讨多线程分片上传与断点续传两种方案。通过理论分析、代码实现和性能测试,对比其在不同场景下的表现差异,并提供选型建议与最佳实践,助力提升大文件上传效率与稳定性。
284 0

相关产品