实时解析日志遇到的问题记录

来源:互联网 发布:mac怎么隐藏dock 编辑:程序博客网 时间:2024/09/21 06:37

使用createDirectStream实现精确一次的读取,kafka的offset保存到Zookeeper中。

1. kafka参数

auto.offset.reset :smallest, largest
默认为”largest”,此配置参数表示当此groupId下的消费者,在ZK中没有offset值时(比如新的groupId,或者是zk数据被清空),consumer应该从哪个offset开始消费.largest表示当前接收最大的offset(即最新消息),smallest表示最小offset,即从topic的开始位置消费所有消息.
注意,如果当前SparkStreaming程序正在运行,这个时候如果在ZK客户端中删除该offset是没用的,接下来还是会接着之前的offset进行消费。
调试程序的过程中,注意重新运行前是否应该清除ZK上的数据,避免错误的offset影响到消费。

2.关于parquet文件

由于我是需要解析好了数据存入hdfs,使用hive能够查询结果。
步骤如下:
1 hive中创建外部表,加入partition:

create external table table_name(id STRING)  PARTITIONED BY (partition_name string)  STORED AS PARQUET LOCATION 'hdfs_path';

2 解析好的parquet文件放入hdfs_path路径;
3 添加对应的partition:(如果不手动添加分区的话查不出来数据)

alter table table_name add partition (partition_name='your_data');

然后就可以在hive中查询了。

Spark2.0 引入了SparkSession,操作DataFrame很容易,也可以使用DataFrame直接查询hdfs上的parquet文件,支持各种sql,测试的话就不用各种建表、添加分区了。

3. 其他的问题

  1. nginx日志,ip字段出现了 ip1,ip2,… - - [Date]这样的格式,据说是使用vpn的结果,这个不太清楚,解析的时候需要注意一下。
  2. 日期格式,nginx日期格式是 SimpleDateFormat(“dd/MMM/yyyy:HH:mm:ss”, Locale.US)
    注意大小写,小时的小写是采用12小时计时法,而如果分钟和秒也搞成大写的话就出现了很诡异的事情,比如我转换20161126-195900日期变成了2020年,这个没查是什么原因,总之注意大小写就好了。
0 0
原创粉丝点击