基于 solr 和协同过滤算法的构件检索与推荐系统
定义
构件:一些可完成特定功能的代码片段和接口,包含构件名称和构件描述等属性,以图形化作为表现形式
流程:构件以线性关系进行组合后的以期望能完成更复杂功能的执行过程,以图形化作为表现形式
本项目依托于 Hadoop 大数据环境(包括 HDFS、HBase、Phoenix、Spark、Kafka、Zookeeper、Yarn),借助 Solr 框架集成 jieba 分词作为搜索引擎,实现通过同义词进行构件检索。利用 Spark ML 编写基于物品的协同过滤算法实现构件推荐。
需要安装以下 hadoop 环境,推荐借助 Ambari 进行搭建,Ambari 的安装教程见
需要安装的 Hadoop 环境有如下几项,安装教程见各工具官方文档:
- HDFS 2.7.0 +
- MapReduce2 2.7.0 +
- YARN 2.7.0 +
- HBase 1.2.x
- Spark 2.3.0
- Phoenix 4.13.0
- Zookeeper 3.4.0 +
- Solr 7.0 +
- hbase-indexer
本项目以 maven 作为依赖管理工具,特别的,你需要首先安装或打包以下依赖包(这些库不存在于公共仓库,请下载安装,安装教程见各工具说明),
-
下载完成后使用
mvn install -DskipTests
安装 -
下载完成后使用
mvn package -DskipTests
得到better-jieba-solr-xxx.jar -
下载完成后使用
mvn install -DskipTests
安装 -
下载完成后使用
mvn package -DskipTests
得到hbase-indexer-phoenix-mapper-xxx.jar
在依赖包完成安装或打包后,下载该项目,若你使用 Idea 开发工具,将会自动进行 maven 依赖库的安装。
本项目使用 HBase 作为数据库,并借助 Phoenix 进行 SQL 操作,数据库按照业务逻辑分为三部分
- 构件推荐数据库(构件库,用户库)
- 用户使用历史数据库
- 词库(分词库、同义词库)
数据库定义文件位于example/sql
目录下。数据文件位于example/data
目录下。
通过以下指令创建数据表并导入示例数据
psql.py jieba_dict.sql recommend.sql thesaurus.sql
psql.py -t JIEBA_DICT jieba_dict.csv
psql.py -t THESAURUS_GROUP thesaurus_group.csv
psql.py -t THESAURUS_BELONG thesaurus_belong.csv
psql.py -t USERS users.csv
psql.py -t COMPONENTS components.csv
psql.py -t HISTORY history.csv
-
将位于
example/solr
目录下的cn_schema_configs
复制到${SOLR_HOME}/server/solr/configsets
目录下 -
并将
better-jieba-solr-1.0-SNAPSHOT.jar
、phoenix-4.13.1-HBase-1.2-client.jar(位于phoenix安装目录下)
复制到${SOLR_HOME}/server/solr-webapp/WEB-INF/lib/
目录下并替换protobuf-java-3.1.0.jar
为protobuf-java-2.5.0.jar
-
创建solr的zookeeper根路径
bin/solr zk mkroot /solr -z localhost:2181
-
启动 solr 服务
bin/solr start -force -c -z localhost:2181/solr
-
创建集合
compsCollection
并指定配置集bin/solr create -force -c compsCollection \ -n compsCollConfigs \ -s 1 \ -rf 1 \ -d cn_schema_configs
- 将
hbase-indexer-phoenix-mapper-1.0.0.jar
和phoenix-core-4.13.1-HBase-1.2.jar(位于phoenix安装目录下)
复制到${HBASE_INDEXER_HOME}\lib
目录下 - 启动 hbase-indexer 服务
- 将
example/hbase-indexer/morphlines.conf
复制到/conf
目录下,没有则创建 - 创建索引
hbase-indexer add-indexer -n compsindexer \
--indexer-conf morphline-phoenix-mapper.xml \
--connection-param solr.zk=localhost:2181/solr \
--connection-param solr.collection=compsCollection \
- 启动 Kafka 服务
- 创建 topic:history,作为用户使用历史记录的 topic
kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic history
需指定 solr 服务器地址及参数、zookeeper 地址、kafka 地址和 Kafka Producer、Kafka Comsumer 的参数等,具体配置如下所示:
kafka:
history:
topics:
- history
kafka-params-consumer:
"[bootstrap.servers]": localhost:9092
"[group.id]": history
"[key.deserializer]": org.apache.kafka.common.serialization.StringDeserializer
"[value.deserializer]": org.apache.kafka.common.serialization.StringDeserializer
kafka-params-producer:
"[bootstrap.servers]": localhost:9092
"[key.serializer]": org.apache.kafka.common.serialization.StringSerializer
"[value.serializer]": org.apache.kafka.common.serialization.StringSerializer
"[linger.ms]": 1
"acks": all
"[batch.size]": 200
"[client.id]": history-producer
solr:
address: http://node2.hdp:8983/solr
connectionTimeout: 10000
socketTimeout: 60000
collectionName: compsCollection