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; /** * KMeansTopology??????????DRPC * * @author kimura */ public class KMeansDrpcClient { /** ? */ public static final int DEFAULT_DRPCPORT = 3772; /** * ????? */ public KMeansDrpcClient() { } /** * ?<br/> * <br/> * ?/?<br/> * <ul> * <li>-c KMeansTopology(</li> * <li>-d KMeans Data(?????)</li> * <li>-h </li> * </ul> * * @param args */ public static void main(String... args) { KMeansDrpcClient client = new KMeansDrpcClient(); client.startSendRequest(args); } /** * KMeansTopology??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(KMeansDrpcClient.class.getName(), cliOptions, true); return; } if (commandLine.hasOption("h")) { // ?????????? help.printHelp(KMeansDrpcClient.class.getName(), cliOptions, true); return; } // ?? String confPath = commandLine.getOptionValue("c"); String kmeansData = 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, "kmeans.drpc.function", "kmeans"); String kmeanResult = null; try { kmeanResult = sendRequest(drpcHost, drpcPort, drpcFunction, kmeansData); } catch (TException | DRPCExecutionException | IOException ex) { // ?????? ex.printStackTrace(); return; } System.out.println("KMeans Data=" + kmeansData + ", KMeans Result=" + kmeanResult); } /** * KMeans??DRPC???LOF?? * * @param drpcHost DRPC * @param drpcPort DRPC? * @param drpcFunction ???? * @param kmeansData KMeans * @return KMeans? * @throws DRPCExecutionException DRPC * @throws TException DRPC * @throws IOException ? */ public String sendRequest(String drpcHost, int drpcPort, String drpcFunction, String kmeansData) throws TException, DRPCExecutionException, IOException { DRPCClient client = new DRPCClient(drpcHost, drpcPort); String drpcResult = client.execute(drpcFunction, kmeansData); // ????????? // [["0.3230647,0.4288709,0.2918048,0.7904559,5", // "KmeansPoint[label=<null>,dataPoint={0.3230647,0.4288709,0.2918048,0.7904559,5.0}]", // "{\"dataPoint\":[0.3230647,0.4288709,0.2918048,0.7904559,5.0],\"centroidIndex\":2, // \"centroid\":[0.49254449862586597,0.29060293775519647,0.19902678114457303,0.7925079800808319,5.0],\"distance\":0.23759924945376112}"]] ObjectMapper mapper = new ObjectMapper(); JsonNode baseNode = mapper.readTree(drpcResult); String kmeanResultStr = baseNode.get(0).get(2).asText(); JsonNode kmeanResultTree = mapper.readTree(kmeanResultStr); return kmeanResultTree.toString(); } /** * ??? * * @return ?? */ public static Options createOptions() { Options cliOptions = new Options(); // KMeansTopology OptionBuilder.hasArg(true); OptionBuilder.withArgName("KMeansTopology Conf Path"); OptionBuilder.withDescription("KMeansTopology Conf Path"); OptionBuilder.isRequired(true); Option confPathOption = OptionBuilder.create("c"); // LOF OptionBuilder.hasArg(true); OptionBuilder.withArgName("KMeans Data"); OptionBuilder.withDescription("KMeans 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; } }