Java tutorial
/** * Copyright (c) Acroquest Technology Co, Ltd. All Rights Reserved. * Please read the associated COPYRIGHTS file for more details. * * THE SOFTWARE IS PROVIDED BY Acroquest Technolog Co., Ltd., * WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDER BE LIABLE FOR ANY * CLAIM, DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING * OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. */ package acromusashi.stream.example.ml.client; import java.io.IOException; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; import org.apache.commons.cli.OptionBuilder; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.apache.commons.cli.PosixParser; import org.apache.thrift7.TException; import acromusashi.stream.config.StormConfigGenerator; import acromusashi.stream.config.StormConfigUtil; import backtype.storm.Config; import backtype.storm.generated.DRPCExecutionException; import backtype.storm.utils.DRPCClient; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; /** * LofTopology??????????DRPC * * @author kimura */ public class LofDrpcClient { /** ? */ public static final int DEFAULT_DRPCPORT = 3772; /** * ????? */ public LofDrpcClient() { } /** * ?<br/> * <br/> * ?/?<br/> * <ul> * <li>-c LOFTopology(</li> * <li>-d LOF Data(?????)</li> * <li>-h </li> * </ul> * * @param args */ public static void main(String... args) { LofDrpcClient client = new LofDrpcClient(); client.startSendRequest(args); } /** * LofTopology??DRPC?? * * @param args */ protected void startSendRequest(String[] args) { Options cliOptions = createOptions(); CommandLineParser parser = new PosixParser(); CommandLine commandLine = null; HelpFormatter help = new HelpFormatter(); try { commandLine = parser.parse(cliOptions, args); } catch (ParseException pex) { help.printHelp(LofDrpcClient.class.getName(), cliOptions, true); return; } if (commandLine.hasOption("h")) { // ?????????? help.printHelp(LofDrpcClient.class.getName(), cliOptions, true); return; } // ?? String confPath = commandLine.getOptionValue("c"); String lofData = commandLine.getOptionValue("d"); Config stormConfig = null; try { stormConfig = StormConfigGenerator.loadStormConfig(confPath); } catch (IOException ex) { // ??????? ex.printStackTrace(); return; } String drpcHost = StormConfigUtil.getStringListValue(stormConfig, "drpc.servers").get(0); int drpcPort = StormConfigUtil.getIntValue(stormConfig, "drpc.port", DEFAULT_DRPCPORT); String drpcFunction = StormConfigUtil.getStringValue(stormConfig, "lof.drpc.function", "lof"); double lofScore = 0.0d; try { lofScore = sendRequest(drpcHost, drpcPort, drpcFunction, lofData); } catch (TException | DRPCExecutionException | IOException ex) { // ?????? ex.printStackTrace(); return; } System.out.println("LOF Data=" + lofData + ", LOFScore=" + lofScore); } /** * LOF??DRPC???LOF?? * * @param drpcHost DRPC * @param drpcPort DRPC? * @param drpcFunction ???? * @param lofData LOF * @return LOF * @throws DRPCExecutionException DRPC * @throws TException DRPC * @throws IOException ? */ public double sendRequest(String drpcHost, int drpcPort, String drpcFunction, String lofData) throws TException, DRPCExecutionException, IOException { DRPCClient client = new DRPCClient(drpcHost, drpcPort); String drpcResult = client.execute(drpcFunction, lofData); // ????????? // [["84.406 129.347 50.527","LofPoint[dataId=7b6f1200-7117-4231-bc95-32c448237f5b, // dataPoint={84.406,129.347,50.527},kDistance=0.0,kDistanceNeighbor=<null>,lrd=0.0,judgeDate=Tue Nov 26 18:56:00 JST 2013]", // "{\"lofScore\":1.924027244063857,\"lofPoint\":{\"dataId\":\"7b6f1200-7117-4231-bc95-32c448237f5b\", // \"dataPoint\":[84.406,129.347,50.527],\"kDistance\":0.0,\"kDistanceNeighbor\":null,\"lrd\":0.0,\"judgeDate\":1385459760464}}"]] ObjectMapper mapper = new ObjectMapper(); JsonNode baseNode = mapper.readTree(drpcResult); String lofResultStr = baseNode.get(0).get(2).asText(); JsonNode lofResultTree = mapper.readTree(lofResultStr); double lofScore = lofResultTree.get("lofScore").asDouble(); return lofScore; } /** * ??? * * @return ?? */ public static Options createOptions() { Options cliOptions = new Options(); // LofTopology OptionBuilder.hasArg(true); OptionBuilder.withArgName("LofTopology Conf Path"); OptionBuilder.withDescription("LofTopology Conf Path"); OptionBuilder.isRequired(true); Option confPathOption = OptionBuilder.create("c"); // LOF OptionBuilder.hasArg(true); OptionBuilder.withArgName("LOF Data"); OptionBuilder.withDescription("LOF Data"); OptionBuilder.isRequired(true); Option dataOption = OptionBuilder.create("d"); // OptionBuilder.withDescription("show help"); Option helpOption = OptionBuilder.create("h"); cliOptions.addOption(confPathOption); cliOptions.addOption(dataOption); cliOptions.addOption(helpOption); return cliOptions; } }