Datax ftp写入hive

news2024/11/29 11:30:31

这是一个巨大的坑,网上对这块的完整描述真的很少,新手真的会很迷茫!!!

插件

选择插件

reader插件选择:ftpread

write插件选择:hdfswrite

参数配置

reader参数

"parameter": {
    //选择要导入的列所有用*,如果要指定{"index":0,"type":"string"}
    "column": [
        "*"
    ],
    //编码格式
    "encoding": "UTF-8",
    //分隔符
    "fieldDelimiter": "\t",
    //ftp服务器ip
    "host": "172.XXX.XXX.XXX",
    //ftp连接用户、密码
    "username": "ftp"
    "password": "***",
    //ftp导入文件目录(坑1)
    "path": [
        "/upload/tmp2.csv"
    ],
    //ftp连接port
    "port": 21,
    //ftp连接协议
    "protocol": "ftp",
    //是否跳过首行
    "skipHeader": true,
  
}

write参数

"parameter":{
    //导入的列名
    "column": [
        {
            "name": "id",
            "type": "STRING"
        },
        {
            "name": "name",
            "type": "STRING"
        },
        {
            "name": "address",
            "type": "STRING"
        }
    ],
    //压缩类型
    "compress": "",
    //hdfs连接
    "defaultFS": "hdfs://172.XXX.XXX.XXX:XXXX",
    //分隔符
    "fieldDelimiter": "\u0001",
    //表名
    "fileName": "ftp_test_001",
    //数据文件格式
    "fileType": "text",
    "nullFormat": "\\N",
    //数据文件地址
    "path": "/user/hive/warehouse/ftp.db/ftp_test_001",
    //写入模式
    "writeMode": "append"
}

遇到的问题

坑1 不知道ftp的path要填什么

刚搭建完ftp,还不知道怎么用,所以这个地方完全无从下手。

只能通过windows的命令窗连接一下ftp,尝试使用功能增加了解

 

使用ls命令发现下面的目录和linux的”/var/ftp“下的目录是一样的

 

 linux:

 同时根据官网的描述,推测这里的path写的就是从ftp之后开始算起

所以我上面配置的是”/upload/tmp2.csv“(为什么是upload后面再讲)

坑2 执行datax任务,一直报错NullPointerException

 

 这里简直是神坑!完全不知道为什么,只能一点一点展开排查。

首先排查是否有必填字段没写。(这点可以从官网看)我这里是吧必填的都写了。

然后还是找不到原因,只能打开源码,看一下出错的地方。

找到了大致的报错点如图

所以就推测是不是inputStream是null所以报了空指针的异常。 

于是写了一个简单的用Java连接ftp获取文件的demo,发现果然传”/pub/tmp2.csv“会返回null。

于是通过windows的命令窗get 一下这个tmp2.csv,发现报错

基本问题已经锁定了,就是这里获取不到文件。

获取不到文件的原因一般就是两个

1. 路径没配对

2. 权限问题

基于上面的推测1不太可能了,只有可能是权限的问题。

然后网上找了很多关于ftp权限的帖子

1. 

解决方法:
setsebool -P ftpd_disable_trans 1
service vsftpd restart

 

但是试过了不行

2. 

修改 

ftpusers、user_list等文件

依然不行

3. 最后

看到了这样的一个帖子,他解决的是无法上传,我是无法下载,我觉得问题很像,他的修改内容主要是

1.ftp目录权限:

查看ftp目录:

cat /etc/passwd | grep ftp

ftp:x:107:65534::/var/ftp:/bin/false

ftp目录为/var/ftp

chown root:root /var/ftp

chmod -R 777 /var/ftp

但这样是不能上传文件的。因为这是匿名用户,当前目录所有者是root用户; 真的要上传文件在该目录下建立一个文件夹如名字是upload,

mkdir /var/ftp/upload

chown ftp:root /var/ftp/upload

于是就创建了一个新的upload目录(这就是为什么我得脚本用的是‘/upload/tmp2.csv’),然后修改了这个目录的权限给ftp用户。

然后我在命令窗里执行了一下get命令

 

于是终于不报空指针了,我马上去运行datax脚本,开始报新的错误!

居然连接不上了,我赶紧重新命令框连接,连接失败。

 

  别看他连接失败了,但感觉要好起来了。于是开始解决这个连接不上了的问题。

坑3 ftp 500 OOPS: vsftpd: refusing to run with writable root inside chroot()

这个问题看起来还是权限的问题,根据网上的帖子修改了vsftpd.conf文件

chroot_local_user=YES
allow_writeable_chroot=YES  

但依然不行。

网上很多是这样说的,这时我注意到了标红的地方

从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。

 要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限,注意把目录替换成你自己的。或者你可以在vsftpd的配置文件中增加下列两项中的一项:

这时候想起了坑2中把/var/ftp的权限改成了777,推测可能是这个原因,于是就改成755

chmod -R 755 /var/ftp

于是再次尝试连接,成功啦!撒花!

 运行一下datax任务,也执行成功啦!

总结

解决这个问题正常的步骤(有些可能是多余配置,成功后我就没仔细的验证每个配置对本次修改的影响范围)

1. 修改ftp文件目录的权限

chmod -R 755 /var/ftp

2. 修改vsftpd.conf

chroot_local_user=YES
allow_writeable_chroot=YES  

3. 创建新的目录,将目录权限给你连接ftp的用户

mkdir /var/ftp/upload

chown ftp:root /var/ftp/upload

setsebool -P ftpd_disable_trans 1
service vsftpd restart
这个我也改了,但是我感觉和他没啥关系,1、2、3执行不行的话也改一下这个吧

4. 重启服务,改完这些配置都需要重启的

systemctl restart vsftpd.service

接下来我要研究这两个插件的参数具体可以控制什么细节了,以上只能让任务跑通。

最后附上我得vsftpd.conf以及datax的任务json

vsftpd.conf

anonymous_enable=YES
local_enable=YES
write_enable=YES

allow_writeable_chroot=YES

local_umask=022
anon_umask=022

allow_ftpd_full_access
anon_upload_enable=YES


anon_mkdir_write_enable=YES
anon_other_write_enable=YES

dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=NO

listen_ipv6=YES

pam_service_name=vsftpd
userlist_enable=YES

tcp_wrappers=YES
                     

datax.json

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "ftpreader",
                    "parameter": {
                        "host": "172.XXX.XXX.XXX",
                        "port": 21,
                        "username": "ftp",
                        "password": "123",
                        "protocol": "ftp",
                        "path": [
                            "/upload/tmp2.csv"
                        ],
                        "fieldDelimiter": "\t",
                        "encoding": "UTF-8",
                        "column": [
                            "*"
                        ],
                        "skipHeader": true
                    }
                },
                "writer": {
                    "name": "hdfswriter",
                    "parameter": {
                        "defaultFS": "hdfs://172.XXX.XXX.XXX:8020",
                        "writeMode": "append",
                        "fieldDelimiter": "\u0001",
                        "fileType": "text",
                        "compress": "",
                        "path": "/user/hive/warehouse/ftp.db/ftp_test_001",
                        "fileName": "ftp_test_001",
                        "nullFormat": "\\N",
                        "column": [
                            {
                                "name": "id",
                                "type": "STRING"
                            },
                            {
                                "name": "name",
                                "type": "STRING"
                            },
                            {
                                "name": "address",
                                "type": "STRING"
                            }
                        ]
                    }
                }
            }
        ],
        "setting": {
            "speed": {
                "channel": 1
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/589976.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

干货|SpringCloud全家桶微服务初探

SpringCloud的从整体架构上看,相对来说是完整的、庞大的。它不仅仅是一个基础性架构工具,它为微服务架构提供了一个“全家桶”的套餐。每一个模块关注各自的职能,并且能够很好地配合与协作,能够帮助入门者快速搭建起一套微服务架构…

前后端联调跨域问题

文章目录 什么是同源策略如何判断是否同源?跨域资源共享(CORS)如何解决跨域问题 什么是同源策略 同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。 如何判断是否同源? 如果…

从中国人民大学与加拿大女王大学金融硕士的学员构成,了解金融行业都有哪些职位

金融行业最受欢迎的岗位莫过于券商、银行、基金公司、私募市场、体制内(监管部门、交易所等)、信托、大企业投资部、保险、管理咨询、资产管理。在当下如果要选择工作,想找就业率第一、薪酬排名第一的行业,那一定是金融工作。中国…

03 redis新类型bitmap/hyperloglgo/GEO

亿级系统中常见的四种统计 聚合统计 统计多个集合元素的聚合结果,就是前面讲解过的交差并等集合统计交并差集和聚合函数的应用 排序统计 抖音视频最新评论留言的场景,请你设计一个展现列表。考察你的数据结构和设计思路设计案例和回答思路以抖音vcr最…

3.java高级之GUI编程

1.gui (graphical user interface) awt sun公司最早的gui,不美观,不兼容各平台swing : awt升级2.顶层容器(只有一个)(其他的只能放这里)Jframe Jdialog对话框 Jwindow(x) //在main方法写fnew Jframe(); f.setSize(300,300); //设置大小f.setTitle("hello"); //设置…

java条件语句

文章目录 一、java条件语句1、Java 条件语句 - if...else2、Java switch case 语句 总结 一、java条件语句 1、Java 条件语句 - if…else Java 中的条件语句允许程序根据条件的不同执行不同的代码块。 一个 if 语句包含一个布尔表达式和一条或多条语句。 语法 if 语句的语法…

你真的了解kotlin中协程的suspendCoroutine原理吗?

文章目录 什么是协程suspendCoroutineUninterceptedOrReturnsuspendCoroutineUninterceptedOrReturn存在的问题suspendCoroutinesuspendCancellableCoroutine ​ 引言: 在Kotlin协程中,如何让一个suspned 函数挂起?如何让挂起协程恢复&#…

STM32G4 比较器COMPx(寄存器开发)

目录 1. 特性1.1 框图1.2 比较器输入信号SEL1.3 比较器滞回选择HYST1.4 比较器的输出1.5 LOCK机制 2. 编程2.1 初始化步骤2.2 举例 STM内部的比较器是模拟量的比较器,其与APB2时钟同步,在RCC时钟控制器中没有COMx时钟使能标志位,其时钟的使能…

前端自学要多久?自学前端一般多久可以找到差不多的工作?

好程序员今天给各位同学分享自学前端的高效率路径,最快4个月,平均6个月! 一、html, CSS (1月) 1.基本语法, 2.做2-3个项目实战 3.刷面试题 二、JavaScript (1.5月) 1.基本语法 2.实际案例练习融合HTML, Css项目实战 3.刷题面试题 三、Vue/Rea…

Java 高级应用-多线程-(三)实现 Callable 接口与使用线程池创建线程

实现 Callable 接口 • 与使用 Runnable 相比, Callable 功能更强大些 – 相比 run()方法,可以有返回值 – 方法可以抛出异常 – 支持泛型的返回值(需要借助 FutureTask 类,获取返回结果) • Future 接口(…

游戏研发项目管理

基于阶段模式进行游戏新产品研发过程,以及基于这种研发过程Leangoo 领歌提供的项目模板。 二、游戏产品开发流程 通常开发一款新游戏大体上会按照如下流程来进行: 1) 概念阶段 – Concept 主策根据产品创意,确定游戏策划草案&a…

C++中的内存空间管理详解【C++】

文章目录 C/C内存分布C语言中动态内存管理方式:malloc/calloc/realloc/freeC内存管理方式new/delete操作内置类型new和delete操作自定义类型 operator new与operator delete函数重载operator new与operator deletenew和delete的实现原理内置类型自定义类型 定位new表…

使用tomcat可能遇到的问题

问题一:窗口一闪而过 如果双击startup.bat,启动tomcat,命令窗口一闪而过;或者用命令窗口执行startup.bat命令,未能启动tomcat,而是提示下面的文字; 说明可能是java的环境变量配置错误&#xf…

让ChatGPT谈谈科技发展

ChatGPT谈科技发展 讲讲科技发展的那些事儿谈谈ChatGPT对科技发展的影响谈谈你对ChatGPT的看法ChatGPT对科技发展的负面影响ChatGPT的存在是利是弊?关于全国科技者工作日 讲讲科技发展的那些事儿 谈谈ChatGPT对科技发展的影响 谈谈你对ChatGPT的看法 ChatGPT对科技发…

pdf怎么合并成一个文件?高效工具分享

PDF是一种非常常用的文档格式,许多人经常需要合并多个PDF文件为一个文件。这是因为有时候我们需要将多个PDF文件打包成一个文件,以便于共享或归档。在本文中,我们将介绍如何使用电脑或手机合并PDF文件。 以下是常见的合并PDF的软件&#xff1…

以太坊Layer 2即将爆发!加密巨头入场布局,或将迎来“百链大战”!

眼下,以太坊Layer 2发展势头强劲。在数十条Rollup Layer 2异彩纷呈之际,Coinbase、ConsenSys等加密巨头也开始下场参与竞争,部署原生Layer 2网络。 截至2022年底,Layer 2解决方案的日均交易数在持续增加,甚至超过了以太…

牛客网语法篇刷题(C语言) — 基本类型

🤩本文作者:大家好,我是paperjie,感谢你阅读本文,欢迎一建三连哦。 🥰内容专栏:这里是《C语言—语法篇》专栏,笔者用重金(时间和精力)打造,基础知识一网打尽,…

如何制作插件使用案例?

UE5 插件开发指南 前言0 示例角色蓝图1测试关卡2 扩展物品数据3 小结前言 作为一款插件,我们一定想要开发者拿到之后立即知道如何使用,所以我们需要制作插件使用案例,最好搭配相应的文档教会插件的使用者如何使用插件,如何对插件的功能进行扩展。为了达到这样的目标,我们…

TOPSIS(优劣解距离法)【附Python实现代码及可视化代码】

目录 一、指标正向化 1.极小型指标->极大型指标 2.中间型指标->极大型指标 3.区间型指标->极大型指标 二、标准化处理 三、计算得分并归一化(不带权重) 四、计算得分并归一化(带权重) 熵权法 1)判断输入的矩阵是否存在负数 2)计算第j…

通过 Wacom 的 Project Mercury 提高远程办公效率

过去几年中,我们的工作方式发生了翻天覆地的变化。疫情加快了对远程办公和协作的采纳,导致人们更加依赖技术来联系团队和提高工作效率。 但是,那些依靠专门硬件和软件来完成工作的创作者呢?艺术家、设计师和开发人员需要使用专门…