/*
* Copyright 2012 NGDATA nv
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.lilyproject.lilyservertestfw.launcher;
import java.io.File;
import java.util.List;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.lilyproject.hadooptestfw.HBaseTestingUtilityFactory;
import org.lilyproject.lilyservertestfw.TemplateDir;
public class HadoopLauncherService implements LauncherService {
private org.lilyproject.hadooptestfw.fork.HBaseTestingUtility hbaseTestUtility;
private Configuration conf;
private File testHome;
private boolean clearData;
private Option disableMROption;
private boolean disableMapReduce = false;
private Log log = LogFactory.getLog(getClass());
@Override
public void addOptions(List<Option> options) {
disableMROption = OptionBuilder
.withDescription("Disable startup of MapReduce services")
.withLongOpt("disable-map-reduce")
.create("dmr");
options.add(disableMROption);
}
@Override
public int setup(CommandLine cmd, File testHome, boolean clearData) throws Exception {
this.testHome = new File(testHome, TemplateDir.HADOOP_DIR);
FileUtils.forceMkdir(testHome);
this.clearData = clearData;
disableMapReduce = cmd.hasOption(disableMROption.getOpt());
return 0;
}
@Override
public int start(List<String> postStartupInfo) throws Exception {
conf = HBaseConfiguration.create();
hbaseTestUtility = HBaseTestingUtilityFactory.create(conf, testHome, clearData);
hbaseTestUtility.startMiniCluster(1);
if (!disableMapReduce) {
hbaseTestUtility.startMiniMapReduceCluster(1);
}
postStartupInfo.add("-------------------------");
postStartupInfo.add("HDFS is running");
postStartupInfo.add("");
postStartupInfo.add("HDFS web ui: http://" + conf.get("dfs.namenode.http-address"));
postStartupInfo.add("");
postStartupInfo.add("-------------------------");
postStartupInfo.add("HBase is running");
postStartupInfo.add("");
postStartupInfo.add("HBase master web ui: http://localhost:" +
hbaseTestUtility.getHBaseCluster().getMaster().getInfoServer().getPort());
postStartupInfo.add("");
postStartupInfo.add("To connect to this HBase, use the following properties:");
postStartupInfo.add("hbase.zookeeper.quorum=localhost");
postStartupInfo.add("hbase.zookeeper.property.clientPort=2181");
postStartupInfo.add("");
postStartupInfo.add("In Java code, create the HBase configuration like this:");
postStartupInfo.add("Configuration conf = HBaseConfiguration.create();");
postStartupInfo.add("conf.set(\"hbase.zookeeper.quorum\", \"localhost\");");
postStartupInfo.add("conf.set(\"hbase.zookeeper.property.clientPort\", \"2181\");");
postStartupInfo.add("");
if (!disableMapReduce) {
postStartupInfo.add("-------------------------");
postStartupInfo.add("MapReduce is running");
postStartupInfo.add("");
postStartupInfo.add("JobTracker web ui: http://localhost:" +
hbaseTestUtility.getMRCluster().getJobTrackerRunner().getJobTrackerInfoPort());
postStartupInfo.add("");
postStartupInfo.add("Configuration conf = new Configuration();");
postStartupInfo.add("conf.set(\"mapred.job.tracker\", \"localhost:" +
hbaseTestUtility.getMRCluster().getJobTrackerPort() + "\");");
postStartupInfo.add("Job job = new Job(conf);");
postStartupInfo.add("");
}
return 0;
}
@Override
public void stop() {
if (hbaseTestUtility != null) {
try {
hbaseTestUtility.shutdownMiniHBaseCluster();
} catch (Throwable t) {
log.error("Error shutting down MiniHBaseCluster", t);
}
try {
hbaseTestUtility.shutdownMiniMapReduceCluster();
} catch (Throwable t) {
log.error("Error shutting down MiniMapReduceCluster", t);
}
try {
hbaseTestUtility.shutdownMiniDFSCluster();
} catch (Throwable t) {
log.error("Error shutting down MiniDFSCluster", t);
}
try {
hbaseTestUtility.shutdownMiniZKCluster();
} catch (Throwable t) {
log.error("Error shutting down MiniZKCluster", t);
}
hbaseTestUtility = null;
}
}
public Configuration getConf() {
return conf;
}
}