記事ディレクトリ
12: タイミングスケジューリングの使用
-
目標:タイミング スケジューリングの使い方をマスターする
-
埋め込む
-
http://airflow.apache.org/docs/apache-airflow/stable/dag-run.html
-
方法 1: 組み込み
with DAG( dag_id='example_branch_operator', default_args=args, start_date=days_ago(2), schedule_interval="@daily", tags=['example', 'example2'], ) as dag:
-
方法 2: datetime.timedelta オブジェクト
timedelta(minutes=1) timedelta(hours=3) timedelta(days=1)
with DAG( dag_id='latest_only', schedule_interval=dt.timedelta(hours=4), start_date=days_ago(2), tags=['example2', 'example3'], ) as dag:
-
方法 3: Crontab 式
-
Linux Crontab の使用法と一致
with DAG( dag_id='example_branch_dop_operator_v3', schedule_interval='*/1 * * * *', start_date=days_ago(2), default_args=args, tags=['example'], ) as dag:
分钟 小时 日 月 周 00 00 * * * 05 12 1 * * 30 8 * * 4
-
-
-
まとめ
- タイミング スケジューリングの使い方をマスターする
13: エアフロー共通コマンド
-
目標: AirFlow の一般的なコマンドを理解する
-
埋め込む
-
現在のすべての DAG をリストする
airflow dags list
-
DAG を一時停止する
airflow dags pause dag_name
-
DAG を開始する
airflow dags unpause dag_name
-
DAG を削除する
airflow dags delete dag_name
-
DAGを実行する
airflow dags trigger dag_name
-
DAG のステータスを表示する
airflow dags state dag_name
-
DAG のすべてのタスクをリストする
airflow tasks list dag_name
-
-
まとめ
- AirFlow の一般的なコマンドを理解する
14: メールアラートの使用
-
目的: AirFlow で電子メール アラートを実装する方法を理解する
-
パス
- ステップ1: AirFlow設定
- ステップ2: DAGの構成
-
埋め込む
-
原則: 電子メールの自動送信の原則: サードパーティの電子メール サービス
-
送信者アカウント: 構成ファイルで構成されます
smtp_user = [email protected] # 秘钥id:需要自己在第三方后台生成 smtp_password = 自己生成的秘钥 # 端口 smtp_port = 25 # 发送邮件的邮箱 smtp_mail_from = [email protected]
-
受信者アカウント: プログラムで設定
default_args = { 'owner': 'airflow', 'email': ['[email protected]'], 'email_on_failure': True, 'email_on_retry': True, 'retries': 1, 'retry_delay': timedelta(minutes=1), }
-
-
AirFlow配置:airflow.cfg
# 发送邮件的代理服务器地址及认证:每个公司都不一样 smtp_host = smtp.163.com smtp_starttls = True smtp_ssl = False # 发送邮件的账号 smtp_user = [email protected] # 秘钥id:需要自己在第三方后台生成 smtp_password = 自己生成的秘钥 # 端口 smtp_port = 25 # 发送邮件的邮箱 smtp_mail_from = [email protected] # 超时时间 smtp_timeout = 30 # 重试次数 smtp_retry_limit = 5
-
クローズエアフロー
# 统一杀掉airflow的相关服务进程命令 ps -ef|egrep 'scheduler|flower|worker|airflow-webserver'|grep -v grep|awk '{print $2}'|xargs kill -9 # 下一次启动之前 rm -f /root/airflow/airflow-*
-
プログラム構成
default_args = { 'email': ['[email protected]'], 'email_on_failure': True, 'email_on_retry': True }
-
エアフローの開始
airflow webserver -D airflow scheduler -D airflow celery flower -D airflow celery worker -D
-
模擬エラー
-
-
まとめ
- AirFlow で電子メール アラートを実装する方法を学ぶ
15:ワンストップ製造におけるスケジューリング
-
目的: ワンストップ製造におけるスケジューリングの実装を理解する
-
埋め込む
- ODS レイヤー/DWD レイヤー: タイミング スケジューリング: 毎日 00:05 に実行を開始
- dws(11)
- DWSには1時間かかります
- 午前1時30分から実施
- dwb(16)
- dwbには1.5時間かかりました
- 死刑執行は午前3時に開始される。
- st(10)
- 所要時間は1時間です
- 午前4時30分から実施
- DM(1)
- dmには0.5時間かかります
- 午前5時30分から実施
-
まとめ
- ワンストップ製造におけるスケジューリングの実装について理解する
16: 復習: Spark コアの概念
-
分散コンピューティングとは何ですか?
- 分散プログラム: MapReduce、Spark、Flink プログラム
- マルチプロセス: プログラムは複数のプロセスによって実装され、異なるプロセスは異なるマシン上で実行できます。
- 各プロセスが計算を担当するデータは異なり、データ全体の特定の部分です。
- MapReduceやSpark APIをベースに自分で開発したプログラム:データ処理のロジック
- 分割ロジック
- 氏
- MapTask プロセス: シャーディング ルール: 処理されたデータに基づく計算
- 判定:ファイルサイズ / 128M > 1.1
- 次を超える: 1 億 2,800 万ポイントごと
- 以下: 1 シャードとして全体
- 大きなファイル: 128M ごとにフラグメントとして
- シャードは MapTask に対応します
- 判定:ファイルサイズ / 128M > 1.1
- ReduceTask プロセス: 指定済み
- MapTask プロセス: シャーディング ルール: 処理されたデータに基づく計算
- スパーク
- 実行者: 指定します
- 分散リソース: YARN、スタンドアロン リソース コンテナー
- 複数のマシンの物理リソース (CPU、メモリ、ディスク) を論理的に 1 つの全体にマージします。
- YARN:リソースマネージャー、ノードマネージャー【8コア8GB】
- 各NMは各マシンのリソースを管理します
- RM はすべての NM を管理します
- スタンドアロン:マスター、ワーカー
- 統一されたハードウェア リソース管理を実現: YARN 上の MR、Flink、Spark
- 分散プログラム: MapReduce、Spark、Flink プログラム
-
Spark プログラムの構造は何ですか?
- アプリケーション: プログラム
- プロセス: 1 つのドライバー、複数のエグゼキューター
- 実行: 複数のジョブ、複数のステージ、複数のタスク
-
スタンドアロンとは何ですか?
- Spark 独自のクラスター リソース管理プラットフォーム
-
YARN で Spark を使用する理由
- リソースの統合管理を実現するために、すべてのプログラムは YARN に送信されて実行されます。
-
マスターとワーカーとは何ですか?
- 分散マスター/スレーブ アーキテクチャ: Hadoop、Hbase、Kafka、Spark...
- マスター: 管理ノード: マスター
- 接客
- スレーブノードの管理
- すべてのリソースを管理する
- 送信元: コンピューティング ノード: ワーカー
- マスターノードによって割り当てられたタスクの実行を担当します
- マスター: 管理ノード: マスター
- 分散マスター/スレーブ アーキテクチャ: Hadoop、Hbase、Kafka、Spark...
-
ドライバーとエグゼキューターとは何ですか?
-
step1: 分散リソースプラットフォームの起動
-
step2: 分散コンピューティングプログラムを開発する
sc = SparkContext(conf) # step1:读取数据 inputRdd = sc.textFile(hdfs_path) #step2:转换数据 wcRdd = inputRdd.filter.map.flatMap.reduceByKey #step3:保存结果 wcRdd.foreach sc.stop
-
ステップ 3: 分散プログラムを分散リソース クラスターに送信して実行します。
spark-submit xxx.py executor个数和资源 driver资源配置
-
最初にドライバープロセスを開始します
- リソースの申請: Executor コンピューティング プロセスを開始します。
- ドライバーはコードの解析を開始し、コードの各文がジョブを生成するかどうかを判断します。
-
次に、Executor プロセスを開始します。リソース構成に従って Worker ノード上で実行します。
- すべてのエグゼキュータはドライバに逆登録し、ドライバがタスクを割り当てるのを待ちます。
-
-
仕事はどのようにして生まれたのでしょうか?
- RDD 内のデータが使用されると、ジョブの生成がトリガーされます。RDD データを使用するすべての関数はトリガー演算子と呼ばれます。
- DAGScheduler コンポーネントは、コードに従って現在のジョブの DAG グラフを構築します。
-
DAGはどのように生成されるのでしょうか?
- アルゴリズム: バックトラッキング アルゴリズム: バックトラッキング
- DAG 構築プロセス中に、各オペレーターをステージに配置し、大きく依存するオペレーターが見つかった場合は新しいステージを構築します。
- ステージ分割:幅広い依存関係
- 実行ステージ: 小さいステージ番号に従って実行を開始します。
- 各ステージを TaskSet に変換します: タスク コレクション
-
タスクの数を決定するにはどうすればよいですか?
- 1 コア CPU = 1 タスク = 1 パーティション
- ステージから変換された TaskSet にはいくつかのタスクがあります。ステージ内の RDD のパーティションの最大数によって決まります。
-
Spark オペレーターには何種類ありますか?
- 変換: 変換
- 戻り値: RDD
- これは遅延モードであり、ジョブ生成はトリガーされません
- 地図、平面地図
- トリガー: アクション
- 戻り値: 非 RDD
- トリガージョブ生成
- 数、最初
- 変換: 変換