Hive 在HDP3.1集群上执行flink 1.10以访问配置单元表
我想在一个安全的kerberized HDP3.1集群上使用ApacheFlink,但我仍然坚持第一步 已下载并解压缩最新版本() 现在,我试着跟随 要与配置单元集成,您需要向Flink发行版中的/lib/目录添加一些额外的依赖项,以使集成在TableAPI程序或SQL客户机中的SQL中工作。或者,您可以将这些依赖项放在专用文件夹中,并使用-C或-l选项将它们添加到类路径中 由于HDP环境:Hive 在HDP3.1集群上执行flink 1.10以访问配置单元表,hive,apache-flink,flink-streaming,hdp,Hive,Apache Flink,Flink Streaming,Hdp,我想在一个安全的kerberized HDP3.1集群上使用ApacheFlink,但我仍然坚持第一步 已下载并解压缩最新版本() 现在,我试着跟随 要与配置单元集成,您需要向Flink发行版中的/lib/目录添加一些额外的依赖项,以使集成在TableAPI程序或SQL客户机中的SQL中工作。或者,您可以将这些依赖项放在专用文件夹中,并使用-C或-l选项将它们添加到类路径中 由于HDP环境: 现有配置位于:/usr/hdp/current/hive-server2/conf/hive sit
- 现有配置位于:
/usr/hdp/current/hive-server2/conf/hive site.xml
- jar位于
中。有可能使用弗林克提供的罐子。但我更喜欢直接从HDP发行版使用蜂箱罐/usr/hdp/current/hive-server2/lib
val settings = EnvironmentSettings.newInstance().useBlinkPlanner().inBatchMode().build()
val tableEnv = TableEnvironment.create(settings)
val name = "myhive"
val defaultDatabase = "mydatabase"
val hiveConfDir = "/opt/hive-conf" // a local path
val version = "2.3.4"
val hive = new HiveCatalog(name, defaultDatabase, hiveConfDir, version)
tableEnv.registerCatalog("myhive", hive)
// set the HiveCatalog as the current catalog of the session
tableEnv.useCatalog("myhive")
编辑
大概需要以下内容才能找到hadoop配置:
export HADOOP_CONF_DIR=/usr/hdp/current/spark2-client/conf
以及:
即:
目前,即使没有任何蜂巢支持,我仍然无法启动flink shell:
cd /path/to/flink-1.10.1/bin
./start-scala-shell.sh
Error: Could not find or load main class org.apache.flink.api.scala.FlinkShell
这个初步的问题似乎可以通过切换到旧的2.11版本来解决
已经可以为我创建一个本地shell了
./start-scala-shell.sh yarn
启动某些内容(本地),但未启动纱线容器
同时,我已确定:
catalogs:
- name: myhive
type: hive
hive-conf-dir: /usr/hdp/current/hive-server2/conf
hive-version: 3.1.2
在本地flink配置中。对于我来说,仅仅指定上面提到的环境变量是否应该使其自动工作还不清楚
但是,对于我来说,代码不会编译,因为没有加载env:
scala> env
<console>:68: error: not found: value env
同样失败的还有
.UnsupportedOperationException: Execution Environment is already defined for this shell.
编辑2
与:
我可以成功地在纱线上启动一个简约的flink集群(没有ambari服务)。尽管安装ambari集成是有意义的
目前,我还无法测试与kerberized蜂箱和HDFS的交互是否/如何工作。另外,目前,我无法启动交互式shell—如下所述
事实上,即使是在一个没有煤渣的游乐场环境中,我也观察到flinks interactive shell的问题
编辑3
我不知道发生了什么变化,但是:
cd /home/at/heilerg/development/software/flink-1.10.1
export HADOOP_CONF_DIR=/usr/hdp/current/spark2-client/conf
export HADOOP_CLASSPATH=$(hadoop classpath)
./bin/start-scala-shell.sh local
btenv.listDatabases
//res12: Array[String] = Array(default_database)
btenv.listTables
//res9: Array[String] = Array()
我可以在本地模式下获得批处理表环境。但是,当前没有配置单元中的表或数据库
注意:配置设置如下:
catalogs:
- name: hdphive
type: hive
hive-conf-dir: /usr/hdp/current/hive-server2/conf
hive-version: 3.1.2
当尝试使用代码覆盖配置时,我无法导入HiveCatalog
:
val name = "hdphive"
val defaultDatabase = "default"
val hiveConfDir = "/usr/hdp/current/hive-server2/conf" // a local path
val version = "3.1.2" //"2.3.4"
import org.apache.flink.table.catalog.hive.HiveCatalog
// for now, I am failing here
// <console>:67: error: object hive is not a member of package org.apache.flink.table.catalog
// import org.apache.flink.table.catalog.hive.HiveCatalog
val hive = new HiveCatalog(name, defaultDatabase, hiveConfDir, version)
tableEnv.registerCatalog(name, hive)
tableEnv.useCatalog(name)
btenv.listDatabases
但是没有:export HADOOP\u CLASSPATH=$(HADOOP CLASSPATH)
用于加载HDP类
无论如何:
cp /usr/hdp/current/hive-client/lib/hive-exec-3.1.0.<<<version>>>.jar /path/to/flink-1.10.1/lib
添加到lib
目录后
btenv.registerCatalog(name, hive)
不会抱怨类not found异常,但执行似乎在这一步停留了几分钟。
然后,它失败并出现kerberos异常:
Caused by: org.apache.hadoop.hive.metastore.api.MetaException: Could not connect to meta store using any of the URIs provided. Most recent failure: org.apache.thrift.transport.TTransportException: GSS initiate failed
我刚刚意识到:
<property>
<name>hive.metastore.kerberos.principal</name>
<value>hive/_HOST@xxxx</value>
</property>
这里的主体与hive-site.xml中的主体不匹配。然而,spark可以读取metastore,只要配置相同,主体不匹配就可以了 Georg,这是一个高级Flink场景,因为kerberization和与非HDP服务的集成。如果您有HDP支持,这与获得参与者级别资源的支持票证是一致的。如果您没有支持,并且正在尝试DIY,您可能需要直接访问Flink contributor Channel、jira或asf slack。我甚至不确定你能在Cloudera社区得到这样的支持,很多大人物也在这里。我们的DFHZ团队目前正在为ambari开发HDP3 Flink,但不幸的是,kerberized用例是列表中的最后一个。我在这里链接到邮件列表:非常好!我刚刚成功地在centos7的HDP3中安装了Flink 1.10。完成后,将使用环境变量中的jar文件位置创建一个Flink Thread应用程序。这是一个巨大的路径和罐子字符串,我不能在这里的评论。我想这就是你问题1的答案。也许你可以分享一个要点或flink邮件列表。我想我的设置中很可能还没有。还有一个与flinks shaded hadoop JARs和flink Itsev(至少对我来说)的冲突。Georg,这是一个高级的flink场景,只是因为kerberization和与非HDP服务的集成。如果您有HDP支持,这与获得参与者级别资源的支持票证是一致的。如果您没有支持,并且正在尝试DIY,您可能需要直接访问Flink contributor Channel、jira或asf slack。我甚至不确定你能在Cloudera社区得到这样的支持,很多大人物也在这里。我们的DFHZ团队目前正在为ambari开发HDP3 Flink,但不幸的是,kerberized用例是列表中的最后一个。我在这里链接到邮件列表:非常好!我刚刚成功地在centos7的HDP3中安装了Flink 1.10。完成后,将使用环境变量中的jar文件位置创建一个Flink Thread应用程序。这是一个巨大的路径和罐子字符串,我不能在这里的评论。我想这就是你问题1的答案。也许你可以分享一个要点或flink邮件列表。我想我的设置中很可能还没有。另外,flinks shaded hadoop JARs和Flinkitsev(至少对我来说)也存在冲突。
val version = "3.1.2" // or "3.1.0" // has the same problem
import org.apache.flink.table.catalog.hive.HiveCatalog
val hive = new HiveCatalog(name, defaultDatabase, hiveConfDir, version)
java.lang.NoClassDefFoundError: org/apache/hadoop/hive/metastore/api/NoSuchObjectException
... 30 elided
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.metastore.api.NoSuchObjectException
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 30 more
cp /usr/hdp/current/hive-client/lib/hive-exec-3.1.0.<<<version>>>.jar /path/to/flink-1.10.1/lib
val hive = new HiveCatalog(name, defaultDatabase, hiveConfDir, version)
btenv.registerCatalog(name, hive)
Caused by: java.lang.ClassNotFoundException: com.facebook.fb303.FacebookService$Iface
btenv.registerCatalog(name, hive)
Caused by: org.apache.hadoop.hive.metastore.api.MetaException: Could not connect to meta store using any of the URIs provided. Most recent failure: org.apache.thrift.transport.TTransportException: GSS initiate failed
<property>
<name>hive.metastore.kerberos.principal</name>
<value>hive/_HOST@xxxx</value>
</property>
klist
Default principal: user@xxxx