如何使用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数据
建表:
- --存在表就删除
- 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
如何使用Hive集成Solr?的更多相关文章
- Hive集成HBase;安装pig
Hive集成HBase 配置 将hive的lib/中的HBase.jar包用实际安装的Hbase的jar包替换掉 cd /opt/hive/lib/ ls hbase-0.94.2* rm -rf ...
- Hive集成HBase详解
摘要 Hive提供了与HBase的集成,使得能够在HBase表上使用HQL语句进行查询 插入操作以及进行Join和Union等复杂查询 应用场景 1. 将ETL操作的数据存入HBase 2. HB ...
- hbase与hive集成:hive读取hbase中数据
1.创建hbase jar包到hive lib目录软连接 hive需要jar包: hive-hbase-handler-0.13.1-cdh5.3.6.jar zookeeper-3.4.5-cdh5 ...
- Hive集成Mysql作为元数据时,提示错误:Specified key was too long; max key length is 767 bytes
在进行Hive集成Mysql作为元数据过程中.做全然部安装配置工作后.进入到hive模式,运行show databases.运行正常,接着运行show tables:时却报错. 关键错误信息例如以下: ...
- 大数据技术之_11_HBase学习_02_HBase API 操作 + HBase 与 Hive 集成 + HBase 优化
第6章 HBase API 操作6.1 环境准备6.2 HBase API6.2.1 判断表是否存在6.2.2 抽取获取 Configuration.Connection.Admin 对象的方法以及关 ...
- Hbase与hive集成与对比
HBase与Hive的对比 1.Hive (1) 数据仓库 Hive的本质其实就相当于将HDFS中已经存储的文件在Mysql中做了一个双射关系,以方便使用HQL去管理查询. (2) 用于数据分析.清洗 ...
- nutch集成solr和中文分词
nutch集成solr和中文分词 一.构建nutch环境 1. 设置代理 由于nutch使用ant构建,ant调用ivy,会从maven仓库中下载依赖包,因此若公司需要代理才能上网,需要设置代理,如果 ...
- hive集成sentry
1.安装配置sentry 详细步骤见上一篇安装配置sentry 2.配置hive 2.1 Hive-server2集成Sentry 在 /etc/hive/conf/hive-site.xml中添加: ...
- 挖坑:hive集成kerberos
集成hive+kerberos前,hadoop已经支持kerberos,所以基础安装略去: https://www.cnblogs.com/garfieldcgf/p/10077331.html 直接 ...
随机推荐
- 正则表达式Pattern类的基本用法
public void mailRegex() { // 要验证的字符串 String str = "shiruo.hdp@taobao.com"; // 邮箱验证规则 Strin ...
- Bootstrap-table 使用总结 转载https://www.cnblogs.com/laowangc/p/8875526.html
一.什么是Bootstrap-table? 在业务系统开发中,对表格记录的查询.分页.排序等处理是非常常见的,在Web开发中,可以采用很多功能强大的插件来满足要求,且能极大的提高开发效率,本随笔介绍这 ...
- mvn eclipse:eclipse
pom.xml 在哪个文件夹, 你就在哪里按shift 右键,,[在此处打开命令窗口] 执行那个命令. mvn eclipse:eclipse
- 4、通过uiautomatorviewer实现appium元素定位
熟悉selenium自动化的小伙伴应该知道WebDriver 提供了八种元素定位方法: idnameclass nametag namelink textpartial link textxpathc ...
- PostgreSQL——服务器配置_{postgresql.conf}
一.设置参数 所有参数名称都是不区分大小写的 值为字符串时,需要单引号 值为数值时不需要单引号,但带单位时,需要单引号 配置文件(如:postgresql.conf.postgresql.auto.c ...
- DQL 数据查询语言 IS (information_schema)
3.information_schema 统计信息库 1.介绍: 视图 1.安全: 只允许查询,不知道操作的对象是谁. 2.方便: 只需要简单的select语句即可使用. 2.作用: 1.方便我们做数 ...
- Windows7下命令行使用MySQL
我在Win7下安装的MySQL版本是mysql-5.0.22-win32 1.在Win7环境下安装MySQL,关于安装方法可以参考文章: Win7系统安装MySQL5.5.21图解教程.win7安装M ...
- 在命令行中运行Hadoop自带的WordCount程序
1.启动所有的线程服务 start-all.sh 记得要查看线程是否启动 jps 2.在根目录创建 wordcount.txt 文件 放置一些数据 3.创建 hdfs dfs -mkdir /文件夹 ...
- 分享一套主流框架源码资料,征服阿里 P7 面试必备!
2019年已经过完一半了, 我在这里为大家准备了一份资料,征服阿里 P7 面试必备! 希望这些资料可以帮助到大家,从一个码农进阶为一个优秀的程序员,也可以帮大家提升系统实战能力. 这些资料包括: 讲解 ...
- python接口自动化(put请求)
python接口自动化(put请求) 一.put请求的作用:更新资源 二.应用 导包:import requests 调用requests.put()方法 参数有URL.data.headers,方法 ...