[HADOOP] Java webapp에 내장 된 클라이언트에 대해 hadoop 시스템 사용자 설정
HADOOPJava webapp에 내장 된 클라이언트에 대해 hadoop 시스템 사용자 설정
java 웹 애플리케이션의 MapReduce 작업을 원격 Hadoop 클러스터에 제출하고 싶지만 작업을 제출해야하는 사용자를 지정할 수 없습니다. 모든 MapReduce 작업에 사용해야하는 시스템 사용자를 구성하고 사용하고 싶습니다.
현재 클라이언트 시스템의 현재 로그인 한 사용자의 사용자 이름으로 hadoop 작업을 실행해도 사용자를 지정할 수 없습니다. 이로 인해 메시지에 오류가 발생합니다.
Permission denied: user=alice, access=WRITE, inode="staging":hduser:supergroup:rwxr-xr-x
... "alice"는 클라이언트 시스템의 로컬 로그인 사용자입니다.
나는 노력했다.
... 아무 소용이 없습니다. 1)에 관해서는이 수업이 어떻게 사용되어야하는지에 대한 단서가 없다는 것을 인정합니다. 또한 Java System 속성을 변경하는 것이 웹 응용 프로그램에서 사용하기위한 실제 솔루션이 아니라는 점에 유의하십시오.
Hadoop이 원격 시스템에 연결하는 데 사용하는 사용자를 지정하는 방법을 알고 있습니까?
PS / Hadoop은 기본 구성을 사용하며 클러스터에 연결할 때 인증이 사용되지 않으며 Kerberos가 원격 시스템과 통신하는 데 사용되지 않는다는 것을 의미합니다.
해결법
-
==============================
1.마침내 나는 상수를 발견했다.
마침내 나는 상수를 발견했다.
static final String HADOOP_USER_NAME = "HADOOP_USER_NAME";`
UserGroupInformation 클래스에 있습니다.
이것을 환경 변수로 시작시 Java 시스템 등록 정보 (-D 사용)로 또는 System.setProperty ( "HADOOP_USER_NAME", "hduser")로 프로그래밍 방식으로 설정합니다. Hadoop은 원격 Hadoop 클러스터에 연결하기 위해 원하는 사용자 이름을 사용합니다.
-
==============================
2.아래의 코드는 다음과 같은 방식으로 작동합니다.
아래의 코드는 다음과 같은 방식으로 작동합니다.
System.setProperty("HADOOP_USER_NAME", "hduser")
UserGroupInformation ugi = UserGroupInformation.createRemoteUser("hduser"); ugi.doAs(new PrivilegedExceptionAction<Void>() { public Void run() throws Exception { Configuration configuration = new Configuration(); configuration.set("hadoop.job.ugi", "hduser"); int res = ToolRunner.run(configuration, new YourTool(), args); return null; } });
-
==============================
3.나는 보안 위장 기능 http://hadoop.apache.org/docs/stable1/Secure_Impersonation.html을 사용하여 유사한 문제를 해결할 수 있습니다.
나는 보안 위장 기능 http://hadoop.apache.org/docs/stable1/Secure_Impersonation.html을 사용하여 유사한 문제를 해결할 수 있습니다.
다음은 코드 스 니펫입니다.
UserGroupInformation ugi = UserGroupInformation.createProxyUser("hduser", UserGroupInformation.getLoginUser()); ugi.doAs(new PrivilegedExceptionAction() { public Void run() throws Exception { Configuration jobconf = new Configuration(); jobconf.set("fs.default.name", "hdfs://server:hdfsport"); jobconf.set("hadoop.job.ugi", "hduser"); jobconf.set("mapred.job.tracker", "server:jobtracker port"); String[] args = new String[] { "data/input", "data/output" }; ToolRunner.run(jobconf, WordCount.class.newInstance(), args); return null; } });
앞서 언급 한 URL에서 언급 한 것처럼 원격 (Windows 데스크톱 호스트의 경우) 로그인 사용자 아이디가 core-site.xml에 추가되어야합니다
from https://stackoverflow.com/questions/11041253/set-hadoop-system-user-for-client-embedded-in-java-webapp by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 병렬로 IN 절 매개 변수를 사용하여 하이브 쿼리를 실행합니다. (0) | 2019.05.29 |
---|---|
[HADOOP] hadoop에서 단일 레코드로 파일 읽기 (0) | 2019.05.29 |
[HADOOP] Hadoop : HDFS에서 파일을 압축 하시겠습니까? (0) | 2019.05.29 |
[HADOOP] hdfs에서 권한이 거부되었습니다. (0) | 2019.05.29 |
[HADOOP] Hadoop java.io.IOException : Mkdirs가 / some / path를 생성하지 못했습니다. (0) | 2019.05.29 |