42、Flink 的table api与sql之Hive Catalog

Flink 系列文章

1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接

13、Flink 的table api与sql的基本概念、通用api介绍及入门示例
14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性
15、Flink 的table api与sql之流式概念-详解的介绍了动态表、时间属性配置(如何处理更新结果)、时态表、流上的join、流上的确定性以及查询配置
16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及FileSystem示例(1)
16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Elasticsearch示例(2)
16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Apache Kafka示例(3)
16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及JDBC示例(4)

16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Apache Hive示例(6)

20、Flink SQL之SQL Client: 不用编写代码就可以尝试 Flink SQL,可以直接提交 SQL 任务到集群上

22、Flink 的table api与sql之创建表的DDL
24、Flink 的table api与sql之Catalogs

30、Flink SQL之SQL 客户端(通过kafka和filesystem的例子介绍了配置文件使用-表、视图等)

42、Flink 的table api与sql之Hive Catalog


文章目录

  • Flink 系列文章
  • 一、Hive Catalog
  • 二、Set up HiveCatalog
    • 1、Dependencies
    • 2、Configuration
  • 三、How to use HiveCatalog
  • 四、示例-Flink 集成 Hive
    • 1、修改hive的配置文件
      • 非常重要
    • 2、配置Flink集群和SQL cli
      • 1)、将所有 Hive 依赖项添加到 Flink 发行版中的 /lib 文件夹中
      • 2)、修改 SQL CLI 的 yaml 配置文件 sql-cli-defaults.yaml
    • 3、验证kafka集群生产-消费功能
    • 1)、kafka发送消息
      • 2)、kafka接收消息
    • 4、在Flink Cli创建kafka表
    • 5、通过kafka发送消息,同时在flink中查询
      • 1)、kafka发送消息
      • 2)、Flink sql cli查询数据
  • 五、支持的数据类型
  • 六、Scala Shell


本文以一个详细的示例介绍了Flink与hive的集成,其中涉及的版本在示例部分有消息的说明。
本文依赖有hadoop、hive、kafka、mysql、flink等所有环境可用。
本分分为6个部分,即hivecatalog介绍、依赖、怎么使用和详细示例、flink与hive的胡数据类型映射等。

一、Hive Catalog

多年来,Hive Metastore已经发展成为Hadoop生态系统中事实上的元数据中心。许多公司在其生产中只有一个 Hive Metastore service实例来管理其所有元数据(Hive 元数据或非 Hive 元数据)。

对于同时拥有 Hive 和 Flink 部署的用户,HiveCatalog 使他们能够使用 Hive Metastore 来管理 Flink 的元数据。

对于刚刚部署 Flink 的用户,HiveCatalog 是 Flink 提供的唯一开箱即用的持久目录。如果没有持久目录,使用 Flink SQL CREATE DDL 的用户必须在每个会话中重复创建像 Kafka 表这样的元对象,这会浪费大量时间。HiveCatalog 填补了这一空白,使用户能够只创建一次表和其他元对象,并在以后跨会话方便地引用和管理它们。

二、Set up HiveCatalog

1、Dependencies

在 Flink 中设置 HiveCatalog 需要与整个 Flink-Hive 集成相同的依赖关系。具体参考:16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Apache Hive示例(6)

2、Configuration

在 Flink 中设置 HiveCatalog 需要与整个 Flink-Hive 集成相同的配置。
具体参考:16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Apache Hive示例(6)

三、How to use HiveCatalog

正确配置后,HiveCatalog 应该可以开箱即用。用户可以用 DDL 创建 Flink 元对象,之后应该会立即看到它们。

HiveCatalog 可用于处理两种类型的表:与 Hive 兼容的表和泛型表(Hive-compatible tables and generic tables)。与 Hive 兼容的表是以 Hive 兼容方式存储的表,就存储层中的元数据和数据而言。因此,通过 Flink 创建的 Hive 兼容表可以从 Hive 端查询。

另一方面,Generic tables是特定于 Flink 的。使用 HiveCatalog 创建Generic tables时,我们只是使用 HMS 来保存元数据。虽然这些表对 Hive 可见,但 Hive 不太可能理解元数据。因此,在 Hive 中使用此类表会导致未定义的行为。

Flink 使用属性 ‘is_generic’ 来判断表是与 Hive 兼容还是泛型。使用 HiveCatalog 创建表时,默认情况下将其视为泛型表。如果要创建与 Hive 兼容的表,请确保在表属性中将 is_generic 设置为 false。

如上所述,不应从 Hive 使用泛型表。在 Hive CLI 中,可以为表调用描述格式,并通过检查 is_generic 属性来确定它是否为泛型。泛型表将具有 is_generic=true。

四、示例-Flink 集成 Hive

本示例是介绍flink集成hive的内容,主要体现的是flink和hive共用hive的元数据。
本示例中hive的版本是3.1.2
flink的版本是1.13.6
hadoop的版本是3.1.4
kafka的版本是2.12-3.0.0
mysql的版本是5+,非8

1、修改hive的配置文件

下面的配置在我们部署hive的时候已经配置过,可能内容不一样,详见1、apache-hive-3.1.2简介及部署(三种部署方式-内嵌模式、本地模式和远程模式)及验证详解

非常重要

网络上很多都是介绍jar文件的,没有该种情况介绍

如果hive的其他机器上如果hive-site.xml文件中配置的如下远程访问hiveserver2的,则需要按照如下方式配置,否则flink不能访问hive的metadata服务。
网络上很多都是介绍jar文件的,没有该种情况介绍

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    
    <!-- 远程模式部署metastore 服务地址 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://server4:9083</value>
    </property>

</configuration>

不能访问元数据的错误提示

Flink SQL> show tables;
+----------------------+
|           table name |
+----------------------+
| alanchan_kafka_table |
|         source_table |
+----------------------+
2 rows in set

Flink SQL> desc source_table;
[ERROR] Could not execute SQL statement. Reason:
org.apache.hadoop.hive.metastore.api.MetaException: Your client does not appear to support Hive tests. To skip capability checks, please set metastore.client.capability.check to false. This setting can be set globally, or on the client for the current metastore session. Note that this may lead to incorrect results, data loss, undefined behavior, etc. if your client is actually incompatible. You can also specify custom client capabilities via get_table_req API.

我的环境配置文件本地路径是 /usr/local/bigdata/apache-hive-3.1.2-bin/conf/hive-site.xml ,配置如下所示:

<configuration>
   <property>
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value>
      <description>metadata is stored in a MySQL server</description>
   </property>

   <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.jdbc.Driver</value>
      <description>MySQL JDBC driver class</description>
   </property>

   <property>
      <name>javax.jdo.option.ConnectionUserName</name>
      <value>root</value>
      <description>user name for connecting to mysql server</description>
   </property>

   <property>
      <name>javax.jdo.option.ConnectionPassword</name>
      <value>123456</value>
      <description>password for connecting to mysql server</description>
   </property>

   <property>
       <name>hive.metastore.uris</name>
       <value>thrift://server4:9083</value>
       <description>IP address (or fully-qualified domain name) and port of the metastore host</description>
   </property>

   <property>
       <name>hive.metastore.schema.verification</name>
       <value>true</value>
   </property>

</configuration>

将hive的配置文件配置好后,进行启动,然后验证hive运行情况。

  • 启动命令
nohup /usr/local/bigdata/apache-hive-3.1.2-bin/bin/hive --service metastore > /usr/local/bigdata/apache-hive-3.1.2-bin/logs/metastore.log --hiveconf hive.root.logger=WARN,console 2>&1 &
	nohup /usr/local/bigdata/apache-hive-3.1.2-bin/bin/hive --service hiveserver2 > /usr/local/bigdata/apache-hive-3.1.2-bin/logs/hiveserver2.log --hiveconf hive.root.logger=WARN,console 2>&1 &
	或
	hive-metastore service hive-metastore start
	hive-server2 service hive-server2 start

	! connect jdbc:hive2://server4:10000
  • 验证hive
[alanchan@server4 apache-hive-3.1.2-bin]$ beeline
Beeline version 3.1.2 by Apache Hive
beeline> ! connect jdbc:hive2://server4:10000
Connecting to jdbc:hive2://server4:10000
Enter username for jdbc:hive2://server4:10000: alanchan(根据自己当初配置的用户名和密码输入)
Enter password for jdbc:hive2://server4:10000: ********(根据自己当初配置的用户名和密码输入)
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://server4:10000> show databases;
+--------------------------+
|      database_name       |
+--------------------------+
| alan_hivecatalog_hivedb  |
| default                  |
| test                     |
| testhive                 |
+--------------------------+
4 rows selected (0.14 seconds)
0: jdbc:hive2://server4:10000> use test;
No rows affected (0.025 seconds)
0: jdbc:hive2://server4:10000> show tables;
+----------------+
|    tab_name    |
+----------------+
| dim_address    |
| dim_channel    |
| dim_date       |
| dim_product    |
| dim_region     |
| dim_user       |
| dms_content_t  |
| dw_sales       |
| fact_order     |
| fact_order2    |
+----------------+
10 rows selected (0.031 seconds)
0: jdbc:hive2://server4:10000> 

2、配置Flink集群和SQL cli

1)、将所有 Hive 依赖项添加到 Flink 发行版中的 /lib 文件夹中

注意版本和名称,flink不同的版本要求不同。我的环境下总计如下jar包,

antlr-runtime-3.5.2.jar
flink-connector-hive_2.12-1.13.6.jar
flink-connector-jdbc_2.11-1.13.6.jar
flink-csv-1.13.5.jar
flink-dist_2.11-1.13.5.jar
flink-json-1.13.5.jar
flink-shaded-hadoop-2-uber-2.8.3-10.0.jar
flink-shaded-hadoop-3-3.1.1.7.2.9.0-173-9.0.jar
flink-shaded-zookeeper-3.4.14.jar
flink-sql-connector-elasticsearch7_2.11-1.13.6.jar
flink-sql-connector-hive-3.1.2_2.12-1.13.6.jar
flink-sql-connector-kafka_2.11-1.13.5.jar
flink-table_2.11-1.13.5.jar
flink-table-blink_2.11-1.13.5.jar
guava-27.0-jre.jar
hive-exec-3.1.2.jar
libfb303-0.9.3.jar
mysql-connector-java-6.0.6.jar

而集成hive的jar如下

antlr-runtime-3.5.2.jar
flink-connector-hive_2.12-1.13.6.jar
flink-shaded-hadoop-2-uber-2.8.3-10.0.jar
flink-shaded-hadoop-3-3.1.1.7.2.9.0-173-9.0.jar
flink-sql-connector-hive-3.1.2_2.12-1.13.6.jar
guava-27.0-jre.jar
hive-exec-3.1.2.jar
libfb303-0.9.3.jar
mysql-connector-java-6.0.6.jar

2)、修改 SQL CLI 的 yaml 配置文件 sql-cli-defaults.yaml

  • 配置
    如下所示(仅示例部分):
execution:
    planner: blink
    type: streaming
    ...
    current-catalog: myhive  # set the HiveCatalog as the current catalog of the session
    current-database: mydatabase
    
catalogs:
   - name: myhive
     type: hive
     hive-conf-dir: /opt/hive-conf  # contains hive-site.xml
     
-------------------具体示例---------------------------
# 定义 catalogs
catalogs:
   - name: alan_hivecatalog
     type: hive
     property-version: 1
     hive-conf-dir: /usr/local/bigdata/apache-hive-3.1.2-bin/conf  # 须包含 hive-site.xml


# 改变表程序基本的执行行为属性。
execution:
 planner: blink                            # 可选: 'blink' (默认)或 'old'
 type: streaming                           # 必选:执行模式为 'batch' 或 'streaming'
 result-mode: table                        # 必选:'table' 或 'changelog'
 max-table-result-rows: 1000000            # 可选:'table' 模式下可维护的最大行数(默认为 1000000,小于 1 则表示无限制)
 time-characteristic: event-time           # 可选: 'processing-time' 或 'event-time' (默认)
 parallelism: 1                            # 可选:Flink 的并行数量(默认为 1)
 periodic-watermarks-interval: 200         # 可选:周期性 watermarks 的间隔时间(默认 200 ms)
 max-parallelism: 16                       # 可选:Flink 的最大并行数量(默认 128)
 min-idle-state-retention: 0               # 可选:表程序的最小空闲状态时间
 max-idle-state-retention: 0               # 可选:表程序的最大空闲状态时间
 current-catalog: alan_hivecatalog         # 可选:当前会话 catalog 的名称(默认为 'default_catalog')
 current-database: alan_hivecatalog_hivedb # 可选:当前 catalog 的当前数据库名称(默认为当前 catalog 的默认数据库)
 restart-strategy:                         # 可选:重启策略(restart-strategy)
    type: fallback                          # 默认情况下“回退”到全局重启策略


# 用于调整和调优表程序的配置选项。
# 在专用的”配置”页面上可以找到完整的选项列表及其默认值。
configuration:
  table.optimizer.join-reorder-enabled: true
  table.exec.spill-compression.enabled: true
  table.exec.spill-compression.block-size: 128kb

# 描述表程序提交集群的属性。
deployment:
  response-timeout: 5000
  • 验证配置内容
-- 1、启动flink sql(如果之前的sql cli启动中则需要重启,本示例使用的是yarn-session模式)
[alanchan@server1 bin]$ sql-client.sh -s yarn-session
2023-08-30 00:22:54,215 INFO  org.apache.flink.yarn.cli.FlinkYarnSessionCli                [] - Found Yarn properties file under /tmp/.yarn-properties-alanchan.
2023-08-30 00:22:54,215 INFO  org.apache.flink.yarn.cli.FlinkYarnSessionCli                [] - Found Yarn properties file under /tmp/.yarn-properties-alanchan.
No default environment specified.
Searching for '/usr/local/bigdata/flink-1.13.5/conf/sql-client-defaults.yaml'...found.
Reading default environment from: file:/usr/local/bigdata/flink-1.13.5/conf/sql-client-defaults.yaml
Command history file path: /home/alanchan/.flink-sql-history
-- 2、验证配置的catalog和database
Flink SQL> SHOW CURRENT CATALOG;
+----------------------+
| current catalog name |
+----------------------+
|     alan_hivecatalog |
+----------------------+
1 row in set

Flink SQL> SHOW CURRENT DATABASE;
+-------------------------+
|   current database name |
+-------------------------+
| alan_hivecatalog_hivedb |
+-------------------------+
1 row in set

Flink SQL> SHOW TABLES;
Empty set


3、验证kafka集群生产-消费功能

前提是kafka集群功能正常,以下仅仅是简单的验证指定的主题test_kafka_hive收发消息功能。

1)、kafka发送消息

[alanchan@server3 bin]$ kafka-topics.sh --create --bootstrap-server server1:9092 --topic test_kafka_hive --partitions 1 --replication-factor 1
Created topic test_kafka_hive.
[alanchan@server3 bin]$ kafka-console-producer.sh --broker-list server1:9092 --topic test_kafka_hive
>hello alan
>hello alanchan
>good morning
>

2)、kafka接收消息

[alanchan@server3 bin]$ kafka-console-consumer.sh --bootstrap-server server1:9092 --topic test_kafka_hive --from-beginning
hello alan
hello alanchan
good morning

4、在Flink Cli创建kafka表

CREATE TABLE alanchan_kafka_table (
    `id` INT,
    name STRING,
    age BIGINT,
    t_insert_time TIMESTAMP(3) METADATA FROM 'timestamp',
    WATERMARK FOR t_insert_time as t_insert_time - INTERVAL '5' SECOND
) WITH (
    'connector' = 'kafka',
    'topic' = 'test_kafka_hive',
    'scan.startup.mode' = 'earliest-offset',
    'properties.bootstrap.servers' = '192.168.10.41:9092,192.168.10.42:9092,192.168.10.43:9092',
    'format' = 'csv'
);


Flink SQL> CREATE TABLE alanchan_kafka_table (
>     `id` INT,
>     name STRING,
>     age BIGINT,
>     t_insert_time TIMESTAMP(3) METADATA FROM 'timestamp',
>     WATERMARK FOR t_insert_time as t_insert_time - INTERVAL '5' SECOND
> ) WITH (
>     'connector' = 'kafka',
>     'topic' = 'test_kafka_hive',
>     'scan.startup.mode' = 'earliest-offset',
>     'properties.bootstrap.servers' = '192.168.10.41:9092,192.168.10.42:9092,192.168.10.43:9092',
>     'format' = 'csv'
> );
[INFO] Execute statement succeed.

Flink SQL> show tables;
+----------------------+
|           table name |
+----------------------+
| alanchan_kafka_table |
|         source_table |
+----------------------+
2 rows in set

Flink SQL> desc alanchan_kafka_table;
+---------------+------------------------+------+-----+---------------------------+---------------------------------------+
|          name |                   type | null | key |                    extras |                             watermark |
+---------------+------------------------+------+-----+---------------------------+---------------------------------------+
|            id |                    INT | true |     |                           |                                       |
|          name |                 STRING | true |     |                           |                                       |
|           age |                 BIGINT | true |     |                           |                                       |
| t_insert_time | TIMESTAMP(3) *ROWTIME* | true |     | METADATA FROM 'timestamp' | `t_insert_time` - INTERVAL '5' SECOND |
+---------------+------------------------+------+-----+---------------------------+---------------------------------------+
4 rows in set

0: jdbc:hive2://server4:10000> use alan_hivecatalog_hivedb;
No rows affected (0.049 seconds)
0: jdbc:hive2://server4:10000> show tables;
+-----------------------+
|       tab_name        |
+-----------------------+
| alanchan_kafka_table  |
| source_table          |
+-----------------------+
2 rows selected (0.041 seconds)
0: jdbc:hive2://server4:10000> describe formatted alanchan_kafka_table;
+-------------------------------+----------------------------------------------------+----------------------------------------------------+
|           col_name            |                     data_type                      |                      comment                       |
+-------------------------------+----------------------------------------------------+----------------------------------------------------+
| # col_name                    | data_type                                          | comment                                            |
|                               | NULL                                               | NULL                                               |
| # Detailed Table Information  | NULL                                               | NULL                                               |
| Database:                     | alan_hivecatalog_hivedb                            | NULL                                               |
| OwnerType:                    | USER                                               | NULL                                               |
| Owner:                        | null                                               | NULL                                               |
| CreateTime:                   | Wed Aug 30 08:28:11 CST 2023                       | NULL                                               |
| LastAccessTime:               | UNKNOWN                                            | NULL                                               |
| Retention:                    | 0                                                  | NULL                                               |
| Location:                     | hdfs://HadoopHAcluster/user/hive/warehouse/alan_hivecatalog_hivedb.db/alanchan_kafka_table | NULL                                               |
| Table Type:                   | MANAGED_TABLE                                      | NULL                                               |
| Table Parameters:             | NULL                                               | NULL                                               |
|                               | flink.connector                                    | kafka                                              |
|                               | flink.format                                       | csv                                                |
|                               | flink.properties.bootstrap.servers                 | 192.168.10.41:9092,192.168.10.42:9092,192.168.10.43:9092 |
|                               | flink.scan.startup.mode                            | earliest-offset                                    |
|                               | flink.schema.0.data-type                           | INT                                                |
|                               | flink.schema.0.name                                | id                                                 |
|                               | flink.schema.1.data-type                           | VARCHAR(2147483647)                                |
|                               | flink.schema.1.name                                | name                                               |
|                               | flink.schema.2.data-type                           | BIGINT                                             |
|                               | flink.schema.2.name                                | age                                                |
|                               | flink.schema.3.data-type                           | TIMESTAMP(3)                                       |
|                               | flink.schema.3.metadata                            | timestamp                                          |
|                               | flink.schema.3.name                                | t_insert_time                                      |
|                               | flink.schema.3.virtual                             | false                                              |
|                               | flink.schema.watermark.0.rowtime                   | t_insert_time                                      |
|                               | flink.schema.watermark.0.strategy.data-type        | TIMESTAMP(3)                                       |
|                               | flink.schema.watermark.0.strategy.expr             | `t_insert_time` - INTERVAL '5' SECOND              |
|                               | flink.topic                                        | test_kafka_hive                                    |
|                               | transient_lastDdlTime                              | 1693355291                                         |
|                               | NULL                                               | NULL                                               |
| # Storage Information         | NULL                                               | NULL                                               |
| SerDe Library:                | org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe | NULL                                               |
| InputFormat:                  | org.apache.hadoop.mapred.TextInputFormat           | NULL                                               |
| OutputFormat:                 | org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat | NULL                                               |
| Compressed:                   | No                                                 | NULL                                               |
| Num Buckets:                  | -1                                                 | NULL                                               |
| Bucket Columns:               | []                                                 | NULL                                               |
| Sort Columns:                 | []                                                 | NULL                                               |
| Storage Desc Params:          | NULL                                               | NULL                                               |
|                               | serialization.format                               | 1                                                  |
+-------------------------------+----------------------------------------------------+----------------------------------------------------+
42 rows selected (0.279 seconds)

5、通过kafka发送消息,同时在flink中查询

1)、kafka发送消息

[alanchan@server3 bin]$ kafka-topics.sh --create --bootstrap-server server1:9092 --topic test_kafka_hive --partitions 1 --replication-factor 1
WARNING: Due to limitations in metric names, topics with a period ('.') or underscore ('_') could collide. To avoid issues it is best to use either, but not both.
Created topic test_kafka_hive.
[alanchan@server3 bin]$ kafka-console-producer.sh --broker-list server1:9092 --topic test_kafka_hive
>1,alan,15
>2,alanchan,20
>3,alanchanchn,25
>4,alan_chan,30
>5,alan_chan_chn,45
>

2)、Flink sql cli查询数据

Flink SQL> SET sql-client.execution.result-mode = tableau;
[INFO] Session property has been set.

Flink SQL> select * from alanchan_kafka_table;

+----+-------------+--------------------------------+----------------------+-------------------------+
| op |          id |                           name |                  age |           t_insert_time |
+----+-------------+--------------------------------+----------------------+-------------------------+
| +I |           1 |                           alan |                   15 | 2023-08-30 09:29:33.993 |
| +I |           2 |                       alanchan |                   20 | 2023-08-30 09:29:48.793 |
| +I |           3 |                    alanchanchn |                   25 | 2023-08-30 09:29:54.795 |
| +I |           4 |                      alan_chan |                   30 | 2023-08-30 09:30:01.480 |
| +I |           5 |                  alan_chan_chn |                   45 | 2023-08-30 09:30:07.161 |

五、支持的数据类型

对于与 Hive 兼容的表,HiveCatalog 需要将 Flink 数据类型映射到相应的 Hive 类型,如下表所述:
在这里插入图片描述
关于类型映射需要注意的事项:

  • Hive CHAR § 类型的最大长度为255
  • Hive VARCHAR§类型的最大长度为65535
  • Hive MAP类型的key仅支持基本类型,而Flink’s MAP 类型的key执行任意类型
  • Hive不支持联合数据类型,比如STRUCT
  • Hive TIMESTAMP 的精度是 9 , Hive UDFs函数只能处理 precision <= 9的 TIMESTAMP 值
  • Hive 不支持 Flink提供的 TIMESTAMP_WITH_TIME_ZONE, TIMESTAMP_WITH_LOCAL_TIME_ZONE, 及MULTISET类型
  • Flink INTERVAL 类型与 Hive INTERVAL 类型不一样

六、Scala Shell

注意:由于 Scala Shell 目前不支持 blink planner,因此不建议在 Scala Shell 中使用 Hive 连接器。
以上,以一个详细的示例介绍了Flink与hive的集成,其中有很多的坑都解决了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/96950.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

校园用电安全管理系统可以识别违规电器吗

校园用电安全管理系统是处理恶意用电问题有效手段之一&#xff0c;系统具有实时监测、异常预警、监测设备运行状态、远程控制用电等功能&#xff0c;可以从根本上管理学校用电量&#xff0c;制定合理的用电计划&#xff0c;限制用电成本&#xff0c;避免各种恶意用电行为&#…

单片机学习-蜂鸣器如何发出声音

硬件电路 软件编写 ①发出声音 #include "reg52.h" typedef unsigned int u16; // 重新定义 类型 typedef unsigned char u8; // 重新定义 类型sbit BEEP P2^5; //定义 P2第五个管教 为BEEP // 延时函数 void delay_time(u16 times) {while(times--); } vo…

2022年下半年系统架构设计师真题(下午带答案)

试题一 (25分) 某电子商务公司拟升级其会员与促销管理系统&#xff0c;向用户提供个性化服务&#xff0c;提高用户的粘性。在项目立项之初&#xff0c;公司领导层一致认为本次升级的主要目标是提升会员管理方式的灵活性&#xff0c;由于当前用户规模不大&#xff0c;业务也相对…

Mac版JFormDesigner IDEA插件安装(非商业用途)

前言 仅供个人开发者使用&#xff0c;勿用作商业用途。 仅供个人开发者使用&#xff0c;勿用作商业用途。 仅供个人开发者使用&#xff0c;勿用作商业用途。 感觉做了这些年开发&#xff0c;怎么感觉市场越搞越回去了。桌面应用又成主流了&#xff1f; 甲方让做桌面客户端&am…

C语言:递归思想及实例详解

简介&#xff1a;在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。通过函数的自调用化繁为简。 递归可以说是编程中最神奇的一种算法。因为我们有时候可能不能完全明晰代码的运行过程&#xff0c;但是我们却知道代码可以跑出正确的结果。而当我们使…

自动驾驶攻城战,华为小鹏先亮剑

点击关注 文&#xff5c;刘俊宏 编&#xff5c;苏扬、王一粟 本文为光锥智能x腾讯科技联合出品 2023年过半&#xff0c;城市NOA&#xff08;城市领航辅助驾驶&#xff09;的元年如预期中到来了吗&#xff1f; 8月25日&#xff0c;成都车展开幕&#xff0c;与4个月之前的上海…

(笔记五)利用opencv进行图像几何转换

参考网站&#xff1a;https://docs.opencv.org/4.1.1/da/d6e/tutorial_py_geometric_transformations.html &#xff08;1&#xff09;读取原始图像和标记图像 import cv2 as cv import numpy as np from matplotlib import pyplot as pltpath r"D:\data\flower.jpg&qu…

[PyTorch][chapter 53][Auto Encoder 实战]

前言&#xff1a; 结合手写数字识别的例子&#xff0c;实现以下AutoEncoder ae.py: 实现autoEncoder 网络 main.py: 加载手写数字数据集&#xff0c;以及训练&#xff0c;验证&#xff0c;测试网络。 左图&#xff1a;原图像 右图&#xff1a;重构图像 ----main----- 每轮训…

【哈士奇赠书活动 - 37期】- 〖深入浅出SSD:固态存储核心技术、原理与实战 第2版〗

文章目录 ⭐️ 赠书 - 《深入浅出SSD&#xff1a;固态存储核心技术、原理与实战 第2版》⭐️ 内容简介⭐️ 作者简介⭐️ 编辑推荐⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《深入浅出SSD&#xff1a;固态存储核心技术、原理与实战 第2版》 ⭐️ 内容简介 本书从基础认知、核心技…

快速制作餐厅签到抽奖营销活动,吸引更多顾客

在如今竞争激烈的市场中&#xff0c;吸引用户参与活动是企业获取关注和提升转化率的重要手段。而签到抽奖活动无疑是一种简单而又有效的方式。本文将教你如何利用乔拓云平台后台制作一个快速而有效的签到抽奖活动。 首先&#xff0c;登录乔拓云平台后台&#xff0c;进入【营销活…

【云原生进阶之PaaS中间件】第一章Redis-2.3.3集群模式

1 集群模式 Redis集群是一个提供在多个Redis节点之间共享数据的程序集。它并不像Redis主从复制模式那样只提供一个master节点提供写服务,而是会提供多个master节点提供写服务,每个master节点中存储的数据都不一样,这些数据通过数据分片的方式被自动分割到不同的master节点上…

香橙派OrangePi zero H2+ 驱动移远4G/5G模块

目录 1 安装系统和内核文件&#xff1a; 1.1 下载镜像 1.2 内核头安装 1.2.1 下载内核 1.2.2 将内核头文件导入开发板中 1.2.3 安装内核头 2 安装依赖工具&#xff1a; 2.1 Installing Required Host Utilities 3 驱动步骤&#xff1a; 3.1 下载模块驱动文件…

IO模型:阻塞和非阻塞

一、五种IO模型------读写外设数据的方式 阻塞: 不能操作就睡觉 非阻塞&#xff1a;不能操作就返回错误 多路复用&#xff1a;委托中介监控 信号驱动&#xff1a;让内核如果能操作时发信号&#xff0c;在信号处理函数中操作 异步IO&#xff1a;向内核注册操作请求&…

5G NR:PRACH时域资源

PRACH occasion时域位置由高层参数RACH-ConfigGeneric->prach-ConfigurationIndex指示&#xff0c;根据小区不同的频域和模式&#xff0c;38.211的第6.3.3节中给出了prach-ConfigurationIndex所对应的表格。 小区频段为FR1&#xff0c;FDD模式(paired频谱)/SUL&#xff0c;…

CSRF(跨站请求伪造)和SSRF(服务端请求伪造)漏洞复现:风险与防护方法

这篇文章旨在用于网络安全学习&#xff0c;请勿进行任何非法行为&#xff0c;否则后果自负。 环境准备 一、CSRF&#xff08;跨站请求伪造&#xff09; 示例&#xff1a;假设用户在银行网站A上登录并保持会话活动&#xff0c;同时他也在浏览其他网站。攻击者在一个不可信任…

AMBA_AXI Protocol_基本读写事务

基本读写事务 1. 握手的过程 2. 信道信令要求 3. 通道之间的关系1. 握手的过程 当地址、数据或控制信息可用时&#xff0c;源端&#xff08;source&#xff09;产生VALID信号。终端&#xff08;destination&#xff09;生成READY信号&#xff0c;表示它可以接受该信息。传输只…

微前端:重塑大型项目的前沿技术

引言 随着互联网技术的飞速发展&#xff0c;前端开发已经从简单的页面制作逐渐转变为复杂的应用开发。在这个过程中&#xff0c;传统的前端开发模式已经难以满足大型项目的需求。微前端作为一种新的前端架构模式&#xff0c;应运而生&#xff0c;它旨在解决大型项目中的前端开…

Docker从认识到实践再到底层原理(一)|技术架构

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

适应高速率网络设备的-2.5G/5G/10G网络变压器/网络滤波器介绍

Hqst盈盛&#xff08;华强盛&#xff09;电子导读&#xff1a;在高速发展的互联网/物联网时代&#xff0c;为满足高网速的网络数据传输需求&#xff0c;网络设备在制造中也要选用合适的网络变压器/滤波器产品&#xff0c;有哪些可供选择的高速率网络变压器产品也是广大采购人员…

javaee spring 自动注入,如果满足条件的类有多个如何区别

如图IDrinkDao有两个实现类 方法一 方法二 Resource(name“对象名”) Resource(name"oracleDrinkDao") private IDrinkDao drinkDao;