首页 > 其他分享 >【问题】记录spark查询ES,数据重复的问题

【问题】记录spark查询ES,数据重复的问题

时间:2022-09-29 18:05:34浏览次数:49  
标签:查询 ES dwd spark order es

真实环境遇到spark查询ES,出现数据重复的现象。记录一下整个背景和解决问题过程。记录过程比较简单,真实排查过程艰难定位到最终原因

记录spark查询ES,数据重复的问题

1.环境

ES 7.10.0 Spark 2.3.0 scala 2.11 ES极限网关:[GATEWAY] 1.5.0_SNAPSHOT, 2021-10-27 11:22:59, 10e5f97

ES索引:

{
  "dwd_order" : {
    "aliases" : { },
    "mappings" : {
      "dynamic" : "strict",
      "properties" : {
        "create_time" : {
          "type" : "long"
        },
        "custom_uid" : {
          "type" : "keyword"
        }
      }
    },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "refresh_interval" : "20s",
        "number_of_shards" : "4",
        "provided_name" : "dwd_order",
        "creation_date" : "1663855284830",
        "number_of_replicas" : "1",
        "uuid" : "eZoOGZsqTXudfjD6dOMqPw"
      }
    }
  }
}

2.大体逻辑:

执行spark sql查询ES。大体逻辑

sparkConf.setAll(nileConfig.sparkConfig)
      .set("nile.framework.config", config)

val sparkSession = SparkSession.builder().config(sparkConf).enableHiveSupport().getOrCreate()

val df = sparkSession.read
  .format("org.elasticsearch.spark.sql")
  .schema(StructType(sparkField.toArray))
  .options(sourceConfig.config)
.load(s"${sourceNamespace.database}/${sourceNamespace.table}")
              
sparkSession.sql(s"select field_a,field_b,field_c from dwd_order where create_time = 1664177748 AND id =  123")

3.问题现象:

dwd_order索引中只有一条数据符合create_time = 1664177748 AND id = 123条件。

spark查询es根据索引dwd_order的shard数量,产生4个task。结果每个task都查到符号条件“create_time = 1664177748 AND id = 123”的数据。

排查问题过程:

  1. 根据shard个数,固定spark task个数,并添加日志,输出查询结果。 确认每个task输出同样数据
  2. 怀疑es依赖依赖jar 7.10.0版本问题。网上没有找到相关issue
  3. 怀疑es问题,确认es架构。访问es先经过LB -> ES极限网关 -> ES。从后往前分别配置,查看哪个环节有问题。
    • 直接配置ES节点IP:Port,访问数据正常,没有数据重复情况
    • 配置ES代理“极限网关”的ip:port,查询结果有重复现象。锁定产出问题场景

解决

升级极限网关版本。

标签:查询,ES,dwd,spark,order,es
From: https://blog.51cto.com/u_10120275/5723621

相关文章

  • Java Files.walk示例
    转自:https://blog.csdn.net/cyan20115/article/details/106548324Java8中提供了Files.walk API1.列出所有文件。try(Stream<Path>walk=Files.walk(Paths.get("C:......
  • FileStream,StreamReader,StreamWiter的用法
    https://blog.csdn.net/Good_StudyDaydayUp/article/details/82976951https://blog.csdn.net/linxinfa/article/details/95215416https://blog.csdn.net/qq_42778001/art......
  • ypeScript核心基础面试题与答案
    1、为什么越来越多的企业选择使用TypeScript?2、TypeScript中的原始类型有哪些?3、说说数组在TypeScript中是如何工作的?4、什么是any类型,何时使用?5、什么是void,什么......
  • Ant Design Vue 在表格中插入图片
    这两天一直在用Antdv做一些小demo,今天在做表格的时候想在表格中插入图片,简单翻了下文档和国内的博客,发现所有的方法竟然都不好使,最后还是在官网的示例代码中看到相关的......
  • 【luogu CF618G】Combining Slimes(矩阵乘法)(DP)
    CombiningSlimes题目链接:luoguCF618G题目大意有一个长度为n的栈,如果栈顶两个值都是x就会合并成x+1,一开始没有东西。你有p的概率放进去一个1,1-p的概率放入2......
  • 索引优化与查询优化
    目录1、数据准备2、索引失效案例2.1全值匹配我最爱2.2最佳左前缀法则2.3主键插入顺序2.4计算、函数、类型转换(自动或手动)导致索引失效2.5类型转换导致索引失效2.6待......
  • Delphi XE MessageDlg[2] TMsgDlgType、TMsgDlgBtn用法示例1
    DelphiXEMessageDlg[2]TMsgDlgType、TMsgDlgBtn用法示例11、TMsgDlgType //滔Roy2022.09.29MessageDlg('测试mtInformation.',TMsgDlgType.mtInformation,[TMs......
  • Elasticsearch: Terms lookup查询方案
    场景:商品池索引 sku_data,需要过滤编码字段skuCodeTerms使用terms查询商品编码{"query":{"bool":{"filter":[{"terms":{......
  • 摆脱鼠标系列 - vscode - Esc 返回时候 强制显示英文输入法 - ahk 脚本 - autoHotKey
    为什么摆脱鼠标系列-vscode-Esc返回时候强制显示英文输入法切换网页的时候,回来还是搜索输入法,就想到按esc,直接强制英文输入法之前vim插件里面用了一个im-sel......
  • 使用process.env.NODE_ENV的正确姿势
    什么是process.env.NODE_ENVprocess.env.NODE_ENV应该是我们最熟悉的环境变量了,它经常出现在使用框架或者类库的时候,被用来区分不同的环境(开发,测试,生产等),以便我们进行相......