我現在遇到這個問題一段時間發生的每次運行觸發。我發現兩件事:
1)如果我運行腳本集群上不活躍和集群由預定的觸發激活(不是手動!)這不會發生和日誌工作正常,並保存到Azure blob存儲。
2)第一預定的觸發連續運行的集群上給一個好的日誌,任何觸發後,導致大量的錯誤信息為每個日誌和實際日誌文件沒有保存/更新後這是第一次觸發。
我用下麵的代碼來阻擋任何額外的日誌汙染我的日誌:
logging.getLogger (py4j.java_gateway) .setLevel (logging.ERROR) logging.getLogger (py4j) .setLevel (logging.ERROR) logging.getLogger (pyspark) .setLevel (logging.ERROR)日誌記錄。basicConfig(=日誌級別。信息,格式= " % (asctime) s [% (levelname) s]: %(消息)年代”,datefmt =“Y % - % - % d % H: % m: % s % z”,處理程序= [logging.StreamHandler (), TimedRotatingFileHandler(文件名= LOGGING_DIR /”測試。日誌”=“H”,間隔= 1,backupCount = 5,編碼= " utf - 8 ")])記錄器= logging.getLogger ()
但是每一行記錄結果在下麵的錯誤消息類似於1:
2023-03-13 19:46:23 + 0000[信息]:- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -本地運行:假- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -日誌錯誤- - -回溯(最近的電話最後):文件“/ usr / lib / python3.8 /日誌/ __init__。py”, 1089行,在發出self.flush()文件“/ usr / lib / python3.8 /日誌/ __init__。py”, 1069行,在衝洗self.stream.flush () OSError: [Errno 95]操作不支持調用堆棧:文件”/磚/ python_shell /腳本/ PythonShell。py”, 29日,<模塊> launch_process()文件”/磚/ python_shell /腳本/ PythonShellImpl。py”, 1234行,在launch_process shell.executor.run()文件”/磚/ python_shell /腳本/ PythonShellImpl。py”, 268行,在運行self.shell.shell.run_cell (cmd, command_id store_history = True)文件”/磚/ python_shell /腳本/ PythonShellImpl。py”, 756行,在run_cell超級(IPythonShell,自我).run_cell (raw_cell store_history,沉默,shell_futures)文件“/磚/ python / lib / python3.8 /網站/ IPython /核心/ interactiveshell。py”, 2894行,在run_cell結果=自我。_run_cell(文件“/磚/ python / lib / python3.8 /網站/ IPython /核心/ interactiveshell。py”, 2940行,在_run_cell返回運動員(重複)文件“/磚/ python / lib / python3.8 /網站/ IPython /核心/ async_helpers。py”, 68行,在_pseudo_sync_runner coro.send(沒有)文件“/磚/ python / lib / python3.8 /網站/ IPython /核心/ interactiveshell。py”, 3165行,在run_cell_async has_raised =等待self.run_ast_nodes (code_ast.body cell_name,文件“/磚/ python / lib / python3.8 /網站/ IPython /核心/ interactiveshell。py”, 3357行,在run_ast_nodes如果(等待self.run_code(代碼,結果,async_ =容易)):文件”/磚/ python / lib / python3.8 /網站/ IPython /核心/ interactiveshell。py”, 3437行,run_code exec (code_obj,自我。user_global_ns self.user_ns)文件<命令- 2200642500323014 >,第107行,在<模塊> logger.info (“{: - ^ 100}”.format (f在本地運行:{RUN_LOCAL}))的信息:“- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -本地運行:錯誤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -”參數:()
摘要:日誌這些汙染”——日誌錯誤——“不保存信息和日誌本身。日誌隻適用如果集群活動,激活一個預定的觸發,然後被釋放了。在連續運行的集群,隻有第一個計劃引發的結果在正常運行日誌記錄和保存了文件,但任何除此之外不工作。
如果有人能幫我解決這個問題,那就太好了。我有一些大型項目運行和沒有任何日誌我的公司會不高興。日誌模塊和腳本本地運行時工作。
@Aaron Kaijser:
你看到的錯誤消息顯示,有一個問題與文件處理程序用於寫日誌。具體地說,它看起來像流處理器用來寫日誌控製台是可以的,但是
TimedRotatingFileHandler時遇到一個問題試圖寫入日誌文件。這個錯誤的一個可能原因是,日誌文件的路徑不是從磚集群訪問。檢查日誌文件的路徑是正確的,磚集群允許寫入指定的位置。
另一個可能性是日誌文件被另一個進程被鎖,防止TimedRotatingFileHandler寫作。這可能發生,如果另一個進程打開日誌文件,例如。你可以試著修改日誌配置處理程序使用不同的文件,如文件句柄,看看這個問題仍然存在。
最後,值得注意的是,寫文件係統不是一個推薦辦法登錄數據磚。磚提供了一種日誌API,您可以使用對集群的司機日誌,日誌消息存儲在一個中央位置,從磚可以訪問UI。使用磚日誌API,您可以替換文件處理程序在你的日誌配置數據磚特定的處理程序,如databricks.logging.JsonFileHandler。