Amazon ec2 将H2O生成的POJO部署到码头:/predict返回404

Amazon ec2 将H2O生成的POJO部署到码头:/predict返回404,amazon-ec2,jetty,pojo,h2o,jetty-9,Amazon Ec2,Jetty,Pojo,H2o,Jetty 9,我已经从H2O模型生成了一个POJO 在一个单独的EC2实例上,我想将此模型部署到Jetty servelet,用作API评分端点。我该怎么做 1.示例POJO 下面是一个最小的例子,demo\u glm,预测泰坦尼克号乘客的存活率,作为年龄、票价等级和性别的逻辑回归: /* 根据Apache许可证2.0版获得许可 http://www.apache.org/licenses/LICENSE-2.0.html 2017-09-13T17:30:17.931Z由H2O自动生成 3.13.0.390

我已经从H2O模型生成了一个POJO

在一个单独的EC2实例上,我想将此模型部署到Jetty servelet,用作API评分端点。我该怎么做

1.示例POJO 下面是一个最小的例子,
demo\u glm
,预测泰坦尼克号乘客的存活率,作为年龄、票价等级和性别的逻辑回归:

/*
根据Apache许可证2.0版获得许可
http://www.apache.org/licenses/LICENSE-2.0.html
2017-09-13T17:30:17.931Z由H2O自动生成
3.13.0.3908
独立预测代码,带有名为demo\u glm的GLMModel的样本测试数据
如何下载、编译和执行:
mkdir-tmpdir
cd-tmpdir
卷曲http://XXX.XX.XX.XXX:54321/3/h2o-genmodel.jar>h2o-genmodel.jar
卷曲http://XXX.XX.XX.XXX:54321/3/Models.java/demo_glm >demo_glm.java
javac-cp h2o-genmodel.jar-J-Xmx2g-J-XX:MaxPermSize=128m demo_glm.java
(注意:尝试java参数-XX:+PrintCompilation以显示运行时JIT编译器行为。)
*/
导入java.util.Map;
导入hex.genmodel.genmodel;
导入hex.genmodel.annotations.ModelPojo;
@ModelPojo(name=“demo\u glm”,algorithm=“glm”)
公共类demo_glm扩展了GenModel{
public hex.modelcegory getmodelcegory(){return hex.modelcegory.Binomial;}
public boolean isSupervised(){return true;}
public int nfeatures(){return 3;}
public int nclasses(){return 2;}
//模型使用的列的名称。
public static final String[]NAMES=NamesHolder\u demo\u glm.VALUES;
//“培训数据响应”列中包含的输出类数。
公共静态最终int NCLASSES=2;
//列域。最后一个数组包含响应列的域。
公共静态最终字符串[][]域=新字符串[][]{
/*pclass*/demo\u glm\u ColInfo\u 0.0值,
/*性别*/demo_glm_ColInfo_1.价值观,
/*年龄*/null,
/*幸存*/demo\u glm\u ColInfo\u 3.0个值
};
//先验类分布
public static final double[]PRIOR\u CLASS\u DISTRIB=null;
//用于模型构建的类分布
public static final double[]MODEL\u CLASS\u DISTRIB=null;
公共demo_glm(){super(名称、域);}
公共字符串getUUID(){返回Long.toString(-180691501344395521L);}
//以双[]格式传入数据,与模型要求预先对齐。
//将预测阻塞到preds[]数组中;preds[0]保留给
//主要预测(分类器类别或回归值),
//其余列保持分类器的概率分布。
公开最终双[]分0(双[]数据,双[]预测){
最终双[]b=β值;
对于(int i=0;i<2;++i)如果(Double.isNaN(data[i]))数据[i]=CAT_模式值[i];
对于(int i=0;i<1;++i)如果(Double.isNaN(数据[i+2]),数据[i+2]=NUM_表示值[i];
双eta=0.0;
对于(int i=0;i=0.3701702514726391)?1:0;//ROC给出的阈值
preds[1]=1.0-mu;//类0
preds[2]=mu;//类1
返回preds;
}
公共静态类BETA实现java.io.Serializable{
公共静态最终双精度[]值=新双精度[5];
静止的{
BETA_0.填充(值);
}
静态最终类BETA_0实现java.io.Serializable{
静态最终空隙填充(双[]sa){
sa[0]=-1.280567936795408;
sa[1]=-2.2896567020762353;
sa[2]=-2.497842116755616;
sa[3]=-0.034393168117166584;
sa[4]=3.5220688949789816;
}
}
}
//插补数值
静态类NUM_表示实现java.io.Serializable{
公共静态最终双精度[]值=新双精度[1];
静止的{
NUM_表示_0.填充(值);
}
静态最终类NUM_表示_0实现java.io.Serializable{
静态最终空隙填充(双[]sa){
sa[0]=29.881134512434045;
}
}
}
//插补的分类值。
静态类CAT_MODES实现java.io.Serializable{
公共静态最终int[]值=新int[2];
静止的{
CAT_模式_0.填充(值);
}
静态最终类CAT_MODES_0实现java.io.Serializable{
静态最终空隙填充(int[]sa){
sa[0]=2;
sa[1]=1;
}
}
}
//分类偏移量
公共静态final int[]CATOFFS={0,2,3};
}
//表示训练列名称的类
类NamesHolder_demo_glm实现java.io.Serializable{
公共静态最终字符串[]值=新字符串[3];
静止的{
名称持有者\u demo\u glm\u 0.填充(值);
}
静态最终类NamesHolder_demo_glm_0实现java.io.Serializable{
静态最终空隙填充(字符串[]sa){
sa[0]=“pclass”;
sa[1]=“性别”;
sa[2]=“年龄”;
}
}
}
//表示列pclass的类
类demo_glm_ColInfo_0实现java.io.Serializable{
公共静态最终字符串[]值=新字符串[3];
静止的{
demo_glm_ColInfo_0_0.填充(值);
}
静态最终类demo_glm_ColInfo_0_0实现java.io.Serializable{
静态最终空隙填充(字符串[]sa){
sa[0]=“第一”;
sa[1]=“第二”;
sa[2]=“第三”;
}
}
}
//表示列性别的类
类demo_glm_ColInfo_1实现java.io.Serializable{
公共静态最终字符串[]值=新字符串[2];
静止的{
demo_glm_ColInfo_1_0.填充(值);
}
静态最终类demo_glm_ColInfo_1_0实现java.io.Serializable{
静态最终空隙填充(字符串[]sa){
cd $JETTY_HOME/demo-base/webapps
mkdir model_demo
cd model_demo
curl http://XXX.XX.XX.XXX:54321/3/h2o-genmodel.jar > h2o-genmodel.jar
curl http://XXX.XX.XX.XXX:54321/3/Models.java/demo_glm > demo_glm.java
javac -cp h2o-genmodel.jar -J-Xmx2g -J-XX:MaxPermSize=128m 
curl http://XXX.XX.XX.YY:8080/predict?pclass=1st&age=29&sex=female
curl http://XXX.XX.XX.YY:8080/model_demo/predict?pclass=1st&age=29&s‌​ex=female
  Not Found 
$ cat src/main/webapp/WEB-INF/web.xml

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
         version="2.4">
    <servlet>
        <servlet-name>Predict</servlet-name>
        <servlet-class>ai.h2o.PredictServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Predict</servlet-name>
        <url-pattern>/predict</url-pattern>
    </servlet-mapping>
</web-app>