Datax将Oracle数据导入ElasticSearch7完成教程

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: Datax将Oracle数据导入ElasticSearch7完成教程


网上关于此方面的内容较少,而且比较零散,正好项目中需要对ES7做预研,所以整理出了这篇文章。

ElasticSearch版本为7.13.2

分如下几个主题:

1.Datax的es导入插件elasticsearchwriter
1.1.从datax的github地址(https://github.com/alibaba/DataX)下载源码工程(Datax-master)
工程内容很多,如果在idea中构建,需要的时间比较长,需要耐心等待。如果不需要构建,那直接在文件夹中打开文件,进行第2步的操作。

1.2.修改父工程的pom.xml,配置modules模块,按需保留elasticsearchwriter模块

<modules>
    <module>common</module>
    <module>core</module>
    <module>transformer</module>
    <module>elasticsearchwriter</module>
    <module>plugin-rdbms-util</module>
    <module>plugin-unstructured-storage-util</module>
    <module>hbase20xsqlreader</module>
    <module>hbase20xsqlwriter</module>
    <module>kuduwriter</module>
</modules>

1.3.执行打包命令,idea或者命令行均可
mvn clean install -Dmaven.test.skip=true

1.4.将编译后的插件安装到 datax中
找到编译后的插件,目录为:

DataX-master/elasticsearchwriter/target/datax/plugin/writer/elasticsearchwriter

这个插件我会提供下载,你可以直接用我的,也可以自己打包。

下载地址:elasticsearchwriter.zip_elasticsearchwriter-其它文档类资源-CSDN下载

 将这个文件夹拷贝到datax的plugin的writer目录下

2.Datax配置es导入job
任务类型选择Datax任务

3.Job的JSON文件编写
要配置导入导出数据源

{
"job": {

"setting": {
  "speed": {
    "channel": 3,
    "byte": 1048576
  },
  "errorLimit": {
    "record": 0,
    "percentage": 0.02
  }
},
"content": [
  {
    "reader": {
      "name": "oraclereader",
      "parameter": {
        "username": "oracle数据库账号",
        "password": "oracle数据库密码",
        "connection": [
          {
            "querySql": [
              "select id,name from 数据库表名"
            ],
            "jdbcUrl": [
              "jdbc:oracle:thin:@//127.0.0.1:1521/orcl"
            ]
          }
        ]
      }
    },
    "writer": {
      "name": "elasticsearchwriter",
      "parameter": {
        "endpoint": "http://127.0.0.1:9200",
        "accessId": "elastic",
        "accessKey": "XXXXXX",
        "index": "test_index",
        "type": "_doc",
        "cleanup": false,
        "settings": {
          "index": {
            "number_of_shards": 1,
            "number_of_replicas": 0
          }
        },
        "discovery": false,
        "batchSize": 10000,
        "splitter": ",",
        "column": [
          {
            "name": "id",
            "type": "long"
          },
          {
            "name": "name",
            "type": "text"
          }
        ]
      }
    }
  }
]

}
}
4.需要注意的地方
4.1.querySql查询的字段要与column一一对应,不能多也不能少,顺序最好也一样

 

4.2. endpoint地址是es的http访问地址,端口为9200,不要配置成9300

4.3.accessId和accessKey必须要配,如果es没有密码,那随便填,但必须要有

4.4.其他注意事项
4.4.1.ES日期字段创建需指定格式 yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis

{

 "name": "CREATE_DATE",
 "type": "date",
 "format": "yyyy-MM-dd HH:mm:ss"

}
4.4.2.日期数据导入时,text写入为日期格式,long写入为时间戳

4.4.3.注意时区问题 写入时指定时区 或 对UTC时间戳进行转换

指定:“2019-03-12T12:12:12.123+0800”
转换:东八区时间戳 = 3600000*8 + UTC时间戳
4.5.json文件格式不对,数组越界错误
sql和column字段匹配不上就会数组越界

4.6.使用数据库id作为es中记录的_id
{"name": "pk", "type": "id"},
name指定为id,type也指定为id,这样就会把数据库的id作为es中的id了。

不需要再指定name为id的字段了,不然会报错 

 5.参数描述
endpoint 描述:ElasticSearch的连接地址 必选:是 默认值:无
accessId 描述:http auth中的user 必选:否 默认值:空
accessKey 描述:http auth中的password 必选:否 默认值:空
index 描述:elasticsearch中的index名 必选:是 默认值:无
type 描述:elasticsearch中index的type名 必选:否 默认值:index名
cleanup 描述:是否删除原表 必选:否 默认值:false
batchSize 描述:每次批量数据的条数 必选:否 默认值:1000
trySize 描述:失败后重试的次数 必选:否 默认值:30
timeout 描述:客户端超时时间 必选:否 默认值:600000
discovery 描述:启用节点发现将(轮询)并定期更新客户机中的服务器列表。 必选:否 默认值:false
compression 描述:http请求,开启压缩 必选:否 默认值:true
multiThread 描述:http请求,是否有多线程 必选:否 默认值:true
ignoreWriteError 描述:忽略写入错误,不重试,继续写入 必选:否 默认值:false
ignoreParseError 描述:忽略解析数据格式错误,继续写入 必选:否 默认值:true
alias 描述:数据导入完成后写入别名 必选:否 默认值:无
aliasMode 描述:数据导入完成后增加别名的模式,append(增加模式), exclusive(只留这一个) 必选:否 默认值:append
settings 描述:创建index时候的settings, 与elasticsearch官方相同 必选:否 默认值:无
splitter 描述:如果插入数据是array,就使用指定分隔符 必选:否 默认值:-,-
column 描述:elasticsearch所支持的字段类型,样例中包含了全部 必选:是
dynamic 描述: 不使用datax的mappings,使用es自己的自动mappings 必选: 否 默认值: false
六、使用dbeaver 配置 jdbc 连接 es
报错 current license is non-compliant for [jdbc]

修改成30天试用版,https://www.elastic.co/guide/en/elasticsearch/reference/master/start-trial.html

POST "localhost:9200/_license/start_trial?acknowledge=true&pretty
查看服务器es的license信息

GET http://localhost:9200/_license

 可以愉快使用了

七、使用es的动态模板
datax从mysql同步数据到elasticsearch(使用es的动态模板)

    "writer": {
      "name": "elasticsearchwriter",
      "parameter": {
        "endpoint": "http://xxx:9200",
        "index": "myindex",
        "type": "data",
        "cleanup": true, #true表示插入前清空,即覆盖同步;false则追加同步
        "dynamic": true,  #这里一定要指定为true,否则使用的是datax的模板(就是下面定义的字段类型),而不会使用es的模板
        "settings": {"index" :{"number_of_shards": 2, "number_of_replicas": 1}},            
        "batchSize": 10000,
        "splitter": ",",
        "column": [
          {"name": "pk", "type": "id"},#指定第一个字段为rowkey 
          {"name": "province", "type": "text"},
          { "name": "city", "type": "text"},
          { "name": "area", "type": "text"},
          { "name": "longitude","type":"double" },
          { "name": "latitude","type": "double" },
          { "name": "location","type": "geo_point" }                   
        ]
      }
    }

参考文档:

通过datax导入数据到elasticsearch - 简书
通过DataX同步数据至Elasticsearch - 奋斗的一线码农 - 博客园
GitHub - alibaba/DataX: DataX是阿里云DataWorks数据集成的开源版本。
通过datax导入数据到elasticsearch - 简书
通过DataX同步数据至Elasticsearch - 走看看
current license is non-compliant for [jdbc]_数据库人生的博客-CSDN博客
datax从mysql同步数据到elasticsearch(使用es的动态模板)_ASN_forever的博客-CSDN博客

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
相关文章
|
3月前
|
机器学习/深度学习 SQL 大数据
什么是数据集成?和数据融合有什么区别?
在大数据领域,“数据集成”与“数据融合”常被混淆。数据集成关注数据的物理集中,解决“数据从哪来”的问题;数据融合则侧重逻辑协同,解决“数据怎么用”的问题。两者相辅相成,集成是基础,融合是价值提升的关键。理解其差异,有助于企业释放数据潜力,避免“数据堆积”或“盲目融合”的误区,实现数据从成本到生产力的转变。
什么是数据集成?和数据融合有什么区别?
|
9月前
|
Oracle 关系型数据库 Linux
【YashanDB 知识库】通过 dblink 查询 Oracle 数据时报 YAS-07301 异常
客户在使用 YashanDB 通过 yasql 查询 Oracle 数据时,遇到 `YAS-07301 external module timeout` 异常,导致 dblink 功能无法正常使用,影响所有 YashanDB 版本。原因是操作系统资源紧张,无法 fork 新子进程。解决方法包括释放内存、停掉不必要的进程或增大进程数上限。分析发现异常源于 system() 函数调用失败,返回 -1,通常是因为 fork() 失败。未来 YashanDB 将优化日志信息以更好地诊断类似问题。
|
8月前
|
Oracle 关系型数据库 Java
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
本文介绍通过Flink CDC实现Oracle数据实时同步至崖山数据库(YashanDB)的方法,支持全量与增量同步,并涵盖新增、修改和删除的DML操作。内容包括环境准备(如JDK、Flink版本等)、Oracle日志归档启用、用户权限配置、增量日志记录设置、元数据迁移、Flink安装与配置、生成Flink SQL文件、Streampark部署,以及创建和启动实时同步任务的具体步骤。适合需要跨数据库实时同步方案的技术人员参考。
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
|
8月前
|
存储 Oracle 关系型数据库
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
|
8月前
|
Oracle 关系型数据库 Linux
【YashanDB知识库】通过dblink查询Oracle数据时报YAS-07301异常
【YashanDB知识库】通过dblink查询Oracle数据时报YAS-07301异常
|
9月前
|
Oracle 关系型数据库 Linux
【YashanDB 知识库】通过 dblink 查询 Oracle 数据时报 YAS-07301 异常
某客户在使用 YashanDB 通过 yasql 查询 Oracle 数据时,遇到 `YAS-07301 external module timeout` 异常,导致 dblink 功能无法正常使用,影响所有版本。问题源于操作系统资源紧张,无法 fork 新子进程。解决方法包括释放内存、停掉不必要的进程或增大进程数上限。分析发现异常原因为系统调用 fork() 失败。经验总结:优化日志记录,提供更多异常信息。
|
8月前
|
JSON 分布式计算 DataX
【YashanDB知识库】使用DataX工具迁移yashan数据到maxcompute
本文介绍使用崖山适配的DataX工具进行数据库迁移的方法,包括单表迁移和批量表迁移。单表迁移需配置json文件并执行同步命令;批量迁移则通过脚本自动化生成json配置文件并完成数据迁移,最后提供数据比对功能验证迁移结果。具体步骤涵盖连接信息配置、表清单获取、json文件生成、数据迁移执行及日志记录,确保数据一致性。相关工具和脚本简化了复杂迁移过程,提升效率。
|
8月前
|
存储 Oracle 关系型数据库
【YashanDB知识库】YMP校验从yashandb同步到oracle的数据时,字段timestamp(0)出现不一致
【YashanDB知识库】YMP校验从yashandb同步到oracle的数据时,字段timestamp(0)出现不一致
|
11月前
|
人工智能 安全 DataX
【瓴羊数据荟】 Data x AI :大模型时代的数据治理创新实践 | 瓴羊数据Meet Up城市行第三期
第三期瓴羊数据Meetup 将于2025年1月3日在线上与大家见面,共同探讨AI时代的数据治理实践。
962 10
【瓴羊数据荟】 Data x  AI :大模型时代的数据治理创新实践 | 瓴羊数据Meet Up城市行第三期
|
11月前
|
弹性计算 运维 Serverless
超值选择:阿里云Elasticsearch Serverless在企业数据检索与分析中的高性能与灵活性
本文介绍了阿里云Elasticsearch Serverless服务的高性价比与高度弹性灵活性。
482 8

热门文章

最新文章

推荐镜像

更多