티스토리 뷰

반응형

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'
);

별건 아닐수 있지만, 생각보다 사용자가 적은지 해결법을 찾는데 꽤 시간이 걸렸던것 같다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함