专栏首页我是攻城师如何使用Hive集成Solr?

如何使用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

本文分享自微信公众号 - 我是攻城师(woshigcs),作者:woshigcs

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-03-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 最新版Solr6.2.1安装记录

    我是攻城师
  • Solr5.1.0如何安装部署?

    我是攻城师
  • SolrCloud5.4.1集群实战(一)

    我是攻城师
  • solr install

         Solr是一个独立的企业及搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的...

    week
  • solr安装配置

    环境介绍 solr 6.5.1 tomcat8 jdk1.8 一、下载solr安装包 下载地址:http://www.apach...

    似水的流年
  • solr安装配置

    环境介绍 solr 6.5.1 tomcat8 jdk1.8

    似水的流年
  • solr安装配置

    下载地址:http://www.apache.org/dyn/closer.lua/lucene/solr

    似水的流年
  • Solr搜索引擎 — 两种安装方式

    常常在业务开发中会遇到大列表的查询需求或者按照各项条件搜索内容,一般的做法往往都是数据库直接搞定,但是到了一定的程度只有这类需求会带来巨大的开销,一个表格中涉...

    喵了个咪233
  • Apache solr(一).

    概念:Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。Apache...

    JMCui
  • (二)Solr的安装配置及部署

    qubianzhong

扫码关注云+社区

领取腾讯云代金券