• 【ETL工具】Datax-ETL-SqlServerToHDFS


    🦄 个人主页——🎐个人主页 🎐✨🍁

    🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油!🪁🍁🪁🍁🪁🍁🪁🍁

    目录

    🦄 个人主页——🎐个人主页 🎐✨🍁

    一、DataX概览

    1.1 DataX 简介

    1.2 DataX框架

    1.3 功能限制

    1.4 Support Data Channels

    二、配置样例

    2.1 环境信息

    2.2 SQLServer数据同步到HDFS

    2.2 参数说明


    一、DataX概览


    1.1 DataX 简介


    DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、SQL Server、Oracle、PostgreSQL、HDFS、Hive、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。

    GitHub - alibaba/DataX: DataX是阿里云DataWorks数据集成的开源版本。

    1.2 DataX框架


    DataX本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的Reader插件,以及向目标端写入数据的Writer插件,理论上DataX框架可以支持任意数据源类型的数据同步工作。同时DataX插件体系作为一套生态系统, 每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。

    DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。

    角色

    作用

    Reader(采集模块)

    负责采集数据源的数据,将数据发送给 Framework。

    Writer(写入模块)

    负责不断向 Framework 中取数据,并将数据写入到目的端。

    Framework(中间商)

    负责连接 Reader 和 Writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。


    HdfsWriter 提供向 HDFS 文件系统指定路径中写入 TEXTFILE 文件和 ORCFile 文件,文件内容可与 Hive 表关联。

    1.3 功能限制


    • 目前 HdfsWriter 仅支持 textfile 和 orcfile 两种格式的文件,且文件内容存放的必须是一张逻辑意义上的二维表;
    • 由于 HDFS 是文件系统,不存在 schema 的概念,因此不支持对部分列写入;
    • 目前仅支持与以下 Hive 数据类型:
      数值型:TINYINT,SMALLINT,INT,BIGINT,FLOAT,DOUBLE

    字符串类型:STRING,VARCHAR,CHAR

    布尔类型:BOOLEAN

    时间类型:DATE,TIMESTAMP

    目前不支持:decimal、binary、arrays、maps、structs、union类型;

    • 对于 Hive 分区表目前仅支持一次写入单个分区;
    • 对于 textfile 需用户保证写入 hdfs 文件的分隔符与在 Hive 上创建表时的分隔符一致,从而实现写入 hdfs 数据与 Hive 表字段关联;

    HdfsWriter 实现过程是:

    首先根据用户指定的path,创建一个hdfs文件系统上不存在的临时目录,创建规则:path_随机; 然后将读取的文件写入这个临时目录; 全部写入后再将这个临时目录下的文件移动到用户指定目录(在创建文件时保证文件名不重复); 最后删除临时目录。 如果在中间过程发生网络中断等情况造成无法与hdfs建立连接,需要用户手动删除已经写入的文件和临时目录。

    1.4 Support Data Channels


    DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、NOSQL、大数据计算系统都已经接入,目前支持数据如下图,详情请点击:DataX数据源参考指南

    类型

    数据源

    Reader(读)

    Writer(写)

    文档

    RDBMS 关系型数据库

    MySQL

    Oracle

    OceanBase

    SQLServer

    PostgreSQL

    DRDS

    Kingbase

    通用RDBMS(支持所有关系型数据库)

    阿里云数仓数据存储

    ODPS

    ADB

    ADS

    OSS

    OCS

    Hologres

    AnalyticDB For PostgreSQL

    阿里云中间件

    datahub

    读 、写

    SLS

    读 、写

    图数据库

    阿里云 GDB

    Neo4j

    NoSQL数据存储

    OTS

    Hbase0.94

    Hbase1.1

    Phoenix4.x

    Phoenix5.x

    MongoDB

    Cassandra

    数仓数据存储

    StarRocks

    读 、

    ApacheDoris

    ClickHouse

    Databend

    Hive

    kudu

    selectdb

    无结构化数据存储

    TxtFile

    FTP

    HDFS

    Elasticsearch

    时间序列数据库

    OpenTSDB

    TSDB

    TDengine


    二、配置样例


    2.1 环境信息


    集群HDP版本信息如下:

    2.2 SQLServer数据同步到HDFS


    site_traffic_inout.json 配置文件

    1. [winner_hdp@hdp104 yd]$ cat site_traffic_inout.json
    2. {
    3. "job": {
    4. "content": [
    5. {
    6. "reader": {
    7. "name": "sqlserverreader",
    8. "parameter": {
    9. "username": "$IPVA_WSHOP_USER",
    10. "password": "$IPVA_WSHOP_PASSWD",
    11. "connection": [
    12. {
    13. "jdbcUrl": ["$IPVA_URL"],
    14. "querySql": [
    15. "SELECT StoreID,StoreName,SiteKey,SiteName from IPVA_WConfig.dbo.View_Site_Traffic_InOut;"
    16. ]
    17. }
    18. ]
    19. }
    20. },
    21. "writer": {
    22. "name": "hdfswriter",
    23. "parameter": {
    24. "column": [
    25. {"name":"StoreID" , "type":"string"},
    26. {"name":"StoreName" , "type":"string"},
    27. {"name":"SiteKey" , "type":"string"},
    28. {"name":"SiteName", "type":"string"}
    29. ],
    30. "path": "/winner/hadoop/winipva/wshop/tmp/",
    31. "defaultFS":"hdfs://winner",
    32. "encoding": "UTF-8",
    33. "fieldDelimiter": ",",
    34. "hadoopConfig":{
    35. "dfs.nameservices": "winner",
    36. "dfs.ha.namenodes.winner": "nn1,nn2",
    37. "dfs.namenode.rpc-address.winner.nn1": "hdp103:8020",
    38. "dfs.namenode.rpc-address.winner.nn2": "hdp104:8020",
    39. "dfs.client.failover.proxy.provider.winner": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
    40. },
    41. "haveKerberos": true,
    42. "kerberosKeytabFilePath": "/etc/security/keytabs/winner_hdp.keytab",
    43. "kerberosPrincipal": "winner_hdp@WINNER.COM",
    44. "fileType": "text",
    45. "fileName": "000000",
    46. "writeMode": "nonConflict",
    47. }
    48. }
    49. }
    50. ],
    51. "setting": {
    52. "speed": {
    53. "channel": "5"
    54. },
    55. "errorLimit": {
    56. "record": 0
    57. }
    58. }
    59. }
    60. }

    运行脚本

    1. # !/bin/bash
    2. #
    3. #
    4. # 脚本功能: sqlServer 数据同步到 HDFS
    5. # 作 者: kangll
    6. # 创建时间: 2022-10-27
    7. # 修改内容: 无
    8. # 调度周期:
    9. # 脚本参数: 无
    10. #
    11. set -x
    12. set -e
    13. ## datatime
    14. date=`date +%Y%m%d`
    15. ## json config file path
    16. json_src=/hadoop/datadir/windeploy/script/ETL/datax_json/
    17. ## datax path
    18. data_py=/hadoop/software/datax/bin/datax.py
    19. ## ipva Wshop_config database connection
    20. IPVA_USER=sa
    21. IPVA_PASSWD='123456'
    22. IPVA_URL="jdbc:sqlserver://192.168.2.103:1433;DatabaseName=IPVA_WConfig"
    23. ###
    24. Site_ReID_InOut_Func() {
    25. ## 执行数据同步
    26. python $data_py ${json_src}site_reid_inout.json -p "-DIPVA_USER=${IPVA_USER} -DIPVA_PASSWD=${IPVA_PASSWD} -DIPVA_URL=${IPVA_URL} -Ddate=${date}"
    27. }
    28. ######################## main ###############################
    29. main(){
    30. Site_ReID_InOut_Func
    31. }
    32. #############################################################
    33. ###
    34. main

    同步成功

    2.3 参数说明


    • defaultFS

    描述:Hadoop hdfs文件系统namenode节点地址。格式:hdfs://ip:端口;例如:hdfs://127.0.0.1:9000 必选:是 默认值:无

    • fileType

    描述:文件的类型,目前只支持用户配置为"text"或"orc"。 text表示textfile文件格式 orc表示orcfile文件格式 必选:是 默认值:无

    • fileName

    描述:HdfsWriter写入时的文件名,实际执行时会在该文件名后添加随机的后缀作为每个线程写入实际文件名。 必选:是 默认值:无

    • column
    1. 描述:写入数据的字段,不支持对部分列写入。为与hive中表关联,需要指定表中所有字段名和字段类型,其中:
    2. name指定字段名,type指定字段类型。
    3. 用户可以指定Column字段信息,配置如下:
    4. "column":
    5. [
    6. {
    7. "name": "userName","type": "string"
    8. },
    9. {
    10. "name": "age","type": "long"
    11. }
    12. ]
    13. 必选:是
    14. 默认值:无

    • writeMode

    描述:hdfswriter写入前数据清理处理模式: append,写入前不做任何处理,DataX hdfswriter直接使用filename写入,并保证文件名不冲突。 nonConflict,如果目录下有fileName前缀的文件,直接报错。 必选:是 默认值:无

    • fieldDelimiter

    描述:hdfswriter写入时的字段分隔符,需要用户保证与创建的Hive表的字段分隔符一致,否则无法在Hive表中查到数据 必选:是 默认值:无

    • compress

    描述:hdfs文件压缩类型,默认不填写意味着没有压缩。其中: text类型文件支持压缩类型有gzip、bzip2; orc类型文件支持的压缩类型有NONE、SNAPPY(需要用户安装SnappyCodec)。 必选:否 默认值:无压缩

    • hadoopConfig
    1. 描述:hadoopConfig里可以配置与Hadoop相关的一些高级参数,比如HA的配置。
    2. "hadoopConfig":{
    3. "dfs.nameservices": "testDfs",
    4. "dfs.ha.namenodes.testDfs": "namenode1,namenode2",
    5. "dfs.namenode.rpc-address.aliDfs.namenode1": "",
    6. "dfs.namenode.rpc-address.aliDfs.namenode2": "",
    7. "dfs.client.failover.proxy.provider.testDfs": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
    8. }
    • encoding

    描述:写文件的编码配置。 必选:否 默认值:utf-8,慎重修改

    • haveKerberos

    描述:是否有Kerberos认证,默认false 例如如果用户配置true,则配置项kerberosKeytabFilePath,kerberosPrincipal为必填。 必选:haveKerberos 为true必选 默认值:false

    • kerberosKeytabFilePath

    描述:Kerberos认证 keytab文件路径,绝对路径 必选:否 默认值:无

    • kerberosPrincipal

    描述:Kerberos认证Principal名,如xxxx/hadoopclient@xxx.xxx 必选:haveKerberos 为true必选 默认值:无

    1. "haveKerberos": true,
    2. "kerberosKeytabFilePath": "/etc/security/keytabs/winner_hdp.keytab",
    3. "kerberosPrincipal": "winner_hdp@WINNER.COM",


     

  • 相关阅读:
    Feign高级实战-源码分析
    【无标题】
    企业发展必不可缺——BPM系统
    Redis 复习计划 - Redis主从数据一致性和哨兵机制
    【应用多元统计分析】上机四&五——主成分分析&因子分析
    AI大模型与函数式编程
    如何让销售管理更高效?
    数据库 基础面试第一弹
    2022-08-01
    冥想第九百四十八天
  • 原文地址:https://blog.csdn.net/qq_35995514/article/details/134079591