복붙노트

[HADOOP] EMR에 S3 폴더 나열

HADOOP

EMR에 S3 폴더 나열

스파크 작업 중에 EMR에 S3 버킷의 내용을 간단히 나열하는 방법을 이해하지 못했습니다. 나는 다음을하고 싶었다.

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

hadoopConfiguration에서 fs.defaultFS-> hdfs : //**********.eu-central-1.compute.internal : 8020

hdfs : // myfolder / myfile 대신 / myfolder / myfile 프로토콜을 사용하지 않으면 기본적으로 df.defaultFS가됩니다. 그러나 s3 : // mybucket /을 지정하면 fs.defaultFS가 중요하지 않아야합니다.

디렉토리 정보에 어떻게 액세스합니까? spark.read.parquet ( "s3 : //mybucket/*.parquet")는 잘 작동하지만이 작업을 위해 일부 파일의 존재를 확인하고 일부 파일을 삭제하고 싶습니다. org.apache.hadoop.fs.FileSystem이 올바른 도구라고 가정했습니다.

추신 : 나는 또한 로깅이 어떻게 작동하는지 이해하지 못합니다. 배포 모드 클러스터를 사용하는 경우 (클라이언트 모드에서 작동하지 않는 s3에서 jar를 배포하려는 경우) s3 : // logbucket / j -... / containers / application ...에서만 로그를 찾을 수 있습니다. /conatiner...0001. S3에서 보여지기까지는 오랜 시간이 걸린다. 마스터에서 ssh를 통해 어떻게 찾을 수 있습니까? 또는 스파크 응용 프로그램 로그를 확인하는 더 빠르고 더 나은 방법이 있습니까? 업데이트 : 방금 / mnt / var / log / hadoop-yarn / containers에서 찾았지만 yarn : yarn이 소유하고 있으며 hadoop 사용자는 읽을 수 없습니다. :( 아이디어?

해결법

  1. ==============================

    1.나는 당신이 FS 권리를 선택하고 있다고 생각하지 않습니다. 정적 FileSystem.get () 메소드 또는 Path.get ()을 사용하십시오.

    나는 당신이 FS 권리를 선택하고 있다고 생각하지 않습니다. 정적 FileSystem.get () 메소드 또는 Path.get ()을 사용하십시오.

    다음과 같은 것을 시도하십시오 : 경로 p = 새로운 경로 ( "s3 : // bucket / subdir"); FileSystem fs = p.get (conf); FileStatus [] status = fs.listStatus (p);

    로그와 관련하여 YARN UI는 노드 관리자를 통해 로그를 표시해야합니다.

  2. from https://stackoverflow.com/questions/43980302/list-s3-folder-on-emr by cc-by-sa and MIT license