A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | AA | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | inputTaskCount | min_output_tasks | max_threads | scatter? | scatterCount | outputTaskCount | inputThreadCount | outputThreadCount | 有効Inputスレッド | 有効Outputスレッド | メモ | ||||||||||||||||
2 | 1 | 1 | 4 | FALSE | #N/A | 1 | 4 | 4 | 1 | 1 | max_threads = 4 にしたところで、タスク数がそもそも1なので、並列度は1にしかならない | ||||||||||||||||
3 | 1 | 2 | 4 | TRUE | 2 | 2 | 2 | 2 | 1 | 2 | inputThreadCountが2になっているが、inputTask数が1なので、inputの並列度は1にしかならない Scatter されて output タスク数は2になり、output スレッド数も調整されて、並列度が期待通り2にあがる | ||||||||||||||||
4 | 1 | 4 | 4 | TRUE | 4 | 4 | 1 | 4 | 1 | 4 | Scatter されて output の並列度が4になった | ||||||||||||||||
5 | 1 | 8 | 4 | TRUE | 8 | 8 | 1 | 4 | 1 | 8 | BUG: max_threads=4 なのに、OutputThreadが8つになってしまった | ||||||||||||||||
6 | 2 | 1 | 4 | FALSE | #N/A | 2 | 4 | 4 | 2 | 2 | |||||||||||||||||
7 | 2 | 2 | 4 | FALSE | #N/A | 2 | 4 | 4 | 2 | 2 | |||||||||||||||||
8 | 2 | 4 | 4 | TRUE | 2 | 4 | 2 | 4 | 2 | 4 | |||||||||||||||||
9 | 2 | 8 | 4 | TRUE | 4 | 8 | 1 | 4 | 1 | 4 | Inputの並列数を減らしてScatterしようとするので良くない 1つのスレッドで2つのOutputTaskが動くパターン | ||||||||||||||||
10 | 4 | 1 | 4 | FALSE | #N/A | 4 | 4 | 4 | 4 | 4 | |||||||||||||||||
11 | 4 | 2 | 4 | FALSE | #N/A | 4 | 4 | 4 | 4 | 4 | |||||||||||||||||
12 | 4 | 4 | 4 | FALSE | #N/A | 4 | 4 | 4 | 4 | 4 | |||||||||||||||||
13 | 4 | 8 | 4 | TRUE | 2 | 8 | 2 | 4 | 2 | 4 | Inputの並列数を減らしてScatterしようとするので良くない | ||||||||||||||||
14 | |||||||||||||||||||||||||||
15 | |||||||||||||||||||||||||||
16 | |||||||||||||||||||||||||||
17 | 緑背景: コア数2とした時のデフォルト min_output_tasks と max_threads | ||||||||||||||||||||||||||
18 | |||||||||||||||||||||||||||
19 | inputTaskCount = FileInputプラグインの場合ファイル数、Inputプラグインの場合1 | ||||||||||||||||||||||||||
20 | scatter? = inputTaskCount < min_output_tasks | ||||||||||||||||||||||||||
21 | ScatterExecutor の場合 | ||||||||||||||||||||||||||
22 | scatterCount = (min_output_tasks + inputTaskCount - 1) / inputTaskCount | ||||||||||||||||||||||||||
23 | outputTaskCount = inputTaskCount * scatterCount | ||||||||||||||||||||||||||
24 | inputThreadCount = max(max_threads / scatterCount, 1) | ||||||||||||||||||||||||||
25 | outputThreadCount = min(max_threads, outputTaskCount) *変数として定義されているわけではない | ||||||||||||||||||||||||||
26 | DirectExecutor の場合 | ||||||||||||||||||||||||||
27 | outputTaskCount = inputTaskCount | ||||||||||||||||||||||||||
28 | inputThreadCount = max_threads | ||||||||||||||||||||||||||
29 | outputThreadCount = max_threads *正確には input と output で同じスレッドを利用する | ||||||||||||||||||||||||||
30 | |||||||||||||||||||||||||||
31 | |||||||||||||||||||||||||||
32 | |||||||||||||||||||||||||||
33 | Q. DirectExecutor の場合に、newFixedThreadPool で maxThreads 分スレッドを作っているが、min(inputTaskCount, maxThreads) 作れば十分なのでは? | ||||||||||||||||||||||||||
34 | Q. FileOutput で試すと ScatterExecutor で「有効Outputスレッド数」よりも少ない並列度になるのだが、なぜ? embulk-output-bigquery なら問題なかった | ||||||||||||||||||||||||||
35 | 例えば、入力ファイル2、-X min_output_tasks=4 =X max_threads=4 で、FileOutputPlugin で ThreadID をログに出したところ、4 ではなく 2個のスレッドしか使われていなかった | ||||||||||||||||||||||||||
36 | https://github.com/sonots/embulk/tree/thread_log | ||||||||||||||||||||||||||
37 | ./gradlew cli | ||||||||||||||||||||||||||
38 | pkg/embulk-0.8.6.jar run -l trace -X page_size=64 -X min_output_tasks=4 -X max_threads=4 example/two_files.yml | ||||||||||||||||||||||||||
39 | Q. InputTaskCount=1, min_output_tasks=8, max_threads=4 で、実験してみると OutputThread が 8 になってしまった | ||||||||||||||||||||||||||
40 | |||||||||||||||||||||||||||
41 | |||||||||||||||||||||||||||
42 | |||||||||||||||||||||||||||
43 | |||||||||||||||||||||||||||
44 | |||||||||||||||||||||||||||
45 | |||||||||||||||||||||||||||
46 | |||||||||||||||||||||||||||
47 | |||||||||||||||||||||||||||
48 | |||||||||||||||||||||||||||
49 | |||||||||||||||||||||||||||
50 | |||||||||||||||||||||||||||
51 | |||||||||||||||||||||||||||
52 | |||||||||||||||||||||||||||
53 | |||||||||||||||||||||||||||
54 | |||||||||||||||||||||||||||
55 | |||||||||||||||||||||||||||
56 | |||||||||||||||||||||||||||
57 | |||||||||||||||||||||||||||
58 | |||||||||||||||||||||||||||
59 | |||||||||||||||||||||||||||
60 | |||||||||||||||||||||||||||
61 | |||||||||||||||||||||||||||
62 | |||||||||||||||||||||||||||
63 | |||||||||||||||||||||||||||
64 | |||||||||||||||||||||||||||
65 | |||||||||||||||||||||||||||
66 | |||||||||||||||||||||||||||
67 | |||||||||||||||||||||||||||
68 | |||||||||||||||||||||||||||
69 | |||||||||||||||||||||||||||
70 | |||||||||||||||||||||||||||
71 | |||||||||||||||||||||||||||
72 | |||||||||||||||||||||||||||
73 | |||||||||||||||||||||||||||
74 | |||||||||||||||||||||||||||
75 | |||||||||||||||||||||||||||
76 | |||||||||||||||||||||||||||
77 | |||||||||||||||||||||||||||
78 | |||||||||||||||||||||||||||
79 | |||||||||||||||||||||||||||
80 | |||||||||||||||||||||||||||
81 | |||||||||||||||||||||||||||
82 | |||||||||||||||||||||||||||
83 | |||||||||||||||||||||||||||
84 | |||||||||||||||||||||||||||
85 | |||||||||||||||||||||||||||
86 | |||||||||||||||||||||||||||
87 | |||||||||||||||||||||||||||
88 | |||||||||||||||||||||||||||
89 | |||||||||||||||||||||||||||
90 | |||||||||||||||||||||||||||
91 | |||||||||||||||||||||||||||
92 | |||||||||||||||||||||||||||
93 | |||||||||||||||||||||||||||
94 | |||||||||||||||||||||||||||
95 | |||||||||||||||||||||||||||
96 | |||||||||||||||||||||||||||
97 | |||||||||||||||||||||||||||
98 | |||||||||||||||||||||||||||
99 | |||||||||||||||||||||||||||
100 |