(一)

安装准备:

[root@master flink-dist]# mvn --version
Apache Maven 3.2.5 
[root@master flink-dist]# scala -version
Scala code runner version 2.12.6 --
[root@master flink-dist]# python -V
Python 2.7.5
[root@master git]# /usr/local/git/bin/git version
git version 2.8.4
[root@master git]# pip -V
pip 19.3.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)

(二)下载源代码

cd /usr/local/git/bin/git
//下载源代码
/usr/local/git/bin/git clone https://github.com/apache/flink.git

备注:下载后项目源代码就在 git 命令 当前目录之下(目录名称 flink)。

// 拉取1.9分支
cd flink; git fetch origin release-1.9
git checkout -b release-1.9 origin/release-1.9
//构建二进制发布包
mvn clean install -DskipTests -Dfas

坑1:编译过程中 会有 三个 jar 包找不到, flink-examples 和 一个 oss 的 相关。 在 pom.xml 暂时注释掉。

坑2:编译时候 出现以下错误 可以 在子项目下 执行编译命令,然后再编译总项目 ,可能会有多个子项目需要分别去手工编译
本例的 分项目是指 /usr/local/git/bin/flink/flink-libraries/flink-cep

cd /usr/local/git/bin/flink/flink-libraries/flink-cep
mvn clean install -DskipTests -Dfas[ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:3.0.0:single (opt) on project flink-dist_2.11: 
Failed to create assembly: Error adding file to archive: /usr/local/git/bin/flink/flink-dist/../flink-libraries/flink-cep/target/flink-cep_2.11-1.9-SNAPSHOT.jar -> [Help 1]

重复以上过程直到编译成功完毕。

 


(三)编译完成后,需要在相应目录下找到发布包:

 

cd flink-dist/target/flink-1.9.0-bin/flink-1.9.0
tar -zcvf flink-1.9.0.tar.gz flink-1.9.0

注意 实际环境 是  /usr/local/git/bin/flink/flink-dist/target/flink-1.9-SNAPSHOT-bin
另外 相应打包的时候 也不是 
flink-1.9.0.tar.gz  打出来的包是
flink-1.9-SNAPSHOT.tar.gz
所以 实际运行的命令 是

cd  
/usr/local/git/bin/flink/flink-dist/target/flink-1.9-SNAPSHOT-bin


tar -zcvf flink-1.9-SNAPSHOT.tar.gz flink-1.9-SNAPSHOT
几个目录的关系:
1、/usr/local/git 这个是 git的 安装目录
2、/usr/local/git/bin/ 这个是git 安装之后 执行git命令的地方(由于 机器上可能存在多个 git 版本,为了保证 命令唯一性,在这个目录下 ./git 执行 XXX)
3、
/usr/local/git/bin/flink  这个 flink 目录是 通过github clone 下载下来的 flink的源代码目录。
4、
flink 源代码 下有很多目录 ,flink-dist 基本 是编译源代码后生成文件的地方。

(四)以下把 flink 整合成python能识别的包


cd flink-python;Python setup.py sdist
这个flink-Python 目录是指 /usr/local/git/bin/flink/flink-python

结果:在/usr/local/git/bin/flink/flink-python/dist 目录下 会生成 apache-flink-1.9.dev0.tar.gz  这个 tar包

(五)以下,把上一步骤生成的 python 能识别的 flink tar包(
apache-flink-1.9.dev0.tar.gz
) 作为插件安装到 python 环境中。

cd 
/usr/local/git/bin/flink/flink-python/dist
pip install dist/*.tar.gz
pip list|grep flink
pip install dist/*.tar.gz 的时候会报错 。原因是在这个 
apache-flink-1.9.dev0.tar.gz 中的 有一个setup.py 安装文件,这个文件是在pycharm的ide工具下编写而成 其中
用到了pycharm 才有的参数 __file__
代码如下 this_directory = os.path.abspath(os.path.dirname(__file__))
而在终端下 执行pip   
__file__  所表现出来的 实际目录值(经过 print 打印 测试 结果是 /tmp/pipreqXXX) 和 并不是 【
/usr/local/git/bin/flink/flink-python
】,
这会导致后面一系列 安装目录的错位,导致安装失败。

解决办法:不要直接安装tar包,先把

然后
cd /usr/local/git/bin/flink/flink-python
注意一定要 cd 到这个目录(因为 下面的setup.py中包含相对于flink-python这个目录的有很多相对目录)
执行 python dist/apache-flink-1.9.dev0/setup.py install

也就是 直接调用 解压缩目录中的setup.py。机制上 类似于 pip,但是避免了 pip的相对目录问题

完毕之后 会看到

...................................................
..................................................Installed /usr/lib/python2.7/site-packages/py4j-0.10.8.1-py2.7.egg
Searching for python-dateutil==1.5
Best match: python-dateutil 1.5
Adding python-dateutil 1.5 to easy-install.pth fileUsing /usr/lib/python2.7/site-packages
Finished processing dependencies for apache-flink==1.9.dev0

查看python中flink的安装结果:

pip list|grep flink
[hadoop@master flink-python]$ pip list|grep flink
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support

apache-flink

至此python flink 包 安装完毕!


 (六)测试 python flink 包 效果

git clone https://github.com/sunjincheng121/enjoyment.code.git
cd /usr/local/git/bin/enjoyment.code/myPyFlink/enjoyment; python word_count.py

结果会生成一个sink.csv 文件 如下:
[root@master enjoyment]# ls
__init__.py  kafka  sink.csv  source.csv  udc  udf  word_count_cli.py  word_count.py  word_count_shell.py  word_count_udf.py
[root@master enjoyment]# pwd
/usr/local/git/bin/enjoyment.code/myPyFlink/enjoyment
[root@master enjoyment]# ll
total 24
-rw-r--r--. 1 root root    0 Jan  2 21:48 __init__.py
drwxr-xr-x. 2 root root   69 Jan  2 21:48 kafka
-rw-r--r--. 1 root root   34 Jan  3 08:09 sink.csv
-rw-r--r--. 1 root root   40 Jan  2 21:48 source.csv
drwxr-xr-x. 2 root root   55 Jan  2 21:48 udc
drwxr-xr-x. 2 root root   43 Jan  2 21:48 udf
-rw-r--r--. 1 root root 2276 Jan  2 21:48 word_count_cli.py