我正在使用Docker Apache airflow VERSION 1.9.0-2(https://github.com/puckel/docker-airflow).
调度程序生成大量日志,文件系统将快速耗尽空间,因此我尝试以编程方式删除由airflow创建的调度程序日志,可在调度程序容器中找到(/ usr/local/airflow/logs/scheduler )
我已经设置了所有这些维护任务:https: //github.com/teamclairvoyant/airflow-maintenance-dags
但是,这些任务仅删除工作服务器上的日志,而调度程序日志位于调度程序容器中.
我还设置了远程日志记录,将日志发送到S3,但正如本文中提到的删除气流任务日志中所述,此设置不会阻止气流写入本地计算机.
此外,我还尝试在worker和scheduler之间创建一个共享命名卷,如此处所述Docker Compose - 在多个容器之间共享命名卷.但是,我在worker中收到以下错误:
ValueError: Unable to configure handler 'file.processor': [Errno 13] Permission denied: '/usr/local/airflow/logs/scheduler'
和调度程序中的以下错误:
ValueError: Unable to configure handler 'file.processor': [Errno 13] Permission denied: '/usr/local/airflow/logs/scheduler/2018-04-11'
那么,人们如何删除调度程序日志?
docker docker-compose airflow docker-volume airflow-scheduler
任务:我将运行一个ETL作业,该作业将从GCS中提取TIFF图像,使用OpenCV + Tesseract等开源计算机视觉工具的组合将这些图像转换为文本,并最终将数据加载到BigQuery中
问题:我正在尝试使用Dataflow来执行ETL作业,因为我有数百万个图像(每个图像是一个单独的文件/ blob),我想扩展到数百台机器.但是,我遇到了关于下载图像的最佳方法的Dataflow(将在下面更详细地描述)的一些问题.
问题:最终我试图确定:
1)数据流是否是执行此操作的最佳解决方案?我考虑过的替代方案是在大型机器上运行多线程作业.我还应该考虑其他替代方案吗?
2)如果数据流是最佳解决方案,那么我应该如何专门处理下载数百万张图像(以便我可以通过转换运行它们)?
技术挑战:
以下帖子推荐的解决方案建议beam.io.gcp.gcsio.GcsIO().open(filepath, 'r')在DoFn中使用从GCS下载图像.
我试图沿着这条路走下去,beam.io.gcp.gcsio.GcsIO().open(filepath, 'r')但是,我无法打开图像.这个问题在这里描述:IO.BufferReader问题.
使用时,DirectRunner我可以使用此客户端api下载图像文件from google.cloud import storage,我可以打开并预处理图像没问题.但是,在使用数据流运行器时,我遇到了依赖性问题AttributeError: 'module' object has no attribute 'storage'.
话虽如此,如果Dataflow是最佳解决方案,那么下载和处理数百万张图像的最佳方法是什么?
问题:在Spark本地模式下初始化SparkContext后,我无法观察到Log4J2的异步功能。
SBT中的Log4j2依赖关系:
"com.lmax" % "disruptor" % "3.3.5",
"org.apache.logging.log4j" % "log4j-api" % "2.8.2",
"org.apache.logging.log4j" % "log4j-core" % "2.8.2",
"org.apache.logging.log4j" %% "log4j-api-scala" % "2.8.2"
Run Code Online (Sandbox Code Playgroud)
Log4j2配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug">
<Appenders>
<Console name="Console-Appender" target="SYSTEM_OUT">
<PatternLayout>
<pattern>
[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
</pattern>>
</PatternLayout>
</Console>
<File name="File-Appender" fileName="logs/xmlfilelog.log" >
<PatternLayout>
<pattern>
[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
</pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Logger name="guru.springframework.blog.log4j2async" level="debug">
<AppenderRef ref="File-Appender"/>he preceding c
</Logger>
<Root level="debug">
<AppenderRef ref="Console-Appender"/>
</Root>
</Loggers>
Run Code Online (Sandbox Code Playgroud)
我在IntelliJ中设置以下系统属性
-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
Run Code Online (Sandbox Code Playgroud)
为了测试异步行为,在初始化SparkContext之前和之后,我运行了以下代码段:
val …Run Code Online (Sandbox Code Playgroud) 我正在努力从 Python 类的实例中正确打开 TIFF 图像io.BufferedReader。我使用下面的库从 GCS 路径下载图像,但我似乎无法使用传统工具打开图像。
# returns the <_io.BufferedReader>
file = beam.io.gcp.gcsio.GcsIO().open("<GCS_PATH>", 'r')
from PIL import Image
img = Image.open(file.read()) <---- Fails with "TypeError: embedded NUL character"
img = Image.open(file.raw) <--- Fails when any operations are performed with "IOError(err)"
Run Code Online (Sandbox Code Playgroud)
除了 PIL 之外,我对其他库持开放态度。
更新
以下也失败:
img = Image.open(file)
Run Code Online (Sandbox Code Playgroud)
它失败并出现 IOError,指出tempfile.tif: Cannot read TIFF header.
python opencv image python-imaging-library google-cloud-dataflow
python ×2
airflow ×1
apache-beam ×1
apache-spark ×1
docker ×1
image ×1
log4j ×1
log4j2 ×1
opencv ×1
sbt ×1