Dingxiaofei 2016-08-31
数据清洗/ETL
日志处理过程中一个假设是:数据并不是完美的。在原始数据与最终结果之间有Gap,需要通过ETL(Extract Transformation Load)等手段进行清洗、转换与整理。
案例
“我要点外卖“是一个平台型电商网站,用户、餐厅、配送员等。用户可以在网页、App、微信、支付宝等进行下单点菜;商家拿到订单后开始加工,并自动通知周围的外卖送货员;快递员将外卖送到用户手中。
运营小组有两个任务:
掌握外卖送货员的位置,定点调度
掌握优惠券、现金使用情况,定点投放优惠券进行互动运营
送货员位置信息(GPS)数据加工
GPS 数据(X,Y)通过送货员App每分钟汇报一次,格式如下:
2016-06-26 19:00:15 ID:10015 DeviceID:EXX12345678 Network:4G GPS-X:10.30.339 GPS-Y:17.38.224.5 Status:Delivering
其中记录了上报时间,送货员ID,使用网络,设备号,坐标位置GPS-X,GPS-Y。 GPS给出的经纬度非常准确,但运营小组需要统计每个区域当前的状态,并不需要这么细的数据。因此对原始数据需要做一次转换(Transformation),通过坐标变成可读的城市、区域、邮政编码等字段。
(GPS-X,GPS-Y) --> (GPS-X, GPS-Y, City, District, ZipCode)
这就是一个典型ETL需求,使用LogHub功能,创建两个Logstore(PositionLog),以及转换后Logstore(EnhancedLog)。通过运行ETL程序(例如Spark Streaming、Storm、或容器中启动Consumer Library),实时订阅PositionLog,对坐标进行转化,写入EnhancedLog。可以对EnhancedLog数据机型仓库,连接实时计算进行可视化,或建立索引进行查询。
整个过程推荐架构如下:
快递员App上埋点,每分钟汇报当前GPS位置一次,写入第一个Logstore(PositionLog)
推荐使用LogHub Android/IOS SDK、MAN(移动数据分析)将移动设备日志接入
通过实时程序实时订阅PositionLog数据,处理后实时写入EnhancedLog Logstore
推荐使用Spark Streaming、Storm 或 Consumer Lib(一种自动负载均衡的编程模式) 或SDK订阅
对Enahanced Log进行处理,例如计算后进行数据可视化。推荐:
LogHub对接流计算
LogShipper投递(OSS,E-MapReduce,TableStore、MaxCompute)
LogSearch:订单查询等
支付订单脱敏与分析
支付服务接受支付请求,包括支付的账号、方式、金额、优惠券等。
1. 其中包含部分敏感信息,需要进行脱敏
2. 需要对支付信息中优惠券、现金两个部分进行剥离
整个过程如下:
1. 创建4个Logstore,原始数据(PayRecords),脱敏后数据(Cleaned),现金订单(Cash),代金券(Coupon)。应用程序通过Log4J Appender向原数据Logstore(PayRecords)写入订单数据
* 推荐使用Log4J Appender或Producer Library,敏感数据不落盘
2. 脱敏程序实时消费PayRecords,将账号相关信息剥离后,写入Cleaned Logstore
3. 分流程序实时消费Cleaned Logstore,通过业务逻辑把优惠券、现金两个部分分别存入对账相关的Logstore(Cash、Coupon)进行后续处理
* 实时脱敏、分流程序推荐使用 推荐使用Spark Streaming、Storm 或 Consumer Lib(一种自动负载均衡的编程模式) 或SDK订阅
其他
LogHub功能下每个Logstore可以通过RAM进行账号级权限控制,参见RAM
LogHub当前读写可以通过监控获得,消费进度可以通过控制台查看
更多深度技术内容,请关注云栖社区微信公众号:yunqiinsight。