惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Hacker News
The Hacker News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
小众软件
小众软件
云风的 BLOG
云风的 BLOG
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog RSS Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 聂微东
L
LangChain Blog
博客园 - 司徒正美
腾讯CDC
C
Cybersecurity and Infrastructure Security Agency CISA
C
Cisco Blogs
M
MIT News - Artificial intelligence
Y
Y Combinator Blog
S
Schneier on Security
T
Tailwind CSS Blog
S
Securelist
P
Proofpoint News Feed
A
Arctic Wolf
有赞技术团队
有赞技术团队
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
P
Privacy & Cybersecurity Law Blog
爱范儿
爱范儿
G
GRAHAM CLULEY
F
Full Disclosure
T
Threat Research - Cisco Blogs
Hugging Face - Blog
Hugging Face - Blog
T
Tor Project blog
T
Threatpost
月光博客
月光博客
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
CXSECURITY Database RSS Feed - CXSecurity.com
AWS News Blog
AWS News Blog
C
CERT Recently Published Vulnerability Notes
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
Simon Willison's Weblog
Simon Willison's Weblog
Microsoft Security Blog
Microsoft Security Blog
雷峰网
雷峰网
I
Intezer
GbyAI
GbyAI
T
The Exploit Database - CXSecurity.com
L
LINUX DO - 热门话题
J
Java Code Geeks
I
InfoQ
Stack Overflow Blog
Stack Overflow Blog
V
Visual Studio Blog
罗磊的独立博客

TimeMachine Notes

Doris 物化视图 漫谈数据库索引 工作中实践过的数据流架构 druid集群运维 doris/starrocks 碎碎念 未知的征程 doris实时数据摄入测试 之前的一些学习目标和计划 OneData探索 MR Job Counters 分析 druid 离线摄入任务优化 druid 问题记录 基于 gitbook 搭建笔记站点 Prometheus + Grafana 监控 - Kafka Mac-Homebrew-常见问题 Mac重装系统找不到磁盘主盘,无法抹掉 实时消费 MySQL Binlog 2020阴霾之下 多个 git 账户配置 SSH
Elasticsearch 与 Hive 集成
时光机 · 2021-01-12 · via TimeMachine Notes

前言

工作上存在将 Hive 上的数据刷到 ES 的场景,首先想到的是自己写程序读取 Hive 上的数据,经过业务逻辑处理在写回到 ES 上,不过请教了下,知道了 ES 本身已经可以和 Hive 集成。只需添加对应的 jar 包,在 hive 上建立与 ES 关联的外部表,即可使用 HQL 查询写入 ES 索引库。具体使用请见官方文档 ,本文只举个简单例子及介绍下主要的参数。

Elasticsearch 集成 Hive

elasticsearch-hadoop jar 包下载

去 maven 中央仓库上去搜对应的 jar 包就行,这里只需要注意 jar 包的版本要和 ES 版本相对应。查看 ES 版本,只需要访问 ${es_node}:9200 即可。下载链接

下载完成后,只需要进入 Hive ,输入以下命令即可,和添加 UDF jar 差不多。

1
add jar ${your_path}/elasticsearch-hadoop-${version}.jar

建立 Hive 外部表

建表语句如下,这里需要注意 Hive 中的数据类型与 ES 中的对应关系,具体对应列表可以查看 Apache Hive integration

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
CREATE EXTERNAL TABLE es_warehouse.tblleadsaccesslog(
batch_name STRING,
channel STRING,
course_id STRING,
create_time STRING,
op_date STRING,
op_hour STRING,
stu_uid STRING,
id STRING
)
STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES(
'COLUMN_STATS_ACCURATE'='false',
'es.batch.write.refresh'='false',
'es.index.auto.create'='false',
'es.input.use.sliced.partitions'='false',
'es.mapping.exclude'='doc_id',
'es.mapping.id'='id',
'es.net.http.auth.pass'='test',
'es.net.http.auth.user'='test',
'es.nodes'='172.29.236.154',
'es.nodes.wan.only'='true',
'es.port'='9200',
'es.resource'='ods_lec_leads_accesslog/_doc',
'es.scroll.size'='10000',
'es.write.operation'='upsert'
);

建表执行完成并且没有错误,就可以使用 HQL 直接查询关联的 ods_lec_leads_accesslog 的 ES 索引库。

1
select * from es_warehouse.tblleadsaccesslog limit 10;

也可以通过 HQL 直接插入数据到 ES。

1
insert into tblleadsaccesslog values('test', 'test', 'test', '1', '1', '1', 'test', '1');

查询对应的 ES 索引库,可以查询到 batch_name 为 test 的数据。

ES 相关属性

更详细的可以直接参考官方文档 Configuration

属性名 释义 备注
es.resource es 索引库/表
也可以分别指定读,写的索引库

es.resource.read
es.resource.write

es.nodes es 节点
es.port es 端口号
es.net.http.auth.pass es 认证用户密码
es.net.http.auth.user es 认证用户名
es.index.auto.create 是否自动创建不存在的索引
es.mapping.id document id 对应的字段
es.batch.write.refresh 批量更新完成是否刷新索引库
es.write.operation es 写时模式 index,create,update,upsert
es.query 默认读取 es 时的查询 DSL
es.mapping.names hive 与 es 字段之间的对应关系

配置属性都不太熟,尤其是刚使用 ES,还是建议先读一遍配置,不然就踩坑了。最近就踩了一个 case。在重新刷数据的时候,没有设置 es.write.operation 导致相同 doc_id 的数据被完全替换掉,而不是更新。这个参数默认是 index。

  • index 新数据会追加,旧数据会直接覆盖
  • create 追加数据,如果数据已经存在,抛出异常
  • update 更新旧数据,如果旧数据不存在,抛出异常
  • upsert 追加新数据,更新旧数据