摘要:本文介绍了某零售企业用户基于 Dlink FlinkSQL 构建批流一体数据平台的实践,主要为部署的分享。内容包括:
- 前言
- 部署
- 集群中心
- 系统配置
GitHub 地址
https://github.com/DataLinkDC/dlink
欢迎大家关注 Dlink 的发展~
一、前言
由于公司需求,最近调研了很多的开源项目,最终发现 Dlink 在建立批流一体的数据平台上更满足需求。数据开发的便捷性对于数据平台来说非常重要,决定了项目的建设与运维成本,而 Dlink 提供了 FlinkSQL 与其他 SQL 的开发与调试能力,使数据开发工作达到Hue 的效果,自动提交及创建远程集群的能力降低了使用门槛,与作者沟通后,得知 Dlink 的 RoadMap 正为所需求的数据平台,于是部署研究后,效果不错,准备节后上线生产,期间踩了一些坑,整理了一篇文章来分享,时间关系,后续还会分享其他的内容。
二、部署
一.解压到指定目录
Dlink 不依赖任何外部的 Hadoop 或者 Flink 环境,可以单独部署在 flink、 hadoop 和 K8S 集群之外,完全解耦,支持同时连接多个不同的集群实例进行运维。
代码语言:javascript复制tar -zxvf dlink-release-0.5.0-SNAPSHOT.tar.gz
mv dlink-release-0.5.0-SNAPSHOT dlink
cd dlink
修改配置文件
二.配置文件
Dlink采用mysql作为后端的存储库,mysql支持5.6 。这里假设你已经安装了mysql
首先需要创建Dlink的后端数据库,这里以配置文件中默认库创建
代码语言:javascript复制#登录mysql
mysql -uroot -proot@123
#授权并创建数据库
mysql> grant all privileges on *.* to 'dlink'@'%' identified by 'dlink' with grant option;
mysql> grant all privileges on *.* to 'dlink'@'fdw1' identified by 'dlink' with grant option;
mysql> flush privileges;
#此处用dlink用户登录
mysql -h fdw1 -udlink -pdlink
mysql> create database dlink;
创建好数据库后,就可以修改dlink连接mysql的配置文件啦,根据个人情况修改。配置文件比较简单,这里就不多说了。
代码语言:javascript复制#切换目录
cd /opt/dlink/config/
vim application.yml
配置文件修改好后,下一步就是安装nginx。如果已安装nginx可以忽略。因为Dlink部署需要nginx,所以先要部署nginx,配置完成后,才能正常启动。
三.初始化数据库
在dlink根目录sql文件夹下有2个sql文件,分别是dlink.sql和dlink_history.sql。如果第一次部署,可以直接将dlink.sql文件在dlink数据库下执行。(如果之前已经建立了 dlink 的数据库,那 dlink_history.sql 存放了各版本的升级 sql ,根据版本号按需执行即可)
代码语言:javascript复制#首先登录mysql
mysql -h fdw1 -udlink -pdlink
mysql> use dlink;
mysql> source /opt/dlink/sql/dlink.sql
执行完成后,接下来,部署nginx服务。
四.部署nginx
在linux,首先要配置好相应的yum库,因为在安装过程中没有配置,这里可以大概讲述下步骤,可以选择连接网络或者本地yum源都可以,这里选择连接网络方式配置
代码语言:javascript复制#下载yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#清除缓存
yum makecache
#接下来安装nginx
yum -y install epel-release
yum -y install nginx
sudo systemctl enable nginx
sudo service nginx start
sudo service nginx reload
nginx -v
#最后查看进程看是否正常启动
ps -ef|grep nginx
五.nginx中配置dlink
如果是yum源安装的nginx,配置文件在etc下,如果是源码包安装,请自行找到配置文件
代码语言:javascript复制#切换到nginx配置目录
cd /etc/nginx/
vim /etc/nginx/nginx.conf打开配置文件,修改server中的内容,其中server中的内容按照github上的配置即可
代码语言:javascript复制 server {
listen 9999;
#listen [::]:80;
server_name bigdata3;
root /usr/share/nginx/html;
gzip on;
gzip_min_length 1k;
gzip_comp_level 9;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;
gzip_disable "MSIE [1-6].";
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
root html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
location ^~ /api {
proxy_pass http://192.168.0.0:8888;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
}
修改内容:
- listen 监听端口;
- 存放html路径;
- location / 这里可以指定为绝对路径红色部分就是所修改的地方
配置完成后,保存退出。并重启nginx并重新加载生效
代码语言:javascript复制$systemctl restart nginx.service
$systemctl reload nginx.service
#查看nginx是否配置成功
nginx -t
$nginx -s reload
六.加载依赖
Dlink具备自己的 Flink 环境,该 Flink 环境的实现需要用户自己在 Dlink 根目录下创建 plugins 文件夹并上传相关的 Flink 依赖,如 flink-dist, flink-table 等,具体请阅 Readme(后续的扩展依赖也放到该目录下)。当然也可在启动文件中指定 FLINK_HOME,但不建议这样做。
Dlink当前版本的yarn的perjob与application执行模式依赖Flink-shade-hadoop去启动,需要额外添加Flink-shade-hadoop 包。
代码语言:javascript复制#创建目录
cd /opt/dlink/
mkdir plugins
将Flink-shade-hadoop上传到到plugins文件目录下对于使用hadoop2 或者 hadoop 3 的均可使用 flink-shade-hadoop-3 地址如下:
https://mvnrepository.com/artifact/org.apache.flink/flink-shaded-hadoop-3-uber?repo=cloudera-repos
如果是CDH及HDP使用开源flink-shade对Dlink没有任何影响,其他用到的依赖取决于CDH或者HDP与开源版本的兼容性,需要自行根据兼容性添加依赖即可正常使用 Dlink 的所有功能。
七.启动Dlink
代码语言:javascript复制#启动
$sh auto.sh start
#停止
$sh auto.sh stop
#重启
$sh auto.sh restart
#查看状态
$sh auto.sh status
看到如下界面说明Dlink部署成功
默认用户名/密码:admin/admin
如果访问失败,请检查防火墙是否关闭、Nginx的配置是否正确。
接下来,是关于Dlink用户部署,对于一些公司来说,禁止在非root用户下操作,或者采用资源调度(yarn),需要用非root用户提交FlinkSQL。那么Dlink遵循的原则是,Dlink启动用那个用户就会通过那个用户去提交任务。下面就说下,如何在非root用户下得操作;
八.非root用户提交任务
创建flink提交用户的队列用flink
代码语言:javascript复制$useradd flink
在hdfs下创建/user/flink用户文件夹,要使用root用户去创建,并授与flink权限。如果是CDH平台,采用HDFS用户去创建,这里采用的root
代码语言:javascript复制$hadoop fs -mkdir -p /user/flink
#授权
$hadoop fs -chown -R flink:flink /user/flink
对Dlink进行授权,采用Flink权限后,Dlink在Flink用户下启动,那么这个时候FlinkSQL开发的作业都会通过Flink用户提交
代码语言:javascript复制$chown -R flink:root dlink
切换到Flink用户启动Dlink即可正常使用
代码语言:javascript复制su flink
sh auto.sh start
问题记录:
1.standalone、yarn-session、k8s-session 适合测试以及对源数据库的查询,例如OLAP,并且在standalone和yarn session模式下禁用savepoints,如果使用 SELECT 和 SHOW 等查询操作,需要关闭语句集、开启结果预览才可。
2.perjob和application模式推荐在生产使用,开启语句集,savepoint设置为最近一次。
3.local 不熟悉的话慎用,并不要执行流任务。
三、集群中心
集群中心配置包括:
- 集群实例
- 集群配置其中集群实例适用场景为standalone和yarn session以及k8s session。注册 Flink 集群地址时,格式为 host:port ,用英文逗号分隔。即添加 Flink 集群的 JobManager 的 RestApi 地址。当 HA 模式时,地址间用英文逗号分隔,例如:192.168.123.101:8081,192.168.123.102:8081,192.168.123.103:8081。新增和修改的等待时间较长,是因为需要检测最新的 JobManager 地址。心跳检测为手动触发,会更新集群状态与 JobManager 地址。
集群配置适用场景为yarn-per-job和yarn-application。k8s-application则通过set语法来配置。
一.集群实例
如果要配置集群实例,第一步,要点击"集群中心",进入集群中心后,第二步,点击"集群实例",进入"集群实例"后,会看到如下界面
如上图所示,里面包括新建,心跳,回收,刷新等按钮。
第三步,点击"新建"按钮,会出现"添加Flink集群"界面
包括名称,别名,类型,JobManager HA地址。其中名称和别名根据情况自定义,类型包含yarn session,standalone,yarn per-job,yarn application。集群实例适合yarn session,k8s session,standalone。添加Flink集群默认是启用。下面以standalone创建一个Flink集群,界面如下:
填写完成后,点击"提交"按钮。提交完成后,下一步点击"心跳"按钮,界面如下:
会看到状态刷新完成,会自动获取到 Flink 的版本号。至此一个集群实例就注册完成。yarn session和k8s session集群实例注册类似。
如果需要更改集群实例,需要点击配置或者编辑,出现集群编辑界面,可以对集群实例进行更改或者删除。如下图
二.集群配置
集群配置更多适用于yarn per-job和yarn application。
第一步,点击"集群配置",界面如下:
第二步,点击"新建",出现"创建集群配置",界面如下:
集群配置中包括hadoop配置,Flink配置,基本配置。
在Hadoop配置中必填项包含配置文件路径及ha.zookeeper.quorum(可不填)
Flink配置必填项包含lib 路径和配置文件路径
基本配置必填项包含标识
在基本配置中最后点击"是否启用",那么集群配置信息配置完成。
信息填写完成后,点击"测试"按钮,看集群是否配置成功,如果配置成功,会出现测试链接成功,否则出现"请求失败",最后点击"完成"。
集群配置如何修改,点击对应的"更多"按钮,即可对集群配置进行编辑和删除,同集群实例。
以上为集群中心的配置过程,到这里集群配置就完成了。
四、系统设置
一.用户管理
新建用户密码默认:123456
二.Flink设置
第一步,点击"系统设置">>"Flink设置",界面如下:
提交FlinkSQL的Jar文件路径主要是为yarn application服务,我们需要将Dlink中的dlink-app依赖包上传到HDFS的指定路径,点击"修改"后,保存即可。其他的默认,不需要额外修改。
部署篇今天就介绍到这里啦!后期将会有一篇介绍Dlink的入门,望大家期待哦~