Asumsikan bahwa saya memiliki Aliran Data acara dan saya ingin menyiarkannya ke operator peta (kaya) (map1) yang dirantai ke operator peta (kaya) lain (map2). Paralelisme kedua peta adalah sama. Yang saya inginkan adalah output dari setiap instance paralel map1 menuju ke satu instance paralel map2 (yaitu, tidak ada siaran di antara dua peta). Inilah yang telah saya lakukan sejauh ini tetapi saya tidak yakin apakah itu benar secara logis. Apakah itu baik-baik saja?

val trainedStream = events.broadcast.map(new Mapper1(...)).setParallelism(par)
trainedStream.startNewChain.map(new Mapper2(...)).setParallelism(par)

Pertanyaan Tindak Lanjut: Apakah SubtaskIndex (diterima dari RuntimeContext.getIndexOfThisSubtask) dari dua subtugas berantai/contoh paralel map1 dan map2 adalah sama? Apakah ada cara untuk memeriksa ini?

Kode dalam Scala tetapi hal yang sama berlaku untuk Java, saya kira

0
user3161227 10 Maret 2020, 18:33

1 menjawab

Jawaban Terbaik

Chaining terjadi secara otomatis di Flink bila memungkinkan. Jadi, dalam contoh Anda, cukup menggunakan

val trainedStream = events.broadcast.map(new Mapper1(...)).map(new Mapper2(...))

Saya akan mengatur paralelisme pada env kemudian.

Btw yakin mau menyiarkan acaranya? Sebuah Datastream diproses secara paralel secara default. Ini sangat tidak biasa untuk menyiarkan acara, karena akan diproses beberapa kali sesuai dengan paralelisme.

Pertanyaan Tindak Lanjut: Apakah SubtaskIndex (diterima dari RuntimeContext.getIndexOfThisSubtask) dari dua subtugas berantai/contoh paralel map1 dan map2 adalah sama? Apakah ada cara untuk memeriksa ini?

Indeks subtugas sama untuk operator berantai karena mereka berada di tugas yang sama (karenanya mereka bahkan tidak dapat memiliki indeks yang berbeda). Anda dapat melihat bahwa rantai berhasil jika Anda memiliki tugas mapper1 -> mapper2.

1
Arvid Heise 11 Maret 2020, 08:20