打算用日志服务把云主机上的日志投递到oss,然后在EMR上使用hive,建一张分区表使用oss上的数据,
请问hive上表的分区是(year bigint, month bigint, day bigint), 请问
1、oss上的文件目录结构,我看了文档好像是到hour的,但是我的分区不需要分的那么细
2、怎么配置日志投递让各条记录进入正确的目录(比如20160425产生的日志进入/year=2016/month=4/day=25的目录)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您的需求,Hive表的分区为 (year bigint, month bigint, day bigint),这意味着您只需要按天进行分区,而不需要细化到小时级别。然而,日志服务默认支持更细粒度的分区格式(如到小时或分钟),因此需要在配置投递任务时明确指定分区格式。
建议的OSS目录结构: - 按照 year=%Y/month=%m/day=%d 的格式组织OSS目录。 - 示例路径:oss://your-bucket/your-prefix/year=2016/month=04/day=25/
这种格式与Hive的分区列 (year, month, day) 完全匹配,便于后续直接加载数据到Hive表中。
为了确保日志记录能够正确地进入 /year=2016/month=04/day=25/ 这样的目录,您需要在创建OSS投递任务时,按照以下步骤进行配置:
在创建OSS投递任务时,选择分区格式为 year=%Y/month=%m/day=%d。
- %Y 表示四位年份(如2016)。 - %m 表示两位月份(如04)。 - %d 表示两位日期(如25)。
以下是具体配置步骤: 1. 登录阿里云日志服务控制台。 2. 选择目标Project和Logstore。 3. 在日志存储页面,点击 数据处理 > 导出 > OSS。 4. 配置OSS投递任务: - 投递名称:为任务命名。 - Bucket:选择目标OSS Bucket。 - 目录前缀:填写自定义前缀(如 your-prefix/)。 - 分区格式:设置为 year=%Y/month=%m/day=%d。 - 存储格式:选择适合Hive的格式(如Parquet或JSON)。 - 压缩方式:建议选择Snappy压缩以节省存储空间。 - 投递时间:根据需求设置投递频率(如每5分钟投递一次)。
oss://your-bucket/your-prefix/year=2016/month=04/day=25/log_195043_1484913043351525351_2850008.parquet
在EMR上使用Hive创建外部表,并加载OSS数据:
CREATE EXTERNAL TABLE your_table (
column1 STRING,
column2 INT,
...
)
PARTITIONED BY (year BIGINT, month BIGINT, day BIGINT)
STORED AS PARQUET
LOCATION 'oss://your-bucket/your-prefix/';
然后,手动添加分区或使用MSCK命令自动发现分区:
MSCK REPAIR TABLE your_table;
通过以上配置,您可以确保日志数据按天分区并正确存储到OSS中,同时方便后续在Hive中进行数据分析。