Hive 在HDP3.1集群上执行flink 1.10以访问配置单元表

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

我想在一个安全的kerberized HDP3.1集群上使用ApacheFlink,但我仍然坚持第一步

已下载并解压缩最新版本()

现在,我试着跟随

要与配置单元集成,您需要向Flink发行版中的/lib/目录添加一些额外的依赖项,以使集成在TableAPI程序或SQL客户机中的SQL中工作。或者,您可以将这些依赖项放在专用文件夹中,并使用-C或-l选项将它们添加到类路径中

由于HDP环境:

  • 现有配置位于:
    /usr/hdp/current/hive-server2/conf/hive site.xml
  • jar位于
    /usr/hdp/current/hive-server2/lib
    中。有可能使用弗林克提供的罐子。但我更喜欢直接从HDP发行版使用蜂箱罐
我怎样才能:

  • 告诉flink使用/加载这些文件到类路径
  • 是否有可能省略第一个配置步骤(nae、defaultdb、confdir、version)并以某种方式从hive-site.xml自动推断出配置
  • 启动一个交互式shell(类似于spark shell,即类似于flinks interactive sql shell,但基于scala),以便按照链接中概述的以下步骤进行操作
  • 代码

    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