天天看點

30萬獎金等你拿!Apache Flink 極客挑戰賽入門指南(附Demo)

最近在參加第二屆 Apache Flink 極客挑戰賽,比賽要求各隊利用大資料 + AI 技術來幫助解決疫情防控的挑戰,官方提供的計算架構是 Apache Flink + Analytics Zoo。

由于本次大賽既要用到大資料技術,又要用到 AI 技術,這使得隻有單一技術背景的同學在搭建本地調試環境時遇到了不少問題。是以我把自己配置本地環境的流程和需要注意的地方記錄下來,以供各位參賽同學參考,希望大家能将自己的精力更多集中在算法開發和疊代上。

注:希望大家在參考環境搭建流程時,不要直接照搬照抄;多了解其中的原理,針對自己的機器,要能做出一些細節上的調整。

環境搭建

Linux 18.04

官方要求的作業系統是 Linux 18.04,我本地配置環境用的是 Linux 16.04,親測也能成功。

注:千萬不要在 macOS 或者 windows 上直接配置環境,因為本次比賽依賴的 pyproxima 隻提供了 linux 的安裝包。如果隻有 macOS 或者 windows,可以搭一個 linux 18.04 的虛拟機,或者使用 docker。

Java 1.8+

建議安裝 java1.8 (java 8)。

java 1.8+ 包括 java 8,java 9,······,java 14,我開始裝的是 java 14,出現了 kafka 2.3 不能啟動等異常,最後換成了 java 8。

  • 從 java 官網下載下傳 jdk-8u261-linux-x64.tar.gz
  • 解壓上面下載下傳的壓縮包:tar xzf jdk-8u261-linux-x64.tar.gz
  • 配置環境變量:
export JAVA_HOME=/data/gaohongjie1/usr/local/jdk1.8.0_261  # jdk-8u261-linux-x64.tar.gz 解壓後的路徑
export PATH=$JAVA_HOME/bin:$PATH           
30萬獎金等你拿!Apache Flink 極客挑戰賽入門指南(附Demo)
  • 運作 java -version 測試是否安裝成功

Python 3.7

如果系統中的 Python 恰好為 3.7,直接使用系統中的 Python 即可。

如果系統預設 Python 不是 3.7,則需要搭建自己的 Python 環境。我這裡用的是 Anaconda。

  1. create -n flink python=3.7 -y
  • 激活虛拟環境:
  1. activate flink
  • 運作 which python 測試是否激活成功
30萬獎金等你拿!Apache Flink 極客挑戰賽入門指南(附Demo)

Flink 1.11.0

  • 下載下傳壓縮包并解壓
wget https://archive.apache.org/dist/flink/flink-1.11.0/flink-1.11.0-bin-scala_2.11.tgz
tar xzf flink-1.11.0-bin-scala_2.11.tgz           
  • 配置環境變量
export FLINK_HOME=/data/gaohongjie1/usr/local/flink-1.11.0
export PATH=$PATH:$FLINK_HOME/bin           
  • 根據本機的資源(CPU、記憶體大小)修改 flink-1.11.0/conf/flink-conf.yaml
taskmanager.numberOfTaskSlots: 120
jobmanager.memory.process.size: 4096m
taskmanager.memory.process.size: 409600m 
taskmanager.memory.task.off-heap.size: 204800m           
  • 測試
  • Start: 運作 start-cluster.sh
  • Stop: 運作 stop-cluster.sh
30萬獎金等你拿!Apache Flink 極客挑戰賽入門指南(附Demo)

Pyflink 1.11.0

pip install apache-flink==1.11.0           

如果下載下傳速度太慢,可以考慮使用清華源或者阿裡源等。

使用清華源安裝:

pip install -i

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

apache-flink==1.11.0

Kafka 2.x

wget https://archive.apache.org/dist/kafka/2.3.0/kafka_2.11-2.3.0.tgz
tar xzf kafka_2.11-2.3.0.tgz           
export KAFKA_HOME=/data/gaohongjie1/usr/local/kafka_2.11-2.3.0
export PATH=$PATH:$KAFKA_HOME/bin           
  • 啟動 zookeeper
  • 選做:修改 kafka_2.11-2.3.0/config/zookeeper.properties 中的 dataDir
  • 運作 zookeeper-server-start.sh $KAFKA_HOME/config/zookeeper.properties
30萬獎金等你拿!Apache Flink 極客挑戰賽入門指南(附Demo)
  • 啟動 Kafka
  • 不要關閉 Zookeeper,另開一個 terminal 進行以下操作
  • 選做:修改 kafka_2.11-2.3.0/config/server.properties 中的 log.dirs
  • 運作:kafka-server-start.sh $KAFKA_HOME/config/server.properties
30萬獎金等你拿!Apache Flink 極客挑戰賽入門指南(附Demo)

AI Flow

wget https://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531800/ai_flow/ai_flow-0.1-py3-none-any.whl
pip install ai_flow-0.1-py3-none-any.whl 
# pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ai_flow-0.1-py3-none-any.whl           

Pyproxima

wget https://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531800/proxima-tianchi-master-668a0a87cb2a4aa1c68443b1ab05ee5a80008cb4.zip

unzip proxima-tianchi-master-668a0a87cb2a4aa1c68443b1ab05ee5a80008cb4.zip

pip install proxima-tianchi-master-668a0a87cb2a4aa1c68443b1ab05ee5a80008cb4/python/pyproxima2-2.2.0_lite-cp37-cp37m-linux_x86_64.whl           

■ Redis 5.0.5

  • 安裝
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar xzf redis-5.0.5.tar.gz
cd redis-5.0.5
make           
30萬獎金等你拿!Apache Flink 極客挑戰賽入門指南(附Demo)
  • 選做:make test 運作 redis 的單元測試
30萬獎金等你拿!Apache Flink 極客挑戰賽入門指南(附Demo)
export REDIS_HOME=/data/gaohongjie1/usr/local/redis-5.0.5
export PATH=$PATH:$REDIS_HOME/src           
  • 測試:運作 redis-server
30萬獎金等你拿!Apache Flink 極客挑戰賽入門指南(附Demo)

■ Flink 1.11.0

見上文「Flink 1.11.0」。

■ cluster serving

wget https://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531800/analytics_zoo_serving-0.9.0.dev0-py3-none-any.whl
pip install analytics_zoo_serving-0.9.0.dev0-py3-none-any.whl 
# pip install -i https://pypi.tuna.tsinghua.edu.cn/simple analytics_zoo_serving-0.9.0.dev0-py3-none-any.whl
mkdir cluster-serving
cd cluster-serving
cluster-serving-init # 這裡會下載下傳兩個jar檔案,生成config.yaml           
  • 修改 config.yaml
# 修改cluster-serving/config.yaml
model:
    path: /data/gaohongjie1/projects/tianchi-flink/package/python_codes/model           
export CS_PATH=/data/gaohongjie1/usr/local/cluster-serving
export SERVING_HTTP_PATH=$CS_PATH/analytics-zoo-bigdl_0.10.0-spark_2.4.3-0.9.0-20200812.210515-69-http.jar
export CLUSTER_SERVING_PATH=/tmp/cluster_serving           

Kafka-python

pip install kafka-python           

運作 Demo

export PYTHONPATH=/data/gaohongjie1/projects/tianchi_ai_flow/package/python_codes
export ENV_HOME=/data/gaohongjie1/projects/tianchi_ai_flow
export TASK_ID=000           
  • 修改 source.yaml
dataset_uri: /data/gaohongjie1/projects/tianchi_ai_flow/data_set/second_test_data.csv           
  • 修改 demo 代碼
  • tianchi_main.py: job_1_cluster_serving_channel = af.cluster_serving(model_info=train_model_meta, parallelism=4)
  • tianchi_executor.py: stream_env.set_parallelism(20)
  • demo中出現的所有 /usr/bin/python3 都改成自己的python路徑
  • 啟動依賴的服務
redis-server --daemonize yes
start-cluster.sh
zookeeper-server-start.sh -daemon $KAFKA_HOME/config/zookeeper.properties
kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties           
  • python /data/gaohongjie1/projects/tianchi_ai_flow/ai_flow_master.py
  • python /data/gaohongjie1/projects/tianchi_ai_flow/kafka-source.py
  • 這裡可能會報錯,報錯資訊包含 return '' % self.async 字樣。這是因為前面在執行 pip install ai_flow-0.1-py3-none-any.whl 的時候,AI Flow 的依賴包有kafka-1.3.5。而 kafka-1.3.5 與 python 3.7 是不相容的。
30萬獎金等你拿!Apache Flink 極客挑戰賽入門指南(附Demo)
  • 解決方案:先執行 pip uninstall kafka kafka-python,再執行 pip install kafka-python
  • python/data/gaohongjie1/projects/tianchi_ai_flow/package/python_codes/tianchi_main.py

總結

本文主要記錄了我搭建本地調試環境的流程,介紹了如何跑通 Demo。希望本文對大家能有所幫助,讓大家早日投入到算法的開發和疊代中去。