本次predictionio部署的系统为:虚拟机centos6.5,内存4G,已在本机(win7)安装Mysql。predictionio由两部分组成:eventserver和predictionserver,eventserver负责数据源的收集,predictionserver为推荐引擎。三类数据需要保存:数据源eventdata、模型(modeldata)、metadata。三类数据默认保存在PostgreSQL,可在pio-env.sh中配置,pio-env.sh文件位置为apache-predictionio-0.10.0-incubating/conf,默认提供的模版文件pio-env.sh.template,需执行若下命令mv pio-env.sh.template pio-env.sh
本次部署选用mysql数据库,需要修改配置文件pio-env.sh,将三类数据的类型改为mysql# Default is to usePostgreSQL PIO_STORAGE_REPOSITORIES_METADATA_NAME=pio_meta PIO_STORAGE_REPOSITORIES_METADATA_SOURCE=MYSQL PIO_STORAGE_REPOSITORIES_EVENTDATA_NAME=pio_event PIO_STORAGE_REPOSITORIES_EVENTDATA_SOURCE=MYSQL PIO_STORAGE_REPOSITORIES_MODELDATA_NAME=pio_model PIO_STORAGE_REPOSITORIES_MODELDATA_SOURCE=MYSQL
并将Mysql的连接配置为自己已安装并启动的数据库,本次部署以搭建的Mysql数据,在pio-env.sh中的配置如下# MySQL Example PIO_STORAGE_SOURCES_MYSQL_TYPE=jdbc PIO_STORAGE_SOURCES_MYSQL_URL=jdbc:mysql://192.168.107.1:3306/pio PIO_STORAGE_SOURCES_MYSQL_USERNAME=root PIO_STORAGE_SOURCES_MYSQL_PASSWORD=123456
eventserver
eventserver部署步骤参照:http://predictionio.incubator.apache.org/install/install-sourcecode/首先下载apache-predictionio-0.10.0-incubating.tar.gz,下载路径https://www.apache.org/dyn/closer.cgi/incubator/predictionio/0.10.0-incubating/apache-predictionio-0.10.0-incubating.tar.gz解压,并新建vendors文件夹。tar zxvf apache-predictionio-0.10.0-incubating.tar.gz cd apache-predictionio-0.10.0-incubating ./make-distribution.sh mkdir vendors
进入刚才新建的vendors文件夹,下载并解压spark安装包。cd vendors wget http://d3kbcqa49mib13.cloudfront.net/spark-1.5.1-bin-hadoop2.6.tgz tar -zxvf spark-1.5.1-bin-hadoop2.6.tgz
启动,本次使用的数据库为mysql,在文件夹apache-predictionio-0.10.0-incubating/bin下执行,不要执行pio-start-all./pio eventserver &
执行成功后,出现如下界面[root@cent65m bin]# ./pio eventserver & [1] 8076 [root@cent65m bin]# [INFO] [Console$] Creating Event Server at 0.0.0.0:7070 [INFO] [HttpListener] Bound to /0.0.0.0:7070 [INFO] [EventServerActor] Bound received. EventServer is ready.
可使用如下命令查看启动状态./pio status
predictionserver部署predictionserver配置步骤参照:http://predictionio.incubator.apache.org/templates/recommendation/quickstart/。predictionserver部署的前提条件是eventserver部署完成并已启动。1. 利用引擎模板创建推荐引擎
首先进入想把推荐引擎部署到的路径,本次推荐引擎部署在apache-predictionio-0.10.0-incubating目录下cd /home/apache-predictionio-0.10.0-incubating pio template get apache/incubator-predictionio-template-recommender MyRecommendation cd MyRecommendation
2. 产生 AppID 和 Access Key
本次部署的推荐引擎命名为MyApp1,则执行以下命令pio app new MyApp1
本次部署产生的Access Key: UzTEPPAr37VmAGArebKZ9B1KeIopTo75w3GdOBXhU-PjEQbYGWaCMzm_hNiAqKC8,产生购买或评分数据时会用到这个Access Key。可执行以下命令,查看已产生的应用pio app list
3. 收集数据
执行以下命令,产生购买或评分数据,eventserver会把自动这些数据保存到数据库中。curl -i -X POST http://localhost:7070/events.json?accessKey=UzTEPPAr37VmAGArebKZ9B1KeIopTo75w3GdOBXhU-PjEQbYGWaCMzm_hNiAqKC8 \ -H "Content-Type: application/json" \ -d '{ "event" : "buy", "entityType" : "user", "entityId" : "u1", "targetEntityType" : "item", "targetEntityId" : "i2", "eventTime" : "2014-11-10T12:34:56.123-08:00" }'
其中accessKey=UzTEPPAr37VmAGArebKZ9B1KeIopTo75w3GdOBXhU-PjEQbYGWaCMzm_hNiAqKC8,accessKey=后面的Key是上一步中产生的Access Key。修改"entityId" : "u1"中的u1或"targetEntityId" : "i2"中的i2,会产生不同用户购买不同的商品ID,例如,"entityId" : "u1"修改为"entityId" : "u2",便于后续训练数据和推荐。在浏览器访问如下链接,可查询已经产生的数据。http://localhost:7070/events.json?accessKey=UzTEPPAr37VmAGArebKZ9B1KeIopTo75w3GdOBXhU-PjEQbYGWaCMzm_hNiAqKC84. 将推荐引擎部署为服务
进入到MyRecommendation路径,修改Engine.json,将appname修改为本次命名的MyApp1,修改成如下a) 编译"appName": "MyApp1"
b) 训练数据pio build --verbose
c) 部署为服务pio train
pio deployd) 获取推荐结果
curl -H "Content-Type: application/json" -d '{ "user": "u1", "num": 4 }' http://localhost:8000/queries.json
其中"user": "u1"中的u1为收集数据步骤中产生数据时执行的命令。部署中遇到的问题与解决
1. 执行编译(build)时,报错:Not a valid command: assemblyPackageDependency原因:编译前未进入到MyRecommendation解决:cd MyRecommendation进入MyRecommendation路径下,再执行pio build注意:pio的bin路径要加到/etc/profile中或者输入pio的全路径,比如本次部署可执行/home/ apache-predictionio-0.10.0-incubating/bin/pio train解决方法也可参考:https://github.com/sphereio/docker-predictionio/issues/4
2.执行train时报错: ERROR org.apache.spark.executor.Executor [Executor task launch worker-3] - Exce解决:减小engine.json中的循环次数。解决方法可参照:http://stackoverflow.com/questions/34133172/predictionio-enginepredictionio部署文档和安装包下载
其他链接
DASE Components Explained (Recommendation)推荐引擎解释链接http://predictionio.incubator.apache.org/templates/recommendation/dase/System Architecture and Dependencies链接http://predictionio.incubator.apache.org/system/