zeppelin简介
Flink SQL的默认开发方式是通过Java/Scala API编写,与纯SQL化、平台化的目标相去甚远。目前官方提供的FlinkSQL Client仅能在配备Flink客户端的本地使用,局限性很大。而Ververica开源的Flink SQL Gateway组件是基于REST API的,仍然需要二次开发才能供给上层使用,并不是很方便。
鉴于有很多企业都无法配备专门的团队来解决Flink SQL平台化的问题,那么到底有没有一个开源的、开箱即用的、功能相对完善的组件呢?答案就是本文的主角——Apache Zeppelin。
Zeppelin是基于Web的交互式数据分析笔记本,支持SQL、Scala、Python等语言。Zeppelin通过插件化的Interpreter(解释器)来解析用户提交的代码,并将其转化到对应的后端(计算框架、数据库等)执行,灵活性很高。
zeppelin安装
1.下载zeppelin-0.9.0-bin-all.tgz
https://apache.website-solution.net/zeppelin/zeppelin-0.9.0/zeppelin-0.9.0-bin-all.tgz
https://mirror-hk.koddos.net/apache/zeppelin/zeppelin-0.9.0/zeppelin-0.9.0-bin-all.tgz
2.解压zeppelin-0.9.0-bin-all.tgz
tar -zxvf zeppelin-0.9.0-bin-all.tgz
3.修改zeppelin配置文件:conf 文件夹下面的 zeppelin-site.xml 和 zeppelin-env.sh
cp zeppelin-site.xml.template zeppelin-site.xml vi zeppelin-site.xml
<!-- 服务地址。默认为127.0.0.1,改为0.0.0.0使得可以在外部访问 -->
<property>
<name>zeppelin.server.addr</name>
<value>0.0.0.0</value>
<description>Server binding address</description>
</property>
<!-- 服务端口。默认为8080,如果已占用,可以修改之 -->
<property>
<name>zeppelin.server.port</name>
<value>18080</value>
<description>Server port.</description>
</property>
cp zeppelin-env.sh.template zeppelin-env.sh vi zeppelin-env.sh
# JDK目录
export JAVA_HOME=/opt/jdk1.8.0_172
# Hadoop配置文件目录
export HADOOP_CONF_DIR=/etc/hadoop/hadoop-conf
3.至此,最基础的配置就完成了。
运行bin/zeppelin-daemon.sh start命令,返回Zeppelin start [ OK ]的提示之后,
就可以访问<服务器地址>:18080,表示Zeppelin服务启动成功。
4.进一步配置,生产也可以使用,修改完重启zeppelin。
<!-- 将Notebook repo更改为HDFS存储 -->
<property>
<name>zeppelin.notebook.storage</name>
<value>org.apache.zeppelin.notebook.repo.FileSystemNotebookRepo</value>
<description>Hadoop compatible file system notebook persistence layer implementation, such as local file system, hdfs, azure wasb, s3 and etc.</description>
</property>
<!-- Notebook在HDFS上的存储路径 -->
<property>
<name>zeppelin.notebook.dir</name>
<value>/zeppelin/notebook</value>
<description>path or URI for notebook persist</description>
</property>
<!-- 启用Zeppelin的恢复功能。当Zeppelin服务挂掉并重启之后,能连接到原来运行的Interpreter -->
<property>
<name>zeppelin.recovery.storage.class</name>
<value>org.apache.zeppelin.interpreter.recovery.FileSystemRecoveryStorage</value>
<description>ReoveryStorage implementation based on hadoop FileSystem</description>
</property>
<!-- Zeppelin恢复元数据在HDFS上的存储路径 -->
<property>
<name>zeppelin.recovery.dir</name>
<value>/zeppelin/recovery</value>
<description>Location where recovery metadata is stored</description>
</property>
flinksql on zeppelin
环境:
flink 1.12.2
hadoop 3.0.0
hive 2.1.1
zeppelin 0.9.0
配置flink interpreter
配置Interpreter 有以下2种方式(通常情况下我们需要结合这两种配置方式):
在Interpreter 页面进行全局配置
在Note页面进行Note级别的配置
1.Interpreter 页面配置
打开zeppelin界面,点击用户,找到 interpreter菜单: 点击首页用户名区域菜单中的Interpreter,搜索flink,就可以看到参数列表: 首先,将Interpreter Binding模式修改为Isolated per Note,如下图所示:
在这种模式下,每个Note在执行时会分别启动Interpreter进程,类似于Flink on YARN的Per-job模式,最符合生产环境的需要。
需要配置的参数: Flink on YARN参数
FLINK_HOME:Flink 1.12.2所在的目录;
HADOOP_CONF_DIR:Hadoop配置文件所在的目录;
flink.execution.mode:Flink作业的执行模式,指定为yarn以启用Flink on YARN;
flink.jm.memory:JobManager的内存量(MB);
flink.tm.memory:TaskManager的内存量(MB);
flink.tm.slot:TaskManager的Slot数;
flink.yarn.appName:YARN Application的默认名称;
flink.yarn.queue:提交作业的默认YARN队列。
Hive Integration参数
HIVE_CONF_DIR:Hive配置文件(hive-site.xml)所在的目录;
zeppelin.flink.enableHive:设为true以启用Hive Integration;
zeppelin.flink.hive.version:Hive版本号。
复制与Hive Integration相关的依赖到$FLINK_HOME/lib目录下,包括:
flink-connector-hive_2.11-1.12.2.jar
hive-exec-2.1.1.jar
2.Note级别配置:
Note 级别的配置只有在当Interpreter binding模式选择 Isolated Per Note的时候才起作用。
Note 级别的配置一般放在每个Note的第一个Paragraph,是通过一个特殊的 Inline Configuration
Interpreter (%flink.conf) 来实现的。
一般每个Note都有自己对应的Job和场景,我们需要对每个Note做特殊的配置,比如
flink.execution.packages, flink.udf.jars, flink.yarn.appName 等等。Note级别的配置优先
级比 Interpreter的全局配置要高,所以比如你可以在Note配置 FLINK_HOME 来覆盖Interpreter
页面里配置的 FLINK_HOME。下图是一个简单的例子:
3.测试Flink SQL on Zeppelin
创建一个Notebook,Interpreter指定为flink。然后写入Paragraph,通常第一个是job configuration: 接下来创建第二个: 最后运行即可。
|