복붙노트

[HADOOP] 다른 사용자로 맵 축소 작업을 실행

HADOOP

다른 사용자로 맵 축소 작업을 실행

하둡과 상호 작용하는 웹 응용 프로그램이 있습니다. (Cloudera cdh3u6) 특정 사용자 작업은 클러스터에서 새로운 Map Reduce 작업을 시작해야합니다.

클러스터는 안전한 클러스터는 아니지만 간단한 그룹 인증을 사용합니다. 따라서 직접 클러스터로 전환하면 명령 줄에서 MR 작업을 시작할 수 있습니다.

웹 응용 프로그램에서 ToolRunner를 사용하여 작업을 실행하고 있습니다.

MyMapReduceWrapperClass mr = new MyMapReduceWrapperClass();
ToolRunner.run(mr, null);


// inside the run implementation of my wrapper class : 
Job job = new Job(conf, "job title");
//set up stuff removed
job.submit();

현재이 작업은 웹 응용 프로그램 서버 (Tomcat) 프로세스를 시작한 사용자로 제출되며 해당 사용자는이 웹 서버에서 작업을 클러스터로 보낼 권한이없는 특수한 로컬 계정입니다.

이상적으로는 다른 사용자가 웹 응용 프로그램 / 서비스와 상호 작용할 때 누가 어떤 작업을 호출하는지 알 수 있도록 사용자로부터 일종의 정체성을 얻고 전달할 수 있기를 원합니다. 자격 증명 서비스를 실제로 조정하는 방법에 대한 문제를 건너 뛰면서 어디로 갈지 확실하지 않습니다.

Job에 getCredentials () 옵션이 있지만 토큰 / Kerberos 관련 내용을 읽음으로써 이것이 보안 클러스터 (우리는 그렇지 않다고 생각합니다)에 대한 인상입니다. 내 웹 서버에 Kerberos가 설치되어 있다고 생각하십시오. 그래도 고칠 수 있습니다. 그러나 의도 된 유스 케이스는 다른 서비스로 액세스하기 위해 실행하는 동안 맵 축소 작업이 원하는 비밀을 추가하는 것입니다. 다른 사람으로 작업을 실행하는 것이 아닙니다.

또한 (이전?) JobConf 클래스에서 암호 또는 무언가가 필요한 위치를 모르는 경우에도 유망한 것으로 보이는 User (String name)을 설정하는 기능이 있지만 많은 정보를 찾을 수 없음을 알 수 있습니다. 또는 해당 기능에 대한 설명서. 나는 그것을 시도했지만 아무런 영향을 미치지 않았다-작업은 여전히 ​​Tomcat 사용자로 제출되었다.

탐구하거나 연구 할 다른 방법이 있습니까? Google의 핵심 단어가 없습니다. "클러스터에 대한 Tomcat 사용자 권한을 부여하십시오"옵션을 사용하지 않는 것이 좋습니다. 해당 자산을 관리하지 않으며 해당 요청이 날 것으로 예상하지 않습니다. 그러나 그것이 문자 그대로 나의 유일한 선택이라면, 그것이 왜 그런지 이해하고 싶습니다. 그래서 올바른 정보를 가지고 필요를 주장 할 수 있습니다.

해결법

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

    1.다음과 같이 UserGroupInformation 클래스를 사용할 수 있습니다.

    다음과 같이 UserGroupInformation 클래스를 사용할 수 있습니다.

    UserGroupInformation ugi = UserGroupInformation.createRemoteUser(username);
    ugi.doAs(new PrivilegedExceptionAction<MyMapReduceWrapperClass>() {
        public Object run() throws Exception {
            MyMapReduceWrapperClass mr = new MyMapReduceWrapperClass();
            ToolRunner.run(mr, null);
            return mr;
        }
    });
    
  2. from https://stackoverflow.com/questions/16108522/running-a-map-reduce-job-as-a-different-user by cc-by-sa and MIT license