我刚刚开始在 cloudera 平台上使用 Hadoop/Pig/Hive,并且对如何有效加载数据进行查询有疑问。
我目前有大约 50GB 的 iis 日志加载到 hdfs 中,目录结构如下:
/user/oi/raw_iis/Webserver1/Org/SubOrg/W3SVC1056242793/ /user/oi/raw_iis/Webserver2/Org/SubOrg/W3SVC1888303555/ /user/oi/raw_iis/Webserver3/Org/SubOrg/W3SVC1056245683/
ETC
我想将所有日志加载到 Hive 表中。
我有两个问题/疑问:
1.
我的第一个问题是一些网络服务器可能没有正确配置,并且将有没有所有列的 iis 日志。这些不正确的日志需要额外的处理才能将日志中的可用列映射到包含所有列的架构。
数据以空格分隔,问题是当并非所有列都启用时,日志仅包含启用的列。Hive 不能自动插入空值,因为数据不包括空列。我需要能够将日志中的可用列映射到完整架构。
好的日志示例:
#Fields: date time s-ip cs-method cs-uri-stem useragent
2013-07-16 00:00:00 10.1.15.8 GET /common/viewFile/1232 Mozilla/5.0+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/27.0.1453.116+Safari/537.36
缺少列的示例日志(cs-method 和 useragent):
#Fields: date time s-ip cs-uri-stem
2013-07-16 00:00:00 10.1.15.8 /common/viewFile/1232
缺少列的日志需要映射到完整的架构,如下所示:
#Fields: date time s-ip cs-method cs-uri-stem useragent
2013-07-16 00:00:00 10.1.15.8 null /common/viewFile/1232 null
如何将这些启用的字段映射到包含所有可能列的架构,为丢失的字段插入空白/空/-令牌?这是我可以用猪脚本处理的吗?
2.
如何定义我的 Hive 表以包含来自 hdfs 路径的信息,即我的 dir 结构示例中的 Org 和 SubOrg,以便它可以在 Hive 中查询?我也不确定如何将许多目录中的数据正确导入到单个配置单元表中。