列出emr上的s3文件夹

7xllpg7q  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(465)

我不明白如何在spark作业期间简单地在emr上列出s3 bucket的内容。我想做以下事情

Configuration conf = spark.sparkContext().hadoopConfiguration();
FileSystem s3 = S3FileSystem.get(conf);
List<LocatedFileStatus> list = toList(s3.listFiles(new Path("s3://mybucket"), false))

此操作总是失败,并出现以下错误

java.lang.IllegalArgumentException: Wrong FS: s3://*********/, expected: hdfs://**********.eu-central-1.compute.internal:8020

在hadoop配置中 fs.defaultFS -> hdfs://**********.eu-central-1.compute.internal:8020 如果我不使用协议,我的理解是只使用/myfolder/myfile而不是i.e。hdfs://myfolder/myfile 它将默认为df.defaultfs。但是如果我指定s3://mybucket/fs.defaultfs应该无关紧要。
如何访问目录信息?spark.read.parquet(“s3://mybucket/*.parquet”)工作得很好,但是对于这个任务,我需要检查一些文件的存在性,还想删除一些文件。我假设org.apache.hadoop.fs.filesystem是正确的工具。
ps:我也不明白日志是怎么工作的。如果我使用deploy-mode-cluster(我想从s3部署jar,它在客户机模式下不工作),我只能在s3://logbucket/j-…/containers/application…/conatiner…0001中找到我的日志。在s3中显示之前有相当长的延迟。如何在主服务器上通过ssh找到它?或者是否有更快/更好的方法来检查spark应用程序日志?更新:刚在下面找到 /mnt/var/log/hadoop-yarn/containers 但是它的所有者yarn:yarn and 作为hadoop用户,我无法阅读它。(思想?

kyvafyod

kyvafyod1#

我认为你接错了电话;就用静电吧 FileSystem.get() 方法,或 Path.get() 尝试以下操作: Path p = new Path("s3://bucket/subdir"); FileSystem fs = p.get(conf); FileStatus[] status= fs.listStatus(p); 关于日志,yarn ui应该允许您通过节点管理器查看日志。

mlnl4t2r

mlnl4t2r2#

在我的例子中,我需要读取以前的emr作业生成的parquet文件,我正在查找给定s3前缀的文件列表,但好在我们不需要这么做,我们可以简单地执行以下操作:spark.read.parquet(bucket+prefix\u目录)

相关问题