问题标签 [google-cloud-composer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - DAG 在 Google Cloud Composer 网络服务器上不可点击,但在本地 Airflow 上运行良好
我正在使用带有图像版本和 Python 2.7 的Google Cloud Composercomposer-0.5.3-airflow-1.9.0
(Google Cloud Platform 上的托管 Airflow) ,我遇到了一个奇怪的问题:导入我的 DAG 后,它们无法从 Web UI 中点击(并且没有按钮“Trigger DAG”,“Graph view”,...),而在运行本地 Airflow 时,所有这些都可以完美运行。
即使 Composer 上的网络服务器无法使用,我的 DAG 仍然存在。我可以使用 CLI ( list_dags
) 列出它们、描述它们 ( list_tasks
) 甚至触发它们 ( trigger_dag
)。
重现问题的最小示例
我用来重现该问题的最小示例如下所示。使用钩子(这里GoogleCloudStorageHook
是 )非常重要,因为 Composer 上的错误发生在使用钩子时。最初,我使用的是自定义钩子(在自定义插件中),并且面临同样的问题。
基本上在这里,该示例列出了 GCS 存储桶 ( my-bucket
) 中的所有条目,并为每个以 开头的条目生成一个 DAG my_dag
。
Cloud Composer 上的结果
将此文件导入 Composer 后,结果如下(我有 4 个以 in 开头的文件my_dag
)my-bucket
:
正如我所解释的,DAG 不可点击,“Recent Tasks”和“DAG Runs”列将永远加载。每个 DAG 名称旁边的“信息”标记显示:This DAG isn't available in the webserver DagBag object. It shows up in this list because the scheduler marked it as active in the metadata database
。
当然刷新是没有用的,直接URL( https://****.appspot.com/admin/airflow/graph?dag_id=my_dag_1
)访问DAG Graph View的时候报错:DAG "my_dag_1" seems to be missing.
本地气流的结果
在本地 Airflow 上导入脚本时,网络服务器工作正常:
一些测试
如果我entries = gcs_conn.list(bucket, prefix=prefix)
用硬编码值替换该行entries = [u'my_dag_1', u'my_dag_2', u'my_dag_3', u'my_dag_4']
,那么 DAG 在 Composer Web UI 上是可点击的(并且“链接”列上的所有按钮都会出现)。看来,从我对最初问题所做的其他测试来看,从钩子调用方法(不仅仅是初始化钩子)会导致问题。当然,Composer 中的 DAG 在简单示例上正常工作(不涉及挂钩方法调用)。
我不知道为什么会这样,我也检查了日志(通过设置logging_level = DEBUG
)airflow.cfg
但看不出有什么问题。我怀疑网络服务器中存在错误,但我无法获得重要的堆栈跟踪。来自 Composer(托管在 App Engine 上)的网络服务器日志不可用,或者至少我没有找到访问它们的方法。
是否有人在使用 Composer Web UI 时遇到过相同或类似的问题?我认为问题出在钩子的使用上,但我可能错了。这可能只是一个副作用。老实说,在测试了这么多东西后,我迷失了。如果有人可以帮助我,我会很高兴。谢谢!
更新
按照本指南在 Kubernetes 上部署自我管理的网络服务器时:https ://cloud.google.com/composer/docs/how-to/managing/deploy-webserver ,我的 DAG 可以从这个自我管理的网络服务器中点击。
google-kubernetes-engine - Cloud Composer 将结构化日志记录到 Stackdriver
我想知道将结构化日志记录发送到 Stackdriver 的合适方法对于 Cloud Composer 部署是什么。我已经查看了用于 python 调用插件或 DAG 的google-cloud-logging模块,但看起来这适用于尚未部署日志记录的项目。
我已按照本指南将我的记录器的输出修改为 stdin / stderr 为 json 格式,输出类似于:{"message": "test error", "severity": "ERROR"}
但是,在检查 Stackdriver 日志时,它不会被解析为 JSON,而是按原样放置在消息正文中。
下面是它在 Stackdriver UI 中的样子(我用泛型替换了敏感信息。消息字符串中 json 后面的新行是它在 Stackdriver 控制台中的样子)。
有没有人使用上述或其他方法成功地将结构化日志从 Composer 发送到 Stackdriver?
python - 如何在 Google Composer 上重新启动气流服务器?
当我需要在本地重新启动网络服务器时,我会这样做:
如何在 Google Composer 上执行此操作?我在控制台中看不到重新启动服务器的选项。
airflow - 等待触发的 DAG
我有一个控制 dag,它触发了另外两个 dag。这两个 dag 应该顺序运行,而不是并行运行。我尝试解决这样的问题:
我的问题是触发的 DAG 确实有一个特定的execution_date
(具体到秒,而不是 00:00 的分钟和秒)。DagSensor 现在使用execution_time
控制 dag 的 来戳从属 dag,因此传感器永远不会被触发,因为从属 dag 具有不同的execution_time
.
我的问题:
- 该
Trigger->Sensor->Trigger->Sensor
模式是顺序触发 DAG 的正确方法吗? 如果是:我如何获得
a)
execution_date
由控制器 DAG 触发后的依赖 DAG 中的任何一个(然后可以作为参数传递给传感器)或者
b)
execution_date
依赖 DAG 与控制 DAG 相同
如果可能,我不想查询元数据数据库以获取依赖 DAG 运行的 execution_time。
google-cloud-platform - 寻找有关云作曲家稳定版本的信息?
目前 Cloud Composer 处于 Beta 版本,我们希望在我们的生产环境中使用它。有关其稳定发布时间表的任何信息以及何时提供全面支持?
google-cloud-composer - cloud composer spark提交现有Hadoop集群
几天前我正在尝试使用云作曲家但是,我有一个任务是使用纱线模式将火花提交到我们现有的 Hadoop 集群
云作曲家可以使用吗?
google-cloud-composer - 云作曲家构建日志,它们在哪里?
我正在尝试按照本指南在云作曲家上安装 pypi 依赖项。
构建失败,错误消息显示:
但是,我找不到构建日志的位置。有人知道答案吗?谢谢
仅供参考,这是我要安装的软件包列表(作为requirements.txt
文件):
编辑
这是来自 Cloud Composer 的实际错误消息:
google-cloud-composer - Google Composer:找不到 dag_id
我动态地创建了一个 dag 集合(对所有人使用相同的 .py)。还有一个build-DAG
我无法运行:
对于这个 dag,我可以看到以前的日志、代码和 UI 中的所有内容,但我无法运行它。知道如何调试吗?重新启动作曲家实例可能有用吗?
动态创建的其余 dag 工作正常。
我正在使用与此类似的东西来创建 dag: https ://gist.github.com/tmarthal/edaeae7f6f8780dc53887a16b7b20f205
谢谢指教。教育
更新:我正在使用 composer-0.5.1-airflow-1.9.0
2018 年 8 月 2 日更新:我迁移到 composer-1.0.0-airflow-1.9.0 并且仍然发生