阅读 153

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

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"
                    }
                }
            }
        ]
    }
}


作者:bug菌
链接:https://juejin.cn/post/7022446939438317598


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐