복붙노트

[HADOOP] Amazon EC2 / S3를 사용하여 Hadoop 클러스터에서 HDFS로 로컬 데이터를 복사 할 때 발생하는 문제

HADOOP

Amazon EC2 / S3를 사용하여 Hadoop 클러스터에서 HDFS로 로컬 데이터를 복사 할 때 발생하는 문제

Amazon EC2에서 5 개의 노드를 포함하는 Hadoop 클러스터를 설정했습니다. 이제 마스터 노드에 로그인하여 다음 명령을 제출하십시오.

bin/hadoop jar <program>.jar <arg1> <arg2> <path/to/input/file/on/S3>

그것은 다음과 같은 오류를 (동시에) throw합니다. 첫 번째 오류는 '% 2F'로 교체 할 때 '% 2F'로 바꾸면 두 번째로 throw됩니다.

1) Java.lang.IllegalArgumentException: Invalid hostname in URI S3://<ID>:<SECRETKEY>@<BUCKET>/<path-to-inputfile>
2) org.apache.hadoop.fs.S3.S3Exception: org.jets3t.service.S3ServiceException: S3 PUT failed for '/' XML Error Message: The request signature we calculated does not match the signature you provided. check your key and signing method.

노트 :

1) jps를 제출하여 마스터에서 실행중인 작업을 확인한 후

1116 NameNode
1699 Jps
1180 JobTracker

DataNode와 TaskTracker를 떠난다.

2) 내 비밀 키에는 두 개의 '/'(슬래시)가 있습니다. 그리고 그들을 S3 URI에서 '% 2F'로 대체합니다.

추신 : 단일 노드에서 실행될 때 프로그램은 EC2에서 정상적으로 실행됩니다. 클러스터를 시작할 때만 S3에서 /로 HDFS로 데이터를 복사하는 것과 관련된 문제가 발생합니다. 그리고 distcp는 무엇을합니까? S3에서 HDFS로 데이터를 복사 한 후에도 데이터를 배포해야합니까? (HDFS가 내부적으로 처리했다고 생각했습니다)

Amazon EC2 / S3를 사용하여 hadoop 클러스터에서 Map / reduce 프로그램을 실행하는 방법을 설명하는 링크로 안내 할 수 있다면. 그게 좋을거야.

문안 인사,

디팍.

해결법

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

    1.이 작업 흐름을 위해 Apache Whirr을 사용할 수도 있습니다. 자세한 정보는 빠른 시작 안내서 및 5 분 안내서를 확인하십시오.

    이 작업 흐름을 위해 Apache Whirr을 사용할 수도 있습니다. 자세한 정보는 빠른 시작 안내서 및 5 분 안내서를 확인하십시오.

    면책 조항 : 저는 커미터 중 한 명입니다.

  2. ==============================

    2.아마 s3n : // urls가 아닌 s3n : // urls를 사용하고 싶을 것입니다. s3n : // "이 S3 URL에서 외부 세계에서 읽을 수있는 일반 파일"을 의미합니다. s3 : //은 S3 버킷에 매핑 된 HDFS 파일 시스템을 나타냅니다.

    아마 s3n : // urls가 아닌 s3n : // urls를 사용하고 싶을 것입니다. s3n : // "이 S3 URL에서 외부 세계에서 읽을 수있는 일반 파일"을 의미합니다. s3 : //은 S3 버킷에 매핑 된 HDFS 파일 시스템을 나타냅니다.

    액세스 키에 대한 URL 이스케이프 문제를 피하려면 (그리고 훨씬 쉽게하기 위해) /etc/hadoop/conf/core-site.xml 파일에 URL을 입력하십시오.

    <property>
      <name>fs.s3.awsAccessKeyId</name>
      <value>0123458712355</value>
    </property>
    <property>
      <name>fs.s3.awsSecretAccessKey</name>
      <value>hi/momasgasfglskfghaslkfjg</value>
    </property>
    <property>
      <name>fs.s3n.awsAccessKeyId</name>
      <value>0123458712355</value>
    </property>
    <property>
      <name>fs.s3n.awsSecretAccessKey</name>
      <value>hi/momasgasfglskfghaslkfjg</value>
    </property>
    

    한 시점에서 슬래시가있는 비밀 키와 관련된 중요한 문제가있었습니다. URL은 일부 컨텍스트에서는 디코딩되었지만 다른 컨텍스트에서는 디코딩되지 않았습니다. 나는 그것이 고쳐 졌는지는 모르지만, .conf의 키를 사용하면 이것이 사라진다는 것을 알고 있습니다.

    기타 quickies :

  3. ==============================

    3.Amazon Elastic MapReduce를 사용해보십시오. hadoop 노드를 구성 할 필요가 없으므로 원하는 방식으로 s3 계정의 객체에 액세스 할 수 있습니다.

    Amazon Elastic MapReduce를 사용해보십시오. hadoop 노드를 구성 할 필요가 없으므로 원하는 방식으로 s3 계정의 객체에 액세스 할 수 있습니다.

  4. ==============================

    4.용도

    용도

    -Dfs.s3n.awsAccessKeyId=<your-key> -Dfs.s3n.awsSecretAccessKey=<your-secret-key>
    

    e.

    hadoop distcp -Dfs.s3n.awsAccessKeyId=<your-key> -Dfs.s3n.awsSecretAccessKey=<your-secret-key> -<subsubcommand> <args>
    

    또는

    hadoop fs -Dfs.s3n.awsAccessKeyId=<your-key> -Dfs.s3n.awsSecretAccessKey=<your-secret-key> -<subsubcommand> <args>
    
  5. from https://stackoverflow.com/questions/3009792/problem-with-copying-local-data-onto-hdfs-on-a-hadoop-cluster-using-amazon-ec2 by cc-by-sa and MIT license