专栏首页dandelion1990的专栏Elasticsearch与Hive的数据互导
原创

Elasticsearch与Hive的数据互导

首先先下载一个叫"elasticsearch-hadoop-hive"的JAR包,放到相应路径下:https://jar-download.com/artifacts/org.elasticsearch/elasticsearch-hadoop-hive

Hive数据导入Elasticsearch

1. 在ES中建立index,并定义数据格式和属性

  PUT /index_name
  {
    "mappings": {
      "_doc": {
        "properties": {
          "field1": {"type": "keyword"},
          "field2": {"type": "integer"}
        }
      }
    },
    "settings": {
      "number_of_replicas": 0
    }
  }

建index的API可以参考https://www.elastic.co/guide/en/elasticsearch/reference/7.2/indices-create-index.html

定义ES中数据格式可以参考https://www.elastic.co/guide/en/elasticsearch/reference/7.2/mapping-types.html

2. 在Hive中建立定义映射关系外部表

add jar path/to/elasticsearch-hadoop-6.4.2.jar;
CREATE EXTERNAL TABLE index_name_to_es (
    field1 string,
    field2 int
    )
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES('es.resource' = 'index_name/_doc',
    'es.index.auto.create' = 'false',
    'es.nodes' = 'http://XXX.XXX.XXX.XXX',
    'es.port'='9200'
);

也可以不用做第一步提前在ES中建index,让ES自动解析数据类型,那么这里建外部表时设置属性'es.index.auto.create' = 'true'

3. 导入数据

add jar path/to/elasticsearch-hadoop-6.4.2.jar;
insert overwrite table index_name_to_es
select field1, field2
from index_name;

Elasticsearch数据导入Hive

与上面类似,不过步骤反过来

1. 在Hive中建好存数据的管理表

create table index_name (
    field1 string,
    field2 int
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n';

2. 在Hive中建立定义映射关系外部表

add jar path/to/elasticsearch-hadoop-6.4.2.jar;
CREATE EXTERNAL TABLE index_name_from_es (
    field1 string,
    field2 int
)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES('es.resource' = 'index_name/_doc',
    'es.query' = '?q=field2:[100 TO 1000]',
    'es.nodes' = 'http://XXX.XXX.XXX.XXX',
    'es.port'='9200'
);

这里可以把ES的过滤条件写在es.query的属性中,例如上例中只查询filed2字段在范围100到1000以内的数据。

query的写法可以参考https://www.elastic.co/guide/en/elasticsearch/reference/7.2/search-uri-request.html

3. 导入数据

add jar path/to/elasticsearch-hadoop-6.4.2.jar;
insert overwrite table index_name
select filed1, field2
from  index_name_from_es;

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 单机搭建hadoop+hive+spark环境

    下载文件mysql-connector-java-5.1.43.jar放到hive/lib下

    dandelion1990
  • 给Elasticsearch和Kibana加上权限控制

    注:Elasticsearch和Kibana使用版本为7.2.0,其它版本暂未测试过

    dandelion1990
  • 在较小内存的机器上运行Elasticsearch与Kibana

    因为穷,只买得起1G内存的乞丐配置版的云服务器,但是又想玩玩Elasticsearch+Kibana。而Elasticsearch默认的heap size就是1...

    dandelion1990
  • Java NIO 系列学习 04 - Buffers

    Buffer本质上是一块内存区,我们可以写入数据,然后再读出来。这个内存区被包装为 NIO Buffer 对象, 这个对象提供了一组方法以方便我们操作内存区。

    许杨淼淼
  • Mysql 常用命令记录与数据导入导出

    前一阵在写很多sql及类sql语句,发现自己的记忆力可以说是相当烂了,上午刚查过插入语句怎么写,下午就忘记了需要重新查,,而且隐隐约约的有点强迫症??只要记得不...

    呼延十
  • C++表达式与语句完结

    今天,我们就将表达式和语句这部分完结了吧,其实这个真的非常基础,会C的人,就可以忽略了。但是为了保证内容的完整和连贯,我还是简单写一写。

    leoay
  • javax.servlet.jsp.PageContext cannot be resolved to a type

    可能是jdk 里不包括servlet-api.jar这个包,到tomcat里找到这个包复制到java项目里。 项目名-->右键 Property-->选择 Ja...

    小柒2012
  • JavaScript之面向对象学习一

    1、通过Object构造函数和对象字面量来创建对象缺点:使用同一个接口创建很多的对象,会产生大量的重复代码。比如我需要创建人的对象,并且需要三类人,医生、工程师...

    郑小超.
  • 【DB笔试面试694】在Oracle中,什么是oratop工具?

    oratop是Oracle提供的一款轻量级实时监控工具,oratop的最大特点是支持实时轻量级监控。在Oracle 12c的EM Express之前,OEM还是...

    小麦苗DBA宝典
  • 37.Linux驱动调试-根据oops的栈信息,确定函数调用过程

    在上章里,我们分析了oops的PC值在哪个函数出错的 本章便通过栈信息来分析函数调用过程 1.上章的oops栈信息如下图所示: ? 9fe0: 代表最初的栈顶S...

    张诺谦

扫码关注云+社区

领取腾讯云代金券