PyFlink 常見問題記錄

在此記錄 pyflink 運(yùn)行過程中遇到的問題以及解決方法驹溃。讓小伙伴們少走彎路疾棵。

Q1: No module named 'encodings'

Caused by: java.io.IOException: Failed to execute the command: venv.zip/venv/bin/python -c import pyflink;import os;print(os.path.join(os.path.abspath(os.path.dirname(pyflink.__file__)), 'bin'))
output: Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: initfsencoding: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'

問題分析:Python 環(huán)境的問題理郑,用 virtualenv 來管理虛擬環(huán)境時(shí)遇到坡疼。

問題解決:利用以下腳本(注意修改 pyflink 版本)控轿,使用 miniconda3 來管理虛擬環(huán)境即可解決缠诅。

wget https://ci.apache.org/projects/flink/flink-docs-release-1.11/downloads/setup-pyflink-virtual-env.sh
sh setup-pyflink-virtual-env.sh 1.11.2
source venv/bin/activate  # 激活虛擬環(huán)境

Q2: No module named 'encodings'

  File "main.py", line 2
SyntaxError: Non-ASCII character '\xe5' in file main.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
org.apache.flink.client.program.ProgramAbortException

問題分析:表面上是無法解析非 ASCII 碼哑蔫,實(shí)際上是因?yàn)楫?dāng)前的 python 版本錯(cuò)了钉寝。通過 flink run 來提交 Python 任務(wù)時(shí),F(xiàn)link 會(huì)調(diào)用 “python” 命令闸迷,要求 python 的版本為 3.5, 3.6 或者 3.7 中的一個(gè)嵌纲。

問題解決:激活虛擬環(huán)境,使得運(yùn)行 python -V 時(shí)顯示的 python 版本為 3.5腥沽,3.6 或 3.7

Q3: Could not find any factory for identifier 'kafka'

Caused by: org.apache.flink.table.api.ValidationException: Could not find any factory for identifier 'kafka' that implements 'org.apache.flink.table.factories.DynamicTableSourceFactory' in the classpath.org.apache.flink.client.program.ProgramAbortException

問題分析:沒有指定 kafka jar 文件

問題解決:在 flink run 的時(shí)候逮走,加入?yún)?shù) -j flink-sql-connector-kafka_2.11-1.11.2.jar ,具體 jar 包的下載路徑見 Apache Kafka SQL Connector今阳,根據(jù) kafka 版本選擇 jar 包來下載师溅。

Q4: The parallelism must be a positive number: yarch

The parallelism must be a positive number: yarch

問題分析:并行度要設(shè)置為正數(shù)

問題解決:在 flink run 的時(shí)候,加入?yún)?shù) -p 1盾舌。但問題可能出在 flink 上墓臭。直接部署的 flink 沒有問題,但是集成到 CDH 后妖谴,flink 的配置參數(shù)發(fā)生了變化窿锉,導(dǎo)致無法以簡單的 flink run 的方式來運(yùn)行

Q5: No manifest found in jar file '/xxxx/venv.zip'

org.apache.flink.client.program.ProgramInvocationException: No manifest found in jar file '/xxxx/venv.zip'. The manifest is need to point to the program's main class.

問題分析:沒有找到 manifest 文件來指定程序的 main class。

問題解決:同 Q4,可能是 flink 沒有正確安裝好榆综。

Q6: Neither a 'Main-Class', nor a 'program-class' entry was found in the jar file.

org.apache.flink.client.program.ProgramInvocationException: Neither a 'Main-Class', nor a 'program-class' entry was found in the jar file.

問題分析:jar 包里沒有指定 'Main-Class' 或 'program-class'

問題解決:同 Q4妙痹,可能是 flink 沒有正確安裝好。

Q7:java.net.MalformedURLException: no protocol:

py4j.protocol.Py4JJavaError: An error occurred while calling None.java.net.URL.
: java.net.MalformedURLException: no protocol: 

問題分析:no protocol鼻疮,沒有指定通信協(xié)議異常怯伊。

問題解決:看看報(bào)錯(cuò)所在的行,如果是 URL 判沟,檢查是否缺少 http:// 耿芹;如果是路徑,檢查是否缺少 file://挪哄。

Q8:Method registerFunction(...) does not exist

py4j.protocol.Py4JError: An error occurred while calling o4.registerFunction. Trace:
org.apache.flink.api.python.shaded.py4j.Py4JException: Method registerFunction([class java.lang.String, class com.flink.udf.TopN]) does not exist

問題分析:registerFunction 函數(shù)不存在吧秕,看源碼 registerFunction 是 TableEnvironment._j_env 對象的方法,懷疑是 _j_env 沒有正確定義迹炼。_j_env 應(yīng)該是指 java 運(yùn)行的環(huán)境砸彬。

問題解決:在創(chuàng)建 TableEnvironment 的時(shí)候,再傳入環(huán)境變量斯入。下面舉例說明砂碉。

原來的創(chuàng)建方式:

# 流處理環(huán)境
from pyflink.table import StreamTableEnvironment, EnvironmentSettings

env_settings = EnvironmentSettings.new_instance().in_streaming_mode().use_blink_planner().build()
t_env = StreamTableEnvironment.create(environment_settings=env_settings)

改正后的創(chuàng)建方式,注意 create 函數(shù)里的第一個(gè)入?yún)榍懊娉跏蓟玫?env 變量:

# 流處理環(huán)境
from pyflink.datastream import StreamExecutionEnvironment
from pyflink.table import StreamTableEnvironment, EnvironmentSettings

env = StreamExecutionEnvironment.get_execution_environment()
env_settings = EnvironmentSettings.new_instance().in_streaming_mode().use_blink_planner().build()
t_env = StreamTableEnvironment.create(env, environment_settings=env_settings)

對于批處理同理:

from pyflink.dataset import ExecutionEnvironment

env = ExecutionEnvironment.get_execution_environment()
...

Q9:Caused by: org.apache.flink.util.FlinkException: The TaskExecutor is shutting down.

Caused by: org.apache.flink.util.FlinkException: The TaskExecutor is shutting down.
        at org.apache.flink.runtime.taskexecutor.TaskExecutor.onStop(TaskExecutor.java:404)
        at org.apache.flink.runtime.rpc.RpcEndpoint.internalCallOnStop(RpcEndpoint.java:216)

問題分析:TaskExecutor 沒有在運(yùn)行狀態(tài)刻两≡霾洌可以運(yùn)行 jps 查看是否有 TaskManagerRunner 。

問題解決:重啟 Flink磅摹。

Q10:Caused by: org.apache.beam.vendor.guava.v26_0_jre.com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalStateException: Process died with exit code 0

org.apache.flink.runtime.JobException: Recovery is suppressed by NoRestartBackoffTimeStrategy
...
Caused by: java.lang.RuntimeException: Failed to create stage bundle factory! INFO:root:Initializing python harness: xxxx/site-packages/pyflink/fn_execution/boot.py --id=1-1 --logging_endpoint=localhost:58957 --artifact_endpoint=localhost:58958 --provision_endpoint=localhost:58959 --control_endpoint=localhost:58956
...
    raise _InactiveRpcError(state)
grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
    status = StatusCode.CANCELLED
    details = "Server sendMessage() failed with Error"
    debug_error_string = "{"created":"@1605690803.729786000","description":"Error received from peer ipv6:[::1]:58959","file":"src/core/lib/surface/call.cc","file_line":1062,"grpc_message":"Server sendMessage() failed with Error","grpc_status":1}"
>
...
Caused by: org.apache.beam.vendor.guava.v26_0_jre.com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalStateException: Process died with exit code 0
...
Caused by: java.lang.IllegalStateException: Process died with exit code 0
...

問題分析:發(fā)送消息給 RPC 服務(wù)失敗滋迈,具體原因不知道。

問題解決:重新提交 Flink 作業(yè)户誓。

Q11:Process died with exit code 127

問題背景:我想要在流處理作業(yè)的 UDF 里使用某個(gè)依賴項(xiàng)(如 faker )饼灿,于是編寫了 requirements.txt 并且使用如下的 pip install 命令下載該依賴項(xiàng)的安裝包到 cached_dir 目錄下,如上圖所示帝美,包含了 4 個(gè)文件碍彭。完成后,以 yarn-cluster 模式提交作業(yè)到集群上证舟,但是出現(xiàn)了下面的問題硕旗,看作業(yè)的運(yùn)行狀態(tài)是 finished (流處理作業(yè)不應(yīng)該會(huì) finished),最終狀態(tài)是 failed女责。

pip download -d cached_dir -r requirements.txt --no-binary :all:
org.apache.flink.runtime.JobException: Recovery is suppressed by NoRestartBackoffTimeStrategy
...
java.lang.RuntimeException: Failed to create stage bundle factory!
...
Caused by: org.apache.beam.vendor.guava.v26_0_jre.com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalStateException: Process died with exit code 127
...
Caused by: java.lang.IllegalStateException: Process died with exit code 127
...

問題分析:通過控制變量法漆枚,定位到問題在于 python 依賴包〉种可以看到在 cached_dir 里面有一個(gè) python 原生自帶的包 python-deteutil 墙基,可能是在安裝這個(gè)包的時(shí)候發(fā)生了沖突(猜測)软族。

問題解決:把 python-deteutil-2.8.1.tar.gz 刪除后就沒有問題了。最終 cached_dir 只包含了 3 個(gè)必備的安裝包残制。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末立砸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子初茶,更是在濱河造成了極大的恐慌颗祝,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恼布,死亡現(xiàn)場離奇詭異螺戳,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)折汞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門倔幼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人爽待,你說我怎么就攤上這事损同。” “怎么了鸟款?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵膏燃,是天一觀的道長。 經(jīng)常有香客問我欠雌,道長蹄梢,這世上最難降的妖魔是什么疙筹? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任富俄,我火速辦了婚禮,結(jié)果婚禮上而咆,老公的妹妹穿的比我還像新娘霍比。我一直安慰自己,他們只是感情好暴备,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布悠瞬。 她就那樣靜靜地躺著,像睡著了一般涯捻。 火紅的嫁衣襯著肌膚如雪浅妆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天障癌,我揣著相機(jī)與錄音凌外,去河邊找鬼。 笑死涛浙,一個(gè)胖子當(dāng)著我的面吹牛康辑,可吹牛的內(nèi)容都是我干的摄欲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼疮薇,長吁一口氣:“原來是場噩夢啊……” “哼胸墙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起按咒,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對情侶失蹤迟隅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后励七,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玻淑,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年呀伙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了补履。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剿另,死狀恐怖箫锤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情雨女,我是刑警寧澤谚攒,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站氛堕,受9級(jí)特大地震影響馏臭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜讼稚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一括儒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锐想,春花似錦帮寻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至藕帜,卻和暖如春烫罩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背洽故。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工贝攒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人收津。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓饿这,卻偏偏與公主長得像浊伙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子长捧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容