[GitHub Actions]WorkflowをUbuntu-20.04で動作させる場合のライブラリ依存バージョンについてAirflow + Glueを使う構成にて確認してみた

GitHub ActionsのWorkflowをubuntu-20.04で動作させる場合に、ライブラリのバージョンアップで現状でも対応できるか検証してみました。細かいエラー等でより高いバージョンを求められることもありつつ、現状維持という結論に至りました……。
2020.12.03

はじめに

先日ActionsのWorkflowにて、OSライフサイクル更新によるubuntu-latestが18.04から20.04に移行するための準備期間に入ったという記事を書きました。

その後、業務にて使っているWorkflowをubuntu-18.04に固定しましたが、20.04へ果たしてスムーズに移行できるものか気になり、20.04環境ベースでの設定を試みました。

結果としては、プロジェクトで利用しているAWSサービスの都合にて現状維持という結論になりそうです。確認の過程とバージョンの依存状況についてまとめました。

調査対象言語及びライブラリ

今回の環境で18.04から20.04に更新が必要となるライブラリと更新後最低バージョンは以下の通り。

ライブラリ バージョン
Python3 3.8.2
AWSCLI 2
Java 8
11

この3つと関連がある、担当プロジェクトのライブラリやサービスで主なものは以下の通り。

  • Spark
  • Apache AirFlow
  • AWS Glue

それらライブラリのバージョンを並べると以下のようになります。

AWS Glue Apache AirFlow Spark Python3 AWSCLI Java Ubuntu
1.0 1.10.13 2.4.3 3.7 1.18 8 18.04
2.0 1.10.13 2.4.3 3.7 2.0 8
11
18.04
- 1.10.13 3.0.1 3.8.3 2.0 11 20.04

AWS Glueが依存するSparkバージョンが元で、現時点ではubuntu-20.04には上げられない形になります。

表中のGlue未対応枠で、Python3のバージョンが3.8.2ではなく3.8.3となっている点や、Sparkが3.0.1となっている点については以下で触れます。

Spark 3の動作バージョン

Spark 3.0.0 ではPython 3.6はサポート対象外で、Ubuntu 20.04 はPython 3.8.2以降です。よって、最低でも3.0.0以上となります。Scala 2.12.xに対応するため、3.0.1としました。

Spark runs on Java 8/11, Scala 2.12, Python 2.7+/3.4+ and R 3.5+. Java 8 prior to version 8u92 support is deprecated as of Spark 3.0.0. Python 2 and Python 3 prior to version 3.6 support is deprecated as of Spark 3.0.0. For the Scala API, Spark 3.0.1 uses Scala 2.12. You will need to use a compatible Scala version (2.12.x).

Pythonの動作バージョン

Ubuntu 20.04では3.8.2ですが、Apache Airflowが依存するライブラリのうちpsutil3.8.2ではインストールができません。

Mac上での動作ですが、以下のエラーとなります。

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/machine/types.h:37:2: error: architecture not supported

</p>
<pre><code>[pipenv.exceptions.InstallError]: Collecting psutil==5.7.3
[pipenv.exceptions.InstallError]:   Using cached psutil-5.7.3.tar.gz (465 kB)
[pipenv.exceptions.InstallError]: Building wheels for collected packages: psutil
[pipenv.exceptions.InstallError]:   Building wheel for psutil (setup.py): started
[pipenv.exceptions.InstallError]:   Building wheel for psutil (setup.py): finished with status 'error'
[pipenv.exceptions.InstallError]:   ERROR: Command errored out with exit status 1:
</code></pre>
<p>

以下のIssueについていたコメントに沿って、対策として上げられていたことを実際にやってみました。結果、Pythonのバージョンを3.8.3へ上げることでインストールできました。

When I installed anaconda, it comes with python 3.8.3. Looks like this is fixed and I could install psutils in conda environment. I also tried installing latest python i.e. 3.9. psutil installation is successful here. So, I think this issue is only for python 3.8.2. Since later version of python exists, you can close this issue.

Apache Airflowのバージョン

単純にsetup.pyに因むトラブルが発生しないバージョンを挙げています。

AWS Glueのバージョン

Glueが対応しているSparkのバージョンは、現時点では以下の通り。

GlueがSpark3に対応した時点で、多少問題は発生するかもしれませんが、Ubuntu-20.04に更新できると思われます。

あとがき

Ubuntu-20.04への更新は、依存状況次第でライブラリをより高いバージョンに上げる必要が出てきます。今回見送った要因は以下の通り。

  • Ubuntu-20.04ではPython 3.8.2以降となる
  • Spark3はPython3.7以降が候補
  • AWS GlueがSpark3に対応していない

上記3点でひとまずは18.04での固定となりましたが、Glueのアップデート次第では再度検討してみたいと思います。

参考リンク