Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
BlockFactory |
|
| 1.0;1 |
1 | /* | |
2 | * Licensed to the Apache Software Foundation (ASF) under one | |
3 | * or more contributor license agreements. See the NOTICE file | |
4 | * distributed with this work for additional information | |
5 | * regarding copyright ownership. The ASF licenses this file | |
6 | * to you under the Apache License, Version 2.0 (the | |
7 | * "License"); you may not use this file except in compliance | |
8 | * with the License. You may obtain a copy of the License at | |
9 | * | |
10 | * http://www.apache.org/licenses/LICENSE-2.0 | |
11 | * | |
12 | * Unless required by applicable law or agreed to in writing, software | |
13 | * distributed under the License is distributed on an "AS IS" BASIS, | |
14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
15 | * See the License for the specific language governing permissions and | |
16 | * limitations under the License. | |
17 | */ | |
18 | package org.apache.giraph.block_app.framework; | |
19 | ||
20 | import java.util.List; | |
21 | ||
22 | import org.apache.giraph.block_app.framework.block.Block; | |
23 | import org.apache.giraph.conf.GiraphConfiguration; | |
24 | import org.apache.hadoop.conf.Configuration; | |
25 | ||
26 | /** | |
27 | * Class describing a particular application. | |
28 | * Everything except input and output should be fully encapsulated within | |
29 | * this class. For any application, it should be enough to only specify | |
30 | * particular BlockFactory. | |
31 | * | |
32 | * Given configuration, it creates a block that represents a full Giraph job. | |
33 | * | |
34 | * Recommended is to extend AbstractBlockFactory directly for most cases. | |
35 | * | |
36 | * @param <S> Execution stage type | |
37 | */ | |
38 | public interface BlockFactory<S> { | |
39 | /** | |
40 | * Based on provided configuration, updates it, such that all necessary | |
41 | * properties are initialized. | |
42 | */ | |
43 | void initConfig(GiraphConfiguration conf); | |
44 | ||
45 | /** | |
46 | * Create a block (representing a full Giraph job), based on the given | |
47 | * configuration. Configuration should be treated as immutable at this point. | |
48 | * | |
49 | * If there are issues in configuration, it is very cheap to throw | |
50 | * from this method - as Giraph job will not even start. | |
51 | * This function will be called two times - once before starting | |
52 | * of the Giraph job, to fail early if anything is incorrectly configured. | |
53 | * Second time will be on Master, which will return Block instance | |
54 | * on which createIterator will be called once, which should return | |
55 | * current application run. | |
56 | * initConfig will be called only once, before starting Giraph job itself. | |
57 | * Master will contain configuration already modified by initConfig. | |
58 | */ | |
59 | Block createBlock(GiraphConfiguration conf); | |
60 | ||
61 | /** | |
62 | * Create an empty instance of execution stage object. | |
63 | * | |
64 | * Can be used by application to be aware of what was executed before. | |
65 | * Most common example is counting iterations, or for having a boolean whether | |
66 | * some important event happened. | |
67 | * | |
68 | * Execution stage should be immutable object, with creating a new | |
69 | * object when different value is needed. | |
70 | */ | |
71 | S createExecutionStage(GiraphConfiguration conf); | |
72 | ||
73 | /** | |
74 | * Get special GC Java options. If returns null, default options are used. | |
75 | */ | |
76 | List<String> getGcJavaOpts(Configuration conf); | |
77 | ||
78 | /** | |
79 | * Register outputs to use during the application (vs output at the end of | |
80 | * the application), based on provided configuration. | |
81 | */ | |
82 | void registerOutputs(GiraphConfiguration conf); | |
83 | } |