elasticsearch-hadoop 扩展定制 官方包以支持 update upsert doc
官方源码地址https://github.com/elastic/elasticsearch-hadoop
相关文档 https://www.elastic.co/guide/en/elasticsearch/hadoop/current/configuration.html
spark to es
4种操作方式
index
update
upsert
create
只支持四种操作,看文档描述,目前的需求只能用 upsert 实现,但官方的包对 upsert 支持不完整
upsert 现支持
/*
* {
* "script":{
* "inline": "...",
* "lang": "...",
* "params": ...,
* },
* "upsert": {...}
* }
*/
及
/*
* {
* "doc_as_upsert": true,
* "doc": {...}
* }
*/
并不支持
/*
* {
* "upsert": {},
* "doc": {...}
* }
*/
无奈只好自已动手了
代码量太大,找到相关的部分,理顺操作逻辑后,改起来就容易多了,最主要的部分在这里
把rdd json 化并拼接http 请求
两种思路
1传入完整的对像,然后修改 json 解析部分,拼接出请求
2修改对象结构,json 解析部分不变,拼接出请求
1的实现相对复杂,工作量很大,且要求对代码项目很熟悉,实现的成本很高
2的实现很简单
修改的地方很少,可以参照着自已改,需重新编译
具体看 commit,也提交到了官方,但代码比较粗暴,很可能通不过,功能优先,官方不采用,可以用的时候再个人修改。
之后打包,引用打包后的文件。
另外,程序也要作并要的修改
写入部分, 对比下就知道要改的地方,很容易
case class ES_Upsert(kw_index: String, kw_type: String, id: String, date_idate: String, date_udate: String) case class ES_Doc(date_udate: String) case class ES_UpsertDoc(upsert: ES_Upsert, doc: ES_Doc) .saveToEs(Map[String, String](
"es.resource" -> "{upsert.kw_index}/{upsert.kw_type}",
"es.nodes" -> es,
"es.input.json" -> "false",
"es.nodes.discovery" -> "false",
"es.update.doc" -> "true",
"es.nodes.wan.only" -> "true",
"es.write.operation" -> "upsert",
"es.mapping.exclude" -> "upsert.kw_index,upsert.kw_type,upsert.id",
"es.mapping.id" -> "upsert.id"
))
外套一层对象ES_UpsertDoc 字段名称分别为upsert,doc熟悉es的就不用解释吧
"es.update.doc" -> "true"为 true 才生效。
"es.resource" -> "{upsert.kw_index}/{upsert.kw_type}",
"es.mapping.exclude" -> "upsert.kw_index,upsert.kw_type,upsert.id"
index type field mapping 也要多套一层
项目示例
kafka spark streaming elasticsearch
https://github.com/cclient/elasticsearch-spark-upsert-from-kafka
——官方已经拒掉了,主要原因是这个包要在各种数据平台上保证可用,按官方的说法是
'whether using Map/Reduce or libraries built upon it such as Hive, Pig or Cascading or new upcoming libraries like Apache Spark'
现在的case只是基于 Spark的,即使在spark上可用,没有在其他平台的测试,不会通过,也没有精力去挨个试,等用的时候自已改吧
elasticsearch-hadoop 扩展定制 官方包以支持 update upsert doc的更多相关文章
- 自动化部署必备技能—部署yum仓库、定制rpm包
部署yum仓库.定制rpm包 目录 第1章 扩展 - yum缓存 1.1 yum缓存使用步骤... 1 1.1.1 导言... 1 1.1.2 修改配置文件... 1 1.1.3 使用缓存... 1 ...
- 【大数据系列】hadoop命令指导官方文档翻译
Hadoop Commands Guide Overview Shell Options Generic Options User Commands archive checknative class ...
- FPM定制RPM包实践
1.1 快速部署方案 ✔ 问题:当领导给你 100 台已经安装好系统的服务器,然后让优化,让你提出一个快速部署方案. 解答: 1.tar 打包 先编译安装 打包-->分发-->解包(比如 ...
- Go 语言官方包函数中文翻译
Go官方包函数中文翻译 *** import "strings" func Join(a []string, sep string) string Join concatenate ...
- FPM工具 实战定制nginx包
FPM主要特点: 把一种包打包成另一种包的格式 支持的源类型包 DIR 将目录打包成所需要的类型,可以用于源码编译的安装包. RPM 对rpm进行转换 gem 对rubygem包进行转换. ...
- react-native 的微信SDK辅助包,支持微信登录、微信分享、微信支付
微信SDK集成示例,现已完成微信授权登录,之后将陆续包装分享等其他功能. ReactNative高级交流群 127482131 或访问 http://blog.1ygowu.com ReactNat ...
- Datagrid扩展方法onClickCell{easyui-datagrid-扩充-支持单元格编辑}
//-----------------------------------------------------------------/******************************** ...
- 搭建yum仓库与定制rpm包
笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 当我们自动化部署集群的时候,想要快速的安装所有服务,搭建yum仓库与定制rpm包是我们首先要做的 原创作品,转载请 ...
- hadoop之定制自己的sort过程
Key排序 1. 继承WritableComparator 在hadoop之Shuffle和Sort中,可以看到mapper的输出文件spill文件需要在内存中排序,并且在输入reducer之前,不同 ...
随机推荐
- js interval ,timeout
var inter; intervatest("2019-08-22 09:12:00"); function intervatest(str) { ShowCountDown(s ...
- BZOJ:2243: [SDOI2011]染色
题解: 树剖,线段树维护区间颜色段数 记录两端点的颜色,做到O(1)合并 问题: 非递归建树实现 #include<iostream> #include<cstdio> #in ...
- python-局域网内实现web页面用户端下载文件,easy!
好久没有发博客了,但是也没闲着,最近疫情原因一直在家远程办公,分享一下今天的干货 先说需求:某个文件压缩之后可以供用户点击下载 没想到特别好的办法,在网上搜索大多都是通过socket实现的,然后我这个 ...
- SPOJ FISHER + FPOLICE SPFA+背包
当初第一次做的是FPLICE这个题,当时就觉得要用图论去搜索,但是当时陷入死思维就是 dp[][]两个维度都是点,这样就违背了题目的本意,题目给定了一个时间T,在不超过时间T的情况下求最小的消耗,这不 ...
- POJ 1745:Divisibility 枚举某一状态的DP
Divisibility Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11001 Accepted: 3933 Des ...
- Java编译器 & Java解释器 & JVM
转自:https://www.cnblogs.com/chengdabelief/p/6576320.html JVM JVM有自己完善的硬件架构,如处理器.堆栈(Stack).寄存器等,还具有相应的 ...
- JS-语句二
for循环的4个要素: 1.初始值 2.条件判断 3.状态改变 4.循环体 for循环的写法: for(var i=0;i>10;i++) ...
- C++基础--重载、重写、隐藏
1.重载(overload) 重载的概念是在同一作用域内,函数名相同,函数输入参数个数.数据类型不同,但是不能是函数名.参数个数.数据类型完全相同但返回值不同的情况.最直接的例子是常见的构造函数重载, ...
- 应用架构的演进--MVC,RPC,SOA,微服务架构
MVC架构:垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率. 当业务规模很小时,将所有功能都部署在同一个进程中,通过双机或者前置负载均衡 ...
- 2020牛客寒假算法基础集训营3 B 牛牛的DRB迷宫II
题目描述 牛牛有一个n*m的迷宫,对于迷宫中的每个格子都为'R','D','B'三种类型之一,'R'表示处于当前的格子时只能往右边走'D'表示处于当前的格子时只能往下边走,而'B'表示向右向下均可以走 ...