spark对接elasticsearch遇到的坑

这篇具有很好参考价值的文章主要介绍了spark对接elasticsearch遇到的坑。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环境

  • spark3.0
  • scala2.12
  • es7.3
  • pom文件:
<dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch-spark-30_2.12</artifactId>
            <version>7.12.0</version>
        </dependency>

Provider org.apache.hadoop.hdfs.DistributedFileSystem could not be instantiated

问题:出现了和hadoop相关的问题

解决:引入hadoop-client包

  <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.1.3</version>
        </dependency>

ERROR NetworkClient: Node [xxx] failed (java.net.SocketException: Connection reset); selected next node [xxx]

问题:连接不上es

解决:设置两个参数

.set(“es.nodes.discovery”, “false”)
.set(“es.nodes.data.only”, “false”)

 val conf: SparkConf = new SparkConf().setAppName(this.getClass.getSimpleName).setMaster("local[*]")
      .set("es.nodes", "node1:9200,node2:39200,node3:39200")
      .set("es.nodes.discovery", "false")
      .set("es.nodes.data.only", "false")
      .set("es.net.http.auth.user", "es")
      .set("es.net.http.auth.pass", "123456")

Cannot parse value [2020-04-19 09:35:53] for field [updatetime]

问题:解析不了时间

解决:添加参数设置:“es.mapping.date.rich”,“false”

scala.None$ is not a valid external type for schema of string

问题:解析none值有问题

解决:添加参数设置:es.field.read.empty.as.null", “false”

怎么打印dsl查询语句

问题:pushdown是官网强烈推荐的,不过我怎么知道他将spark sql转成了什么dsl语句呢?也就是说,我怎么知道谓词下推有没有成功?

解决:log4j.properties中添加日志打印:

log4j.logger.org.elasticsearch.spark.sql=TRACE

一个sparkSession中读取和写入的es的host不同

问题:我从host1中读取es的数据,要写入host2中,怎么做呢?

解决:读取和写入使用不同的配置

  val query =
          """
           xxx
          """.stripMargin

    val readOptions = Map(
      "pushdown" -> "true",
      "es.resource.read" -> "index1",
      "es.mapping.date.rich" -> "false",
      "es.read.field.empty.as.null" -> "false",
      "es.scroll.size" -> "10000",
      "es.nodes" -> "node1",
      "es.nodes.discovery" -> "false",
      "es.nodes.data.only" -> "false",
      "es.http.timeout" -> "10m",
      "es.query" -> query
    )

    val result: DataFrame = spark.read.options(readOptions).format("org.elasticsearch.spark.sql")
      .load()

    val writeOptions = Map(
      "es.nodes" -> "other-host-node",
      "es.http.timeout" -> "10m",
      "es.resource.write" -> "index2",
      "es.mapping.id" -> "id",
      "es.index.auto.create" -> "false"
    )

    result.saveToEs(writeOptions)

写入es的时候手动指定id

问题:我不要es自动生成_id,我自己指定

解决:把schema中的一个字段指定成id(上个问题有写):文章来源地址https://www.toymoban.com/news/detail-615079.html

 "es.mapping.id" -> "id"

到了这里,关于spark对接elasticsearch遇到的坑的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java对接web service接口遇到的坑,postman测试代码报错415Unsupported Media Type,程序中报错org.xml.sax.SAXException: Bad en

    对接web service接口,soapUI工具接口调用成功,但是postman调用报错 415Unsupported Media Type ,程序中报错 org.xml.sax.SAXException: Bad envelope tag: Fault ,经过调查,是请求头信息,然后深究之后发现是web Service 的soap协议问题,网上大部分解决方案提供的都是spap1.1协议的,但是我的接口提供

    2024年02月05日
    浏览(46)
  • 安装oneforall遇到的问题ImportError: cannot import name ‘sre_parse‘ from ‘re‘(C:\Python311\Lib\re\_init_.py)

    昨天试着安装一下信息收集特别好用的工具oneforall,没想到却遇到了一个特别大的问题 上网查找,却没想到竟然你没有一个答案,要么没有正确答案,要么众说纷纭,索性自己排查错误 根据报错提示,说的是不能从re中导入sre_parse,而且还和re文件夹下的_init_.py有关 下面是我

    2023年04月17日
    浏览(43)
  • Mac:运行docker遇到Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker ...

    由于公司禁用了桌面版的Docker,急需要一个mac下依然能够运行的Docker环境,先后做了以下尝试,最终终于搞定。 首先,在执行brew install --cask docker时,遇到的一下错误: 然后,就尝试直接安装docker试试, 执行命令: brew install docker 顺利安装成功,但是执行任何docker命令都会

    2024年02月08日
    浏览(45)
  • 【阿里云 centos7安装python3.12遇到的坑,openssl】Could not build the ssl module! Python requires a OpenSSL 1.1.1

    基于源码安装python 3.12,执行 make 出现如下错误 问题大概描述:找不到ssl模块。该问题如果不解决的话,缺少 OpenSSL 模块可能会影响许多涉及网络通信和安全加密的 Python 应用程序和库。例如:ssl,request模块等好多模块都没法使用。所以要要去openssl官网下载安装,再来安装p

    2024年04月28日
    浏览(31)
  • docker遇到Cannot connect to the Docker daemon at unix:///var/run/docker.sock问题的解决方案

    问题背景: 由于服务器没有经常维护,导致应用不能正常运行。排查问题,执行 解决方案,如下: 再执行命令 正常看到容器列表了

    2024年02月08日
    浏览(46)
  • eventBus使用遇到的坑

    **问题:**通过eventBus传递的参数,在子组件的methods中无法通过this.使用。 **思路:**考虑组件方法的执行顺序(vue生命周期执行顺序) **解决办法:**在传递参数的组件外 this.$nextTick 创建eventBus.js文件 在需要传递消息的兄弟组件引入该js文件 传递消息 bus.$emit(“test”,param1,pa

    2024年02月14日
    浏览(45)
  • 使用ffmpeg合并视频遇到的坑

    下面以Linux环境介绍为主 1.ffmpeg可执行命令不同的环境是不同的,Linux在执行命令前还需要授权。 2.合并视频命令: 坑一:其中第一个花括号替换的是可执行命令所在的绝对路径,这里必须要使用ffmpeg的绝对路径,因为把应用打成jar包是无法获取到绝对路径的,具体可参考:

    2024年02月16日
    浏览(52)
  • uniapp开发小程序遇到的坑

    这是一篇随手笔记。。 坑1.HbuilderX最新版现在还有一些问题,编译的时候很可能出现各种各样的报错 例如:error: NavigationTrace Failed to mount component: template or render function not defined等等 建议先不用最新版,已经更新到最新版的小伙伴,不用慌,可以在工具栏-帮助-切换到上一个

    2024年02月09日
    浏览(47)
  • 使用vite打包时候遇到的坑

    最近使用vite写了一个小demo. 记录下其中感悟和遇到的\\\"坑\\\" 开发: 使用vite的开发过程还是很爽的 vite快速生成各种已经搭好的脚手架供开发者选择 开发的运行速度相对于传统的webpack确实快了不少 打包: 在打包的时候遇到了一些坑 打包时资源的路径问题,跟vue-cli里面一样,需要修

    2024年02月04日
    浏览(52)
  • Parsing error: Cannot find module ‘babel-eslint‘解决方法

    全局搜索babel-eslint 1.将.eslintrc.js中的   parserOptions: {     parser: \\\'babel-eslint\\\'   }, 改为   parserOptions: {     \\\'parser\\\': \\\'@babel/eslint-parser\\\'   }, 2.将package.json里的   \\\"babel-eslint\\\": \\\"^10.0.1\\\",    删除 增加一行    \\\"@babel/eslint-parser\\\": \\\"^7.18.2\\\", 3.删掉yarn.lok里的\\\'babel-eslint模块 4.重新npm run build

    2023年04月21日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包