데이터처리/Hive
[hive] KafkaStorageHandler 에서 SASL_PLAINTEXT 인증모듈 사용하기
정선생
2023. 7. 24. 00:00
반응형
hive 에서 kafka 를 쉽게 연동해서 사용할 수 있어서, 꽤 유용하게 쓸수 있다.
그런데, 하둡클러스터는 kerberos 인증을 사용하고 kafka 는 다른 인증방식을 사용할 경우 어떻게 사용해야하는지 readme.md 문서를 뒤져봐도 친절하지가 않다. 그래서 관련된 선언방법과 주의사항을 안내하려고 한다.
https://github.com/apache/hive/blob/master/kafka-handler/README.md
문제점
우선 org.apache.hadoop.hive.kafka.KafkaStorageHandler 를 사용가능하다는 전제로 설명하도록 하겠다.
보통 kafka 의 인증정보를 다음과 같이 표현하여 사용하는데... 아래 정보를 table 선언할때 어떻게 맵핑하는지 정리가 안되어있어서 헤멨는데 다음과 같이 선언이 가능하다.
bootstrap.servers=mykafka.foo.com:9092
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="myuser" \
password="mypassword";
해결방법
이걸 KafkaStorageHadnler 를 이용한 hive table 로 구성한다고 가정하면 아래와 같은 형태로 구성하면 된다.
주의할점은 jaas.config 의 username 과 password 의 경우 " 로 되어있는데, \' 이스케입 문자형태로 사용해야 문제가 없다.
CREATE EXTERNAL TABLE kafka_auth_sasl_plaintext (
foo STRING,
bar STRING
)
STORED BY
'org.apache.hadoop.hive.kafka.KafkaStorageHandler'
TBLPROPERTIES (
'kafka.topic' = 'myTopic',
'kafka.serde.class' = 'org.apache.hadoop.hive.serde2.JsonSerDe',
"kafka.bootstrap.servers" = 'mykafka.foo.com:9092',
-- 이 하단 정보를 주의해서 보자 --
'kafka.consumer.security.protocol'='SASL_PLAINTEXT',
'kafka.consumer.sasl.mechanism'='PLAIN',
'kafka.consumer.sasl.jaas.config'='org.apache.kafka.common.security.plain.PlainLoginModule required username=\'myuser\' password=\'mypassword\';',
'kafka.producer.security.protocol'='PLAINTEXT'
);
별건 아닐수 있지만, 생각보다 사용자가 적은지 해결법을 찾는데 꽤 시간이 걸렸던것 같다.
반응형