设为首页 收藏本站
查看: 883|回复: 0

[经验分享] 如何使用Hive集成Solr?

[复制链接]

尚未签到

发表于 2018-11-1 11:49:50 | 显示全部楼层 |阅读模式
  (一)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代码  

  •   --存在表就删除
  •   drop table  if exists solr;

  •   --创建一个外部表
  •   create external table solr (
  •   --定义字段,这里面的字段需要与solr的字段一致
  •   rowkey string,
  •   sname string

  •   )
  •   --定义存储的storehandler
  •   stored by "com.easy.hive.store.SolrStorageHandler"
  •   --配置solr属性
  •   tblproperties('solr.url' = 'http://192.168.1.28:8983/solr/a',
  •   'solr.query' = '*:*',
  •   'solr.cursor.batch.size'='10000',
  •   'solr.primary_key'='rowkey'
  •   );
  •   执行bin/hive 命令,进行hive的命令行终端:

  •   --查询所有数据
  •   select * from solr limit 5;
  •   --查询指定字段
  •   select rowkey from solr;
  •   --以mr的方式聚合统计solr数据
  •   select sname ,count(*) as c from solr group by sname  order by c desc
  (2)使用hive给solr构建索引的例子
  首先构建数据源表:
  Sql代码  

  •   --如果存在就删除
  •   drop table if exists index_source;

  •   --构建一个数据表
  •   CREATE TABLE index_source(id string, yname string,sname string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;

  •   --向数据源里面导入本地数据
  •   load  data local inpath '/ROOT/server/hive/test_solr' into table index_source;
  •   其次,构建solr的关联表:

  •   --删除已经存在的表
  •   drop table  if exists index_solr;

  •   --创建关联solr表
  •   create external table index_solr (
  •   id string,
  •   yname string,
  •   sname string
  •   )
  •   --定义存储引擎
  •   stored by "com.easy.hive.store.SolrStorageHandler"
  •   --设置solr服务属性
  •   tblproperties('solr.url' = 'http://192.168.1.28:8983/solr/b',
  •   'solr.query' = '*:*',
  •   'solr.cursor.batch.size'='10000',
  •   'solr.primary_key'='id'
  •   );
  最后,执行下面的sql命令,即可给数据源中的数据,构建solr索引:
  Sql代码  

  •   --注册hive-solr的jar包,否则MR方式运行的时候,将不能正常启动
  •   add jar /ROOT/server/hive/lib/hive-solr.jar;
  •   --执行插入命令
  •   INSERT OVERWRITE TABLE index_solr SELECT * FROM  index_source ;
  •   --执行成功之后,即可在solr的终端界面查看,也可以再hive里面执行下面的solr查询
  •   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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-629352-1-1.html 上篇帖子: Solr API例子详解 下篇帖子: Solr配置中文分词器IKAnalyzer及增删改查调用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表