DataX 从HDFS文件系统上读取数据到FTP文件服务器 【举例介绍】

官文档地址:https://github.com/alibaba/DataX 

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

类型 数据源 Reader(读) Writer(写) 文档
RDBMS 关系型数据库 MySQL  、
            Oracle         √         √      、
  SQLServer  、
  PostgreSQL  、
  DRDS  、
  通用RDBMS(支持所有关系型数据库)  、
阿里云数仓数据存储 ODPS  、
  ADS  
  OSS  、
  OCS  、
NoSQL数据存储 OTS  、
  Hbase0.94  、
  Hbase1.1  、
  Phoenix4.x  、
  Phoenix5.x  、
  MongoDB  、
  Hive  、
  Cassandra  、
无结构化数据存储 TxtFile  、
  FTP  、
  HDFS  、
  Elasticsearch  
时间序列数据库 OpenTSDB  
  TSDB  、

 从hdfs上Reader  ---》  Writer 到FTP文件服务器

闲话不多说;直接演示;

{   "setting": {},
    "job": {
        "setting": {
            "speed": {
                "channel": 10
            }
        },
        "content": [
            {
                "reader": {
                    "name": "hdfsreader",
                    "parameter": {
                        "defaultFS": "hdfs://10.240.4.5:8000",
  	                "path": "/wonders/123456",
                        "column": [
                             "*"
                        ],
                        "fileType": "text",
                        "encoding": "UTF-8",
                        "fieldDelimiter": ","
                    }
                },
               "writer": {
                    "name": "ftpwriter",
                    "parameter": {
                        "protocol": "ftp",
                        "host": "10.241.2.1",
                        "port": 21,
                        "username": "admin",
                        "password": "root",
                        "timeout": "60000",
                        "path": "/usr/local/ftp/ftpuser/uploadTest/",
                        "fileName": "test1",
                        "writeMode": "append",
                        "fieldDelimiter": ",",
                        "encoding": "UTF-8",
                        "nullFormat": "null",
                        "dateFormat": "yyyy-MM-dd",
                        "fileFormat": "text"
                    }
                }
            }
        ]
    }
}

重要参数说明(各个配置项值前后不允许有空格)

channel:参数该为若你读取是具体某个文件夹下的所有文件,channel为你指定默认顺序从头读取文件个数;

一、从HDFS文件系统 reader 数据【参数说明】

1、defaultFS【必选,默认值:无】:Hadoop hdfs文件系统namenode节点地址 ;【通常就是你hdfs安装ip地址加端口号;端口号是你安装时候给的端口号,而不是页面访问hdfs的端口号】

2、path 【必选,默认值:无】:要读取的文件路径 ;详情见DataX官文;【就是你想读取的在hdfs上存储的文件路径,比如我这里】、如下图;

3、column【必选,默认值:读取字段列表,type指定源数据的类型】:读取字段列表,type指定源数据的类型;index指定当前列来自于文本第几列(以0开始),value指定当前类型为常量,不从源头文件读取数据,而是根据value值自动生成对应的列。默认情况下,用户可以全部按照String类型读取数据,配置如下: "column": ["*"]    用户可以指定Column字段信息,配置如下:

"column": [
                               {
                                "index": 0,
                                "type": "long"
                               },
                               {
                                "index": 1,
                                "type": "boolean"
                               },
                               {
                                "type": "string",
                                "value": "hello"
                               },
                               {
                                "index": 2,
                                "type": "double"
                               }
                        ],

【通常是默认全部读取;"*"  】

4、fileType【必选,无默认值】 :描述:文件的类型,目前只支持用户配置为"text"、"orc"、"rc"、"seq"、"csv"

text表示textfile文件格式

orc表示orcfile文件格式

rc表示rcfile文件格式

seq表示sequence file文件格式

csv表示普通hdfs文件格式(逻辑二维表)

特别需要注意的是,HdfsReader能够自动识别文件是orcfile、textfile或者还是其它类型的文件,但该项是必填项,HdfsReader则会只读取用户配置的类型的文件,忽略路径下其他格式的文件

另外需要注意的是,由于textfile和orcfile是两种完全不同的文件格式,所以HdfsReader对这两种文件的解析方式也存在差异,这种差异导致hive支持的复杂复合类型(比如map,array,struct,union)在转换为DataX支持的String类型时,转换的结果格式略有差异,比如以map类型为例:

orcfile map类型经hdfsreader解析转换成datax支持的string类型后,结果为"{job=80, team=60, person=70}"

textfile map类型经hdfsreader解析转换成datax支持的string类型后,结果为"job:80,team:60,person:70"

从上面的转换结果可以看出,数据本身没有变化,但是表示的格式略有差异,所以如果用户配置的文件路径中要同步的字段在Hive中是复合类型的话,建议配置统一的文件格式。

如果需要统一复合类型解析出来的格式,我们建议用户在hive客户端将textfile格式的表导成orcfile格式的表

5、encoding 【不必选,默认值:utf-8】 :读取文件的编码配置;

6、fieldDelimiter 【不必选,默认值:,】 :读取的字段分隔符;

二、数据Writer到HDFS文件系统【参数说明】

1、protocol【必选,默认值:无】:ftp服务器协议,目前支持传输协议有ftp和sftp

2、host【必选,默认值:无】:ftp服务器地址

3、port【不必选,默认值:若传输协议是sftp协议,默认值是22;若传输协议是标准ftp协议,默认值是21】:ftp服务器端口 

4、username【必选,默认值:无】:登录ftp服务器访问用户名

5、password【必选,默认值:无】:登录ftp服务器访问密码

6、path 【不必选,默认值:无】 :FTP文件系统的路径信息;为ftp存储文件的绝对地址

7、timeout 【不必选,默认值:60000(1分钟)】:连接ftp服务器连接超时时间,单位毫秒

8、fileName【必选,默认值:无】:FtpWriter写入的文件名,该文件名会添加随机的后缀作为每个线程写入实际文件

9、writeMode【必选,默认值:无 】:FtpWriter写入前数据清理处理模式;如下三种处理模式

  • truncate,写入前清理目录下一fileName前缀的所有文件。

  • append,写入前不做任何处理,DataX FtpWriter直接使用filename写入,并保证文件名不冲突。

  • nonConflict,如果目录下有fileName前缀的文件,直接报错。

10、fieldDelimiter【不必选,默认值:,】:读取的字段分隔符

11、encoding【不必选,默认值:无压缩】:文本压缩类型,暂时不支持

12、nullFormat【不必选,默认值:\N 】:文本文件中无法使用标准字符串定义null(空指针),DataX提供nullFormat定义哪些字符串可以表示为null。

13、dateFormat【不必选,默认值:无】:日期类型的数据序列化到文件中时的格式,例如 "dateFormat": "yyyy-MM-dd"

14、fileFormat【不必选,默认值:text】:文件写出的格式,包括csv  和text两种,csv是严格的csv格式,如果待写数据包括列分隔符,则会按照csv的转义语法转义,转义符号为双引号";text格式是用列分隔符简单分割待写数据,对于待写数据包括列分隔符情况下不做转义。

15、header 【不必选,默认值:无】:txt写出时的表头,示例['id', 'name', 'age'];

------------------------------------------------------------------------------------------------------------------------------------------

其他的reader writer 依照官文档,都是可以实现的;

以上是我由于本身需要,才去做了研究,若有存在不足的地方,请多多指出,一起进步;

附上我从ftp读取某个文件内容到本地txt;

{
    "setting": {},
    "job": {
        "setting": {
            "speed": {
                "channel": 2
            }
        },
        "content": [
            {
                "reader": {
                    "name": "ftpreader",
                    "parameter": {
                        "protocol": "ftp",
                        "host": "10.241.2.1",
                        "port": 21,
                        "username": "admin",
                        "password": "root",
                        "path": "/usr/local/ftp/ftpuser/uploadTest/test__98f280f0_57fa_4b08_9701_3b848ce7d204.txt"
                        "column": [
                           "*"
                        ],
                        "encoding": "UTF-8",
                        "fieldDelimiter": ","
                    }
                },
                "writer": {
                    "name": "txtfilewriter",
                    "parameter": {
                        "path": "C:/Users/luoyo/Desktop/工具夹/txt",
                        "fileName": "luohw",
                        "writeMode": "append",
                        "dateFormat": "yyyy-MM-dd"
                    }
                }
            }
        ]
    }
}
发布了85 篇原创文章 · 获赞 197 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/weixin_43970743/article/details/103049978