es与hive整合
在hive classpath中添加elasticsearch-hadoop.jar,以下方法任一种均可:
1、启动hiveserver2 前,在hive-site.xml文件中更改hive.aux.jars.path属性值
<property>
<name>hive.reloadable.aux.jars.path</name>
<value>/path/elasticsearch-hadoop.jar</value>
<description>A comma separated list (with no spaces) of the jar files</description>
</property>
2、启动hiveserver2 时,指定hive.reloadable.aux.jars.path属性值
nohup hive --service hiveserver2 --hiveconf hive.reloadable.aux.jars.path=/path/elasticsearch-hadoop.jar &
3、启动hiveserver2 后,在hive 命令行中执行add jar /path/elasticsearch-hadoop.jar; 命令。
实测,以上三种方法,前两种方法中jar包的路径必须是本地路径,第三种方法中的路径既可以是本地路径,也可以是hdfs路径。
配置
hive在建表时,创建external表,并使用tblproperties指定一些es相关的属性
create external table artists (...)
stored by 'org.elasticsearch.hadoop.hive.EsStorageHandler'
tblproperties('es.nodes' = 'linux-node9:9200', 'es.resource' = 'artists/_doc', 'es.index.auto.create' = 'false', 'es.index.read.missing.as.empty' = 'false');
org.elasticsearch.hadoop.hive.EsStorageHandler 是elasticsearch-hadoop.jar中的类,所以从这里就可以看出,确实是需要elasticsearch-hadoop.jar,而该jar在$HIVE_HOME/lib 下是没有的,所以需要外部添加。从该jar的groupId可以看出,jar包维护者是ES公司,所以不可能预装在hive安装包中。
es.nodes指定es集群地址
es.resource指定关联的index及其type
es.index.auto.create表示在表插入数据的时候,如果索引还没有建,是否自动创建索引。强烈建议不要自动创建索引,因为自动创建索引时会自动映射字段类型,而hive字段类型和es字段类型不是一一对应的,如果自动映射字段类型的话,在hive查询表数据的时候很可能会报类型转换错误。
es.index.read.missing.as.empty表示当索引不存在时,在hive查询表数据时是否报错。为true则不报错,为false时会报错。
映射
默认情况下,elasticsearch-hadoop 使用hive表的字段名和类型映射es中的数据。但有些情况下,在hive中可以使用的名称在es中不能使用,比如一些es的关键字。对于这种情况,可以在建hive表时指定es.mapping.names属性,值是以逗号分隔的映射名称列表,映射格式是hive字段名称:es字段名称。如下:
create external table artists (...)
stored by 'org.elasticsearch.hadoop.hive.EsStorageHandler'
tblproperties('es.nodes' = 'linux-node9:9200', 'es.resource' = 'artists/_doc', 'es.mapping.names' = 'date:@timestamp , url:url_123 ');
上例中,hive外部表artists的date列、url列分别对应es中artists索引的@timestamp字段、url_123字段。
hive不区分大小写,但是es区分。为了避免列名大小写对不上造成的信息丢失,elasticsearch-hadoop会将hive列名称全转为小写。
写数据到es
操作这个hive外部表就可对es中对应索引进行操作。
create external table artists (
id bigint,
name string,
links struct<url:string, picture:string>)
stored by 'org.elasticsearch.hadoop.hive.EsStorageHandler'
tblproperties('es.resource' = 'artists/_doc');
从另一个hive表source查询数据并将结果集插入到es中
insert overwrite table artists select null, s.name, named_struct('url', s.url, 'picture', s.picture) from source s;
假如要指定es 文档的id,则可以用tblproperties(es.mapping.id)属性。例如,假如想用hive表的id作为es文档的id,则可以这样建表:
create external table artists (
id bigint,
...)
stored by 'org.elasticsearch.hadoop.hive.EsStorageHandler'
tblproperties('es.mapping.id' = 'id', ...);
把现有的json写到es中
对于输入数据是json的情况,es-hadoop允许直接索引而不应用任何转换,数据按原样直接发送给es。在这种情况下,需要使用tblproperties(es.input.json)属性,es-hadoop期望输出表只包含一个字段,字段类型是string/varchar(如果json数据是字符串表示的话)或者是binary(如果json数据是byte[]的话),字段值就是json数据。建表语句如下:
create external table json (data string)
stored by 'org.elasticsearch.hadoop.hive.EsStorageHandler'
tblproperties('es.resource' = '...', 'es.input.json` = 'yes');
从es读取
在建表时可以指定从es读的查询语句,这样表的数据就是查询结果。如下:
create external table artists (
id bigint,
name string
)
stored by 'org.elasticsearch.hadoop.hive.EsStorageHandler'
tblproperties('es.resource' = 'artists/_doc', 'es.query' = '?q=me*');
es.query的值即是查询语句。
类型转换
| Hive type | Elasticsearch type |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
在es中创建索引时,需根据以上表格指定映射类型。
需要知道的是,如果一个hive表在建表时关联了es,则表数据其实是放在es数据目录中的,而且该hive 表不能被truncate,会报Cannot truncate non-native table artists 错误,但是可以被drop。表drop之后,es中索引不会受影响,数据也不会被删除,只有建表时location指定的目录会被删除,如果没有使用location 关键字,则会删除hive.metastore.warehouse.dir 指定的目录中的数据库名目录中的表名目录。如果再按照原来表定义语句重建表,则查询该表还是可以正常查出数据的,就好像表没有被drop 过一样。
疑问三:表或索引字段的新增、删除如何影响对方?
不会影响对方。
关联es的hive表,在建好后是不能添加或者删除字段的,会报ALTER TABLE cannot be used for a non-native table artists 错误。
es索引可以新增字段,但是这个字段永远不会有值,因为关联es的hive表新增不了字段,故es索引中这个字段不会有有效值插入。
es索引不能删除字段。
es与hive整合的更多相关文章
- 大数据学习系列之五 ----- Hive整合HBase图文详解
引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环 ...
- 大数据学习系列之九---- Hive整合Spark和HBase以及相关测试
前言 在之前的大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 中介绍了集群的环境搭建,但是在使用hive进行数据查询的时候会非常的慢,因为h ...
- hive整合hbase
Hive整合HBase后的好处: 通过Hive把数据加载到HBase中,数据源可以是文件也可以是Hive中的表. 通过整合,让HBase支持JOIN.GROUP等SQL查询语法. 通过整合,不仅可完成 ...
- 四 Hive整合HBase
安装环境: hbase版本:hbase-1.4.0-bin.tar.gz hive版本: apache-hive-1.2.1-bin.tar 注意请使用高一点的hbase版本,不然就算hive和h ...
- 创建hive整合hbase的表总结
[Author]: kwu 创建hive整合hbase的表总结.例如以下两种方式: 1.创建hive表的同步创建hbase的表 CREATE TABLE stage.hbase_news_compan ...
- Hbase与hive整合
//hive与hbase整合create table lectrure.hbase_lecture10(sname string, score int) stored by 'org.apache.h ...
- 安装hue及hadoop和hive整合
环境: centos7 jdk1.8.0_111 Hadoop 2.7.3 Hive1.2.2 hue-3.10.0 Hue安装: 1.下载hue-3.10.0.tgz: https://dl.dro ...
- Hive 整合Hbase
摘要 Hive提供了与HBase的集成,使得能够在HBase表上使用HQL语句进行查询 插入操作以及进行Join和Union等复杂查询.同时也可以将hive表中的数据映射到Hbase中. 应用 ...
- Hbase 与Hive整合
HBase与Hive的对比 25.1.Hive 25.1.1.数据仓库 Hive的本质其实就相当于将HDFS中已经存储的文件在Mysql中做了一个双射关系,以方便使用HQL去管理查询. 25.1.2. ...
随机推荐
- 版本控制-https svn服务器搭建和常用命令(centos 6.3)
Svn是比较优秀的版本控制工具,虽然功能和性能上无法和Git媲美,但由于其容易搭建和使用的特性,所以在各个小公司还是很受欢迎的.使用Git可参考<版本控制-Git服务器搭建和常用命令使用> ...
- react+webpack基础学习配置
最近学习react,公司的项目是使用create-react-app来搭建的,而我想重新使用node+mysql+react来搭建一个新的博客. 今天尝试从零开始搭建一个webpack+react项目 ...
- 编写高质量代码改善C#程序的157个建议——建议126:用名词和名词组给类型命名
建议126:用名词和名词组给类型命名 类型对应着现实世界中的实际对象.对象在语言中意味着它是一个名词.所以,类型也应该以名词或名词词组去命名. 类型定义了属性和行为.虽然它包含行为,但不是行为本身.所 ...
- Ubuntu下安装配置android sdk及其环境变量
同理,这里介绍的是手动安装方法~ *系统;Ubuntu 16.4 1.下载Android sdk,直接在系统自带的firefox浏览器输入 http://tools.android-studio.or ...
- 《FilthyRichClients》读书笔记(一)-SwingのEDT
<FilthyRichClients>读完了前几个章节,现将我的体会结合工作以来从事Swing桌面开发的经验,对本书的一些重要概念进行一次 分析,对书中的一些遗漏与模糊的地方及时补充,同时 ...
- Backup--修改实例级别是否使用压缩备份的默认值
--========================================= --修改实例级别是否使用压缩备份的默认值 USE master; GO EXEC sp_configure 'b ...
- 如何安全地运行用户的 JavaScript 脚本
本文来自网易云社区,转载务必请注明出处. 有时候我们需要运行用户输入的 JavaScript 脚本(以下简称脚本).对于我们来说,这些脚本是不可信任的,如果在当前的 Context 中运行这些脚本,它 ...
- eclipse 中文或法文等语言注释错误解决办法 Some characters cannot be mapped using "GBK" character encoding
这个问题会造成 无法修改包名.解决办法: Window->Preferences->Content Types->Text->Java Source File Default ...
- coderfoces D. Gourmet choice
D. Gourmet choice time limit per test 2 seconds memory limit per test 256 megabytes 题目链接: https: ...
- Struts2学习第4天--拦截器
第1章 Struts2_day04笔记 1.1 上次课内容回顾 l OGNL表达式 n OGNL的概述 u OGNL:对象图导航语言,是一门功能强大的表达式语言. n OGN ...