在Kerberos化Hadoop环境中使用KafkaStorageHandler访问外部Hive表

时间:2019-10-10 08:22:45

标签: hadoop hive apache-kafka external-tables kafka-topic

我有一个基于HDP 3.1的Hadoop群集,其中安装了HDFS,Hive和Kafka。我创建了一个主题test_topic,可以在其中使用kafka-console-producerkafka-console-consumer发送和阅读消息。我使用Ranger中的Kafka插件授予了这个Kafka主题的所有权利。

我现在要做的是从Hive访问此Kafka主题。因此,我使用KafkaStorageHandler创建了一个外部Hive表:

CREATE EXTERNAL TABLE mydb.kafka_test_topic (
  a String,
  b int
) 
STORED BY 'org.apache.hadoop.hive.kafka.KafkaStorageHandler'
TBLPROPERTIES
  ("kafka.topic" = "test_topic", "kafka.bootstrap.servers"="my.server:6667");

我还通过Ranger中的Hive插件为该表添加了所有权限。

当我尝试从Beeline访问此数据时,例如使用SELECT * FROM mydb.kafka_test_topic时出现以下异常:

Error: java.io.IOException: java.io.IOException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [test_topic] (state=,code=0)
  • 当然,我在打开Beeline之前做了kinit myuser

目前的第一个解决方法是,将 hive 用户添加到Ranger Kafka插件中的Kafka主题权限中。我希望“最终用户”能够访问该主题,而无需这种配置用户解决方法。

有人可以帮忙吗?

谢谢!

0 个答案:

没有答案