1,PredictionIO如果用直接下载的0.11.0-incubating版本,存在一个HDFS配置相关的BUG

执行pio status命令时会发生如下的错误:

-- ::, ERROR org.apache.predictionio.data.storage.Storage$ [main] - Error initializing storage client for source HDFS
java.io.IOException: No FileSystem for scheme: hdfs
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:)
at org.apache.hadoop.fs.FileSystem.access$(FileSystem.java:)
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:)
at org.apache.predictionio.data.storage.hdfs.StorageClient.<init>(StorageClient.scala:)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:)
at java.lang.reflect.Constructor.newInstance(Constructor.java:)
at org.apache.predictionio.data.storage.Storage$.getClient(Storage.scala:)
at org.apache.predictionio.data.storage.Storage$.org$apache$predictionio$data$storage$Storage$$updateS2CM(Storage.scala:)
at org.apache.predictionio.data.storage.Storage$$anonfun$sourcesToClientMeta$.apply(Storage.scala:)
at org.apache.predictionio.data.storage.Storage$$anonfun$sourcesToClientMeta$.apply(Storage.scala:)
at scala.collection.mutable.MapLike$class.getOrElseUpdate(MapLike.scala:)
at scala.collection.mutable.AbstractMap.getOrElseUpdate(Map.scala:)
at org.apache.predictionio.data.storage.Storage$.sourcesToClientMeta(Storage.scala:)
at org.apache.predictionio.data.storage.Storage$.getDataObject(Storage.scala:)
at org.apache.predictionio.data.storage.Storage$.getDataObjectFromRepo(Storage.scala:)
at org.apache.predictionio.data.storage.Storage$.getModelDataModels(Storage.scala:)
at org.apache.predictionio.data.storage.Storage$.verifyAllDataObjects(Storage.scala:)
at org.apache.predictionio.tools.commands.Management$.status(Management.scala:)
at org.apache.predictionio.tools.console.Pio$.status(Pio.scala:)
at org.apache.predictionio.tools.console.Console$$anonfun$main$.apply(Console.scala:)
at org.apache.predictionio.tools.console.Console$$anonfun$main$.apply(Console.scala:)
at scala.Option.map(Option.scala:)
at org.apache.predictionio.tools.console.Console$.main(Console.scala:)
at org.apache.predictionio.tools.console.Console.main(Console.scala)
-- ::, ERROR org.apache.predictionio.tools.commands.Management$ [main] - Unable to connect to all storage backends successfully.

这是一个已知的代码错误 https://issues.apache.org/jira/browse/PIO-91

可以通过从github上下载最新源码自己编译来解决此问题。

2,编译PredictionIO源码的方式

根据PredictionIO的官方文档编译时,一定要要注意【准确】指定自己的环境中各组件的相应的版本号,例如下面这样。
   ./make-distribution.sh -Dscala.version=2.11.11 -Dspark.version=2.1.1 -Delasticsearch.version=5.5.1 -Dhadoop.version=2.7.3
 
如果用的是ElasticSearch1.7.1版本,就应该是下面这样
   ./make-distribution.sh -Dscala.version=2.11.8 -Dspark.version=2.1.0 -Delasticsearch.version=1.7.1 -Dhadoop.version=2.7.2 

之所以把ElasticSearch版本拿出来说,是因为编译成功后,我们需要修改conf目录中的pio-env.sh配置文件,此时需要特别注意:

3,0.11.0-incubating版本对于ElasticSearch的版本支持问题

这个版本的PIO的代码中,有ElasticSearch1和ElasticSearch5两套支持代码。

而ElasticSearch2可能会使用ES5的代码,可能产生问题,例如使用了一些只有ES5中才有的type “keyword”。

所以0.11.0-incubating版本不建议配合ElasticSearch2使用。

同时要注意,不同版本的ES下,pio-env.sh的配置上可能会有少许差异,否则也会出问题

ES1的默认端口配置为9300

  PIO_STORAGE_SOURCES_ELASTICSEARCH_HOSTS=<some-elasticsearch-node>,<some-other-elasticsearch-node>,...

  PIO_STORAGE_SOURCES_ELASTICSEARCH_PORTS=9300,9300,9300

ES5的默认端口配置为9200

  PIO_STORAGE_SOURCES_ELASTICSEARCH_HOSTS=<some-elasticsearch-node>,<some-other-elasticsearch-node>,...

  PIO_STORAGE_SOURCES_ELASTICSEARCH_PORTS=9200,9200,9200

因为Universal Recommender中主要支持ElasticSearch1,所以我们最终决定使用ElasticSearch1。

PredictionIO+Universal Recommender快速开发部署推荐引擎的问题总结(1)的更多相关文章

  1. PredictionIO+Universal Recommender快速开发部署推荐引擎的问题总结(3)

    PredictionIO+Universal Recommender虽然可以帮助中小企业快速的搭建部署基于用户行为协同过滤的个性化推荐引擎,单纯从引擎层面来看,开发成本近乎于零,但仍然需要一些前提条件 ...

  2. PredictionIO+Universal Recommender快速开发部署推荐引擎的问题总结(2)

    1, 对Universal Recommender进行pio build成功,但是却提示No engine found Building and delpoying model [INFO] [Eng ...

  3. SNF快速开发平台--规则引擎整体介绍及使用说明书

    一.设计目标 a)规则引擎语法能够满足分单,计费,WMS策略的配置要求.语法是一致和统一的 b)能够在不修改规则引擎模块的情况下,加入任意一个新的规则:实现上述需求之外的规则配置需求 c)运算速度快 ...

  4. SNF快速开发平台--规则引擎在程序当中如何调用

    规则定义完如何在程序当中进行使用呢? 其时很简单,只需要如下代码就可以调用程序: 规则定义: 调用代码: #region 演示2:生成左表数据(规则) POST: /api/DEMO/DemoSing ...

  5. SNF快速开发平台--规则引擎介绍和使用文档

    设计目标: a) 规则引擎语法能够满足分单,计费,WMS策略的配置要求.语法是一致和统一的 b) 能够在不修改规则引擎模块的情况下,加入任意一个新的规则:实现上述需求之外的规则配置需求 c) 运算速度 ...

  6. Atitit 快速开发的推荐技术标准化 规范 大原则

    Atitit 快速开发的推荐技术标准化 规范 大原则 1. 如何评估什么样的技术适合快速开发??1 1.1. (重要)判断语言层次..层次越高开发效率越高  4gl  dsl> 3.5gl &g ...

  7. 使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速开发部署微信后台

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:公众号后台系统和数据都基本准备妥当了,可以来分享下我是如何开发本微信公众号的后台系统了 ...

  8. 4款java快速开发平台推荐

    JBoss Seam JBoss Seam,算得上是Java开源框架里面最优秀的快速开发框架之一. Seam框架非常出色,尤其是他的组件机制设计的很有匠心,真不愧是Gavin King精心打造的框架了 ...

  9. UWP简单示例(三):快速开发2D游戏引擎

    准备 IDE:VisualStudio 2015 Language:VB.NET/C# 图形API:Win2D MSDN教程:UWP游戏开发 游戏开发涉及哪些技术? 游戏开发是一门复杂的艺术,编码方面 ...

随机推荐

  1. Nosql简介 Redis,Memchche,MongoDb的区别

    本篇文章主要介绍Nosql的一些东西,以及Nosql中比较火的三个数据库Redis.Memchache.MongoDb和他们之间的区别.以下是本文章的阅读目录 一.Nosql介绍 1.Nosql简介 ...

  2. 4. 跟踪标记 (Trace Flag) 610 对索引组织表(IOT)最小化日志

    跟踪标记:610 功能: 用批量导入操作(Bulk Import Operations)加载数据时,对于索引组织表(即有聚集索引的表) 最小化日志: 上图为simple/bulk-logged恢复模式 ...

  3. HTML 使用jQuery选中复选框 简易版

    <html><head>   <meta charset="utf-8">   <script src="jquery-1.7. ...

  4. NGUI_01

    序言:这是张三疯第一次开始NGUI插件的学习,刚开始学习,肯定有很多漏洞,后期会及时的补上的.希望大家可以见谅,希望大佬多多指教. 扩充:为提供和我一样的小白找不到免费的NGUI插件,这里分享百度网盘 ...

  5. poj2524 解题报告

    基于并查集的一道简单题目 Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 22334 ...

  6. base64位加密解密

    1.base64位加密base64是用于传输8Bit字节代码,由上图的编码表可以知道,编码后的内容只包含这64个字符类型,所以称为base64编码 2.编码过程 : 首先将待编码的内容转换成8位二进制 ...

  7. 深入理解ES6之—增强的数组功能

    创建数组 Array.of()方法 ES6为数组新增创建方法的目的之一,是帮助开发者在使用Array构造器时避开js语言的一个怪异点.Array.of()方法总会创建一个包含所有传入参数的数组,而不管 ...

  8. Opticks依赖库的下载和编译

    最近下载Opticks的代码编译,用其自带的retrieve-dependencies.bat下载依赖库,总是提示缺少模块. 分析了一下错误原因,根据命令窗的提示,手动下载如下配置文件: https: ...

  9. python 序列:字符串、列表、元组

    python 序列:字符串.列表.元组   序列:包含一定顺序排列的对象的一个结构 内建函数:str() list() tuple() 可以使用str(obj)可以把对象obj转换成字符串 list( ...

  10. SSI学习(二)

    1.SSI指令 #config:指定返回到client浏览器的错误消息.日期和文件大小所使用的格式. #echo:在 HTML 页中插入环境变量的值. #exec:执行一个应用程序或一条 shell ...