티스토리 뷰
인증이 없는 하둡끼리의 distcp 처리를 할 때는 특별히 해줄일이 없다. 굳이 해줘야한다면 다른 nameservice 를 등록해서 처리하면 namenode 의 active/standby 문제를 해결할 수있다는 정도? 하지만, kerberos 인증이 있는 하둡과 인증이 없는 하둡, 혹은 다른 kerberos 인증서버를 사용하는 클러스터간 데이터 복제는 생각보다 해결방법이 잘 안나오는거 같다.
그래서 케이스별 distcp 사용 사례를 정리하고자 한다. 보통 회사에서 팀별로 하둡클러스터를 각자 운영할 때 이런일을 겪을것이다.
1. 인증없는 하둡간 복제
특별히 해줄게 없다. hadoop 명령에서 distcp 명령을 쓰고, src, target 경로만 적어주면 된다.
hadoop distcp hdfs://myservice/user/foo/sample/ymd=2023-01-01 hdfs://youservice/user/bar/sample/
굳이 뭔가 더한다고 치면 편의를 위해 내 하둡클러스터가 아닌 다른 클러스터의 nameservice 를 hdfs-site.xml 에 추가해주면 사용이 편하다 정도랄까?
2021.11.18 - [데이터처리/Hadoop] - [팁] 다른 hdfs 클러스터의 nameservice 등록하는 방법
2. 내 하둡은 kerberos 인증, 딴 클러스터는 인증없다면?
내 하둡은 kerberos 인증을 하고 있고, 연결하려는 외부 하둡클러스터는 인증이 없는 하둡이라면?
SIMPLE auth 어쩌구 하면서 오류가 발생된다. 이때 "-Dipc.client.fallback-to-simple-auth-allowed=true" 옵션을 추가해주면 연결이 가능하고 이런경우 복사가 가능하다.
$ hadoop fs -ls hdfs://youservice-no-auth/
ls: Call From host.myhome.com/10.10.10.1 to nn01.myhome.com:8020 failed: Server asks us to fall back to SIMPLE auth, but this client is configured to only allow secure connections.
$ hadoop fs -Dipc.client.fallback-to-simple-auth-allowed=true -ls hdfs://youservice-no-auth/
Found 2 items
drwxrwxrwx - yarn hadoop 0 2018-11-08 18:56 hdfs://youservice-no-auth/app-log
drwxrwxrwx - hdfs hadoop 0 2019-11-08 18:56 hdfs://youservice-no-auth/apps
즉, distcp 할때 해당 옵션을 추가해주면 된다. (즉, source 클러스터가 kerberos 인증, target 이 인증없는 케이스)
이때 주의할점은 source 서버는 kerberos 인증을 받기때문에 권한 오류가 발생되 우려가 있다. 만약, 아래와 같은 에러 메시지가 나온다면, target 폴더의 권한을 777 로 다 쓸수 있게 바꾸면 일단 복사가 가능하다.
org.apache.hadoop.security.AccessControlException: Permission denied: user=계정명
hadoop distcp -Dipc.client.fallback-to-simple-auth-allowed=true \
hdfs://myservice/user/foo/sample/ymd=2023-01-01 \
hdfs://youservice-no-auth/export/sample
3. 클러스터 모두 kerberos 인증을 쓰는데 인증서버가 다른경우
클러스터가 다른데, kerberos 의 인증서버가 다른 경우가 존재할 수 있다. 이런경우 2개의 인증정보를 활용해야 하기 때문에 어떻게 해야할지 감을 잡기 어렵다. 이때 사용하는 방법이 hdfs fetchdt 명령으로 토큰을 만들고, HADOOP_TOKEN_FILE_LOCATION 을 지정하여 기본인증과 티켓으로 인증된 정보 2개를 이용하여 distcp 를 사용할 수 있다.
- hdfs fetchdt 명령으로 티켓파일 생성
- HADOOP_TOKEN_FILE_LOCATION 환경변수에 해당 티켓파일 지정
예를 들면 아래와 같다.
# ---------------------------------------------------------
# target 클러스터의 인증과 티켓생성 - hdfs://youservice-krb-auth
# ---------------------------------------------------------
export KRB5_CONFIG=/user/home/youservice-krbs.conf
kinit -f -a -r 3600m -k -t /user/home/keytab/youservice-foo.keytab you@YOUHOME.COM
hdfs fetchdt -fs hdfs://youservice-krb-auth /tmp/youservice-ticket.token
# ---------------------------------------------------------
# source 클러스터 인증 후 티켓파일 지정
# ---------------------------------------------------------
export KRB5_CONFIG=/user/home/myservice-krbs.conf
kinit -f -a -r 3600m -k -t /user/home/keytab/myservice-bar.keytab my@MYHOME.COM
export HADOOP_TOKEN_FILE_LOCATION=/tmp/youservice-ticket.token
# ---------------------------------------------------------
# source -> target distcp
# ---------------------------------------------------------
hadoop distcp \
hdfs://myservice/user/foo/sample/ymd=2023-01-01 \
hhdfs://youservice-krb-auth/export/sample
여기서 주의할건, hadoop fs -ls 같은 명령은 저 2가지 방법으로 확인이 바로 되는데, distcp 는 source 클러스터에서 map/reduce 가 동작해야 하고, 이때 RULE 정보와도 영향을 받는다. 그래서 core-site.xml 파일의 "hadoop.security.auth_to_local" 정보에 kerberos 인증시 사용하는 인증정보룰을 추가해줘야한다. 안그러면 아래와 같은 오류가 발생된다.
Caused by: org.apache.hadoop.yarn.exceptions.YarnException: Failed to submit application_1649422657081_43422 to YARN : Illegal principal name bar@YOUHOME.COM: org.apache.hadoop.security.authentication.util.KerberosName$NoMatchingRule: No rules applied to bar@YOUHOME.COM
at org.apache.hadoop.yarn.client.api.impl.YarnClientImpl.submitApplication(YarnClientImpl.java:336)
at org.apache.hadoop.mapred.ResourceMgrDelegate.submitApplication(ResourceMgrDelegate.java:304)
at org.apache.hadoop.mapred.YARNRunner.submitJob(YARNRunner.java:331)
... 12 more
'데이터처리 > Hadoop' 카테고리의 다른 글
[HDFS] 다른 클러스터의 nameservice 를 동적으로 추가하기 - distcp (0) | 2023.12.04 |
---|---|
[Hadoop] HDFS 파일생성 여부 체크방법 (loop 돌면서) (0) | 2023.05.23 |
[Hadoop] 커버로스 인증을 변경후 접근시 not allowed 오류 (0) | 2023.03.14 |
[하둡] Can't get Kerberos realm 오류 해결법 - krb5.conf 경로문제 (0) | 2023.03.08 |
[하둡] Server asks us to fall back to SIMPLE auth, but this client is configured to only allow secure connections 문제 해결하기 (0) | 2022.10.04 |