인증이 없는 하둡끼리의 distcp 처리를 할 때는 특별히 해줄일이 없다. 굳이 해줘야한다면 다른 nameservice 를 등록해서 처리하면 namenode 의 active/standby 문제를 해결할 수있다는 정도? 하지만, kerberos 인증이 있는 하둡과 인증이 없는 하둡, 혹은 다른 kerberos 인증서버를 사용하는 클러스터간 데이터 복제는 생각보다 해결방법이 잘 안나오는거 같다. 그래서 케이스별 distcp 사용 사례를 정리하고자 한다. 보통 회사에서 팀별로 하둡클러스터를 각자 운영할 때 이런일을 겪을것이다. 1. 인증없는 하둡간 복제 특별히 해줄게 없다. hadoop 명령에서 distcp 명령을 쓰고, src, target 경로만 적어주면 된다. hadoop distcp hdfs://mys..
하둡 데이터를 다루다보면, 종종 다른팀의 하둡클러스터의 데이터를 복제해와야 할 경우가 존재한다. 이때, 네임노드와 호스트(혹은 ip) 와 포트를 이용해서 연결하는게 가능한데, 문제는 active, stand by 서버가 변경되면 연결이 안되는 상황이 발생되는 문제가 존재한다. 이런 문제를 해결하려면 nameserivce 정보를 hdfs-site.xml 에 추가해서 사용하는게 좋다. 근데, 1회성 작업이거나 연결가능여부를 테스트하기위해서 설정을 변경해보는건 꽤 번거로운 작업이 된다. 이럴때 사용할 수 있는 방법은 hadoop 명령어를 날릴때 -D 옵션을 이용해 해당 정보를 인자값으로 직접 넣어주는것이다. 2021.11.18 - [데이터처리/Hadoop] - [팁] 다른 hdfs 클러스터의 nameservi..
airflow 에서는 WebHdfsSensor 라는게 존재해서, api 를 통해 특정파일이 존재하는지 체크하고 loop 를 돌면서 체크하는 방법이 존재한다. 그렇다면 간단하게 쉘스크립트로 특정 파일이 생겼는지 확인하는 방법은 없을까? 결론부터 말하면 hadoop 명령어에 파일 존재여부를 테스트하는 명령어가 존재한다. 아래와 같이 명령하면 exit 코드가 0일 경우는 파일이 존재하지만, 그 이외에는 파일을 찾을수 없다는 의미가 된다. 하지만, 파일이 생성될때까지 sleep 하면서 기다리는 방법은 없을까? hadoop fs -test -f hdfs 파일 생성여부 대기하기 위 방법을 응용하면, loop 를 돌리고 파일이 존재할때까지 sleep 을 주면서 주기적으로 체크하는것이 가능해진다. 이러면 특정 HDFS..
커버로스 기반으로 하둡 클러스터를 관리하고 유저권한을 keytab 으로 관리하다보면, 별도의 유저별로 바꿔서 실행해야 하는 경우가 종종 있다. 그런데 이상하게 아래와 같은 오류가 발생할 때가 있는데, 원인은 HADOOP_PROXY_USER 를 사용하지 않는 상황인데, 해당 값이 지정된 경우 발생된다. % hadoop fs -ls ls: User: flink@MY.HOME.SERVER.COM is not allowed to impersonate sample 해결방법 권한관리를 하다보면, 여러케이스의 유저권한이 존재할 수 있는데, 유저 여러개의 권한을 하나에 부여하고, HADOOP_PROXY_USER 를 지정해서 유저를 지정해서 해당 권한으로 사용하는게 가능하다. 일종의 슈퍼키(?) 처럼 큰 권한을 받은 녀..
kerberos 인증을 위한 정보는 기본적으로는 /etc/krb5.conf 가 기본경로로 되어있다. 하지만, 경우에 따라서는 이 파일을 변경하지 않고 임의로 지정하여 실행해야 하는 경우가 생긴다. 이때 hadoop 명령어 실행시 관련 경로를 지키지 않았을경우 다음과 같은 오류가 발생된다. # ----------------------------------------------- # 커버로스 인증 (krb.conf 가 별도의 경로에 있음을 인지하자) # ----------------------------------------------- % export KEYTAB_PATH=/Users/myUser/hadoop3/keytab % export KRB5_CONFIG=/Users/myUser/hadoop3/key..
내가 겪은 케이스는 A 클러스터환경에서, B 클러스터에 붙을수 있도록 nameservice 를 추가후, B클러스터에 붙을때 나타났던 현상이다. 베이스가 되는 hadoop config 은 커버로스 인증을 써야하는 형태로 세팅이 되어있다보니, 인증이 없는 클러스터를 접속하려고 할때, 다른 두 환경에서 세팅이 충돌난 문제이다. A 하둡 클러스터 (커버로스 인증필요) B 하둡 클러스터 (인증 없음) 예를 들면, 오류메시지는 아래와 같다. # ----------------------------- # A 클러스터 접근 (커버로스 인증 필요) # ----------------------------- $ kinit -kt /user1/airflow/airflow.keytab airflow@AHADOOP.MYHOME.C..
서버에 설치된 하둡버전이 hadoop-3.3.1 버전이었는데, hadoop-3.2.3 의 다른 버전을 사용했을때 나타났던 문제이다. protobuf 는 원격지에 데이터를 직렬화 하기위한 인터넷 프로토콜인데 의존된 버전간이 달라지면서 호환성에 문제가 있는게 문제가 아닌가 의심된다. 결국 서버에 있는 하둡버전과 동일하게 클라이언트 환경을 다시 세팅후 성공했다. 신기한건 hadoop fs 명령으로 hdfs 를 확인할때는 문제가 없었는데, yarn 명령을 이용하려고 할때 문제가 발생되었다. # 서버는 3.3.1 , 현재 서버의 하둡클라이언트 버전은 3.2.3 $ yarn application -list 2022-09-07 17:50:51,598 WARN util.NativeCodeLoader: Unable to..
하둡바이너리 파일과 hdfs, yarn 관련 xml 을 모두 복사후 yarn application 을 확인하기위해 다음과 같이 실행했더니, 다음과 같은 오류가 발생했다. 참고로 커버로스 인증을 통해야 했고, 커버로스 인증은 kinit 으로 성공했다. 그리고 client 환경이 아니라 하둡이 설치된 서버에 직접 접속해서 테스트하면 이런 오류가 발생되지 않았고, 별도로 설치한 client 환경에서만 이런문제가 발생했다. $ kinit -k -t /user/gildong/gildong.keytab gildong@MYHOME.COM $ yarn application -list 2022-09-07 18:29:34,077 INFO impl.TimelineReaderClientImpl: Initialized Time..