CentOS下的PyFlink的安装与配置

想要了解任何Apache下的平台框架,我们可以首先通过官网进行学习,下面介绍一下PyFlink的安装步骤。

PyFlink的安装与配置

1 下载安装

系统: CentOS
环境依赖:Java 1.8+(1.8.0_252)
Maven 3.x(3.2.5)最好使用Maven3.2.5,3.3以上的可能会出现一些错误
Scala 2.11+(2.13.0)
Python 2.7+ (3.6)
Git 2.20+(2.24.0)
Pip 9.1+(pip 9.0.3)
下载:Flink-1.10.1
注:括号内是本机的环境

1.1 安装Maven

Centos中没有自带安装Maven,需要手动安装Maven。直接使用如下指令下载maven即可,下载位置为当前目录:

wget https://archive.apache.org/dist/maven/maven-3/3.2.5/binaries/apache-maven-3.2.5bin.tar.gz

下载完成之后,解压并安装:

tar zxvf apache-maven-3.2.5-bin.tar.gz

修改文件名:

sudo mv apache-maven-3.2.5 maven

配置环境变量:

vim /etc/profile

将下面代码加入到profile中:

# /usr/local/maven是你maven安装的位置
export MAVEN_HOME=/usr/local/maven 
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH

代码加入后如下图所示:
在这里插入图片描述

重新加载系统配置文件:

source /etc/profile

# 查看是否安装完成。
mvn -v

在这里插入图片描述

1.2 安装Flink:

下载源代码:

git clone https://github.com/apache/flink.git

对于国内的用户,下载 github 上的代码可能比较慢,可以在/etc/hosts 中增加如下配置, 可以显著提升github的下载速度:

151.101.72.133 assets-cdn.github.com
151.101.73.194 github.global.ssl.fastly.net
192.30.253.113 github.com
11.238.159.92 git.node5.mirror.et2sqa

注:粘贴到hosts后要分为四行,而且中间不要有空格,如果不能提升下载速度的话,重启终端再进行下载。

接着拉取1.10的分支:

cd flink/
git fetch origin release-1.10  && git checkout -b release-1.10 origin/release-1.10

修改maven settings的配置,输入以下指令进入setting.xml:

cd /usr/local/maven/conf/ 
vim settings.xml

进入到setting.xml后,修改镜像配置:

<mirror>     
<id>nexus-aliyun</id>     
<mirrorOf>*,!jeecg,!jeecg-snapshots,!mapr-releases</mirrorOf>     
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>     
</mirror> 
<mirror>     
<id>mapr-public</id>     
<mirrorOf>mapr-releases</mirrorOf>     
<name>mapr-releases</name>
<url>https://maven.aliyun.com/repository/mapr-public</url>    
</mirror>

修改后如下图所示:
在这里插入图片描述
此处是使用了aliyun提供的镜像仓库。
进入解压后的flink文件夹,编译Flink代码:(注:在编译之前,scala,git,java等环境依赖要配置好)

mvn clean install -DskipTests -Drat.skip=true -Dcheckstyle.skip=true

这个编译的时间可能会长一些
编译过程中可能会出现下列问题:

[ERROR] Failed to execute goal on project flink-avro-confluent-registry: Could not resolve dependencies for project org.apache.flink:flink-avro-confluent-registry:jar:1.9-SNAPSHOT: Failure to find io.confluent:kafka-schema-registry-client:jar:3.3.1 in http://maven.aliyun.com/nexus/content/groups/public was cached in the local repository, resolution will not be reattempted until the update interval of nexus-aliyun has elapsed or updates are forced -> [Help 1]

解决方案:
下载上述错误提示缺少某个jar包,此时我们使用wget 进行下载:

wget http://packages.confluent.io/maven/io/confluent/kafka-schema-registry-client/3.3.1/kafka-schema-registry-client-3.3.1.jar

下载完成后在你的当前目录会出现一个jar包:
在这里插入图片描述
安装这个jar包:

mvn install:install-file -DgroupId=io.confluent -DartifactId=kafka-schema-registry-client -Dversion=3.3.1 -Dpackaging=jar  -Dfile=/usr/local/kafka-schema-registry-client-3.3.1.jar

注:这里的/usr/local是我的jar包所在的目录,使用时需要将其改成你的jar包所在的目录,如果安装不成功,重启终端再次安装。

在整个编译过程中,当某些项目编译失败时,可能会是网络问题,再重新编译一次即可。

最终编译成功的界面如下图所示:

如下图所示,编译成功后会在你的目录中出现一个build-target文件:
在这里插入图片描述

2 编程实现wordcount

使用如下指令Java 包囊括进来,再把自己 PyFlink 本身模块的一些 Java 的包和 Python 包打包成一起:

cd flink-python
python3 setup.py sdist

注:当python3 setup.py sdist这段命令无法执行时,重启终端再次执行即可。

然后执行下列指令:

cd dist/

如下图所示,此时我们可以看到dist文件夹下有一个可以用于 pip install 的 PyFlink 包:
在这里插入图片描述
接下来我们首先检查命令的正确性,在执行之前,我们用 pip3 检查一下 list,我们要看在已有的包里有没有这个包:

pip3 list

我们可以看到如下结果:在这里插入图片描述
如图所示,我们并没有apache-flink的包,此时我们要使用如下命令进行安装:

pip install dist/*.tar.gz

注:执行这条指令的时候要退回到上一次文件夹中,不要在dist文件夹中执行这条指令。
如果pip3 install安装速度很慢的话,使用清华园镜像,即在末尾加上:

-i https://pypi.tuna.tsinghua.edu.cn/simple

如果出现timeout的错误的话,则在末尾加上:--default-timeout=100

出现以下错误的话:
Command “/usr/bin/python3.6 -u -c “import setuptools, tokenize;file=’/tmp/pip-build-ld1n0zah/grpcio/setup.py’;f=getattr(tokenize, ‘open’, open)(file);code=f.read().replace(’\r\n’, ‘\n’);f.close();exec(compile(code, file, ‘exec’))” install --record /tmp/pip-ney8umyq-record/install-record.txt --single-version-externally-managed --compile” failed with error code 1 in /tmp/pip-build-ld1n0zah/grpcio/

执行以下代码解决这个问题:

Pip3 install --upgrade setuptools

python -m pip install --upgrade pip --default-timeout=100

执行结果如下图所示:
在这里插入图片描述
此时我们再执行pip3 list的命令,我们就可以发现apache-flink包已经包含在里面了:
在这里插入图片描述
安装完成后,我们使用WordCount 例子来验证环境是否正确:

# 首先使用vim命令创建一个soruce.csv文件
vim source.csv

文件内容如下图所示,这个文件可以根据自己的情况来写。
在这里插入图片描述
接下来我们创建一个python文件:

vim wordcount.py

python文件内的具体代码如下所示:

# -*- coding: utf-8 -*-

from pyflink.dataset import ExecutionEnvironment
from pyflink.table import TableConfig, DataTypes, BatchTableEnvironment
from pyflink.table.descriptors import Schema, OldCsv, FileSystem

import os

# 数据源文件,这里的源文件路径是我刚刚创建的source.csv的路径
source_file = '/usr/local/flink/enjoyment.code/myPyFlink/enjoyment/source.csv'
# 计算结果文件
sink_file = 'sink.csv'

# 创建执行环境
exec_env = ExecutionEnvironment.get_execution_environment()
# 设置并发为1 方便调试
exec_env.set_parallelism(1)
t_config = TableConfig()
t_env = BatchTableEnvironment.create(exec_env, t_config)

# 如果结果文件已经存在,就先删除
if os.path.exists(sink_file):
    os.remove(sink_file)
    # 创建数据源表
t_env.connect(FileSystem().path(source_file)) \
    .with_format(OldCsv()
                 .line_delimiter(',')
                 .field('num', DataTypes.STRING())) \
    .with_schema(Schema()
                 .field('num', DataTypes.STRING()))\
    .register_table_source('mySource')

# 创建结果表
t_env.connect(FileSystem().path(sink_file)) \
    .with_format(OldCsv()
                 .field_delimiter(',')
                 .field('num', DataTypes.STRING())
                 .field('count', DataTypes.BIGINT())) \
    .with_schema(Schema()
                 .field('num', DataTypes.STRING())
                 .field('count', DataTypes.BIGINT())) \
                                                            
# 非常简单的word_count计算逻辑
t_env.scan('mySource') \
    .group_by('num') \
    .select('num, count(1)') \
    .insert_into('mySink')
# 执行Job
t_env.execute("wordcount")
               

启动flink

# 进入build-target的bin目录下
cd /usr/local/flink/build-target/bin/
# 启动flink
./start-cluster.sh 

将wordcount.py代码提交到flink上去执行:

./bin/flink run -m localhost:8081 -py ~/PycharmProjects/test/wordcount.py 

注:我们需要新进入build-target目录才能执行这段指令,执行结果如图所示:
在这里插入图片描述

这个代码的含义是是读了一个 source.csv 文件,把结果写到 sink.csv 文件。我们来查看sink.csv文件:

vim sink.csv

我们可以看到结果如下图所示,此时就说明我们的wordcount代码执行成功。
在这里插入图片描述
此时说明我们已经成功安装了PyFlink。

注:flink 1.11.1的安装与flink 1.10.0的安装类似,其安装包可以去官网上下载
https://www.apache.org/dyn/closer.lua/flink/flink-1.11.1/flink-1.11.1-src.tgz
下载清华园的版本即可
https://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.11.1/flink-1.11.1-src.tgz

Reference

如何在 Apache Flink 中使用 Python API?
在Linux上安装Flink以及编写打包WordCount程序

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值