自定义LOG投递OSS数据Partition,优化你的计算
數據劃分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目標文件路徑關系如下:
| 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_28500523. 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,优化你的计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fir.im Weekly - 2017
- 下一篇: Android使用SVG矢量图打造酷炫动