このトピックでは、Flink オンライン トレーニングジョブの構成について説明します。
1. Hologres 構成
パラメーター | 説明 | 例 |
endpoint | Hologres のエンドポイント。Host:Port の形式です。 | hgpostcn-cn-xxxx-cn-beijing-vpc.hologres.aliyuncs.com:80 |
dbname | Hologres データベースの名前。 | db_name |
tablename | モデルパラメーターを格納する Hologres テーブルの名前。 | 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 | 後続のアームを格納する Hologres テーブルの名前。 | rec.cold_start_item_table |
2. アルゴリズム構成
パラメーター | 説明 | 例 |
log.parser.parallelism | ログを解析するワーカーノードの並列度。 | 4 |
parallelism | アルゴリズムの並列度。 | 4 |
linucb.algo | LinUCB アルゴリズムのタイプ。有効な値: disjoint および hybrid。 | hybrid |
browse.window.size | インプレッションイベントが他のイベントを待機するために必要な時間。単位: 分。 | 8 |
default.window.size | インプレッションイベント以外の他のイベントの待機時間。単位: 分。 | 5 |
new.arm.duration.hours | アームのライフサイクル。単位: 時間。 | 24 |
new.arm.cache.minutes | 新しいアームがメモリにキャッシュされる時間。単位: 分。 | 1 |
arm.id.column.name |
| videoId |
arm.create.time.column.name |
| createTime |
arm.create.time.column.type | アームの作成時間の形式。 | timestamp |
注: Realtime Compute for Apache Flink コンソールで構成された並列度の値は、可能であれば log.parser.parallelism
構成項目の値と同じである必要があります。そうでない場合、コンソールで構成された値はこの構成項目の値以上である必要があります。ほとんどの場合、この構成項目の値は DataHub または Kafka パーティションの数以下です。
3. データソース構成
3.1 Kafka データソース
注: Kafka データソースの入力データは、{Key:Value, Key:Value,...} 形式の標準 JSON 文字列
である必要があります。
パラメーター | 説明 | 例 |
kafka.bootstrap.servers | Kafka サーバーの IP アドレス。 | 172.0.XX.XX:9092,172.0.XX.XX:9092 |
kafka.topic | Kafka トピック。 | item_bhv_log |
kafka.group.id | Kafka グループ ID。 | realtime_rec |
input.user.field.path | ユーザー ID の | $.userid |
input.arm.field.path | アームの | $.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 | イベントのリワード。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
構成項目でリワードが構成されていないイベントは除外されます。インプレッションイベントのリワードを 0 に設定することをお勧めします。
JSON パス
は JSON 構造内のパスを示します。このようなパスの名前は $ で始まります。このようなパスの詳細については、「LanguageManual UDF」をご参照ください。さまざまな文字の意味:
$: ルートノードを示します。
.
または ['']: 子ノードを示します。MaxCompute は、これら 2 種類の文字を使用して JSON オブジェクトを解析できます。JSON キーに.
が含まれている場合は、代わりに [''] を使用できます。"[] ([number])" は配列の添え字を示し、0 から始まります。
":" は配列のワイルドカードを示します。この文字が path パラメーターで使用されている場合、配列全体が返されます。
次のコードは、ログエントリのコンテンツの例を示しています。
{
"store": {
"fruit": [
{
"weight": 8,
"type": "apple" //りんご
},
{
"weight": 9,
"type": "pear" //洋梨
}
],
"bicycle": { //自転車
"price": 19.95, //価格
"color": "red" //色
}
},
"email": "a***@example.net", //メール
"owner": "a**" //所有者
}
JSON パス | 値 |
$.owner | a** |
$.store.bicycle.price | 19.95 |
$.store.fruit[0] | {"weight":8,"type":"apple"} |
$.store.fruit[0].type | apple |
3.2 DataHub データソース
パラメーター | 説明 | 例 |
datahub.endpoint | DataHub のエンドポイント。 | http://dh-cn-beijing-int-vpc.aliyuncs.com |
datahub.project | DataHub プロジェクトの名前。 | xxx_rec |
datahub.topic | DataHub トピックの名前。 | item_bhv_log |
datahub.sub.id | DataHub サブスクリプション ID。 | 16255766364793VNMA |
datahub.access.id | DataHub AccessKey ID。 | |
datahub.access.key | DataHub AccessKey シークレット。 | |
datahub.start.in.ms | ログデータの消費開始時刻。単位: ミリ秒。デフォルト値: ジョブの開始時刻。 |
|
input.user.field.path | ユーザー ID の | userid |
input.arm.field.path | アームの | 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 | イベントのリワード。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
にリワードが構成されていないイベントは除外されます。インプレッションイベントのリワードを 0 に設定することをお勧めします。
3.3 値パス
単一値フィールド: column_name
JSON フィールド: column_name.path
path は JSON 形式の値のパスを示します。ここで:
"." は子ノードを示します。
"[]" は配列の添え字を示し、
key[sub1][sub2][sub3]......
の形式です。
次のコードは、DataHub データソースの value
列の値の例を示しています。
{
"svd_tab": "recommend", //おすすめ
"publish_uid": 964655287, //投稿者UID
"totaltime": 8219, //合計時間
"exp_id": "ER4_L6#EG8****", //実験ID
"refer": ["weexpage", "html5"], //参照
"alogr_name": { //アルゴリズム名
"name": "U2IRecallV10", //名前
"type": "linucb" //タイプ
},
"svid": "5480249", //動画ID
"n_svid": "5505132", //次の動画ID
"playtime": 572, //再生時間
"n_alogr_name": "SwingU2IRecallV10", //次のアルゴリズム名
"request_id": "03cabe99-e46c-43bf-b689-5c6b9ab083fa" //リクエストID
}
value.svid
の値は 5480249 になります。value.alogr_name.name
の値は U2IRecallV10 になります。value.refer[1]
の値は html5 になります。
3.4 時間形式
パラメーター | 説明 |
timestamp | 整数型のタイムスタンプ。単位: 秒。 |
timestamp.in.millisecond | 整数型のタイムスタンプ。単位: ミリ秒。 |
java SimpleDateFormat | yyyy-MM-dd HH:mm:ss.SSS 形式の文字列。例: 2021-09-14 19:18:37.971。 |