(一)
安装准备:
[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