千家信息网

如何使用Hive集成Solr?

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,(一)Hive+Solr简介Hive作为Hadoop生态系统里面离线的数据仓库,可以非常方便的使用SQL的方式来离线分析海量的历史数据,并根据分析的结果,来干一些其他的事情,如报表统计查询等。Solr
千家信息网最后更新 2025年12月02日如何使用Hive集成Solr?

(一)Hive+Solr简介

Hive作为Hadoop生态系统里面离线的数据仓库,可以非常方便的使用SQL的方式来离线分析海量的历史数据,并根据分析的结果,来干一些其他的事情,如报表统计查询等。
Solr作为高性能的搜索服务器,能够提供快速,强大的全文检索功能。

(二)为什么需要hive集成solr?

有时候,我们需要将hive的分析完的结果,存储到solr里面进行全文检索服务,比如以前我们有个业务,对我们电商网站的搜索日志使用hive分析完后 存储到solr里面做报表查询,因为里面涉及到搜索关键词,这个字段是需要能分词查询和不分词查询的,通过分词查询可以查看改词的相关的产品在某一段时间内的一个走势图。 有时候,我们又需要将solr里面的数据加载到hive里面,使用sql完成一些join分析功能, 两者之间优劣互补,以更好的适应我们的业务需求。当然网上已经有一些hive集成solr的开源项目,但由于 版本比较旧,所以无法在新的版本里面运行,经过散仙改造修补后的可以运行在最新的版本。

(三)如何才能使hive集成solr?

所谓的集成,其实就是重写hadoop的MR编程接口的一些组件而已。我们都知道MR的编程接口非常灵活,而且高度抽象,MR不仅仅可以从HDFS上加载 数据源,也可以从任何非HDFS的系统中加载数据,当然前提是我们需要自定义:
InputFormat
OutputFormat
RecordReader
RecordWriter
InputSplit
组件,虽然稍微麻烦了点,但从任何地方加载数据这件事确实可以做到,包括mysql,sqlserver,oracle,mongodb, solr,es,redis等等。

上面说的是定制Hadoop的MR编程接口,在Hive里面除了上面的一些组件外,还需要额外定义SerDe组件和组装StorageHandler,在hive里面 SerDe指的是 Serializer and Deserializer,也就是我们所说的序列化和反序列化,hive需要使用serde和fileinput来读写hive 表里面的一行行数据。
读的流程:
HDFS files / every source -> InputFileFormat --> --> Deserializer --> Row object
写的流程:
Row object --> Serializer --> --> OutputFileFormat --> HDFS files / every source

(四)hive集成solr后能干什么?

(1)读取solr数据,以hive的支持的SQL语法,能进行各种聚合,统计,分析,join等
(2)生成solr索引,一句SQL,就能通过MR的方式给大规模数据构建索引

(五)如何安装部署以及使用?
源码在这里,不在粘贴了,已经上传github了,有需要的朋友可以使用 git clonehttps://github.com/qindongliang/hive-solr 后,修改少许pom文件后,执行
mvn clean package
命令构建生成jar包,并将此jar包拷贝至hive的lib目录即可

例子如下:
(1)hive读取solr数据

建表:

Sql代码

  1. --存在表就删除

  2. drop table if exists solr;

  3. --创建一个外部表

  4. create external table solr (

  5. --定义字段,这里面的字段需要与solr的字段一致

  6. rowkey string,

  7. sname string

  8. )

  9. --定义存储的storehandler

  10. stored by "com.easy.hive.store.SolrStorageHandler"

  11. --配置solr属性

  12. tblproperties('solr.url' = 'http://192.168.1.28:8983/solr/a',

  13. 'solr.query' = '*:*',

  14. 'solr.cursor.batch.size'='10000',

  15. 'solr.primary_key'='rowkey'

  16. );

  17. 执行bin/hive 命令,进行hive的命令行终端:

  18. --查询所有数据

  19. select * from solr limit 5;

  20. --查询指定字段

  21. select rowkey from solr;

  22. --以mr的方式聚合统计solr数据

  23. select sname ,count(*) as c from solr group by sname order by c desc



(2)使用hive给solr构建索引的例子

首先构建数据源表:

Sql代码

  1. --如果存在就删除

  2. drop table if exists index_source;

  3. --构建一个数据表

  4. CREATE TABLE index_source(id string, yname string,sname string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;

  5. --向数据源里面导入本地数据

  6. load data local inpath '/ROOT/server/hive/test_solr' into table index_source;

  7. 其次,构建solr的关联表:

  8. --删除已经存在的表

  9. drop table if exists index_solr;

  10. --创建关联solr表

  11. create external table index_solr (

  12. id string,

  13. yname string,

  14. sname string

  15. )

  16. --定义存储引擎

  17. stored by "com.easy.hive.store.SolrStorageHandler"

  18. --设置solr服务属性

  19. tblproperties('solr.url' = 'http://192.168.1.28:8983/solr/b',

  20. 'solr.query' = '*:*',

  21. 'solr.cursor.batch.size'='10000',

  22. 'solr.primary_key'='id'

  23. );



最后,执行下面的sql命令,即可给数据源中的数据,构建solr索引:

Sql代码

  1. --注册hive-solr的jar包,否则MR方式运行的时候,将不能正常启动

  2. add jar /ROOT/server/hive/lib/hive-solr.jar;

  3. --执行插入命令

  4. INSERT OVERWRITE TABLE index_solr SELECT * FROM index_source ;

  5. --执行成功之后,即可在solr的终端界面查看,也可以再hive里面执行下面的solr查询

  6. select * from index_solr limit 10 ;



(六)他们还能其他的框架集成么?

当然,作为开源独立的框架,我们可以进行各种组合, hive也可以和elasticsearch进行集成,也可以跟mongodb集成, solr也可以跟spark集成,也可以跟pig集成,但都需要我们自定义相关的组件才行,思路大致与这个项目的思路一致。

(七)本次测试通过的基础环境

Apache Hadoop2.7.1
Apache Hive1.2.1
Apache Solr5.1.0

(八)感谢并参考的资料:

https://github.com/mongodb/mongo-hadoop/tree/master/hive/src/main/java/com/mongodb/hadoop/hive
https://github.com/lucidworks/hive-solr
https://github.com/chimpler/hive-solr
https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide#DeveloperGuide-HowtoWriteYourOwnSerDe


数据 查询 分析 命令 字段 组件 面的 数据源 方式 索引 存储 代码 接口 版本 搜索 服务 统计 编程 运行 一致 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 cookie只保存在服务器 王者苹果服务器越靠前越好吗 小学生网络安全教育家长留言 亚马逊开店需要什么服务器 广东涌浪网络技术有限公司好吗 jsp批量更新数据库 福建狂潮软件开发公司 铁路警察维护网络安全 辽交的计算机网络技术专业怎么样 亲朋服务器占时无法登录什么情况 计算机软件开发合同纠纷起诉书 成都万米网络技术 凡尔纳小说软件开发 2022山东春考网络技术 原神服务器 wow进游戏如何看自己的服务器 信息化时代的网络安全 植入数据库 icp许可证 服务器 我的世界移动服务器下载 关于网络安全方面的话题 蜂巢网络技术有限公司 藁城区应用软件开发服务供应 维普数据库子库 长春智能法治文化展馆软件开发 华为云文档数据库部署方式 哈利波特渠道服和官服服务器 树莓派芯片做服务器 网络安全热线电话是多少 做软件开发的小公司有哪些
0