Flink 在線學習訓練任務的配置如下。
1. Hologres配置
配置項 | 備注 | 示例 |
endpoint | 格式:host:port。 | hgpostcn-cn-xxxx-cn-beijing-vpc.hologres.aliyuncs.com:80 |
dbname | hologres數據庫名稱。 | db_name |
tablename | 存儲模型參數的holo的表名。 | rec.contextual_bandit_models |
username | hologres的用戶名。 | ${holo_user_name} |
password | hologres的密碼。 | ${holo_password} |
insertOrUpdate | 數據插入模式:是否覆蓋。 | true |
hologres.feature.table | 存儲特征的hologres表名。 | rec.contextual_bandit_features |
hologres.arm.table | 存儲后續arm的hologres表名。 | rec.cold_start_item_table |
2. 算法配置
配置項 | 備注 | 示例 |
log.parser.parallelism | 日志解析的worker并行度。 | 4 |
parallelism | 算法并行度。 | 4 |
linucb.algo | linucb算法類型,disjoint or hybrid。 | hybrid |
browse.window.size | 曝光事件等待其他事件的時間,單位:分鐘。 | 8 |
default.window.size | 其他事件在內存中等待的時間,單位:分鐘。 | 5 |
new.arm.duration.hours | arm的生命周期,單位:小時。 | 24 |
new.arm.cache.minutes | 新arm在內存中cache的時間,單位:分鐘。 | 1 |
arm.id.column.name | arm的ID在表 中的列名。 | videoId |
arm.create.time.column.name | arm的創建時間在表 中的列名。 | createTime |
arm.create.time.column.type | arm的創建時間的格式,后文有詳細介紹。 | timestamp |
備注:配置項log.parser.parallelism
,vvp(UI界面)上設置的并發度不能低于該值,盡量保持一致;并且該值一般不大于data source的并發(datahub或kafka的分片數)。
3. 數據源配置
3.1 kafka
備注:要求kafka的輸入為json string
,標準的JSON格式對象,格式為{Key:Value, Key:Value,...}。
配置項 | 備注 | 示例 |
kafka.bootstrap.servers | kafka server ips。 | 172.0.XX.XX:9092,172.0.XX.XX:9092 |
kafka.topic | kafka topic。 | item_bhv_log |
kafka.group.id | kafka group ID。 | realtime_rec |
input.user.field.path | 用戶ID的 | $.userid |
input.arm.field.path | arm的 | $.value.svid |
input.event.type.field.path | 事件類型的 | $.event_name |
input.event.time.field.path | 事件時間的 | $.gmt |
input.event.time.format | 事件時間的格式, 詳見下文。 | "yyyy-MM-dd HH:mm:ss.SSS" |
input.event.reward.json | 事件的reward,JSON格式。 | {"exposure":0,"svplay":0.5,"svplayend":1,"share":2,"likes":1.5} |
input.exposure.event.name | 曝光事件的名稱。 | exposure |
input.event.equal.filter | 日志滿足等式條件時才保留,{"key": "value"}。 | {"from_page":"p_smartvideodetail"} |
input.event.in.filter | 日志滿足集合條件時才保留,{"key": [...]}。 | {"refer":["p_weexpage", "p_svhome", "p_svh_tab_0"]} |
備注:不在配置項input.event.reward.json
中配置reward的事件將會被過濾掉;曝光事件的reward建議設置為0。
備注:json path
表示在JSON中的path,以$開頭。更多path信息,請參見LanguageManual UDF。不同字符的含義如下:
$:表示根節點。
.
或['']:表示子節點。MaxCompute支持用這兩種字符解析JSON對象,當JSON的Key本身包含.
時,可以用['']來替代。[]:[number]表示數組下標,從0開始。
:Wildcard for [],返回整個數組。不支持轉義。
示例:假設某條日志的內容為
{
"store": {
"fruit": [
{
"weight": 8,
"type": "apple"
},
{
"weight": 9,
"type": "pear"
}
],
"bicycle": {
"price": 19.95,
"color": "red"
}
},
"email": "a***@example.net",
"owner": "a**"
}
JSON path | value |
$.owner | a** |
$.store.bicycle.price | 19.95 |
$.store.fruit[0] | {"weight":8,"type":"apple"} |
$.store.fruit[0].type | apple |
3.2 datahub
配置項 | 備注 | 示例 |
datahub.endpoint | 數據總線endpoint。 | http://dh-cn-beijing-int-vpc.aliyuncs.com |
datahub.project | 數據總線項目名。 | xxx_rec |
datahub.topic | 數據總線topic。 | item_bhv_log |
datahub.sub.id | 數據總線訂閱ID。 | 16255766364793VNMA |
datahub.access.id | 用戶名。 | |
datahub.access.key | 密碼。 | |
datahub.start.in.ms | 日志數據的開始消費時間戳(單位毫秒)。 | 默認值:Job啟動的時間 |
input.user.field.path | 用戶ID的 | userid |
input.arm.field.path | arm的 | value.svid |
input.event.type.field.path | 事件類型的 | event_name |
input.event.time.field.path | 事件時間的 | gmt |
input.event.time.format | 事件時間的格式,詳見下文。 | "yyyy-MM-dd HH:mm:ss.SSS" |
input.event.reward.json | 事件的reward,JSON格式。 | {"exposure":0,"svplay":0.5,"svplayend":1,"share":2,"likes":1.5} |
input.exposure.event.name | 曝光事件的名稱。 | exposure |
input.event.equal.filter | 日志滿足等式條件時才保留,{"key": "value"}。 | {"from_page":"p_smartvideodetail"} |
input.event.in.filter | 日志滿足集合條件時才保留,{"key": [...]}。 | {"refer":["p_weexpage", "p_svhome", "p_svh_tab_0"]} |
備注:不在配置項input.event.reward.json
中配置reward的事件會被過濾掉;曝光事件的reward建議設置為0。
3.3 Value Path
單值字段:column_name
JSON字段:column_name.path
path表示JSON值的路徑,其中:
. 表示子節點
[] 表示數組下標,數據格式為:
key[sub1][sub2][sub3]......
示例: 假設某datahub有一 column value
,其值為
{
"svd_tab": "recommend",
"publish_uid": 964655287,
"totaltime": 8219,
"exp_id": "ER4_L6#EG8****",
"refer": ["weexpage", "html5"],
"alogr_name": {
"name": "U2IRecallV10",
"type": "linucb"
},
"svid": "5480249",
"n_svid": "5505132",
"playtime": 572,
"n_alogr_name": "SwingU2IRecallV10",
"request_id": "03cabe99-e46c-43bf-b689-5c6b9ab083fa"
}
value.svid
可取到值 "5480249"。value.alogr_name.name
可取到值 "U2IRecallV10"。value.refer[1]
可取到值 "html5"。
3.4 Time Format
配置項 | 說明 |
timestamp | 整型,時間戳,單位:秒。 |
timestamp.in.millisecond | 整型,時間戳,單位:毫秒。 |
java SimpleDateFormat | 字符串,2021-09-14 19:18:37.971 -> "yyyy-MM-dd HH:mm:ss.SSS"。 |