热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据集成工具——DataXDataXWeb

文章目录DataX的安装及使用1、Hive通过外部表与HBase表关联1)、hive建表语句:2)、hbase表3)、直接执

文章目录

  • DataX的安装及使用
    • 1、Hive通过外部表与HBase表关联
      • 1)、hive建表语句:
      • 2)、hbase表
      • 3)、直接执行查询语句:
    • 2、DataX的安装
    • 3、DataX的使用
      • 1)、stream2stream
        • ①、编写配置文件stream2stream.json
        • ②、执行同步任务
        • ③、执行结果
      • 2)、mysql2mysql
        • ①、编写配置文件mysql2mysql.json
        • ②、执行同步任务
      • 3)、mysql2hdfs
        • ①、编写配置文件mysql2hdfs.json
      • 4)、hbase2mysql
      • 5)、mysql2hbase
    • 4、DataX-web的安装(Java 8、支持Python3(默认Python2.7)、Mysql5.7)
      • ★★★注意★★★:一定要先配好java、python环境变量
      • 1)、使用idea同步源代码
      • 2)、在mysql5.1中新建dataxweb数据库
      • 3)、执行数据库初始化脚本
      • 4)、修改admin配置文件
      • 5)、启动DataX-Web-Admin
      • 6)、修改datax-web-executor配置文件
      • 7)、启动datax-web-executor
    • 5、DataX-Web的使用
      • 1)、新建数据源
      • 2)新建项目test1
      • 3)、新建任务模板
      • 4)、构建任务
      • 5)、添加hbase 数据源会报错,需要修改两个pom.xml文件(hbase1.4.6)


DataX的安装及使用

1、Hive通过外部表与HBase表关联


1)、hive建表语句:

// 第一个字段通常命名为key
CREATE EXTERNAL TABLE hivehbasetable(key INT,name STRING,age INT,gender STRING,clazz STRING,last_mod STRING
) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:name,cf1:age,cf1:gender,cf1:clazz,cf1:last_mod") TBLPROPERTIES("hbase.table.name" = "student");

2)、hbase表

create 'student','cf1'

image-20210126091858197.png

3)、直接执行查询语句:

select key,name from hivehbasetable limit 10;

image-20210126091923753.png

hbase外部表 不能使用sqoop直接导入数据,必须通过例如:insert into这样的形式导入

因为sqoop导入数据,使用的原理是load data,load data只能在表的存储格式为textfile时,才能真正将数据加载到表中


2、DataX的安装


DataX不需要依赖其他服务,直接上传、解压、安装、配置环境变量即可

也可以直接在windows上解压


3、DataX的使用


1)、stream2stream


①、编写配置文件stream2stream.json

# stream2stream.json
{"job": {"content": [{"reader": {"name": "streamreader","parameter": {"sliceRecordCount": 10,"column": [{"type": "long","value": "10"},{"type": "string","value": "hello,你好,世界-DataX"}]}},"writer": {"name": "streamwriter","parameter": {"encoding": "UTF-8","print": true}}}],"setting": {"speed": {"channel": 5}}}
}

②、执行同步任务

datax.py stream2stream.json

③、执行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YukbL4UP-1611729176897)(https://i.loli.net/2021/01/26/3exW8mAlJ5jX4z7.png)]

2)、mysql2mysql


需要新建student2数据库,并创建student表


①、编写配置文件mysql2mysql.json

{"job": {"content": [{"reader": {"name": "mysqlreader","parameter": {"username": "root","password": "123456","column": ["id","name","age","gender","clazz","last_mod"],"splitPk": "age","connection": [{"table": ["student"],"jdbcUrl": ["jdbc:mysql://master:3306/student"]}]}},"writer": {"name": "mysqlwriter","parameter": {"writeMode": "insert","username": "root","password": "123456","column": ["id","name","age","gender","clazz","last_mod"],"preSql": ["truncate student2"], "connection": [{"jdbcUrl": "jdbc:mysql://master:3306/student2?useUnicode=true&characterEncoding=utf8","table": ["student2"]}]}}}],"setting": {"speed": {"channel": 6}}}
}

②、执行同步任务

datax.py mysql2mysql.json

3)、mysql2hdfs


写hive跟hdfs时一样的


①、编写配置文件mysql2hdfs.json

{"job": {"content": [{"reader": {"name": "mysqlreader","parameter": {"username": "root","password": "123456","column": ["id","name","age","gender","clazz","last_mod"],"splitPk": "age","connection": [{"table": ["student"],"jdbcUrl": ["jdbc:mysql://master:3306/student"]}]}},"writer": {"name": "hdfswriter","parameter": {"defaultFS": "hdfs://master:9000","fileType": "text","path": "/user/hive/warehouse/datax.db/students","fileName": "student","column": [{"name": "id","type": "bigint"},{"name": "name","type": "string"},{"name": "age","type": "INT"},{"name": "gender","type": "string"},{"name": "clazz","type": "string"},{"name": "last_mod","type": "string"}],"writeMode": "append","fieldDelimiter": ","}}}],"setting": {"speed": {"channel": 6}}}
}

4)、hbase2mysql

{"job": {"content": [{"reader": {"name": "hbase11xreader","parameter": {"hbaseConfig": {"hbase.zookeeper.quorum": "master:2181"},"table": "student","encoding": "utf-8","mode": "normal","column": [{"name": "rowkey","type": "string"},{"name": "cf1:name","type": "string"},{"name": "cf1:age","type": "string"},{"name": "cf1:gender","type": "string"},{"name": "cf1:clazz","type": "string"}],"range": {"startRowkey": "","endRowkey": "","isBinaryRowkey": false}}},"writer": {"name": "mysqlwriter","parameter": {"writeMode": "insert","username": "root","password": "123456","column": ["id","name","age","gender","clazz"],"preSql": ["truncate student2"], "connection": [{"jdbcUrl": "jdbc:mysql://master:3306/student2?useUnicode=true&characterEncoding=utf8","table": ["student2"]}]}}}],"setting": {"speed": {"channel": 6}}}
}

5)、mysql2hbase


mysql中的score表需将cource_id改为course_id,并将student_id、course_id设为主键,并将所有字段的类型改为int

hbase需先创建score表:create ‘score’,‘cf1’

{"job": {"content": [{"reader": {"name": "mysqlreader","parameter": {"username": "root","password": "123456","column": ["student_id","course_id","score"],"splitPk": "course_id","connection": [{"table": ["score"],"jdbcUrl": ["jdbc:mysql://master:3306/student"]}]}},"writer": {"name": "hbase11xwriter","parameter": {"hbaseConfig": {"hbase.zookeeper.quorum": "master:2181"},"table": "score","mode": "normal","rowkeyColumn": [{"index":0,"type":"string"},{"index":-1,"type":"string","value":"_"},{"index":1,"type":"string"}],"column": [{"index":2,"name": "cf1:score","type": "int"}],"encoding": "utf-8"}}}],"setting": {"speed": {"channel": 6}}}
}

4、DataX-web的安装(Java 8、支持Python3(默认Python2.7)、Mysql5.7)


★★★注意★★★:一定要先配好java、python环境变量


1)、使用idea同步源代码


2)、在mysql5.1中新建dataxweb数据库


image-20210126151233347.png

3)、执行数据库初始化脚本


image-20210126151351144.png

4)、修改admin配置文件


  • bootstrap.properties

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yKdmtT8M-1611729176899)(https://i.loli.net/2021/01/26/QtwGqXzximsH84C.png)]

#Database
DB_HOST=master
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=123456
DB_DATABASE=dataxweb

  • application.yml

server:#port: 8080port: 8080
spring:#数据源datasource:# username: root#password: root#url: jdbc:mysql://localhost:3306/datax_web?serverTimezone=Asia/Shanghai&useLegacyDatetimeCode=false&useSSL=false&nullNamePatternMatchesAll=true&useUnicode=true&characterEncoding=UTF-8password: ${DB_PASSWORD:password}username: ${DB_USERNAME:username}url: jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_DATABASE:dataxweb}?serverTimezone=Asia/Shanghai&useLegacyDatetimeCode=false&useSSL=false&nullNamePatternMatchesAll=true&useUnicode=true&characterEncoding=UTF-8driver-class-name: com.mysql.jdbc.Driverhikari:## 最小空闲连接数量minimum-idle: 5## 空闲连接存活最大时间,默认600000(10分钟)idle-timeout: 180000## 连接池最大连接数,默认是10maximum-pool-size: 10## 数据库连接超时时间,默认30秒,即30000connection-timeout: 30000connection-test-query: SELECT 1##此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟max-lifetime: 1800000# datax-web emailmail:host: smtp.qq.comport: 25#username: xxx@qq.com#password: xxxusername: rootpassword: rootproperties:mail:smtp:auth: truestarttls:enable: truerequired: truesocketFactory:class: javax.net.ssl.SSLSocketFactorymanagement:health:mail:enabled: falseserver:servlet:context-path: /actuatormybatis-plus:# mapper.xml文件扫描mapper-locations: classpath*:/mybatis-mapper/*Mapper.xml# 实体扫描,多个package用逗号或者分号分隔#typeAliasesPackage: com.yibo.essyncclient.*.entityglobal-config:# 数据库相关配置db-config:# 主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID", ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";id-type: AUTO# 字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"field-strategy: NOT_NULL# 驼峰下划线转换column-underline: true# 逻辑删除logic-delete-value: 0logic-not-delete-value: 1# 数据库类型db-type: mysqlbanner: false# mybatis原生配置configuration:map-underscore-to-camel-case: truecache-enabled: falsecall-setters-on-nulls: truejdbc-type-for-null: 'null'type-handlers-package: com.wugui.datax.admin.core.handler# 配置mybatis-plus打印sql日志
logging:#level:# com.wugui.datax.admin.mapper: info
#path: ./data/applogs/adminlevel:com.wugui.datax.admin.mapper: errorpath: ./applogs/admin#datax-job, access token
datax:job:accessToken:#i18n (default empty as chinese, "en" as english)i18n:## triggerpool max sizetriggerpool:fast:max: 200slow:max: 100### log retention dayslogretentiondays: 30datasource:aes:key: AD42F6697B035B75

5)、启动DataX-Web-Admin

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vVgHDtu6-1611729176900)(https://i.loli.net/2021/01/26/NcUTt8AekyHWdoi.png)]

  • 访问: http://127.0.0.1:8080/index.html,用户名:admin,密码:123456

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vi4qvOOr-1611729176901)(https://i.loli.net/2021/01/26/jhnmH2AQ43SVsoB.png)]

6)、修改datax-web-executor配置文件


  • application.yml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DvATDwdW-1611729176902)(https://i.loli.net/2021/01/26/PGTN8zMR6FiSo7O.png)]

# web port
server:port: 8081#port: 8081# log config
logging:config: classpath:logback.xmlpath: ./applogs/executor/jobhandler#path: ./data/applogs/executor/jobhandlerdatax:job:admin:### datax admin address list, such as "http://address" or "http://address01,http://address02"#addresses: http://127.0.0.1:8080addresses: http://127.0.0.1:8080executor:appname: datax-executorip:#port: 9999port: 9999### job log path#logpath: ./data/applogs/executor/jobhandlerlogpath: ./applogs/executor/jobhandler### job log retention dayslogretentiondays: 30### job, access tokenaccessToken:executor:#jsonpath: D:\\temp\\executor\\json\\jsonpath: ./json#pypath: F:\tools\datax\bin\datax.pypypath: C:\Users\zzk10\Documents\MacOS\DataIntegrate\datax\datax\bin\datax.py

注意pypath:这个路径需要解压datax.tar.gz到自己的路径,不要使用中文路径

解压后使用datax-web中的python3脚本替换掉 datax/bin/

7)、启动datax-web-executor

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gJevYQSe-1611729176902)(C:/Users/xiaoyoupei/AppData/Roaming/Typora/typora-user-images/image-20210127142754626.png)]

只要进程没有自己停止,一直在后台运行即可


5、DataX-Web的使用


1)、新建数据源


  • mysql

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C6CZzG3h-1611729176903)(https://i.loli.net/2021/01/26/nI7Kb82M35TyqjV.png)]

  • hive

    需要先启动hiveserver2服务

    下面这条命令需要在linux shell中执行

    hive --service hiveserver2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BIUOPnPq-1611729176904)(https://i.loli.net/2021/01/26/htrUaYOlkx9Qd2u.png)]

2)新建项目test1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r1apg91D-1611729176904)(https://i.loli.net/2021/01/26/nlYF5ka7Zudh3vL.png)]

3)、新建任务模板

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XkrR5aCL-1611729176904)(https://i.loli.net/2021/01/26/3avSFbRHXUY74Tl.png)]

4)、构建任务


  • 创建reader

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DDaB8vew-1611729176905)(https://i.loli.net/2021/01/26/9R5yMjA7pmvbkPh.png)]

  • 创建writer

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e3K6EQZ4-1611729176905)(https://i.loli.net/2021/01/26/VA9HL2mGQTaU5kw.png)]

  • 字段映射

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RijJ9g1D-1611729176906)(https://i.loli.net/2021/01/26/luENhq4scbCeZRY.png)]

  • 构建任务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hL09H3wO-1611729176906)(https://i.loli.net/2021/01/26/Lwtf7eJGgYbDK3B.png)]

  • 执行任务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bK3NzCOY-1611729176906)(https://i.loli.net/2021/01/26/OJ8kSN5ZDLm9VaE.png)]

  • 查看日志

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rsov3hID-1611729176907)(https://i.loli.net/2021/01/26/2WbKpafwg5iLPmx.png)]

5)、添加hbase 数据源会报错,需要修改两个pom.xml文件(hbase1.4.6)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TSj0LVkT-1611729176907)(https://i.loli.net/2021/01/26/BYowyH76MRbzJDl.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xX3iJFTA-1611729176908)(https://i.loli.net/2021/01/26/V7hOUAXDckv6aIz.png)]

改完pom文件,记得重新reimport,才会生效

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-39GE7YXN-1611729176908)(https://i.loli.net/2021/01/26/HFqoZVM1UL4ewOu.png)]

  • 重新测试hbase连通性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9IapSTrZ-1611729176909)(https://i.loli.net/2021/01/26/NfkYvGTtdwXx35y.png)]


推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • AFNetwork框架(零)使用NSURLSession进行网络请求
    本文介绍了AFNetwork框架中使用NSURLSession进行网络请求的方法,包括NSURLSession的配置、请求的创建和执行等步骤。同时还介绍了NSURLSessionDelegate和NSURLSessionConfiguration的相关内容。通过本文可以了解到AFNetwork框架中使用NSURLSession进行网络请求的基本流程和注意事项。 ... [详细]
  • 本文整理了Java中java.lang.NoSuchMethodError.getMessage()方法的一些代码示例,展示了NoSuchMethodErr ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
author-avatar
lk神密勇士
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有