`
qindongliang1922
  • 浏览: 2189160 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117681
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:126080
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:60034
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71405
社区版块
存档分类
最新评论

如何使用Hive集成Solr?

阅读更多

(一)Hive+Solr简介

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

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

(1)简单: 如果单纯的使用Hadoop编程或者Spark编程来构建索引,当然也是可以的,只不过比较复杂而已,而且容易出错,如果我们把编程通过抽象,封装,简化到SQL中,那么整个流程就会变得非常简单,通过借助强大的Hive来驾驭hadoop或spark,是非常方便的。

(2)优劣互补:有时候,我们需要将hive的分析完的结果或者直接对hive源表,存储到solr里面进行全文检索服务,比如以前我们有个业务,对我们电商网站的搜索日志使用hive分析完后 存储到solr里面做报表查询,因为里面涉及到搜索关键词,这个字段是需要能分词查询和不分词查询的,通过分词查询可以查看改词的相关的产品在某一段时间内的一个走势图。 有时候,我们又需要将solr里面的数据加载到hive里面,使用sql完成一些join分析功能, 两者之间优劣互补,以更好的适应我们的业务需求。

(3)快速:借助Hadoop分布式特性让快速构建大规模的索引成为可能。

(4)与时俱进:支持新版本hive,hadoop,solrcloud使用,网上已经有一些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 clone https://github.com/qindongliang/hive-solr 后,修改少许pom文件后,执行
mvn clean package
命令构建生成jar包,并将此jar包拷贝至hive的lib目录即可

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

建表:

--存在表就删除
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构建索引的例子

首先构建数据源表:

--如果存在就删除
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索引:

--注册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


有什么问题 可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园

1
4
分享到:
评论

相关推荐

    hive-solr:使用Hive读写solr

    (二)为什么需要hive集成solr? (1)简单: 如果单纯的使用Hadoop编程或者Spark编程来构建索引,当然也是可以的,只不过比较复杂而已,而且容易出错,如果我们把编程通过抽象,封装,简化到SQL中,那么整个流程就...

    hive-solr-master.zip_hive_solr_solr-hive

    在Hive中集成Solr,通常需要将"Hive-Solr"源代码编译成JAR包,然后将其添加到Hive的类路径中。同时,还需要在Hive的配置文件(hive-site.xml)中配置相关的Solr服务器地址、核心名等参数,确保Hive能正确连接到Solr...

    hadoop storm hbase spark

    根据提供的文件信息,我们可以从以下几个方面来探讨与Hadoop、Storm、HBase和Spark相关的知识点。 ### Hadoop #### 1....Hadoop是一个开源软件框架,用于...通过这些工具的组合使用,可以构建出强大的大数据处理系统。

    ranger-2.0.0-SNAPSHOT-solr-plugin.tar.gz

    总结,Apache Ranger 2.0.0-SNAPSHOT Solr插件为Solr带来了强大的安全特性,结合ranger-admin使用,可以实现对Solr集群的精细化管理和安全监控。这不仅提升了数据安全性,也为企业的数据治理提供了有力的工具支持。...

    Hue 常见问题解决方案,大数据平台的hue/hive常见问题总结 免费下载

    Hue集成了多个大数据组件,如HDFS、Hive、Pig、Spark等,使得数据分析师和开发人员可以方便地进行数据浏览、查询和分析。本文将围绕“Hue常见问题解决方案”这一主题,详细阐述Hue与Hive在大数据平台中可能遇到的...

    集群搭建(zookeeper集群+solr集群)

    当单一服务器上的索引数据量较小、搜索请求量不多时,并不需要使用SolrCloud。但在数据量巨大且并发请求频繁的情况下,SolrCloud能够提供必要的支持。 SolrCloud基于Solr和Zookeeper构建,其中Zookeeper作为集群的...

    Scaling Big Data with Hadoop and Solr

    书籍内容以Hrishikesh的软件架构经验为基础,涵盖Apache Hadoop和Solr的使用和最佳实践,适合软件工程师、数据分析师和架构师阅读。 10. 版权和免责声明 书籍的版权归属于Packt Publishing公司。书籍包含的所有内容...

    元数据管理部署及集成各组件的详细文档

    本文档将详细介绍如何部署和集成元数据管理工具Atlas,并与Hive、HBase、Kafka和Solr等组件进行联动。 首先,我们要理解Apache Atlas的核心功能。它是一款开源的元数据管理系统,设计用于提供数据发现、分类、血缘...

    atlas必备资源包

    `apache-atlas-2.0.0-hive-hook.tar.gz` 是Apache Atlas与Hive集成的钩子,它使得在Hive操作时可以自动捕获元数据信息并更新到Atlas中。这样,每当有新的表或分区创建,或者查询执行时,Atlas都能即时获取这些变化...

    apache-atlas-2.1.0-server.tar.gz 包含自带hbase和solr

    在大数据生态系统中,Atlas 主要用于元数据管理,它能够提供元数据的生命周期管理,支持多种数据源(如 Hadoop、Hive、HBase、Kafka 等),并与其他工具(如 Hue、Ambari 等)集成,提供了一种统一的方式来管理和...

    atlas安装.pdf

    安装Atlas的方式有两种,一种是集成自带的HBase和Solr,另一种是集成外部的HBase和Solr。在企业开发中,通常选择集成外部的HBase和Solr,因为这种方式有利于整个项目的集成。 文档提到了要进入/opt/module/atlas/...

    IK分词器通过spark加载词典,并在spark中使用

    6. **Spark与Hive集成**:Hive是基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能。Spark SQL可以与Hive无缝对接,允许用户使用SQL语句操作Hive表,进行数据分析。 总结来...

    Atlas集成.docx

    1. **Hive**:通过 HiveBridge 组件,Atlas 可以集成 Hive 的元数据,包括数据库、表和列等信息。 2. **Sqoop**:通过 SqoopBridge 组件,Atlas 可以集成关系型数据库的元数据,如导入操作类型、数据库使用情况等。...

    πFlow是一个简单易用,功能强大的大数据流水线系统

    简单易用 可视化配置流水线 监控流水线 查看流水线日志 ...包括Hadoop 、Spark、MLlib、Hive、Solr、Redis、MemCache、ElasticSearch、JDBC、MongoDB、HTTP、FTP、XML、CSV、JSON等 集成了微生物领域的相关算法

    ATLAS集成与部署.doc

    - 搭建所需环境:Hive、Hook、Zookeeper、Kafka、HBase、Solr 等。 - Maven 安装:下载并安装 Maven 3.5.4 版本,将其配置到本地环境变量中。 2. **Atlas 安装** - 下载 Apache Atlas 源码包 apache-atlas-2.2.0...

    基于Sentry的大数据权限解决方案.docx

    Sentry 当前可以和 Hive/Hcatalog、Apache Solr 和 Cloudera Impala 集成,未来会扩展到其他的 Hadoop 组件,例如 HDFS 和 HBase 等。 Sentry 的安装过程包括添加服务、选择依赖关系、配置存储数据库、测试连接和...

    大数据精通组件——Atlas元数据管理部署等

    - Atlas依赖于多个组件,包括Zookeeper、Hadoop(HDFS、YARN等)、HBase、Kafka、Solr(Infra Solr)和Hive等。在安装Atlas之前,这些组件需要预先安装。 - 对于高可用性需求,可以多节点部署Solr和Atlas Metadata...

    安全管理sentry+kerberos

    **Sentry与Hive集成** 1. **配置参数**:设置`sentry.hive.testing.mode`为`true`,以启用Sentry与Hive的集成。 2. **启用Sentry服务**:配置Hive使用Sentry服务,以进行权限验证。 3. **关闭用户模拟**:关闭Hive的...

    apache-atlas-2.2.0-bin.tar.gz

    5. **搜索和发现**:通过集成Solr(用户需要自行安装),Apache Atlas可以提供强大的搜索功能,帮助用户快速找到所需的数据资产。 6. **API和插件支持**:Apache Atlas提供了RESTful API,允许开发人员构建自定义...

Global site tag (gtag.js) - Google Analytics