数据划分Partition

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

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

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

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

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

LOG投递OSS设置Partition

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

想了解如何通过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:

参数细节请阅读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 TEXTFILELOCATION 'oss://${AccessKeyId}:${AccessKeySecret}@test-bucket.oss-cn-hangzhou.aliyuncs.com/log_ship_oss_example';

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

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

  1. hive当前日期超前_微博数仓数据延时优化方案

    前言 本文以离线数据仓库为背景,重点介绍因传输链路数据延时的不确定性,可能导致部分延迟文件无法参与正常的调度计算或同步,导致数据缺失的问题成因.业务影响及相应的解决方案.关于这类问题的处理,有这么一种 ...

  2. rdd数据存内存 数据量_Spark 性能优化(二)——数据倾斜优化

    1.2 数据倾斜优化 1.2.1 为何要处理数据倾斜(Data Skew) 什么是数据倾斜?对 Spark/Hadoop 这样的大数据系统来讲,数据量大并不可怕,可怕的是数据倾斜. 何谓数据倾斜?数据 ...

  3. 创建Okhttp自定义Log

    原文链接:创建OkHttp自定义Log 背景 本文重点讲解如何在使用OkHttp作为网络请求框架的前提下,如何自定义一个适合自己项目的Http Log,从而提升网络Api开发.调试效率. Http协议 ...

  4. Mysql 批量写入数据 性能优化

    2019独角兽企业重金招聘Python工程师标准>>> 测试环境 配置直接影响执行速度,先上一下测试机配置: cpu i7 5500U(低电压伤不起,以后再也不买低电压的U了) 内存 ...

  5. DL之DNN优化技术:神经网络算法简介之数据训练优化【mini-batch技术+etc】

    DL之DNN优化技术:神经网络算法简介之数据训练优化[mini-batch技术+etc] 目录 1.mini-batch技术 输出结果 实现代码 1.mini-batch技术 输出结果 实现代码 # ...

  6. 19_clickhouse,数据查询与写入优化,分布式子查询优化,外部聚合/排序优化,基于JOIN引擎的优化,SQL优化案例,物化视图提速,查询优化常用经验法则,选择和主键不一样的排序键,数据入库优化

    25.数据查询与写入优化 25.1.分布式子查询优化 25.1.1.分布式表的IN查询示例1(普通IN子查询.IN子查询为本地表) 25.1.2.分布式表的IN查询示例2(普通IN子查询.IN子查询为 ...

  7. 基于Hadoop的产品大数据分布式存储优化

    人工智能技术与咨询 点击蓝字 · 关注我们 来源:<计算机科学与应用 > ,作者王耐东等 关键词:  产品大数据:Hadoop平台:数据存储优化:数据检索 摘要: 摘要: 研究产品相关大数 ...

  8. 使用MaxCompute LOAD命令批量导入OSS数据最佳实践—STS方式LOAD开启KMS加密OSS数据

    简介: MaxCompute使用load overwrite或load into命令将外部存储的数据(如:oss)导入到MaxCompute前的授权操作. MaxCompute使用load overw ...

  9. 使用pickle模块序列化数据,优化代码

    使用pickle模块序列化数据,优化代码 pickle是Python标准库中的一个二进制序列化和反序列化库. 可以以二进制的形式将数据持久化保存到磁盘文件中.可以将数据和代码分离,提高代码可读性和优雅 ...

最新文章

  1. 从零玩转HTML5前端+跨平台开发上
  2. python xlrd_python模块之xlrd
  3. css链接样式_CSS中的样式链接
  4. Python 爬虫进阶五之多线程的用法
  5. nginx的脚本引擎(一)
  6. 服务器互相备份不同步_详解容灾与备份,为数据安全保驾护航
  7. java json data_java中json数据格式的处理
  8. 基于python中jieba包的详细使用介绍
  9. BeyondDesk 桌面小工具集合/时钟日历黄历便签相框天气时间/托盘时钟 [开放代码]
  10. BP算法(神经网络基础+BP算法推导+BP算法举例+java代码实现+Python代码实现+局限性)
  11. python-pygame实现飞机大战-4-获取补给、发射强化子弹以及放大招清屏
  12. 直接耦合的互补输出级
  13. h61 nvme硬盘_谁更快?PCIe 4.0时代的NVMe固态硬盘性能对决
  14. 液晶电视英文linux使用教程,【详解UbuntuTV 电视与人们的生活】PjTime.COM液晶电视 技术介绍...
  15. Linux firefox 网页截图
  16. MYSQL查询之查询的多个结果重复循环出现问题分析
  17. 跟同事杠上了,Apache Beanutils为什么被禁止使用?
  18. C++核心准则​T.46:要求模板参数最少是正规或半正规的
  19. 哈工大 计算机系统安全 复习整理 作业答案
  20. 用Python爬取手机壁纸,太简单了吧

热门文章

  1. Vue.JS项目同时使用Element-UI与vue-i18n时实现国际化的方案
  2. Windows下安装maven-nexus私服
  3. 2018世界杯8组32队积分和净胜球
  4. Mybatis 源码解析 -- 基于配置的源码解析(二)
  5. 2016年成熟亚太地区公共云服务市场规模将达到81亿美元
  6. 基于CAN总线的家居安防系统设计
  7. vcf文件(call variants得来的)怎么看变异是纯合还是杂合的
  8. Spring源码学习的初步体会
  9. python绝技 — 使用PyGeoIP关联IP地址和物理位置
  10. 《我的青春谁做主》我想要的结局