使用DIS采集增量驾驶行为日志数据
场景简介
数据接入服务(Data Ingestion Service,简称DIS)采集增量驾驶行为日志数据并上传到华为云对象存储服务(Object Storage Service,简称OBS),通过数据湖探索(Data Lake Insight,简称DLI)分析上传的日志数据,获取驾驶员的驾驶行为,以支持车企提供驾驶习惯优化等增值服务。
本次实践基本流程如下所示:
添加转储任务
- 使用注册帐户登录DIS控制台。
- 在左侧列表栏中选择“通道管理”。
- 单击申请DIS通道中创建的通道名称,进入所选通道的管理页面,选择“转储管理”页签。
- 单击“添加转储任务”按钮,在弹出的“添加转储任务”页面配置转储相关配置项。
- 每个通道最多可创建5个转储任务。
- 源数据类型为FILE的通道,不允许添加转储任务。
- 单击“立即创建”。
表1 转储任务参数说明 参数
参数解释
配置值
转储服务类型
选择OBS。
通道里的流式数据存储在DIS中,并周期性导入对象存储服务(Object Storage Service,简称OBS)。
通道里的实时文件数据传输完成后,导入OBS。
OBS
任务名称
用户创建转储任务时,需要指定转储任务名称,同一通道的转储任务名称不可重复。任务名称由英文字母、数字、中划线和下划线组成。长度为1~64个字符。
-
转储文件格式
- text
- csv
- parquet
- carbon
根据需要选择。
数据转储地址
存储该通道数据的OBS桶名称。桶名称在“对象存储服务”中“创建桶”时创建。
申请DIS通道创建的桶名称。
转储文件目录
在OBS中存储通道文件的自定义目录,多级目录可用“/”进行分隔,不能以“/”开头。
取值范围:0~50个字符。
默认配置为空。
-
时间目录格式
数据将存储在OBS桶中转储文件目录下,按时间格式作为层级的目录中。
当选择的时间目录格式精确到日时,存储目录为“桶名称/转储文件目录/年/月/日”。
取值范围:- N/A:置空,不使用日期时间目录。
- yyyy:年
- yyyy/MM:年/月
- yyyy/MM/dd:年/月/日
- yyyy/MM/dd/HH:年/月/日/时
- yyyy/MM/dd/HH/mm:年/月/日/时/分
此配置项仅支持选择,不可手动输入。
-
记录分隔符
进行OBS周期转储时,分隔不同转储记录的分隔符。
取值范围:- 逗号 ","
- 分号 ";"
- 竖线 "|"
- 换行符 "\n"
- NULL
此配置项仅支持选择,不可手动输入。
-
偏移量
- 最新:最大偏移量,即获取最新的数据。
- 最早:最小偏移量,即读取最早的数据。
最新
数据转储周期
根据用户配置的时间,周期性的将数据导入OBS,若某个时间段内无数据,则此时间段不会生成打包文件。
取值范围:30~900。
单位:秒。
默认配置为300秒。
-
获取认证信息
- 获取AK/SK
您可以通过如下方式获取访问密钥。
- 登录控制台,在用户名下拉列表中选择“我的凭证”。
- 进入“我的凭证”页面,选择 ,如图2所示。
- 单击“确定”,根据浏览器提示,保存密钥文件。密钥文件会直接保存到浏览器默认的下载文件夹中。打开名称为“credentials.csv”的文件,即可查看访问密钥(Access Key Id和Secret Access Key)。
- 每个用户仅允许新增两个访问密钥。
- 为保证访问密钥的安全,访问密钥仅在初次生成时自动下载,后续不可再次通过管理控制台界面获取。请在生成后妥善保管。
- 获取项目ID和帐号ID
- 获取endpoint
终端节点(Endpoint)即调用API的请求地址,不同服务不同区域的终端节点不同。本服务的Endpoint可从终端节点Endpoint获取。
配置DIS Agent
- 使用文件管理器进入DIS Agent程序的conf目录,例如“C:\dis-agent-X.X.X\conf”。
- 使用编辑器打开“agent.yml”文件,根据实际情况修改各配置项的值并保存。
- 各配置项与值之间必须以英文格式的“冒号+空格”形式分隔。
- “agent.yml”文件为linux格式,建议使用“Sublime Text”工具编辑文件。
表2 agent.yml配置文件说明 配置项
是否必填
说明
默认值
region
是
DIS服务所在区域。
获取方式请参见获取认证信息。
-
ak
是
用户的Access Key。
获取方式请参见获取认证信息。
请根据实际情况配置
sk
是
用户的Secret Key。
获取方式请参见获取认证信息。
请根据实际情况配置
projectId
是
用户所属区域的项目ID。
获取方式请参见获取认证信息。
请根据实际情况配置
endpoint
是
DIS数据网关地址。格式:https://DIS终端节点。
获取方式请参见获取认证信息。
-
body.serialize.type
否
DIS数据包上传格式。(非原始数据格式)- json:DIS数据包封装为json格式,满足普通使用。
- protobuf:DIS数据包封装为二进制格式,可以减少体积约1/3,在数据量较大的情况下推荐使用此格式。
json
body.compress.enabled
否
是否开启传输数据压缩。
false
body.compress.type
否
开启压缩时选择的数据压缩格式,目前支持的压缩格式如下:
lz4:综合来看效率最高的压缩算法,更加侧重压缩解压速度,压缩比并不是第一。
zstd:一种新的无损压缩算法,旨在提供快速压缩,并实现高压缩比。
lz4
PROXY_HOST
否
配置代理IP,请求走代理服务器的需要配置。
请根据实际情况配置
PROXY_PORT
否
配置代理端口。
80
PROXY_PROTOCOL
否
配置代理协议。支持http和https。
http
PROXY_USERNAME
否
配置代理用户名。
请根据实际情况配置
PROXY_PASSWORD
否
配置代理密码。
请根据实际情况配置
[flows]
监控的文件信息,可同时配置多个监控文件信息。
当前支持如下模式上传:
DISStream:持续监控文本文件,实时收集增量数据按分隔符解析并上传到DIS通道(通道源数据类型为BLOB/JSON/CSV),配置项说明请参见表3。
具体配置格式可以参见版本包中的“agent.yml”的样例。
表3 DISStream配置项说明 配置项
是否必填
说明
默认值
DISStream
是
DIS 通道名称。
将“filePattern”所匹配到的文件内容按分隔符解析并上传到此通道。
请根据实际情况配置
filePattern
是
文件监控路径,只能监控一个目录下的文件,无法递归目录监控。
如果要监控多个目录,可以在flows下面配置多个“DISStream”,文件名可使用“*”进行匹配。- “/tmp/*.log”表示匹配“/tmp”目录下所有以“.log”结尾的文件。
- “/tmp/access-*.log”表示匹配“/tmp”目录下所有以“access-”开头,以“.log”结尾的文件。
- Windows上路径范例为“D:\logs\*.log”。
请根据实际情况配置
directoryRecursionEnabled
否
是否查找子目录
- false:不递归查找子目录,只匹配根目录下的文件
- true: 递归查找所有子目录。如filePattern配置为/tmp/*.log,此时可以匹配到/tmp/one.log,/tmp/child/two.log,/tmp/child/child/three.log
false
initialPosition
否
监控起始位置。
- END_OF_FILE:开始启动时不解析当前匹配的文件,而是从新增文件或新增的内容开始按分隔符解析并上传。
- START_OF_FILE:将“filePattern”配置的所有匹配文件按照修改时间,从旧到新按分隔符解析并上传到DIS服务。
START_OF_FILE
maxBufferAgeMillis
否
最长上传等待时间。
单位:毫秒
- 记录队列满则立即上传。
- 记录队列未满,等待此配置项配置的时间后上传到DIS服务。
5000
maxBufferSizeRecords
否
记录队列缓存的最大记录数,如果队列达到此值则立刻上传这批数据。
500
partitionKeyOption
否
每条记录会携带一个PartitionKey,相同PartitionKey的记录会分配到同一个分区。此配置项可设置每条记录的PartitionKey值,取值如下:- RANDOM_INT:PartitionKey的值为随机数字的字符串,记录均匀分布在每个分区。
- FILE_NAME:PartitionKey的值为文件名称字符串,记录分布在特定的一个分区中。
- FILE_NAME,RANDOM_INT:PartitionKey的值为文件名称字符串与随机数字字符串的组合体,以英文逗号分隔,记录携带所属的文件名并均匀分布在所有分区。
RANDOM_INT
recordDelimiter
否
每条记录之间的分隔符。
取值范围:任意一个字符,且包含在双引号内。
取值不可为空,即该配置项不可配置为“”。
说明:如果取值为特殊字符,使用反斜杠(\)转义,如分隔符为引号("),可配置为"\"",如果为反斜杠(\),可配置为"\\"。
如果为控制字符如STX(正文开始),可配置为"\u0002"。
"\n"
isRemainRecordDelimiter
否
上传记录时,是否携带分隔符。- true:携带分隔符。
- false:不携带分隔符。
false
isFileAppendable
否
文件是否有追加内容的可能。
- true:文件可能会追加内容。Agent持续监控文件,若文件追加了内容则根据recordDelimiter解析后上传记录。此时要保证文件以recordDelimiter结尾,否则Agent会认为文件追加未完成,继续等待recordDelimiter写入。
- false:文件不会追加内容。文件最后一行不以recordDelimiter结尾,Agent仍会当做最后一条记录上传,上传完成后根据“deletePolicy”和“fileSuffix”的配置执行文件删除或重命名操作。
true
maxFileCheckingMillis
否
最长文件变动检查时间,如果文件在此时间内“大小”、“修改时间”和“文件ID”都没有变化,则认为文件已经完成并开始上传。
请根据实际文件变动的频率配置此值,避免文件未完成已开始上传的情况。
若文件上传后有变动,则会重新全量上传。
单位:毫秒
说明:“isFileAppendable”配置为“false”时该配置项生效。
5000
deletePolicy
否
文件内容上传完成之后的删除策略。- never:文件内容上传完毕后不删除文件。
- immediate:文件内容上传完毕后删除文件 。
说明:
“isFileAppendable”配置为“false”时该配置项生效。
never
fileSuffix
否
文件内容上传完成之后添加的文件名后缀。
例如:原文件名为“x.txt”,“fileSuffix”配置为“.COMPLETED”,则文件上传后的命名为“x.txt.COMPLETED”。
说明:“isFileAppendable”配置为“false”,同时“deletePolicy”配置为“never”,该配置项生效。
.COMPLETED
sendingThreadSize
否
发送线程数。默认单线程发送。
须知:使用多线程会导致如下问题:
- 数据发送不保证顺序。
- 程序异常停止并重新启动时会丢失部分数据。
1
fileEncoding
否
文件编码格式,支持UTF8, GBK, GB2312, ISO-8859-1等
UTF8
resultLogLevel
否
每次调用DIS数据发送接口后的结果日志级别。
- OFF:日志中不输出每次接口调用的结果。
- INFO:每次接口调用的结果以INFO级别输出到日志。
- WARN:每次接口调用的结果以WARN级别输出到日志。
- ERROR:每次接口调用的结果以ERROR级别输出到日志。
INFO
- (可选)使用Windows自带的记事本修改“agent.yml”文件,需要将文件另存为选“UTF-8”编码。
- 选择 。
- 在弹出的“另存为”窗口中选择“编码”为“UTF-8”。
- 单击“保存”,弹出“确认另存为”对话框。
- 单击“是”。
启动DIS Agent
- 使用文件管理器进入DIS Agent程序的bin目录,例如“C:\dis-agent-X.X.X\bin”。
- 双击“start-dis-agent.bat”文件,在弹出的控制台窗口显示如下内容表示启动成功。
[INFO ] (main) com.bigdata.dis.agent.Agent Agent: Startup completed in XXX ms.
DIS Agent启动后会立即上传文件,并持续打印日志。如果没有ERROR日志表示上传正常。
当日志输出不频繁(每30s打印一次),且有如下类似信息,表示已经上传完成。Agent: Progress: [0 records (0 bytes) / 10 files (32573229 bytes)] parsed, and [0 records / 10 files] sent successfully to destinations. Uptime: 30146ms
在OBS查看上传文件
- 登录对象存储服务管理控制台。
- 在左侧导航栏选择“桶列表”页签。
- 在右侧表格中,“桶名称”列单击对应的桶名称,即申请DIS通道中配置的“桶名称”。
- 在弹出的桶页面中单击左侧导航栏“对象”页签,查看已上传的文件。
创建数据库
- 在Console页面上方菜单栏中单击“产品”,单击“大数据”分类中的“数据湖探索 DLI”。
- 创建demo数据库,在DLI控制台总览页面,选择“SQL作业”,单击“创建作业”,进入SQL作业编辑器。
- 在SQL作业编辑器左侧,选择“数据库”,单击创建数据库。
“default”为内置数据库,不能创建名为“default”的数据库。
创建OBS表
- 选择demo数据库,在编辑框中输入以下SQL语句:
create table demo.cars( NeutralSlideTime STRING, IsRapidlySlowdown STRING, DataTime STRING, Latitude STRING, IsOverspeedFinished STRING, IsACCOpen STRING, Direction STRING, IsOverspeed STRING, IsNeutralSlide STRING, IsOilLeak STRING, BaiDuLatitude STRING, OverspeedTime STRING, IsRapidlySpeedup STRING, DeviceID STRING, Mileage STRING, Longitude STRING, Velocity STRING, IsNeutralSlideFinished STRING, IsFatgueDriving STRING, Carnum STRING, BaiDuLongitude STRING, BaiDuAdress STRING, IsHthrottleStop STRING, ReceiveTime STRING, Altitude STRING ) USING csv OPTIONS (path "obs://......")
请注意,将SQL语句中的“csv”修改为转储到OBS的文件格式,OBS路径修改为实际存放数据的OBS路径。
- 单击“执行”,创建表,如图3所示。
表中的各字段含义请参见表4。
表4 表字段含义 列名称(en)
数据类型
说明
DeviceID
string
设备ID
DataTime
string
数据时间
ReceiveTime
string
接收时间
IsACCOpen
string
ACC是否打开
Longitude
string
经度
Latitude
string
纬度
Velocity
string
速度
Direction
string
方向
Altitude
string
高度
Mileage
string
里程数
BaiDuLongitude
string
百度地图经度
BaiDuLatitude
string
百度地图纬度
BaiDuAdress
string
百度地图地址
Carnum
string
车牌号
IsRapidlySpeedup
string
急加速
IsRapidlySlowdown
string
急减速
IsNeutralSlide
string
空挡滑行
IsNeutralSlideFinished
string
空挡滑行结束
NeutralSlideTime
string
空挡滑行时长(s)
IsOverspeed
string
超速
IsOverspeedFinished
string
超速结束
OverspeedTime
string
超速时长(s)
IsFatgueDriving
string
疲劳驾驶
IsHthrottleStop
string
停车轰油门