복붙노트

[HADOOP] 원사 (MRv2) 또는지도 (MRv1)가 아닌 사용자가 제출 한 Hadoop 작업이 실패합니다.

HADOOP

원사 (MRv2) 또는지도 (MRv1)가 아닌 사용자가 제출 한 Hadoop 작업이 실패합니다.

MRv1 (CDH5)을 실행하는 테스트 클러스터를 LocalFileSystem과 짝을 짓고 있으며 작업을 실행할 수있는 유일한 사용자는 맵핑되어 있습니다 (mapred는 jobtracker / tasktracker 데몬을 시작하는 사용자 임). 다른 사용자로 작업을 제출할 때 jobtracker / tasktracker가 .staging 디렉토리 아래에서 job.jar을 찾을 수 없기 때문에 작업이 실패합니다.

로컬 파일 시스템과 짝을 이룰 때 Yarn (MRv2)과 동일한 문제가 발생합니다. 즉, 'yarn'이외의 사용자가 작업을 제출할 때 응용 프로그램 마스터는 .staging 디렉토리 아래에서 job.jar을 찾을 수 없습니다.

작업을 제출하는 사용자의 .staging 디렉토리를 검사하면 job.jar이 .staging // 디렉토리 아래에 있지만, .staging 디렉토리의 사용 권한은 700 (drwx ------)으로 설정되고 따라서 응용 프로그램 master / tasktracker는 job.jar 및 지원 파일에 액세스 할 수 없습니다.

프로덕션 설정에서 OCFS와 쌍을 이루는 Hadoop 프로젝트의 MapReduce 부분 만 사용하기 때문에 LocalFileSystem으로 테스트 클러스터를 실행합니다.

이와 관련하여 도움이 될 것입니다.

해결법

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

    1.클러스터의 각 사용자에 대한 스테이징 디렉토리를 설정해야합니다. 이것은 들리는만큼 복잡하지 않습니다.

    클러스터의 각 사용자에 대한 스테이징 디렉토리를 설정해야합니다. 이것은 들리는만큼 복잡하지 않습니다.

    다음 속성을 확인하십시오.

    <property>
    <name>hadoop.tmp.dir</name>
    <value>/tmp/hadoop-${user.name}</value>
    <source>core-default.xml</source>
    </property>
    

    이것은 기본적으로 각 사용자에 대한 tmp 디렉토리를 설정합니다.

    이것을 스테이징 디렉토리에 연결하십시오.

    <property>
    <name>mapreduce.jobtracker.staging.root.dir</name>
    <value>${hadoop.tmp.dir}/mapred/staging</value>
    <source>mapred-default.xml</source>
    </property>
    

    이 방법이 작동하는지 또는 이미이 방법으로 설정되었는지 알려주십시오.

    이러한 속성은 yarn-site.xml에 있어야합니다. 올바르게 기억한다면.

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

    2.이것은 나를 위해 일했습니다. MR v1에서이 속성을 설정했습니다.

    이것은 나를 위해 일했습니다. MR v1에서이 속성을 설정했습니다.

    <property>
        <name>hadoop.security.authorization</name>
        <value>simple</value>
      </property>
    

    이것을 통해 가십시오 :

    액세스 제어 목록 $ {HADOOP_CONF_DIR} /hadoop-policy.xml은 각 Hadoop 서비스에 대한 액세스 제어 목록을 정의합니다. 모든 액세스 제어 목록에는 간단한 형식이 있습니다.

    사용자 및 그룹 목록은 쉼표로 구분 된 이름 목록입니다. 두 목록은 공백으로 구분됩니다.

    예 : user1, user2 group1, group2.

    그룹 목록 만 제공하면 줄의 시작 부분에 공백을 추가합니다. 공백 뒤에 공백으로 구분 된 사용자 목록이나 공백이 없거나 지정된 사용자 집합 만 포함됩니다.

    특별한 * 값은 모든 사용자가 서비스에 액세스 할 수 있음을 의미합니다.

    서비스 레벨 권한 부여 구성 새로 고침 Hadoop 마스터 데몬 중 하나를 다시 시작하지 않고도 NameNode 및 JobTracker에 대한 서비스 수준 인증 구성을 변경할 수 있습니다. 클러스터 관리자는 마스터 노드에서 $ {HADOOP_CONF_DIR} /hadoop-policy.xml을 변경하고 각각의 구성을 -refreshServiceAcl 스위치를 통해 각각 dfsadmin 및 mradmin 명령으로 다시로드하도록 NameNode 및 JobTracker에 지시 할 수 있습니다.

    NameNode에 대한 서비스 레벨 권한 구성을 새로 고치십시오.

    $ bin / hadoop dfsadmin -refreshServiceAcl

    JobTracker에 대한 서비스 수준 인증 구성을 새로 고칩니다.

    $ bin / hadoop mradmin -refreshServiceAcl

    물론 $ {HADOOP_CONF_DIR} /hadoop-policy.xml의 security.refresh.policy.protocol.acl 속성을 사용하여 서비스 수준 권한 구성을 특정 사용자 / 그룹으로 새로 고치는 기능에 대한 액세스를 제한 할 수 있습니다.

    예제들 mapreduce 그룹의 alice, bob 및 users 사용자 만 MapReduce 클러스터에 작업을 제출할 수 있습니다.

    <property>
         <name>security.job.submission.protocol.acl</name>
         <value>alice,bob mapreduce</value>
    </property>
    

    그룹 데이터 노드에 속한 사용자로 실행중인 DataNode 만 NameNode와 통신하도록 허용합니다.

    <property>
         <name>security.datanode.protocol.acl</name>
         <value>datanodes</value>
    </property>
    Allow any user to talk to the HDFS cluster as a DFSClient:
    
    <property>
         <name>security.client.protocol.acl</name>
         <value>*</value>
    </property>
    
  3. from https://stackoverflow.com/questions/24390227/hadoop-jobs-fail-when-submitted-by-users-other-than-yarn-mrv2-or-mapred-mrv1 by cc-by-sa and MIT license