首先感谢https://blog.csdn.net/zhangdongan1991/article/details/105582712的分享。
在开始之前可以先去官网阅读一下熟悉一下catalog的概念有助于后面的部署:https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/hive/hive_catalog.
阅读完了之后开始搞事情!
步骤1,你需要一个可以访问的hive(这个就不需要教程了,既然都到了这一步了你hive就肯定是有的)
步骤2,你需要一套有jdk8的服务器(最好三台可以部署flink的集群,为啥一定是jdk1.8呢,你也可以是jdk11不要怂,试一下你就会发现困难总比办法多)
步骤3,需要把你的hive-site.xml拷贝到你flink的服务器(flink是需要连接你hive的,而连接hive-site.xml是必不可少的,如果还有其他的连接方式你也可以试试)
步骤4,修改hive-site.xml
#修改hive-site.xml文件如下,此文件不是修改hive安装目录下面的文件而是你项目启动的环境
直接拷贝hive下面的过来修改了一样的
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.120.130:9083</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
</configuration>
hive.metastore.uris为hive的连接地址
hive.metastore.warehouse.dir为hive连接仓库
步骤5,需要把依赖的jar包添加到flink的lib下面点,具体的大于50M上传不了直接去下载:https://download.csdn.net/download/weixin_43943806/15727658 (没有C币的话联系我给你下载,当然你也可以一步步去搞这样印象深刻一点)
步骤6,修改sql-client-defaults.yaml (这个文件在flink安装包的conf下)中指定自己所需的 Catalog
注意:这里的hive-version要和你的hive版本以及hive-exec-1.2.1包的都要保持一致
execution:
planner: blink
...
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
hive-version: 1.2.1
步骤7,启动 sql-client
./sql-client.sh embedded
//出现以下情况表示启动成功
Command history file path: /root/.flink-sql-history
▒▓██▓██▒
▓████▒▒█▓▒▓███▓▒
▓███▓░░ ▒▒▒▓██▒ ▒
░██▒ ▒▒▓▓█▓▓▒░ ▒████
██▒ ░▒▓███▒ ▒█▒█▒
░▓█ ███ ▓░▒██
▓█ ▒▒▒▒▒▓██▓░▒░▓▓█
█░ █ ▒▒░ ███▓▓█ ▒█▒▒▒
████░ ▒▓█▓ ██▒▒▒ ▓███▒
░▒█▓▓██ ▓█▒ ▓█▒▓██▓ ░█░
▓░▒▓████▒ ██ ▒█ █▓░▒█▒░▒█▒
███▓░██▓ ▓█ █ █▓ ▒▓█▓▓█▒
░██▓ ░█░ █ █▒ ▒█████▓▒ ██▓░▒
███░ ░ █░ ▓ ░█ █████▒░░ ░█░▓ ▓░
██▓█ ▒▒▓▒ ▓███████▓░ ▒█▒ ▒▓ ▓██▓
▒██▓ ▓█ █▓█ ░▒█████▓▓▒░ ██▒▒ █ ▒ ▓█▒
▓█▓ ▓█ ██▓ ░▓▓▓▓▓▓▓▒ ▒██▓ ░█▒
▓█ █ ▓███▓▒░ ░▓▓▓███▓ ░▒░ ▓█
██▓ ██▒ ░▒▓▓███▓▓▓▓▓██████▓▒ ▓███ █
▓███▒ ███ ░▓▓▒░░ ░▓████▓░ ░▒▓▒ █▓
█▓▒▒▓▓██ ░▒▒░░░▒▒▒▒▓██▓░ █▓
██ ▓░▒█ ▓▓▓▓▒░░ ▒█▓ ▒▓▓██▓ ▓▒ ▒▒▓
▓█▓ ▓▒█ █▓░ ░▒▓▓██▒ ░▓█▒ ▒▒▒░▒▒▓█████▒
██░ ▓█▒█▒ ▒▓▓▒ ▓█ █░ ░░░░ ░█▒
▓█ ▒█▓ ░ █░ ▒█ █▓
█▓ ██ █░ ▓▓ ▒█▓▓▓▒█░
█▓ ░▓██░ ▓▒ ▓█▓▒░░░▒▓█░ ▒█
██ ▓█▓░ ▒ ░▒█▒██▒ ▓▓
▓█▒ ▒█▓▒░ ▒▒ █▒█▓▒▒░░▒██
░██▒ ▒▓▓▒ ▓██▓▒█▒ ░▓▓▓▓▒█▓
░▓██▒ ▓░ ▒█▓█ ░░▒▒▒
▒▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░▓▓ ▓░▒█░
______ _ _ _ _____ ____ _ _____ _ _ _ BETA
| ____| (_) | | / ____|/ __ \| | / ____| (_) | |
| |__ | |_ _ __ | | __ | (___ | | | | | | | | |_ ___ _ __ | |_
| __| | | | _ \| |/ / \___ \| | | | | | | | | |/ _ \ _ \| __|
| | | | | | | | ____) | |__| | |____ | |____| | | __/ | | | |_
|_| |_|_|_| |_|_|\_\ |_____/ \___\_\______| \_____|_|_|\___|_| |_|\__|
Welcome! Enter 'HELP;' to list all available commands. 'QUIT;' to exit.
>Flink SQ
步骤8,启动成功后我们录入一个kafka的元数据(这个kafak前提是可以连接通)
Flink SQL> show catalogs;
default_catalog
myhive
Flink SQL> use catalog myhive;
Flink SQL> show databases;
default
dim
dm
dw
dwd
hive_bak
myhive
ods
qa_dev
qa_pro
st
Flink SQL> CREATE TABLE UserScores (requestId STRING,recordCount STRING)
WITH (
'connector' = 'kafka',
'topic' = 'nima',
'properties.bootstrap.servers' = '192.168.120.130:9092',
'properties.group.id' = 'testGroup1',
'format' = 'json',
'scan.startup.mode' = 'group-offsets');
>Flink SQ select * from userscores;
//会出现具体的kafka的查询结果
步骤8,怎么用java来访问这个数据库呢
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);
StreamTableEnvironment tEnv = StreamTableEnvironment.create(env);
String name = "myhive";
String defaultDatabase = "default";
String hiveConfDir = "/opt/app";
HiveCatalog hive = new HiveCatalog(name, defaultDatabase, hiveConfDir);
tEnv.registerCatalog("myhive", hive);
tEnv.useCatalog("myhive");
tEnv.useDatabase("default");
tEnv.sqlQuery("select * from userscores").execute().print();