2016-06-10 1 views
0

나는 새 항목을 hadoop하고 내 오지 쉘 조치가 kinit을 수행 한 후에도 새 티켓을 가져 오지 않는 이유를 이해하려고합니다. 여기에 내 시나리오가있다.kerberos 티켓 및 위임 토큰 사용법 Hadoop Oozie 쉘 작업

  1. 나는 내 ID "A"를 사용하여 로그인하고 아이디 용 kerberos 티켓을 가지고 있습니다. 나는 신분증을 사용하여 쉘 액션으로 오크 워크 워크 플로우를 제출합니다. ID 카드 "B"의 티켓을 얻기 위해 또 다른 키감을했습니다. 이 ID "B"만 일부 HDFS 파일에 액세스 할 수 있습니다. klist가 id "B"티켓을 보여주기 때문에 kinit는 정상적으로 작동합니다. 이제 B 만 액세스 할 수있는 HDFS 파일을 읽을 때 "A"에이 파일에 대한 액세스 권한이 없다는 내용의 권한 거부 오류가 표시됩니다. 하지만 내가 kinit을하고 "B"에 대한 티켓을 가져온 후 리눅스 클리에서 같은 일을 할 때, HDFS 파일을 "B"로 읽을 수 있습니다. 그러나 동일한 단계가 oozie 쉘 작업에서 작동하지 않으며 hadoop fs 명령은 kerberos 티켓이있는 사용자가 아닌 oozie 워크 플로를 제출 한 사용자로 항상 작동하는 것처럼 보입니다. 누군가 이런 일이 발생하는 이유를 설명해 주실 수 있습니까? 나는 이것을 이해할 수 없다.

  2. 동일한 쉘 동작에서 hadoop fs 명령이 "B"사용자로 변경되지 못했지만 hbase 쉘은 사용자 B로 작동합니다. 테스트 용으로 "A"만 액세스 할 수있는 hbase 테이블을 만들었습니다. 나는이 테이블에서 명령어를 얻기 위해 hbase 쉘을 추가했다. 사용자 "B"에 대해 kinit -kt를 수행하고 티켓을 얻는다면 "B"가이 테이블에 액세스 할 수 없다는 내용도 실패했습니다. 그래서 hoz는 oozie 워크 플로우를 제출하는 사용자의 위임 토큰 대신 새 티켓을 가져 오는 것입니다. 쉘 작업 내에서 kinit -kt를 수행하지 않으면 hbase 명령이 성공합니다. 내가 kinit을 수행하는 경우 "A"가/tmp/B /와 같은 일부 디렉토리에 대한 액세스 권한이 없기 때문에 "B"만 액세스 권한을 갖고 있으므로 하이브가 작동하는 방식을 이해할 수 없다는 하이브 쿼리를 실행할 수도 없습니다. oozie 워크 플로우가 제출 될 때 또는 새 사용자를 위해 작성된 새 티켓을 가져 오는 경우 작성되는 위임 토큰을 가져 오는 경우.
    누가 위의 시나리오를 이해할 수 있습니까? 어떤 hadoop 서비스가 인증을 위해 새로운 티켓을 받고 어떤 명령이 (hadoop fs 명령과 같은) 위임 토큰을 사용합니까? 이 방법이 효과가 있습니까, 아니면 제가 잘못하고있는 것입니까? 필자는 왜 같은 hadoop fs 명령이 다른 사용자로서 외부 oozie에서 작동하지만 kinit 후에도 oozie shell 작업을하지 않는 이유를 이해하지 못합니다.

  3. 실제로이 위임 토큰은 언제 만들어 집니까? oozie worklow가 제출되거나 심지어 hadoop fs 명령을 내릴 때만 생성됩니까? 감사합니다. 이론적으로

답변

1

- Oozie 자동으로 전달한다 제출자의 자격 증명 (즉, A) 작업을 실행하는 원사 컨테이너. kinit에 대해 신경 쓸 필요가 없습니다. 실제로는 이 너무 늦었습니다.입니다.
당신은 Oozie 작업의 안에 다른 사용자를 가장 안, 즉 엄격한 Kerberos 인증의 목적을 물리 칠 것이다

연습에서

더 까다로운 - (1) 핵심 하둡 서비스 (HDFS, YARN) Kerberos 토큰을 한 번만 확인하면 모든 노드와 모든 서비스에서 공유되는 "위임 토큰"이 만들어집니다.

서비스 사용자가 oozie 서비스 사용자에게 특별한 권한이있는 경우 일종의 하둡 "sudo"를 수행하여 YYN을 oozie으로 연결하지만 YARN이 작업 제출자 (예 : A)에 대해 "위임 토큰"을 생성하고 즉, 토큰 변경은 변경할 수 없습니다.

(3) 또한, 실제로는 명시 적으로가 다른 사용자에 대한 UserGroupInformation 객체를 생성 일부 사용자 지정 Java 코드와 더불어, 대체 토큰을 사용할 수 있습니다. Hadoop 명령 행 인터페이스는 그렇게하지 않습니다.

(4) 비 핵심 Hadoop, 즉 HBase 또는 Hive Metastore 또는 비 Hadoop 항목 (예 : 사육사)은 어떻게됩니까? 그들은 "위임 토큰"을 전혀 사용하지 않습니다. Java 코드에서 UserGroupInformation을 명시 적으로 관리하거나 연결시 기본 Kerberos 토큰이 사용됩니다.
HBase 셸이 작동하는 이유가 여기에 있습니다. Hive (기존 팻 클라이언트) 대신 Beeline (JDBC 씬 클라이언트)을 사용했다면 아마 작동했을 것입니다.

(5) Oozie는 하이브, 최단 거리 ("Hive2"작업)을, HBase를 등 특정 <credentials> 옵션이 격차를 채우기 위해 시도; 어떻게 작동하는지 모르겠지만 작업 컨테이너에 로컬이 아닌 기본 Kerberos 티켓 캐시를 포함해야합니다.

+0

정보 주셔서 감사합니다. :) – Kumar

+0

좋은 설명 삼손 Scharfrichter! - cred 섹션은 hbase, hiveserver2 및 hms 서비스에 대한 위임 토큰을 가져 오는 데 사용됩니다. –

0

oozie 워크 플로가 시작되면 다른 교장이 될 수 있습니다. 우리는 사용자 정의 -Djava.security.auth.login.config = custom_jaas.conf를 사용하여 java를 실행하는 셸 조치를 실행해야합니다. 그런 다음 다른 사람으로 jvm kinit'ed를 제공합니다. 이것은 비록 삼위 일체가 완전히 다른 영역 일지라도 삼손의 계통을 따릅니다 (3).