docker - 无法在 Airflow UI 中编辑 Spark_default

标签 docker apache-spark airflow airflow-scheduler

我正在尝试使用以下存储库运行 Airflow 和 Spark 的容器化应用程序, https://github.com/cordon-thiago/airflow-spark

正如此处步骤中给出的,我需要编辑 Spark_default 连接以便将我的 DAG 提交到 Spark,但是我似乎无法做到这一点。这就是我尝试这样做时所看到的,

                          ____/ (  (    )   )  \___
                         /( (  (  )   _    ))  )   )\
                       ((     (   )(    )  )   (   )  )
                     ((/  ( _(   )   (   _) ) (  () )  )
                    ( (  ( (_)   ((    (   )  .((_ ) .  )_
                   ( (  )    (      (  )    )   ) . ) (   )
                  (  (   (  (   ) (  _  ( _) ).  ) . ) ) ( )
                  ( (  (   ) (  )   (  ))     ) _)(   )  )  )
                 ( (  ( \ ) (    (_  ( ) ( )  )   ) )  )) ( )
                  (  (   (  (   (_ ( ) ( _    )  ) (  )  )   )
                 ( (  ( (  (  )     (_  )  ) )  _)   ) _( ( )
                  ((  (   )(    (     _    )   _) _(_ (  (_ )
                   (_((__(_(__(( ( ( |  ) ) ) )_))__))_)___)
                   ((__)        \\||lll|l||///          \_))
                            (   /(/ (  )  ) )\   )
                          (    ( ( ( | | ) ) )\   )
                           (   /(| / ( )) ) ) )) )
                         (     ( ((((_(|)_)))))     )
                          (      ||\(|(|)|/||     )
                        (        |(||(||)||||        )
                          (     //|/l|||)|\\ \     )
                        (/ / //  /|//||||\\  \ \  \ _)
-------------------------------------------------------------------------------
Node: 5fce0b10ba4b
-------------------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/usr/local/lib/python3.6/site-packages/flask_admin/base.py", line 69, in inner
    return self._run_view(f, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/flask_admin/base.py", line 368, in _run_view
    return fn(self, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/flask_admin/model/base.py", line 2138, in edit_view
    form = self.edit_form(obj=model)
  File "/usr/local/lib/python3.6/site-packages/flask_admin/model/base.py", line 1340, in edit_form
    return self._edit_form_class(get_form_data(), obj=obj)
  File "/usr/local/lib/python3.6/site-packages/wtforms/form.py", line 208, in __call__
    return type.__call__(cls, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/flask_admin/form/__init__.py", line 16, in __init__
    super(BaseForm, self).__init__(formdata=formdata, obj=obj, prefix=prefix, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/wtforms/form.py", line 274, in __init__
    self.process(formdata, obj, data=data, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/wtforms/form.py", line 126, in process
    if obj is not None and hasattr(obj, name):
  File "/usr/local/lib/python3.6/site-packages/sqlalchemy/orm/attributes.py", line 356, in __get__
    retval = self.descriptor.__get__(instance, owner)
  File "/usr/local/lib/python3.6/site-packages/airflow/models/connection.py", line 212, in get_extra
    return fernet.decrypt(bytes(self._extra, 'utf-8')).decode()
  File "/usr/local/lib/python3.6/site-packages/cryptography/fernet.py", line 199, in decrypt
    raise InvalidToken
cryptography.fernet.InvalidToken

我真的不知道 FERNET_KEY 是什么以及它如何在这里应用。我到底该如何设置才能运行我的 Spark 操作?

UDPATE

在 Airflow UI 的“配置”选项卡下,我似乎配置了 fernet_key, enter image description here

据我所知,这是通过以下命令生成的,

: "${AIRFLOW__CORE__FERNET_KEY:=${FERNET_KEY:=$(python -c "from cryptography.fernet import Fernet; FERNET_KEY = Fernet.generate_key().decode(); print(FERNET_KEY)")}}"

然后导出所有变量,

export \
  AIRFLOW__CELERY__BROKER_URL \
  AIRFLOW__CELERY__RESULT_BACKEND \
  AIRFLOW__CORE__EXECUTOR \
  AIRFLOW__CORE__FERNET_KEY \
  AIRFLOW__CORE__LOAD_EXAMPLES \
  AIRFLOW__CORE__SQL_ALCHEMY_CONN \

这似乎与文档中提供的内容一致。这里有什么问题吗?

最佳答案

您需要生成一个新的 fernet key 并将其添加到您的 Airflow 配置中。 https://airflow.apache.org/docs/apache-airflow/stable/security/secrets/fernet.html

正如链接所示,fernet key 是 Airflow 用于加密存储在连接信息中的密码的 key 。在上述情况下,fernet key 从未设置,因此出现错误 - 无效 token 。

Fernet 是对称加密的一种实现。但这超出了本问题的范围!

关于docker - 无法在 Airflow UI 中编辑 Spark_default,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69722062/

相关文章:

scala - 在 spark scala 的数据框中为每个组采样不同数量的随机行

hadoop - Spark SQL无法完成大量分片的Parquet数据写入

python - 安装 apache-airflow : "Could not build wheels for setproctitle which use PEP 517 and cannot be installed directly" 时出错

mysql - 在 Jenkins 中使用 docker exec 运行 October artisan 命令时连接被拒绝

docker - 使用自签名证书将本地 Docker 镜像推送到私有(private)存储库

macos - 我可以在Mac上运行具有自己的外部和主机可访问IP地址的Docker容器吗

python - 使用 Airflow UI 执行整个 DAG

apache - 如何将端口80上的所有请求重定向到docker,然后将其传递到我的Web服务器?

r - SparkR 合并而不创建重复列

python - 如何将私有(private) python 包添加到 cloud composer 的要求中?