关于Hadoop以及S3的几个坑

本文分享了在AWS上使用Hadoop时遇到的一些问题,包括S3文件系统URI转换导致的访问问题,分布式缓存文件在不同MR迭代间的重用限制,以及在S3上操作文件系统和本地文件时遇到的检查和访问问题,并提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先是关于AWS上用distributive cache files的问题,由于AWS用的是S3文件系统,而文件cache以后是HDFS文件系统,那么当我们直接去取URI的时候就会发生一件诡异的事情:原来的s3://被转换成了s3:/,而且这种转换是不可避免的,不论你手工加slash什么的都没用…… 这个问题卡了我一晚上,搜了好多资料,最后才发现最完美的解决方案:

在cache的时候用别名来标记文件,比如

job.addCacheFile(new URI(path[1] + "/data.txt"+"#data.txt"));

这个#就是别名,然后在读取的时候可以用别名读取:

new File("./data.txt")


然后就是关于cache file重用的问题,比如在不同的MR迭代之间传递数据……据我研究又一个晚上的结果,这是不可能的!因为每次去cache同一个file的时候,上一个file也在cache中(而且没法删除掉),这样就会有两个不同的时间戳,系统就会报错。我试着hack时间戳,但是依然没用……所以估计Hadoop的设计就是cache以后就不能更改了。


还有就是访问文件系统的问题,这个问题花费了我好几个小时。本地用:

FileSystem.get(conf)

似乎没什么问题,但是一旦上了S3就要专门指定Schema了:

FileSystem.get(new URI("s3://finalapp"),conf)


最后就是本地访问文件系统的时候出现checksum错误,一般是第一轮可以跑,然后后面再跑就是这个问题……这个问题困扰了一天!最后,无意中发现Hadoop在数据文件旁边造了几个隐藏的CRC文件!这些CRC文件就是罪魁祸首,删除掉一切恢复正常……


以上就是我遇到的几个坑,虽然解决方案很简单,但是如果事先不知道的话,会陷在里面很久很久…… TAT


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值