[
https://issues.apache.org/jira/browse/KYLIN-4923?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17318047#comment-17318047
]
ASF GitHub Bot commented on KYLIN-4923:
---------------------------------------
zhengshengjun commented on a change in pull request #1611:
URL: https://github.com/apache/kylin/pull/1611#discussion_r610686888
##########
File path: tool/src/main/java/org/apache/kylin/tool/CubeMigrationCLI.java
##########
@@ -86,82 +98,113 @@
protected String dstProject;
protected String srcHdfsWorkDir;
protected String dstHdfsWorkDir;
+ private boolean migrateSegment;
+ private boolean realExecute;
+ private boolean purgeAndDisable;
+ private OptionsHelper optHelper;
private static final String ACL_PREFIX = "/acl/";
private static final String GLOBAL_DICT_PREFIX = "/dict/global_dict/";
- public static void main(String[] args) throws IOException,
InterruptedException {
+ private static final Option OPTION_SRC_CONFIG =
OptionBuilder.isRequired(true).hasArg().withDescription("The KylinConfig of the
cube’s source").create("srcConfig");
+ private static final Option OPTION_DST_CONFIG =
OptionBuilder.isRequired(true).hasArg().withDescription("The KylinConfig of the
cube’s new home").create("dstConfig");
+ private static final Option OPTION_ALL_CUBES =
OptionBuilder.isRequired(false).withDescription("migrate all cubes meta from
source cluster").create("allCubes");
+ private static final Option OPTION_CUBE =
OptionBuilder.isRequired(false).hasArg().withDescription("Cube name to
migrate").create("cube");
+ private static final Option OPTION_DST_PROJECT =
OptionBuilder.isRequired(false).hasArg().withDescription("cube's new project
home, if not set, keep the same as source cluster").create("dstProject");
+ private static final Option OPTION_SRC_PROJECT =
OptionBuilder.isRequired(false).hasArg().withDescription("source project to
migrate").create("srcProject");
+ private static final Option OPTION_COPY_ACL =
OptionBuilder.isRequired(false).hasArg().withDescription("copy
ACL").create("copyAcl");
+ private static final Option OPTION_PURGE_AND_DISABLE =
OptionBuilder.isRequired(false).withDescription("purge source cluster
data").create("purgeAndDisable");
+ private static final Option OPTION_OVERWRITE =
OptionBuilder.isRequired(false).withDescription("overwrite target cluster's
meta if exists").create("overwriteIfExists");
+ private static final Option OPTION_EXECUTE =
OptionBuilder.isRequired(false).withDescription("execute
migration").create("execute");
+ private static final Option OPTION_MIGRATE_SEGMENTS =
OptionBuilder.isRequired(false).withDescription("migrate segment
data").create("migrateSegment");
+
+ public static void main(String[] args) throws Exception {
+ CubeMigrationCLI cli = new CubeMigrationCLI();
+ cli.init(args);
+ cli.moveCube();
+ }
+ public void init(String[] args) {
+ optHelper = new OptionsHelper();
CubeMigrationCLI cli = new CubeMigrationCLI();
- if (args.length != 8 && args.length != 9) {
- cli.usage();
+ try {
+ optHelper.parseOptions(cli.getOptions(), args);
+ } catch (Exception e) {
+ logger.error("failed to parse arguments", e);
+ optHelper.printUsage("CubeMigrationCLI", cli.getOptions());
System.exit(1);
}
- if (args.length == 8) {
- cli.moveCube(args[0], args[1], args[2], args[3], args[4], args[5],
args[6], args[7]);
- } else if (args.length == 9) {
- cli.moveCube(args[0], args[1], args[2], args[3], args[4], args[5],
args[6], args[7], args[8]);
- }
+ doAclCopy = optHelper.hasOption(OPTION_COPY_ACL);
+ doOverwrite = optHelper.hasOption(OPTION_OVERWRITE);
+ doMigrateSegment = optHelper.hasOption(OPTION_MIGRATE_SEGMENTS);
+ purgeAndDisable = optHelper.hasOption(OPTION_PURGE_AND_DISABLE);
+ srcConfig =
KylinConfig.createInstanceFromUri(optHelper.getOptionValue(OPTION_SRC_CONFIG));
+ srcStore = ResourceStore.getStore(srcConfig);
+ dstConfig =
KylinConfig.createInstanceFromUri(optHelper.getOptionValue(OPTION_DST_CONFIG));
+ dstStore = ResourceStore.getStore(dstConfig);
+ migrateSegment = optHelper.hasOption(OPTION_MIGRATE_SEGMENTS);
+ realExecute = optHelper.hasOption(OPTION_EXECUTE);
+ dstProject = optHelper.getOptionValue(OPTION_DST_PROJECT);
+ conf = HadoopUtil.getCurrentConfiguration();
}
- protected void usage() {
- System.out.println(
- "Usage: CubeMigrationCLI srcKylinConfigUri dstKylinConfigUri
cubeName projectName copyAclOrNot purgeOrNot overwriteIfExists realExecute
migrateSegmentOrNot");
- System.out.println("srcKylinConfigUri: The KylinConfig of the cube’s
source \n"
- + "dstKylinConfigUri: The KylinConfig of the cube’s new home
\n"
- + "cubeName: the name of cube to be migrated. \n"
- + "projectName: The target project in the target
environment.(Make sure it exist) \n"
- + "copyAclOrNot: true or false: whether copy cube ACL to
target environment. \n"
- + "purgeOrNot: true or false: whether purge the cube from src
server after the migration. \n"
- + "overwriteIfExists: overwrite cube if it already exists in
the target environment. \n"
- + "realExecute: if false, just print the operations to take,
if true, do the real migration. \n"
- + "migrateSegmentOrNot:(optional) true or false: whether copy
segment data to target environment. \n");
-
- }
+ public void moveCube() throws Exception {
+ conf = HadoopUtil.getCurrentConfiguration();
- public void moveCube(String srcCfgUri, String dstCfgUri, String cubeName,
String projectName, String copyAcl,
- String purgeAndDisable, String overwriteIfExists,
String realExecute)
- throws IOException, InterruptedException {
+ if (optHelper.hasOption(OPTION_CUBE)) {
+ CubeManager cubeManager = CubeManager.getInstance(srcConfig);
+ moveSingleCube(optHelper.getOptionValue(OPTION_CUBE), dstProject,
cubeManager);
Review comment:
You are right. Maybe try to create it automatically?
Whether the specified destProject exists in source cluster or not, the
cube's owner keep unchanged.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
> CubeMigration Tools support migrate meta from 2.x/3.x cluster to 4.0 cluster
> ----------------------------------------------------------------------------
>
> Key: KYLIN-4923
> URL: https://issues.apache.org/jira/browse/KYLIN-4923
> Project: Kylin
> Issue Type: Improvement
> Components: Tools, Build and Test
> Reporter: ShengJun Zheng
> Priority: Major
> Fix For: v4.0.0-GA
>
>
> Hi, currently we are migrating metadata of 2.x(KYLIN on HBASE) to KYLIN 4.0,
> the existing migration tool doesn't support migrate meta from 2.x/3.x cluster
> to 4.0. We'll add this ability to make _upgrading from old version to 4.0_
> more conveniently.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)