<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Data Azubi 數據學徒]]></title><description><![CDATA[Data Azubi 數據學徒]]></description><link>https://snhou.com/</link><image><url>https://snhou.com/favicon.png</url><title>Data Azubi 數據學徒</title><link>https://snhou.com/</link></image><generator>Ghost 5.37</generator><lastBuildDate>Tue, 07 Apr 2026 08:17:12 GMT</lastBuildDate><atom:link href="https://snhou.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[五、Airflow Web UI 介面說明]]></title><description><![CDATA[Airflow Web UI 介面說明、DAGs、Cluster activity: 集群活動、Datasets: 資料集、Security: 安全、Browse: 瀏覽、Admin: 管理]]></description><link>https://snhou.com/airflow-web-server-ui-introduction/</link><guid isPermaLink="false">65560aace06fa201071ebd7c</guid><category><![CDATA[airflow]]></category><dc:creator><![CDATA[Shawn]]></dc:creator><pubDate>Thu, 16 Nov 2023 12:38:15 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1600132806370-bf17e65e942f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDV8fGxheW91dHxlbnwwfHx8fDE3MDAxMzgxMjZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1600132806370-bf17e65e942f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDV8fGxheW91dHxlbnwwfHx8fDE3MDAxMzgxMjZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="&#x4E94;&#x3001;Airflow Web UI &#x4ECB;&#x9762;&#x8AAA;&#x660E;"><p></p><blockquote><em>&#x9019;&#x7CFB;&#x5217;&#x7684;&#x6587;&#x7AE0;&#x6E90;&#x81EA;&#x6211; 2023/9/16-2023/10/15 &#xA0;&#x53C3;&#x52A0;&#x7684; iT &#x9435;&#x4EBA;&#x8CFD;&#xFF1A;</em><br><a href="https://ithelp.ithome.com.tw/users/20135427/ironman/6216?ref=data-azubi-shu-ju-xue-tu">2023 &#x9435;&#x4EBA;&#x8CFD;&#x7CFB;&#x5217;&#x6587;&#x7AE0;&#xFF1A;</a><strong><a href="https://ithelp.ithome.com.tw/users/20135427/ironman/6216?ref=data-azubi-shu-ju-xue-tu">Airflow &#x662F;&#x4EC0;&#x9EBC;? &#x80FD;&#x5403;&#x55CE; ? &#x6578;&#x64DA;&#x6C34;&#x7BA1;&#x5DE5;&#x7684;&#x8D85;&#x7D1A;&#x8611;&#x83C7;</a></strong></blockquote><h2 id="%E5%89%8D%E8%A8%80">&#x524D;&#x8A00;</h2><p>&#x5982;&#x679C;&#x6709;&#x5B8C;&#x6210; <a href="https://snhou.com/implement-airflow-dags-in-seconds/">&#x56DB;&#x3001;30&#x79D2;&#x5BE6;&#x4F5C;&#x7B2C;&#x4E00;&#x500B; Airflow DAG</a> &#x61C9;&#x8A72;&#x90FD;&#x6709;&#x770B;&#x5230;&#x81EA;&#x5DF1;&#x7684; DAG &#x5427;&#xFF0C;&#x6C92;&#x6709;&#x7684;&#x8A71;&#xFF0C;&#x53EF;&#x4EE5;&#x5728; <code>search_tag</code> &#x7684;&#x6846;&#x6846;&#x641C;&#x5C0B;&#x4E00;&#x4E0B;&#xFF0C;&#x518D;&#x628A;&#x958B;&#x95DC;&#x6253;&#x958B;&#xFF0C;&#x5C31;&#x80FD;&#x5728;<code>active</code> &#x7684;&#x9801;&#x9762;&#x770B;&#x5230;&#x4E86;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230923/20135427z7ZluWQo5I.png" class="kg-image" alt="&#x4E94;&#x3001;Airflow Web UI &#x4ECB;&#x9762;&#x8AAA;&#x660E;" loading="lazy"></figure><h2 id="dags">DAGs</h2><p>&#x5C31;&#x662F;&#x4E0A;&#x9762;&#x622A;&#x5716;&#x7684;&#x9801;&#x9762;&#xFF0C;&#x4E5F;&#x662F;&#x9996;&#x9801;&#xFF0C;&#x6703;&#x986F;&#x793A;&#x6240;&#x6709; DAG &#x6E05;&#x55AE;&#x3001;DAG &#x904B;&#x884C;&#x72C0;&#x614B;&#x3001;&#x4E0B;&#x6B21;&#x548C;&#x4E0A;&#x6B21;&#x904B;&#x884C;&#x7684;&#x6642;&#x9593;&#xFF0C;&#x53EF;&#x4EE5;&#x6253;&#x958B;&#x53F3;&#x4E0A;&#x89D2;&#x7684; <code>Auto-refresh</code>&#xFF0C;&#x904B;&#x884C;&#x6642;&#x5C31;&#x6703;&#x5373;&#x6642;&#x66F4;&#x65B0;&#x3002;</p><ul><li>&#x5728;&#x9019;&#x500B;&#x9801;&#x9762;&#x53EF;&#x4EE5;&#x5F88;&#x65B9;&#x4FBF;&#x7684;&#x57F7;&#x884C; / &#x66AB;&#x505C; / &#x522A;&#x9664; DAGs</li><li>&#x53F3;&#x908A;&#x7684; Links &#x6703;&#x9023;&#x63A5;&#x5230;&#x88E1;&#x9762;&#x66F4;&#x591A;&#x529F;&#x80FD; :</li><li>Grid view: &#x7DB2;&#x683C;&#x57F7;&#x884C;&#x72C0;&#x614B;</li><li>Graph: &#x5716;&#x5F62;&#x5448;&#x73FE;</li><li>Gantt: &#x7518;&#x7279;&#x5716;&#x986F;&#x793A;&#x6BCF;&#x500B;&#x4EFB;&#x52D9;&#x904B;&#x884C;&#x9806;&#x5E8F;&#x548C;&#x6301;&#x7E8C;&#x6642;&#x9593;</li><li>Code: &#x986F;&#x793A; DAG &#x4EE3;&#x78BC;&#x3002;</li><li>Details: &#x986F;&#x793A; DAG &#x8A73;&#x7D30;&#x8CC7;&#x8A0A;&#xFF0C;&#x6B77;&#x53F2;&#x904B;&#x884C;&#x7E3D;&#x91CF;&#x3001;&#x904B;&#x884C;&#x8CC7;&#x6599;&#x9593;&#x9694;&#x3001;&#x66AB;&#x6642;&#x5132;&#x5B58;&#x7684;&#x503C;&#xFF0C;&#x548C; Metadata~</li></ul><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230923/20135427IoxlDT8wy9.png" class="kg-image" alt="&#x4E94;&#x3001;Airflow Web UI &#x4ECB;&#x9762;&#x8AAA;&#x660E;" loading="lazy"></figure><h2 id="cluster-activity-%E9%9B%86%E7%BE%A4%E6%B4%BB%E5%8B%95">Cluster activity: &#x96C6;&#x7FA4;&#x6D3B;&#x52D5;</h2><p>&#x9019;&#x88E1;&#x6703;&#x6709;&#x6240;&#x6709; DAGs &#x904B;&#x884C;&#x7684;&#x7E3D;&#x6307;&#x6A19;&#xFF0C;&#x5305;&#x542B;&#x76EE;&#x524D;&#x54EA;&#x4E9B; DAGs &#x958B;&#x555F;&#x6216;&#x66AB;&#x505C;&#xFF0C;&#x9084;&#x6709;&#x904E;&#x53BB;&#x7684;&#x904B;&#x884C;&#x6B77;&#x53F2;&#x72C0;&#x6CC1;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230923/20135427RehBKkzANN.png" class="kg-image" alt="&#x4E94;&#x3001;Airflow Web UI &#x4ECB;&#x9762;&#x8AAA;&#x660E;" loading="lazy"></figure><h2 id="datasets-%E8%B3%87%E6%96%99%E9%9B%86">Datasets: &#x8CC7;&#x6599;&#x96C6;</h2><p>&#x8CC7;&#x6599;&#x96C6;&#x662F;&#x5F88;&#x65B0;&#x7684;&#x9801;&#x9762;&#xFF0C;Airflow 2.4&#x7248;&#x672C;&#x4E4B;&#x5F8C;&#x624D;&#x51FA;&#x73FE;&#xFF0C;&#x5176;&#x4E2D;&#x53EF;&#x4EE5;&#x8A2D;&#x5B9A;&#x8CC7;&#x6599;&#x96C6;&#x4E4B;&#x9593;&#x7684;&#x76F8;&#x95DC;&#x6027;&#xFF0C;&#x800C;&#x4E14;&#x597D;&#x50CF;&#x6709;&#x8CC7;&#x6599;&#x611F;&#x77E5;(data-aware)&#x7684;&#x529F;&#x80FD;&#xFF0C;&#x6211;&#x4E5F;&#x9084;&#x6C92;&#x7528;&#x904E;&#xFF0C;&#x5982;&#x679C;&#x5F8C;&#x7E8C;&#x6709;&#x7528;&#x5230;&#x518D;&#x4F86;&#x66F4;&#x65B0;&#x3002;<br></p><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230923/20135427sogaWdwfhJ.png" class="kg-image" alt="&#x4E94;&#x3001;Airflow Web UI &#x4ECB;&#x9762;&#x8AAA;&#x660E;" loading="lazy"></figure><h2 id="security-%E5%AE%89%E5%85%A8">Security: &#x5B89;&#x5168;</h2><p>Security &#x9801;&#x9762;&#x901A;&#x5E38;&#x5C31;&#x662F;&#x8A2D;&#x5B9A;&#x5404;&#x500B;&#x4F7F;&#x7528;&#x8005;&#x7684;&#x6B0A;&#x9650;&#x3002;<br></p><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230923/20135427yGUAn8AYbL.png" class="kg-image" alt="&#x4E94;&#x3001;Airflow Web UI &#x4ECB;&#x9762;&#x8AAA;&#x660E;" loading="lazy"></figure><h2 id="browse-%E7%80%8F%E8%A6%BD">Browse: &#x700F;&#x89BD;</h2><p>Browse &#x7684;&#x9801;&#x9762;&#x6700;&#x5E38;&#x7528;&#x5230;&#x7684;&#x5C31;&#x662F; <code>DAG Runs</code>&#xFF0C;&#x6703;&#x6253;&#x958B;&#x67E5;&#x770B;&#x904E;&#x53BB;&#x57F7;&#x884C;&#x7684;&#x72C0;&#x614B;&#xFF0C;&#x6E05;&#x9664;&#x6216;&#x662F;&#x522A;&#x9664;&#xFF0C;&#x7136;&#x5F8C;&#x63A5;&#x8457;&#x91CD;&#x65B0;&#x57F7;&#x884C;&#x3002;<br></p><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230923/2013542778sA12kjsp.png" class="kg-image" alt="&#x4E94;&#x3001;Airflow Web UI &#x4ECB;&#x9762;&#x8AAA;&#x660E;" loading="lazy"></figure><h2 id="admin-%E7%AE%A1%E7%90%86">Admin: &#x7BA1;&#x7406;</h2><p>Admin &#x7684;&#x7BA1;&#x7406;&#x9801;&#x9762;&#x4E5F;&#x5F88;&#x5E38;&#x4F7F;&#x7528;&#xFF0C;&#x6703;&#x4F86;&#x78BA;&#x8A8D; <code>XComs</code> &#x76EE;&#x524D;&#x50B3;&#x905E;&#x7684;&#x8CC7;&#x6599;&#xFF0C;&#x6216;&#x662F;&#x770B; <code>Variables</code> &#x6216; <code>Configurations</code> &#x6709;&#x54EA;&#x4E9B;&#x53EF;&#x4EE5;&#x8ABF;&#x6574;&#x6216;&#x4F7F;&#x7528;&#x7684;&#xFF0C;&#x9019;&#x90E8;&#x5206;&#x4E4B;&#x5F8C;&#x61C9;&#x8A72;&#x90FD;&#x6703;&#x5404;&#x82B1;&#x4E00;&#x5929;&#x793A;&#x7BC4;&#x548C;&#x8AAA;&#x660E;&#x3002;<br></p><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230923/20135427A7GAg9dTGt.png" class="kg-image" alt="&#x4E94;&#x3001;Airflow Web UI &#x4ECB;&#x9762;&#x8AAA;&#x660E;" loading="lazy"></figure><blockquote>Connections &#x7684;&#x90E8;&#x5206;&#x4E5F;&#x5E38;&#x5E38;&#x7528;&#x4F86;&#x8A2D;&#x5B9A;&#x548C;&#x8CC7;&#x6599;&#x5EAB;&#x7684;&#x9023;&#x63A5;</blockquote><h2 id="docs-%E5%AE%98%E6%96%B9%E6%96%87%E4%BB%B6">Docs: &#x5B98;&#x65B9;&#x6587;&#x4EF6;</h2><p>&#x8001;&#x5BE6;&#x8AAA;&#xFF0C;Airflow &#x7684;&#x6587;&#x4EF6;&#x771F;&#x7684;&#x7B97;&#x9084;&#x883B;&#x4E0D;&#x932F;&#x7684;&#xFF0C;&#x800C;&#x4E14;&#x5B98;&#x65B9;&#x8AD6;&#x58C7;&#x4E5F;&#x6709;&#x5728;&#x56DE;&#x7B54;&#x554F;&#x984C;&#xFF0C;&#x5927;&#x5BB6;&#x5B78;&#x7FD2;&#x904E;&#x7A0B;&#x4E2D;&#x4E0D;&#x59A8;&#x591A;&#x770B;&#x770B;&#x6587;&#x4EF6;&#xFF0C;&#x6216;&#x662F;&#x5230; <a href="https://docs.astronomer.io/learn/?ref=data-azubi-shu-ju-xue-tu">Astronomer learn</a> &#x7684;&#x5B78;&#x7FD2;&#x9801;&#x9762;&#xFF0C;&#x90FD;&#x6709;&#x5F88;&#x591A;&#x4E7E;&#x8CA8;&#x53EF;&#x4EE5;&#x770B;&#x3002;</p><h1 id="%E8%B7%91%E8%B7%91%E8%B7%91%EF%BD%9E%E5%90%91%E5%89%8D%E8%B7%91%EF%BD%9E">&#x8DD1;&#x8DD1;&#x8DD1;&#xFF5E;&#x5411;&#x524D;&#x8DD1;&#xFF5E;</h1><blockquote>&#x4E00;&#x4E0B;&#x5B50;&#x53C8;&#x8B1B;&#x5F88;&#x591A;&#x5EE2;&#x8A71;&#xFF0C;&#x5230;&#x5E95;&#x8981;&#x4E0D;&#x8981; run &#x5566;&#xFF5E;</blockquote><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230923/20135427hJIQ7hhq10.png" class="kg-image" alt="&#x4E94;&#x3001;Airflow Web UI &#x4ECB;&#x9762;&#x8AAA;&#x660E;" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230923/20135427qUOnWvCGtp.png" class="kg-image" alt="&#x4E94;&#x3001;Airflow Web UI &#x4ECB;&#x9762;&#x8AAA;&#x660E;" loading="lazy"></figure><p>&#x57F7;&#x884C;&#x5B8C;&#x4E86;&#xFF0C;&#x5148;&#x770B;&#x5230;&#x4E3B;&#x9801;&#x7684; <code>Runs</code> &#x5340;&#x584A;&#x591A;&#x4E86;&#x4E00;&#x500B;&#x7DA0;&#x8272;&#x5708;&#x7684;1 &#xFF0C;<code>Recent Tasks</code> &#x5340;&#x584A;&#x591A;&#x4E86;&#x4E00;&#x500B;&#x7DA0;&#x8272;&#x5708;&#x7684;2&#xFF0C;&#x4EE3;&#x8868;&#x6211;&#x5011;&#x57F7;&#x884C;&#x4E86; 1 &#x500B; DAG &#x548C; 2 &#x500B; tasks&#xFF0C;&#x7DA0;&#x8272;&#x4EE3;&#x8868;&#x90FD;&#x662F;&#x57F7;&#x884C;&#x6210;&#x529F;&#x3002;</p><h2 id="%E6%8E%A5%E4%B8%8B%E4%BE%86%E9%BB%9E%E6%93%8A-dag">&#x63A5;&#x4E0B;&#x4F86;&#x9EDE;&#x64CA; DAG</h2><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230923/20135427gMpKWBH11j.png" class="kg-image" alt="&#x4E94;&#x3001;Airflow Web UI &#x4ECB;&#x9762;&#x8AAA;&#x660E;" loading="lazy"></figure><p><br>&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x591A;&#x4E86;&#x5F88;&#x591A;&#x5167;&#x5BB9;&#xFF0C;&#x5DE6;&#x908A;&#x7684; <code>Grid view: &#x7DB2;&#x683C;&#x57F7;&#x884C;&#x72C0;&#x614B;</code>&#xFF0C;&#x4E0A;&#x65B9;&#x9577;&#x689D;&#x5F62;&#x7DA0;&#x8272;&#x7684;&#x662F; DAG &#x57F7;&#x884C;&#x6642;&#x9593;&#xFF0C;&#x4E0B;&#x65B9;&#x5169;&#x500B;&#x9EDE;&#x662F; tasks &#x57F7;&#x884C;&#x72C0;&#x614B;&#xFF0C;&#x7DA0;&#x8272;&#x662F;&#x6210;&#x529F;&#xFF0C;&#x90A3;&#x5176;&#x4ED6;&#x52D2;&#xFF1F;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x4E2D;&#x9593;&#x4E0D;&#x540C;&#x984F;&#x8272;&#x7684;&#x6846;&#xFF0C;&#x88E1;&#x9762;&#x90FD;&#x6709;&#x5BEB;&#x57F7;&#x884C;&#x7684;&#x72C0;&#x614B;&#xFF0C;&#x4E5F;&#x4E0D;&#x7528;&#x7279;&#x5225;&#x8A18;&#xFF0C;&#x9EDE;&#x9032;&#x4F86;&#x5C31;&#x53EF;&#x4EE5;&#x770B;&#xFF0C;&#x76F8;&#x4FE1;&#x7D05;&#x8272;&#x7684; <code>fail</code> &#x4E4B;&#x5F8C;&#x662F;&#x4E00;&#x5B9A;&#x6703;&#x8A18;&#x5F97;&#x7684;</p><figure class="kg-card kg-image-card"><img src="https://snhou.com/images/emoticon/emoticon01.gif" class="kg-image" alt="&#x4E94;&#x3001;Airflow Web UI &#x4ECB;&#x9762;&#x8AAA;&#x660E;" loading="lazy"></figure><h2 id="%E9%BB%9E%E6%93%8Agrid-view-%E7%95%B6%E4%B8%AD%E7%9A%84-task1">&#x9EDE;&#x64CA;<code>Grid view</code> &#x7576;&#x4E2D;&#x7684; task1</h2><p>&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x6703;&#x591A;&#x51FA;&#x4E00;&#x500B; <code>logs</code> &#x7684;&#x9801;&#x9762;&#xFF0C;&#x6211;&#x5011;&#x5C31;&#x662F;&#x8981;&#x9032;&#x5165;&#x53BB;&#x770B;&#x6211;&#x5011;&#x57F7;&#x884C;&#x7684;&#x7A0B;&#x5F0F;&#x6709;&#x6C92;&#x6709;&#x9806;&#x5229;&#x986F;&#x793A;&#x3002;<br></p><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230923/20135427S3ga5u08fv.png" class="kg-image" alt="&#x4E94;&#x3001;Airflow Web UI &#x4ECB;&#x9762;&#x8AAA;&#x660E;" loading="lazy"></figure><ul><li>&#x770B;&#x5230;&#x6709;&#x5370;&#x51FA; <code>start!!</code> &#x4EE3;&#x8868;&#x6211;&#x5011;&#x7684; BashOperator &#x6709;&#x8A8D;&#x771F;&#x5DE5;&#x4F5C;&#xFF0C;&#x5B8C;&#x6210;&#x4EFB;&#x52D9;&#x5566;&#xFF5E;</li><li>&#x63A5;&#x4E0B;&#x4F86;&#x5C31;&#x518D;&#x4EE5;&#x6B64;&#x985E;&#x63A8;&#x6AA2;&#x67E5; task2</li></ul><h2 id="%E9%BB%9E%E6%93%8A-graph">&#x9EDE;&#x64CA; <code>Graph</code></h2><p>&#x5C31;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x6211;&#x5011;&#x8A2D;&#x5B9A;&#x7684;&#x4EFB;&#x52D9;&#x95DC;&#x4FC2;&#x4E86;</p><pre><code>task1 &gt;&gt; task2
</code></pre><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230923/20135427BDsKgpMW0y.png" class="kg-image" alt="&#x4E94;&#x3001;Airflow Web UI &#x4ECB;&#x9762;&#x8AAA;&#x660E;" loading="lazy"></figure><blockquote>Q: &#x4E0D;&#x77E5;&#x9053;&#x5927;&#x5BB6;&#x6709;&#x6C92;&#x6709;&#x767C;&#x73FE;&#x6642;&#x9593;&#x602A;&#x602A;&#x7684;&#xFF0C;&#x76EE;&#x524D;&#x662F;&#x53F0;&#x7063;&#x665A;&#x4E0A;11&#x9EDE;&#x591A;&#xFF0C;&#x600E;&#x9EBC;&#x4E0A;&#x9762;&#x57F7;&#x884C;&#x6642;&#x9593;&#x662F;&#x4E0B;&#x5348; 3 &#x9EDE;&#x591A;&#x5462;&#xFF1F;<br>A: &#x56E0;&#x70BA;&#x76EE;&#x524D;&#x662F;&#x4F7F;&#x7528; UTC &#x6642;&#x5340;&#x5728;&#x57F7;&#x884C;&#xFF0C;&#x800C;&#x53F0;&#x7063;&#x662F; +8 &#x6642;&#x5340;&#xFF0C;&#x81EA;&#x7136;&#x6703;&#x5DEE; 8 &#x5C0F;&#x6642;&#x56C9;&#xFF5E;<br>&#x53EF;&#x4EE5;&#x81EA;&#x5DF1;&#x8ABF;&#x6574;&#xFF0C;&#x4F46;&#x6642;&#x5340;&#x4E5F;&#x662F;&#x4E00;&#x500B;&#x91CD;&#x8981;&#x7684;&#x554F;&#x984C;&#xFF0C;&#x4E4B;&#x5F8C;&#x6703;&#x82B1;&#x4E00;&#x7BC7;&#x6587;&#x7AE0;&#x8AAA;&#x660E;</blockquote><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230923/20135427wIqqtxTS7z.png" class="kg-image" alt="&#x4E94;&#x3001;Airflow Web UI &#x4ECB;&#x9762;&#x8AAA;&#x660E;" loading="lazy"></figure>]]></content:encoded></item><item><title><![CDATA[四、30秒實作第一個 Airflow  DAG]]></title><description><![CDATA[如何實作一個 Airflow  DAG、設定任務之間的關係 、創建 dags 資料夾和 Python 檔案、Create 一個 DAG 物件、Create Tasks任務]]></description><link>https://snhou.com/implement-airflow-dags-in-seconds/</link><guid isPermaLink="false">654ccd983d629d01078384fc</guid><category><![CDATA[airflow]]></category><dc:creator><![CDATA[Shawn]]></dc:creator><pubDate>Thu, 09 Nov 2023 12:23:35 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1508962914676-134849a727f0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHNlY29uZHN8ZW58MHx8fHwxNjk5NTMyNDQ4fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1508962914676-134849a727f0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDF8fHNlY29uZHN8ZW58MHx8fHwxNjk5NTMyNDQ4fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="&#x56DB;&#x3001;30&#x79D2;&#x5BE6;&#x4F5C;&#x7B2C;&#x4E00;&#x500B; Airflow  DAG"><p></p><blockquote><em>&#x9019;&#x7CFB;&#x5217;&#x7684;&#x6587;&#x7AE0;&#x6E90;&#x81EA;&#x6211; 2023/9/16-2023/10/15 &#xA0;&#x53C3;&#x52A0;&#x7684; iT &#x9435;&#x4EBA;&#x8CFD;&#xFF1A;</em><br><a href="https://ithelp.ithome.com.tw/users/20135427/ironman/6216?ref=data-azubi-shu-ju-xue-tu">2023 &#x9435;&#x4EBA;&#x8CFD;&#x7CFB;&#x5217;&#x6587;&#x7AE0;&#xFF1A;</a><strong><a href="https://ithelp.ithome.com.tw/users/20135427/ironman/6216?ref=data-azubi-shu-ju-xue-tu">Airflow &#x662F;&#x4EC0;&#x9EBC;? &#x80FD;&#x5403;&#x55CE; ? &#x6578;&#x64DA;&#x6C34;&#x7BA1;&#x5DE5;&#x7684;&#x8D85;&#x7D1A;&#x8611;&#x83C7;</a></strong></blockquote><h1 id="before-%E5%AF%A6%E4%BD%9C">Before &#x5BE6;&#x4F5C;</h1><h3 id="step1-%E9%96%8B%E5%95%9F%E5%B0%88%E6%A1%88%E8%B3%87%E6%96%99%E5%A4%BE-airflow-local">step1: &#x958B;&#x555F;&#x5C08;&#x6848;&#x8CC7;&#x6599;&#x593E; airflow-local</h3><ul><li>&#x53EF;&#x4EE5;&#x7528; vscode &#x6216;&#x662F;&#x76F4;&#x63A5;&#x958B; terminal/&#x547D;&#x4EE4;&#x63D0;&#x793A;&#x5B57;&#x5143; <code>cd</code> &#x9032;&#x5165;&#x4E5F;&#x53EF;&#x4EE5;&#x3002;</li></ul><h3 id="step2-%E9%80%B2%E5%85%A5%E8%99%9B%E6%93%AC%E7%92%B0%E5%A2%83">step2: &#x9032;&#x5165;&#x865B;&#x64EC;&#x74B0;&#x5883;</h3><pre><code>source airflow-env/bin/activate
</code></pre><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230924/20135427NwpzDZNGG4.png" class="kg-image" alt="&#x56DB;&#x3001;30&#x79D2;&#x5BE6;&#x4F5C;&#x7B2C;&#x4E00;&#x500B; Airflow  DAG" loading="lazy"></figure><ul><li>&#x770B;&#x5230; terminal &#x524D;&#x9762;&#x6709; <code>(airflow-env)</code> &#x4EE3;&#x8868;&#x9032;&#x5165;&#x865B;&#x64EC;&#x74B0;&#x5883;&#x4E86;&#x3002;</li></ul><h3 id="step3-%E9%96%8B%E5%95%9F-webserver">step3: &#x958B;&#x555F; Webserver</h3><pre><code>airflow webserver -p 8080
</code></pre><ul><li>&#x6253;&#x958B; <a href="http://localhost:8080/?ref=data-azubi-shu-ju-xue-tu">http://localhost:8080/</a> &#x5C31;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x9019;&#x500B;&#x756B;&#x9762;&#x4E86;<br></li></ul><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230922/201354279JqwAWPnEc.png" class="kg-image" alt="&#x56DB;&#x3001;30&#x79D2;&#x5BE6;&#x4F5C;&#x7B2C;&#x4E00;&#x500B; Airflow  DAG" loading="lazy"></figure><ul><li>&#x770B;&#x5230;&#x4E0A;&#x9762;&#x6709;&#x4E09;&#x884C;&#x901A;&#x77E5;&#xFF1A;<br>1.The scheduler does not appear to be running&#xFF1A;&#x63D0;&#x9192;&#x4F60;&#x9084;&#x6C92;&#x958B;&#x555F; Scheduler<br>2.Do not use SQLite as metadata DB in production&#xFF1A;&#x5728;&#x6B63;&#x5F0F;&#x958B;&#x767C;&#x4E0D;&#x8981;&#x7528; SQLite<br>3.Do not use the SequentialExecutor in production&#xFF1A;&#x5728;&#x6B63;&#x5F0F;&#x958B;&#x767C;&#x4E0D;&#x8981;&#x7528; SequentialExecutor</li></ul><p>SequentialExecutor &#x662F;&#x7B2C;&#x4E00;&#x6B21;&#x5B89;&#x88DD; Airflow &#x6642;&#x7684;&#x9810;&#x8A2D;&#x57F7;&#x884C;&#x5668;&#xFF0C;&#x4E5F;&#x662F;&#x552F;&#x4E00;&#x4E00;&#x500B;&#x53EF;&#x4EE5;&#x548C; sqlite &#x5354;&#x4F5C;&#x7684;&#x57F7;&#x884C;&#x5668;&#xFF0C;&#x4F46;&#x7F3A;&#x9EDE;&#x5C31;&#x662F;&#x4E00;&#x6B21;&#x53EA;&#x80FD;&#x57F7;&#x884C;&#x4E00;&#x9805;&#x4EFB;&#x52D9;&#xFF0C;&#x6240;&#x4EE5;&#x57F7;&#x884C;&#x6548;&#x7387;&#x5F88;&#x5DEE;&#xFF0C;&#x4F46;&#x76EE;&#x524D;&#x6E2C;&#x8A66;&#x4E5F;&#x6C92;&#x95DC;&#x4FC2;&#x3002;<br>Ref: <a href="https://airflow.apache.org/docs/apache-airflow/stable/core-concepts/executor/sequential.html?ref=data-azubi-shu-ju-xue-tu">&#x5B98;&#x65B9;&#x8AAA;&#x660E;</a></p><h3 id="step4-%E9%96%8B%E5%95%9F-scheduler">step4: &#x958B;&#x555F; Scheduler</h3><p>&#x958B;&#x555F;&#x4E00;&#x500B;&#x65B0;&#x7684; terminal&#xFF0C;&#x904B;&#x884C; <code>airflow scheduler</code> &#xFF0C;&#x63A5;&#x8457;&#x6253;&#x958B; <a href="http://localhost:8080/?ref=data-azubi-shu-ju-xue-tu">http://localhost:8080/</a> &#x6309; <code>F5</code> &#x5237;&#x65B0;&#x9801;&#x9762;&#xFF0C;&#x7B2C;&#x4E00;&#x884C;&#x901A;&#x77E5;&#x5C31;&#x6703;&#x6D88;&#x5931;&#x4E86;&#x3002;</p><h1 id="%E9%96%8B%E5%A7%8B%E5%AF%A6%E4%BD%9C">&#x958B;&#x59CB;&#x5BE6;&#x4F5C;</h1><h2 id="1-%E5%89%B5%E5%BB%BA-dags-%E8%B3%87%E6%96%99%E5%A4%BE%E5%92%8C-python-%E6%AA%94%E6%A1%88">1. &#x5275;&#x5EFA; dags &#x8CC7;&#x6599;&#x593E;&#x548C; Python &#x6A94;&#x6848;</h2><p>&#x9996;&#x5148;&#x6211;&#x5011;&#x8981;&#x5275;&#x5EFA;&#x4E00;&#x500B; <code>dags/</code> &#x8CC7;&#x6599;&#x593E;&#x5728; <code>~/airflow/</code> &#x5C08;&#x6848;&#x7576;&#x4E2D;&#xFF0C;&#x4E26;&#x5728;&#x88E1;&#x9762;&#x5EFA;&#x7ACB;&#x4E00;&#x500B; python &#x6A94;&#x6848;&#xFF0C;<code>dags/first_dag.py</code></p><ul><li>&#x76EE;&#x524D;&#x6574;&#x500B;&#x8CC7;&#x6599;&#x593E;&#x7D50;&#x69CB;&#x5982;&#x4E0B;&#xFF1A;</li></ul><pre><code>--- dags/
    --- first_dag.py
--- logs/
--- airflow.cfg
--- airflow.db
--- webserver_config.py
</code></pre><h2 id="2-%E5%9C%A8-firstdagpy-%E4%B8%AD%E5%8C%AF%E5%85%A5%E5%A5%97%E4%BB%B6">2. &#x5728; first_dag.py &#x4E2D;&#x532F;&#x5165;&#x5957;&#x4EF6;</h2><pre><code class="language-python">from datetime import datetime
from airflow import DAG
from airflow.operators.bash import BashOperator
</code></pre><ul><li>datetime &#x6A21;&#x7D44;&#x662F;&#x7528;&#x4F86;&#x8A2D;&#x5B9A;&#x958B;&#x59CB;&#x6642;&#x9593;&#x3001;&#x9593;&#x9694;&#x6642;&#x9593;&#x548C;&#x6642;&#x5340;&#x3002;</li><li>airflow &#x7684; DAG &#x5C31;&#x662F;&#x6211;&#x5011;&#x8981;&#x5275;&#x5EFA;&#x7684;&#x6A21;&#x7D44;</li><li>BashOperator &#x662F;&#x6211;&#x5011;&#x7B49;&#x7B49;&#x8981;&#x4F7F;&#x7528;&#x7684; Operator&#xFF0C;&#x662F;&#x6700;&#x57FA;&#x790E;&#x7684;&#xFF0C;&#x5C31;&#x50CF;&#x662F;&#x57F7;&#x884C; terminal &#x6307;&#x4EE4;&#x4E00;&#x6A23;&#x3002;</li></ul><h2 id="3-create-%E4%B8%80%E5%80%8B-dag-%E7%89%A9%E4%BB%B6">3. Create &#x4E00;&#x500B; DAG &#x7269;&#x4EF6;</h2><pre><code class="language-python">with DAG(
    dag_id = &apos;first_dag&apos;,
    start_date = datetime(2023, 9, 22),
    schedule_interval=&apos;@daily&apos;
) as dag:
</code></pre><ul><li>&#x5728;&#x9019;&#x88E1;&#x6211;&#x5011;&#x6703;&#x5E6B; DAG &#x505A;&#x57FA;&#x790E;&#x7684;&#x8A2D;&#x5B9A;&#xFF0C;<code>dag_id</code> &#x5C31;&#x662F;&#x5728; dag &#x7684;&#x552F;&#x4E00;&#x8B58;&#x5225;&#x540D;&#x7A31;</li></ul><blockquote>&#xFF01;&#x5F37;&#x70C8;&#x5EFA;&#x8B70;&#xFF01;&#x8981;&#x548C; python &#x6A94;&#x6848;&#x7528;&#x76F8;&#x540C;&#x540D;&#x7A31;&#xFF0C;&#x4E0D;&#x7136;&#x4E4B;&#x5F8C; DAG &#x4E00;&#x591A;&#x5C31;&#x6703;&#x5F88;&#x6DF7;&#x4E82;</blockquote><ul><li><code>start_date</code> &#x5C31;&#x662F; DAG &#x8981;&#x958B;&#x59CB;&#x57F7;&#x884C;&#x7684;&#x65E5;&#x671F;</li><li><code>schedule_interval</code> &#x662F;&#x6642;&#x9593;&#x9593;&#x9694;&#xFF0C;<code>&apos;@daily&apos;</code> &#x4EE3;&#x8868;&#x4EE5;&#x5929;&#x70BA;&#x55AE;&#x4F4D;</li></ul><h2 id="4-create-%E4%BB%BB%E5%8B%99%E5%80%91">4. Create &#x4EFB;&#x52D9;&#x5011;</h2><p>&#x5728; <code>) as dag:</code>&#x4E0B;&#x65B9;&#x6211;&#x5011;&#x5C31;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x4F86;&#x5BEB;&#x4EFB;&#x52D9;&#x4E86;</p><pre><code>...
) as dag:
    task1 = BashOperator(
        task_id=&apos;task1&apos;,
        bash_command=&quot;echo start!!&quot;
    )

    task2 = BashOperator(
        task_id=&apos;task2&apos;,
        bash_command=&quot;echo finish!!&quot;
    )
</code></pre><ul><li><code>task_id</code>: task &#x7684;&#x540D;&#x7A31;</li><li><code>bash_command</code>:&#x6211;&#x5011;&#x8981;&#x57F7;&#x884C;&#x7684; bash &#x6307;&#x4EE4;</li><li><code>echo start!!</code>:echo &#x5C31;&#x662F; Python &#x7576;&#x4E2D;&#x7684; print &#x610F;&#x601D;&#xFF0C;&#x5370;&#x51FA; <code>start!!</code></li><li><code>task2</code> &#x4EE5;&#x6B64;&#x985E;&#x63A8;</li></ul><h2 id="5-%E8%A8%AD%E5%AE%9A%E4%BB%BB%E5%8B%99%E4%B9%8B%E9%96%93%E7%9A%84%E9%97%9C%E4%BF%82-%E7%9B%B8%E4%BE%9D%E6%80%A7-dependecies">5. &#x8A2D;&#x5B9A;&#x4EFB;&#x52D9;&#x4E4B;&#x9593;&#x7684;&#x95DC;&#x4FC2; / &#x76F8;&#x4F9D;&#x6027; (Dependecies)</h2><pre><code>task1 &gt;&gt; task2
</code></pre><ul><li>&#x5148;&#x57F7;&#x884C; task1 &#x518D;&#x57F7;&#x884C; task2</li></ul><h2 id="6-%E9%87%8D%E6%96%B0%E9%81%8B%E8%A1%8C-webserver">6. &#x91CD;&#x65B0;&#x904B;&#x884C; webserver</h2><pre><code>airflow webserver -p 8080
</code></pre><pre><code>airflow scheduler
</code></pre><ul><li>&#x958B;&#x555F; <a href="http://localhost:8080/?ref=data-azubi-shu-ju-xue-tu">http://localhost:8080/</a> &#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x6211;&#x5011;&#x7684; DAG &#x4E86;</li></ul><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230923/201354273VKvenQQRg.png" class="kg-image" alt="&#x56DB;&#x3001;30&#x79D2;&#x5BE6;&#x4F5C;&#x7B2C;&#x4E00;&#x500B; Airflow  DAG" loading="lazy"></figure><h1 id="%E5%AE%8C%E6%95%B4%E7%9A%84%E7%A8%8B%E5%BC%8F%E7%A2%BC">&#x5B8C;&#x6574;&#x7684;&#x7A0B;&#x5F0F;&#x78BC;</h1><ul><li>path: /Users/{user_name}/airflow-local/dags/first_dag.py</li><li>virtual-env: airflow-env</li></ul><pre><code>from datetime import datetime
from airflow import DAG
from airflow.operators.bash import BashOperator

with DAG(
    dag_id = &apos;first_dag&apos;,
    start_date = datetime(2023, 9, 22),
    schedule_interval=None
) as dag:
    task1 = BashOperator(
        task_id=&apos;task1&apos;,
        bash_command=&quot;echo start!!&quot;
    )

    task2 = BashOperator(
        task_id=&apos;task2&apos;,
        bash_command=&quot;echo finish!!&quot;
    )

    task1 &gt;&gt; task2
</code></pre>]]></content:encoded></item><item><title><![CDATA[三、Airflow 快樂安裝指北(Mac 和 Windows)]]></title><description><![CDATA[Mac 安裝 Airflow 環境、Windows 安裝 Airflow 環境、step by step 安裝、創建虛擬環境、初始化 airflow db、設定使用者]]></description><link>https://snhou.com/airflow-environment-setup-mac-and-windows/</link><guid isPermaLink="false">654cc9373d629d01078384c2</guid><category><![CDATA[airflow]]></category><dc:creator><![CDATA[Shawn]]></dc:creator><pubDate>Thu, 09 Nov 2023 12:13:35 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1483817101829-339b08e8d83f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE3fHxjb2RpbmclMjBkb3dubG9hZHxlbnwwfHx8fDE2OTk1MzE5MzB8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<blockquote><em>&#x9019;&#x7CFB;&#x5217;&#x7684;&#x6587;&#x7AE0;&#x6E90;&#x81EA;&#x6211; 2023/9/16-2023/10/15 &#xA0;&#x53C3;&#x52A0;&#x7684; iT &#x9435;&#x4EBA;&#x8CFD;&#xFF1A;</em><br><a href="https://ithelp.ithome.com.tw/users/20135427/ironman/6216?ref=data-azubi-shu-ju-xue-tu">2023 &#x9435;&#x4EBA;&#x8CFD;&#x7CFB;&#x5217;&#x6587;&#x7AE0;&#xFF1A;</a><strong><a href="https://ithelp.ithome.com.tw/users/20135427/ironman/6216?ref=data-azubi-shu-ju-xue-tu">Airflow &#x662F;&#x4EC0;&#x9EBC;? &#x80FD;&#x5403;&#x55CE; ? &#x6578;&#x64DA;&#x6C34;&#x7BA1;&#x5DE5;&#x7684;&#x8D85;&#x7D1A;&#x8611;&#x83C7;</a></strong></blockquote><h1 id="mac-%E5%AE%89%E8%A3%9D-step-by-step">Mac &#x5B89;&#x88DD; step by step</h1><h2 id="before-%E5%AE%89%E8%A3%9D">Before &#x5B89;&#x88DD;</h2><blockquote>! &#x8A18;&#x5F97;&#x8981;&#x5148;&#x6709; Python</blockquote><ul><li>&#x78BA;&#x8A8D;&#x4E00;&#x4E0B; python</li></ul><pre><code class="language-shell">python3 --version
</code></pre><h2 id="1%E5%AE%89%E8%A3%9D%E8%99%9B%E6%93%AC%E7%92%B0%E5%A2%83">1.&#x5B89;&#x88DD;&#x865B;&#x64EC;&#x74B0;&#x5883;</h2><pre><code class="language-shell">pip3 install virtualenv 
</code></pre><h2 id="2%E5%B0%88%E6%A1%88%E8%B3%87%E6%96%99%E5%A4%BE">2.&#x5C08;&#x6848;&#x8CC7;&#x6599;&#x593E;</h2><ul><li>~/airflow &#x662F;&#x9810;&#x8A2D;&#x5C08;&#x6848;&#x8CC7;&#x6599;&#x593E;</li></ul><blockquote>&#x76E1;&#x91CF;&#x4E0D;&#x8981;&#x4FEE;&#x6539;&#x8DEF;&#x5F91;&#xFF0C;&#x53EF;&#x80FD;&#x6703;&#x88DD;&#x5931;&#x6557;</blockquote><figure class="kg-card kg-image-card"><img src="https://snhou.com/images/emoticon/emoticon13.gif" class="kg-image" alt="&#x4E09;&#x3001;Airflow &#x5FEB;&#x6A02;&#x5B89;&#x88DD;&#x6307;&#x5317;(Mac &#x548C; Windows)" loading="lazy"></figure><ol><li>&#x5275;&#x5EFA;&#x5C08;&#x6848;&#x8CC7;&#x6599;&#x593E;</li></ol><pre><code class="language-shell">mkdir ~/airflow
</code></pre><ol><li>&#x9032;&#x5165;&#x5C08;&#x6848;&#x8CC7;&#x6599;&#x593E;</li></ol><pre><code class="language-shell">cd ~/airflow
</code></pre><h2 id="3%E5%89%B5%E5%BB%BA%E8%99%9B%E6%93%AC%E7%92%B0%E5%A2%83">3.&#x5275;&#x5EFA;&#x865B;&#x64EC;&#x74B0;&#x5883;</h2><ul><li>airflow-env &#x662F;&#x865B;&#x64EC;&#x74B0;&#x5883;&#x540D;&#x7A31;&#xFF0C;&#x53EF;&#x4EE5;&#x81EA;&#x5DF1;&#x8A2D;&#x5B9A;</li></ul><pre><code class="language-shell">python3 -m venv airflow-env
</code></pre><h2 id="4%E9%80%B2%E5%85%A5%E8%99%9B%E6%93%AC%E7%92%B0%E5%A2%83">4.&#x9032;&#x5165;&#x865B;&#x64EC;&#x74B0;&#x5883;</h2><pre><code class="language-shell">source airflow-env/bin/activate
</code></pre><h2 id="5%E5%AE%89%E8%A3%9D-apache-airflow">5.&#x5B89;&#x88DD; Apache Airflow</h2><pre><code class="language-shell">pip3 install apache-airflow
</code></pre><ul><li>&#x5982;&#x679C;&#x5B89;&#x88DD;&#x9047;&#x5230;&#x554F;&#x984C;&#xFF0C;&#x53EF;&#x4EE5;&#x66F4;&#x65B0; pip</li></ul><h2 id="6%E8%A8%AD%E5%AE%9A-airflow-%E7%9A%84%E8%A8%AA%E5%95%8F%E7%9B%AE%E9%8C%84">6.&#x8A2D;&#x5B9A; Airflow &#x7684;&#x8A2A;&#x554F;&#x76EE;&#x9304;</h2><pre><code class="language-shell">export AIRFLOW_HOME=~/airflow
</code></pre><h2 id="7%E5%88%9D%E5%A7%8B%E5%8C%96-airflow-db">7.&#x521D;&#x59CB;&#x5316; airflow db</h2><pre><code class="language-shell">airflow db init
</code></pre><ul><li>&#x57F7;&#x884C;&#x5B8C;&#x6253; <code>ls</code> &#x6703;&#x51FA;&#x73FE;<code>airflow-env</code>(&#x6211;&#x5011;&#x525B;&#x525B;&#x88DD;&#x7684;&#x865B;&#x64EC;&#x74B0;&#x5883;)&#x3001;<code>logs/</code>&#x8CC7;&#x6599;&#x593E;&#x3001;&#x8A2D;&#x5B9A;&#x6A94; <code>airflow.cfg</code> &#x4EE5;&#x53CA; SQLite &#x7684;&#x8CC7;&#x6599;&#x5EAB; <code>airflow.db</code></li><li>&#x76EE;&#x524D;&#x8CC7;&#x6599;&#x593E;&#x7D50;&#x69CB;&#x5982;&#x4E0B;&#xFF1A;</li></ul><pre><code>~/airflow
--airflow-env/
--logs/
--airflow.cfg 
--airflow.db  
</code></pre><h2 id="8%E8%A8%AD%E5%AE%9A%E4%BD%BF%E7%94%A8%E8%80%85">8.&#x8A2D;&#x5B9A;&#x4F7F;&#x7528;&#x8005;</h2><pre><code class="language-shell">airflow users create --username admin --firstname FIRST_NAME --lastname LAST_NAME --role Admin --email admin@example.org
</code></pre><ul><li>&#x5BC6;&#x78BC;&#x8A2D;&#x5B9A; 0000&#xFF0C;&#x8A18;&#x5F97;&#x8981;&#x6253;&#x5169;&#x6B21;</li><li>&#x4E0A;&#x9762;&#x7684; admin&#x3001;FIRST_NAME&#x3001;LAST_NAME&#x3001;admin@example.org &#x90FD;&#x53EF;&#x4EE5;&#x81EA;&#x5DF1;&#x4FEE;&#x6539;</li><li>&#x5EFA;&#x8B70;&#x4E0D;&#x4FEE;&#x6539;&#xFF0C;&#x4E0D;&#x7136;&#x7B49;&#x7B49;&#x5FD8;&#x8A18;&#x5E33;&#x5BC6;</li></ul><h2 id="9%E5%B0%87-webserver-%E9%96%8B%E8%B5%B7%E4%BE%86">9.&#x5C07; webserver &#x958B;&#x8D77;&#x4F86;</h2><pre><code class="language-shell">airflow webserver -p 8080
</code></pre><ul><li>webserver &#x57F7;&#x884C;&#x904E;&#x7B2C;&#x4E00;&#x904D;&#x4E4B;&#x5F8C;&#xFF0C;&#x5C08;&#x6848;&#x88E1;&#x9762;&#x6703;&#x9ED8;&#x9ED8;&#x65B0;&#x589E;&#x5169;&#x500B;&#x6A94;&#x6848;&#xFF0C;<code>airflow-webserver.pid</code> &#x548C; <code>webserver_config.py</code> &#xFF0C;&#x7528;&#x65BC;&#x8A18;&#x9304;&#x9023;&#x7DDA;&#x7684;&#x57FA;&#x672C;&#x8A0A;&#x606F;&#x3002;</li></ul><h2 id="10%E9%96%8B%E5%95%9F-localhost">10.&#x958B;&#x555F; Localhost</h2><img src="https://images.unsplash.com/photo-1483817101829-339b08e8d83f?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE3fHxjb2RpbmclMjBkb3dubG9hZHxlbnwwfHx8fDE2OTk1MzE5MzB8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="&#x4E09;&#x3001;Airflow &#x5FEB;&#x6A02;&#x5B89;&#x88DD;&#x6307;&#x5317;(Mac &#x548C; Windows)"><p>&#x7DB2;&#x5740;&#xFF1A;<a href="http://localhost:8080/?ref=data-azubi-shu-ju-xue-tu">http://localhost:8080</a></p><p>&#x767B;&#x5165;&#x756B;&#x9762;(&#x5E33;&#x865F;&#xFF1A;admin &#x5BC6;&#x78BC;&#xFF1A;0000)<br></p><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230918/20135427WHYjRyy8oI.png" class="kg-image" alt="&#x4E09;&#x3001;Airflow &#x5FEB;&#x6A02;&#x5B89;&#x88DD;&#x6307;&#x5317;(Mac &#x548C; Windows)" loading="lazy"></figure><p>Airflow Web UI&#x756B;&#x9762;<br></p><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230918/201354278gZcHl8N10.png" class="kg-image" alt="&#x4E09;&#x3001;Airflow &#x5FEB;&#x6A02;&#x5B89;&#x88DD;&#x6307;&#x5317;(Mac &#x548C; Windows)" loading="lazy"></figure><p>&#x6210;&#x529F;&#x958B;&#x555F;&#x9019;&#x500B;&#x9801;&#x9762;&#xFF0C;&#x4EE3;&#x8868;&#x5B89;&#x88DD;&#x6210;&#x529F;&#x4E86;&#x3002;</p><blockquote>&#x5982;&#x679C;&#x5B89;&#x88DD;&#x9047;&#x5230;&#x554F;&#x984C;&#xFF0C;&#x5728;&#x6307;&#x4EE4;&#x524D;&#x9762;&#x52A0;&#x4E0A;<code>sudo</code>&#xFF0C;&#x6709;&#x6A5F;&#x6703;&#x5C31;&#x89E3;&#x6C7A;&#x4E86;&#x5594;&#xFF5E;</blockquote><p></p><h1 id="windows-%E5%AE%89%E8%A3%9D-step-by-step">Windows &#x5B89;&#x88DD; step by step</h1><h2 id="step1-%E5%AE%89%E8%A3%9Dubuntu%E7%92%B0%E5%A2%83">Step1: &#x5B89;&#x88DD;Ubuntu&#x74B0;&#x5883;</h2><ul><li>&#x5982;&#x679C;&#x900F;&#x904E; VirtualBox VM &#x5C31;&#x6703;&#x4E00;&#x9EDE;&#x90FD;&#x4E0D;&#x5FEB;&#x6A02;&#x4E86;</li></ul><figure class="kg-card kg-image-card"><img src="https://snhou.com/images/emoticon/emoticon15.gif" class="kg-image" alt="&#x4E09;&#x3001;Airflow &#x5FEB;&#x6A02;&#x5B89;&#x88DD;&#x6307;&#x5317;(Mac &#x548C; Windows)" loading="lazy"></figure><p>&#xFF0C;&#x6240;&#x4EE5;&#x53EA;&#x8981;&#x5B89;&#x88DD; Ubuntu &#x7684;&#x7D42;&#x7AEF;&#x6A5F;(terminal)</p><h3 id="1-%E6%89%93%E9%96%8B%E8%A8%AD%E5%AE%9A-%E6%87%89%E7%94%A8%E7%A8%8B%E5%BC%8F%E8%88%87%E5%8A%9F%E8%83%BD">1. &#x6253;&#x958B;&#x8A2D;&#x5B9A; &gt; &#x61C9;&#x7528;&#x7A0B;&#x5F0F;&#x8207;&#x529F;&#x80FD;</h3><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230919/201354275yQ4F0y993.jpg" class="kg-image" alt="&#x4E09;&#x3001;Airflow &#x5FEB;&#x6A02;&#x5B89;&#x88DD;&#x6307;&#x5317;(Mac &#x548C; Windows)" loading="lazy"></figure><ul><li>&#x9EDE;&#x958B;&#x53F3;&#x4E0A;&#x89D2;&#x7684;&#x7A0B;&#x5F0F;&#x548C;&#x529F;&#x80FD;</li></ul><h3 id="2-%E7%A8%8B%E5%BC%8F%E5%92%8C%E5%8A%9F%E8%83%BD-%E9%96%8B%E5%95%9F%E6%88%96%E9%97%9C%E9%96%89-windows-%E5%8A%9F%E8%83%BD">2. &#x7A0B;&#x5F0F;&#x548C;&#x529F;&#x80FD; &gt; &#x958B;&#x555F;&#x6216;&#x95DC;&#x9589; Windows &#x529F;&#x80FD;</h3><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230919/20135427kPLTuVaHUe.jpg" class="kg-image" alt="&#x4E09;&#x3001;Airflow &#x5FEB;&#x6A02;&#x5B89;&#x88DD;&#x6307;&#x5317;(Mac &#x548C; Windows)" loading="lazy"></figure><ul><li>&#x958B;&#x555F; windows &#x5B50;&#x7CFB;&#x7D71; linux &#x7248;<br></li></ul><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230919/20135427FlzwjNbalm.jpg" class="kg-image" alt="&#x4E09;&#x3001;Airflow &#x5FEB;&#x6A02;&#x5B89;&#x88DD;&#x6307;&#x5317;(Mac &#x548C; Windows)" loading="lazy"></figure><h3 id="3-%E9%96%8B%E5%95%9F%E5%91%BD%E4%BB%A4%E6%8F%90%E7%A4%BA%E5%AD%97%E5%85%83cmd">3. &#x958B;&#x555F;&#x547D;&#x4EE4;&#x63D0;&#x793A;&#x5B57;&#x5143;(cmd)</h3><ul><li>&#x8A18;&#x5F97;&#x8981;&#x7528;&#x7CFB;&#x7D71;&#x7BA1;&#x7406;&#x54E1;&#x958B;&#x555F;<br></li></ul><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230919/20135427WOvY7p1yWB.jpg" class="kg-image" alt="&#x4E09;&#x3001;Airflow &#x5FEB;&#x6A02;&#x5B89;&#x88DD;&#x6307;&#x5317;(Mac &#x548C; Windows)" loading="lazy"></figure><ul><li>&#x8F38;&#x5165; <code>wsl --install</code><br></li></ul><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230919/20135427oxhE55CTym.jpg" class="kg-image" alt="&#x4E09;&#x3001;Airflow &#x5FEB;&#x6A02;&#x5B89;&#x88DD;&#x6307;&#x5317;(Mac &#x548C; Windows)" loading="lazy"></figure><h3 id="4-%E6%90%9C%E5%B0%8B%E4%B8%A6%E9%96%8B%E5%95%9F-ubuntu">4. &#x641C;&#x5C0B;&#x4E26;&#x958B;&#x555F; Ubuntu</h3><figure class="kg-card kg-image-card"><img src="https://ithelp.ithome.com.tw/upload/images/20230919/20135427ggfSmYlAAg.jpg" class="kg-image" alt="&#x4E09;&#x3001;Airflow &#x5FEB;&#x6A02;&#x5B89;&#x88DD;&#x6307;&#x5317;(Mac &#x548C; Windows)" loading="lazy"></figure><ul><li>&#x8A2D;&#x5B9A;&#x5E33;&#x865F;&#x548C;&#x5BC6;&#x78BC;</li></ul><h2 id="step2-%E5%9C%A8-ubuntu-terminal-%E5%9F%B7%E8%A1%8C%E5%92%8C-mac-%E7%9B%B8%E5%90%8C%E7%9A%84%E5%AE%89%E8%A3%9D">Step2: &#x5728; Ubuntu Terminal &#x57F7;&#x884C;&#x548C; Mac &#x76F8;&#x540C;&#x7684;&#x5B89;&#x88DD;</h2><ul><li>&#x5B89;&#x88DD;&#x865B;&#x64EC;&#x74B0;&#x5883;&#xFF1A;<code>pip3 install virtualenv</code></li><li>&#x5275;&#x5EFA;&#x5C08;&#x6848;&#x8CC7;&#x6599;&#x593E;&#xFF1A;<code>mkdir /c/Users/{YourUsername}/airflow</code></li><li>&#x9032;&#x5165;&#x5C08;&#x6848;&#x8CC7;&#x6599;&#x593E;&#xFF1A;<code>cd /c/Users/{YourUsername}/airflow</code></li><li>&#x8A2D;&#x5B9A;&#x865B;&#x64EC;&#x74B0;&#x5883;&#x540D;&#x7A31;&#xFF1A;<code>python3 -m venv airflow-env</code></li><li>&#x9032;&#x5165;&#x865B;&#x64EC;&#x74B0;&#x5883;&#xFF1A;<code>source airflow-env/bin/activate</code></li><li>&#x4FEE;&#x6539;&#x8A2D;&#x5B9A;&#xFF1A;&#x958B;&#x555F;<code>vim ~/.bashrc</code>&#xFF0C;&#x52A0;&#x5165;&#x9019;&#x884C;<code>AIRFLOW_HOME=/c/Users/{YourUsername}/airflow</code>&#xFF0C;&#x8CBC;&#x4E0A;&#x4E4B;&#x5F8C;&#xFF0C;&#x6309; <code>esc</code>&#xFF0C;&#x6253; <code>:wq</code> &#x96E2;&#x958B; vim&#x3002;</li><li>&#x56DE;&#x5230;&#x8CC7;&#x6599;&#x593E;&#xFF1A;<code>cd /c/Users/{YourUsername}/airflow</code></li><li>&#x5B89;&#x88DD; Airflow&#xFF1A;<code>pip3 install apache-airflow</code></li><li>&#x5B89;&#x88DD; Airflow &#x7684; DB&#xFF1A;<code>airflow db init</code></li><li>&#x8A2D;&#x5B9A; Airflow &#x4F7F;&#x7528;&#x8005;&#xFF1A;<code>airflow users create --username admin &#x2013;password admin &#x2013;firstname admin &#x2013;lastname admin &#x2013;role Admin &#x2013;email youremail@email.com</code></li></ul><blockquote>&#x4E00;&#x6A23;&#x5BC6;&#x78BC;&#x6253; 0000&#xFF0C;&#x624D;&#x4E0D;&#x6703;&#x5FD8;&#x8A18;</blockquote><ul><li>&#x958B;&#x555F; server&#xFF1A;<code>airflow webserver &#x2013;port 8080</code></li><li>&#x958B;&#x555F; Web UI&#xFF1A; <a href="http://localhost:8080/?ref=data-azubi-shu-ju-xue-tu">http://localhost:8080</a></li></ul><p></p><h1 id="debug-faq">Debug FAQ</h1><h2 id="8080-%E4%B8%8D%E8%83%BD%E9%80%A3%E7%B7%9A">8080 &#x4E0D;&#x80FD;&#x9023;&#x7DDA;</h2><ul><li>&#x5982;&#x679C;&#x4F60;&#x767C;&#x73FE; 8080 port &#x4E00;&#x76F4;&#x958B;&#x4E0D;&#x8D77;&#x4F86;&#xFF0C;&#x6709;&#x53EF;&#x80FD;&#x662F;&#x6B63;&#x5728;&#x8DD1;&#x5176;&#x4ED6;&#x670D;&#x52D9;&#xFF0C;&#x8A72;&#x600E;&#x9EBC;&#x8FA6;&#xFF1F;</li></ul><h3 id="1-%E6%9F%A5%E7%9C%8B%E7%9B%AE%E5%89%8D%E6%AD%A3%E5%9C%A8%E5%9F%B7%E8%A1%8C%E4%BB%80%E9%BA%BC%E6%9C%8D%E5%8B%99">1. &#x67E5;&#x770B;&#x76EE;&#x524D;&#x6B63;&#x5728;&#x57F7;&#x884C;&#x4EC0;&#x9EBC;&#x670D;&#x52D9;</h3><pre><code>lsof -n -i4TCP:8080
</code></pre><p>ouput &#x53EF;&#x80FD;&#x6703;&#x50CF;&#x9019;&#x6A23;&#xFF1A;</p><pre><code>COMMAND   PID  USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
Python  11218  xxx    xx    xx      xx  xxx xxxxxxx xxxx xxxx
</code></pre><ul><li>&#x9019;&#x6642;&#x5019;&#x5C31;&#x77E5;&#x9053;&#x5728;&#x8DD1; python &#x7684;&#x5176;&#x4ED6;&#x670D;&#x52D9;&#xFF0C;PID &#x662F; 11218</li></ul><h3 id="2-%E6%AE%BA%E6%8E%89-pid-%E5%90%A7">2. &#x6BBA;&#x6389; PID &#x5427;~</h3><pre><code>kill 11218
</code></pre><ul><li>&#x5982;&#x679C;&#x9084;&#x6BBA;&#x4E0D;&#x6389;&#x5C31;&#x52A0;&#x4E0A; <code>-9</code> &#x9B54;&#x6CD5;&#x5C31;&#x884C;&#x4E86; <code>kill -9 11218</code></li></ul><h3 id="3-%E9%82%84%E6%98%AF%E4%B8%8D%E8%A1%8C%E6%80%8E%E9%BA%BC%E8%BE%A6%EF%BC%8C%E6%89%93%E4%B8%8D%E9%81%8E%E5%B0%B1%E5%8A%A0%E5%85%A58081">3. &#x9084;&#x662F;&#x4E0D;&#x884C;&#x600E;&#x9EBC;&#x8FA6;&#xFF0C;&#x6253;&#x4E0D;&#x904E;&#x5C31;&#x52A0;&#x5165;<code>8081</code></h3><ul><li>&#x628A; <code>airflow.cfg</code> &#x6253;&#x958B;&#xFF0C;&#x628A; 8080 &#x6539;&#x6210; 8081&#xFF0C;&#x57F7;&#x884C; <code>airflow webserver -p 8081</code>&#xFF0C;workaround &#x6700;&#x8B9A;&#x4E86;&#xFF5E;</li></ul><p></p><h2 id="%E7%B5%90%E8%AA%9E">&#x7D50;&#x8A9E;</h2><p>&#x4E4B;&#x5F8C;&#x6703;&#x4ECB;&#x7D39; Docker &#x548C;&#x5982;&#x4F55;&#x7528; Docker-Compose &#x5B89;&#x88DD;&#x74B0;&#x5883;&#xFF0C;&#x9084;&#x662F;&#x9003;&#x4E0D;&#x6389;&#x5B8C;&#x6574;&#x7684;&#x74B0;&#x5883;&#x5B89;&#x88DD;&#x7684;&#xFF0C;&#x7562;&#x7ADF;&#x4E4B;&#x5F8C; deploy &#x5728;&#x96F2;&#x4E0A;&#x9084;&#x662F;&#x7528; docker &#x6703;&#x6BD4;&#x8F03;&#x597D;&#x3002;</p>]]></content:encoded></item><item><title><![CDATA[二、Apache Airflow 基本介紹]]></title><description><![CDATA[Airflow 的基礎名詞：DAG、Tasks、Operators、Hooks、Relationship。Airflow 的四大組成元件(components)：Webserver、Scheduler、Executor、Metadata database]]></description><link>https://snhou.com/apache-airflow-introduction/</link><guid isPermaLink="false">654cc60a3d629d01078384a4</guid><category><![CDATA[airflow]]></category><dc:creator><![CDATA[Shawn]]></dc:creator><pubDate>Thu, 09 Nov 2023 11:53:51 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1620053265666-09baf5cf6a04?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE3fHxwaXBlbGluZXxlbnwwfHx8fDE2OTk1MzA4NTF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<blockquote><em>&#x9019;&#x7CFB;&#x5217;&#x7684;&#x6587;&#x7AE0;&#x6E90;&#x81EA;&#x6211; 2023/9/16-2023/10/15 &#xA0;&#x53C3;&#x52A0;&#x7684; iT &#x9435;&#x4EBA;&#x8CFD;&#xFF1A;</em><br><a href="https://ithelp.ithome.com.tw/users/20135427/ironman/6216?ref=data-azubi-shu-ju-xue-tu">2023 &#x9435;&#x4EBA;&#x8CFD;&#x7CFB;&#x5217;&#x6587;&#x7AE0;&#xFF1A;</a><strong><a href="https://ithelp.ithome.com.tw/users/20135427/ironman/6216?ref=data-azubi-shu-ju-xue-tu">Airflow &#x662F;&#x4EC0;&#x9EBC;? &#x80FD;&#x5403;&#x55CE; ? &#x6578;&#x64DA;&#x6C34;&#x7BA1;&#x5DE5;&#x7684;&#x8D85;&#x7D1A;&#x8611;&#x83C7;</a></strong></blockquote><h1 id="airflow-%E7%9A%84%E5%9F%BA%E7%A4%8E%E5%90%8D%E8%A9%9E">Airflow &#x7684;&#x57FA;&#x790E;&#x540D;&#x8A5E;</h1><h2 id="dag%EF%BC%9A%E6%9C%89%E5%90%91%E7%84%A1%E7%92%B0%E5%9C%96">DAG&#xFF1A;&#x6709;&#x5411;&#x7121;&#x74B0;&#x5716;</h2><img src="https://images.unsplash.com/photo-1620053265666-09baf5cf6a04?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDE3fHxwaXBlbGluZXxlbnwwfHx8fDE2OTk1MzA4NTF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="&#x4E8C;&#x3001;Apache Airflow &#x57FA;&#x672C;&#x4ECB;&#x7D39;"><p>&#x5168;&#x540D;&#x662F; Directed Acyclic Graph&#xFF0C;&#x4E2D;&#x6587;&#x7FFB;&#x4F5C;&#x6709;&#x5411;&#x7121;&#x74B0;&#x5716;&#xFF0C;&#x767D;&#x8A71;&#x6587;&#x5C31;&#x662F;&#x6709;&#x65B9;&#x5411;(Directed)&#x4E0D;&#x6703;&#x6709;&#x5FAA;&#x74B0;(Acyclic)&#x7684;&#x5716;&#xFF0C;&#x7C21;&#x7A31;&#x70BA; DAG&#xFF0C;&#x5C31;&#x50CF;&#x4E0A;&#x65B9;&#x7684;&#x5716;&#x4E00;&#x6A23;&#xFF0C;&#x7528;&#x9014;&#x662F;&#x6C7A;&#x5B9A;&#x6BCF;&#x500B;&#x4EFB;&#x52D9;&#x7BC0;&#x9EDE;&#x4E4B;&#x9593;&#x7684;&#x9806;&#x5E8F;&#x548C;&#x95DC;&#x4FC2;&#xFF0C;&#x4E26;&#x8A2D;&#x8A08;&#x5DE5;&#x4F5C;&#x6D41;&#x7A0B;&#x5982;&#x4F55;&#x904B;&#x4F5C;&#x3002;</p><blockquote>DAG &#x6BCF;&#x6B21;&#x57F7;&#x884C;&#x90FD;&#x6703;&#x5BE6;&#x4F8B;&#x5316;(Instantiate)&#x51FA;&#x4E00;&#x500B; DAG run&#xFF0C;&#x5176;&#x4E2D;&#x5305;&#x542B; DAG &#x7684;&#x57FA;&#x790E;&#x8A2D;&#x5B9A;&#xFF0C;&#x4F8B;&#x5982;&#x9047;&#x5230;&#x932F;&#x8AA4;&#x8981;&#x91CD;&#x8A66;&#x5E7E;&#x6B21;&#xFF0C;&#x6BCF;&#x6B21;&#x9593;&#x8DDD;&#x8981;&#x591A;&#x4E45;&#x7B49;&#x7B49;</blockquote><h2 id="tasks%EF%BC%9A%E5%B7%A5%E4%BD%9C%E4%BB%BB%E5%8B%99">Tasks&#xFF1A;&#x5DE5;&#x4F5C;&#x4EFB;&#x52D9;</h2><p>&#x6BCF;&#x500B; DAG &#x88E1;&#x9762;&#x90FD;&#x6709;&#x7121;&#x6578;&#x500B; Tasks(&#x5DE5;&#x4F5C;&#x4EFB;&#x52D9;)&#xFF0C;&#x6BCF;&#x500B;&#x4EFB;&#x52D9;&#x53EF;&#x4EE5;&#x60F3;&#x6210;&#x662F;&#x5B8C;&#x6210;&#x4E00;&#x4EF6;&#x4E8B;&#xFF0C;&#x5C31;&#x50CF;&#x662F;&#x4E0A;&#x9762;&#x5716;&#x7684;&#x7576;&#x4E2D;&#x7684;<code>run_this_first</code>&#x3001;<code>branching</code>&#x7684;&#x7BC0;&#x9EDE;&#xFF0C;&#x5C0D;&#x61C9;&#x5230; Python &#x7684;&#x7A0B;&#x5F0F;&#x5C31;&#x662F;&#x4E00;&#x500B;&#x500B;&#x7684; Function&#x3002;</p><h2 id="operators%EF%BC%9A%E6%93%8D%E4%BD%9C%E5%93%A1-%E6%93%8D%E4%BD%9C%E7%AC%A6">Operators&#xFF1A;&#x64CD;&#x4F5C;&#x54E1; / &#x64CD;&#x4F5C;&#x7B26;</h2><p>&#x5728; airflow &#x7576;&#x4E2D;&#xFF0C;Operators &#x53C8;&#x662F;&#x66F4;&#x5C0F;&#x7684;&#x55AE;&#x4F4D;&#xFF0C;&#x4E00;&#x500B; Tasks &#x7576;&#x4E2D;&#x53EF;&#x80FD;&#x6709;&#x591A;&#x500B; Operators&#xFF0C;Operators &#x901A;&#x5E38;&#x6703;&#x8CA0;&#x8CAC;&#x5F88;&#x7279;&#x5B9A;&#x7684;&#x4EFB;&#x52D9;&#xFF0C;&#x6240;&#x6709;&#x7684; Operators &#x90FD;&#x662F;&#x7E7C;&#x627F; BashOperator &#x6240;&#x8A2D;&#x8A08;&#x51FA;&#x4F86;&#x7684;&#x985E;&#x5225;&#xFF0C;&#x8209;&#x4F8B;&#x4E00;&#x4E9B;&#x7279;&#x5B9A;&#x7684;&#x5DE5;&#x4F5C;&#x5C31;&#x5F88;&#x597D;&#x7406;&#x89E3;&#x4E86;&#xFF1A;</p><ul><li>BashOperator: &#x57F7;&#x884C; bash &#x6307;&#x4EE4;</li><li>PythonOperator&#xFF1A;&#x547C;&#x53EB; Python &#x7684;&#x51FD;&#x6578;</li><li>EmailOperator&#xFF1A;&#x50B3;&#x9001; Email &#x7684;&#x901A;&#x77E5;</li><li>MySqlOperator&#xFF1A;&#x64CD;&#x4F5C;&#x8207;&#x9023;&#x63A5; MySQL</li><li>BigQueryOperator&#xFF1A;&#x57F7;&#x884C; BigQuery &#x7684; SQL &#x6307;&#x4EE4;</li></ul><p>&#x901A;&#x5E38; Operator &#x53EF;&#x4EE5;&#x5206;&#x6210;&#x4E09;&#x7A2E;&#x4E3B;&#x8981;&#x985E;&#x578B;&#xFF1A;</p><ol><li>&#x904B;&#x884C;&#x76F4;&#x5230;&#x6EFF;&#x8DB3;&#x7279;&#x5B9A;&#x689D;&#x4EF6;</li><li>&#x4F7F;&#x7528;&#x4E0D;&#x540C;&#x8EDF;&#x9AD4;&#x6216;&#x7CFB;&#x7D71;&#x7684;&#x529F;&#x80FD;</li><li>&#x50B3;&#x905E;&#x8CC7;&#x6599;</li></ol><h2 id="hooks%EF%BC%9A%E9%89%A4%E5%AD%90-%E6%8E%A5%E5%8F%A3">Hooks&#xFF1A;&#x9264;&#x5B50;/ &#x63A5;&#x53E3;</h2><p>Hooks &#x53EF;&#x4EE5;&#x548C;&#x7B2C;&#x4E09;&#x65B9;&#x7CFB;&#x7D71;&#x4E92;&#x52D5;&#xFF0C;&#x7B2C;&#x4E09;&#x65B9;&#x7CFB;&#x7D71;&#x662F;&#x4EC0;&#x9EBC;&#xFF1F;&#x5C31;&#x662F;&#x975E;&#x5B98;&#x65B9;&#x548C;&#x904B;&#x71DF;&#x65B9;&#x958B;&#x767C;&#x7684;&#x7CFB;&#x7D71;&#xFF0C;&#x4F8B;&#x5982;&#x6211;&#x5011;&#x8981;&#x628A; Airflow &#x548C; MySQL &#x6E9D;&#x901A;&#xFF0C;&#x5C31;&#x5FC5;&#x9808;&#x8981;&#x7528;&#x5230; Hooks &#x5E6B;&#x52A9;&#x6211;&#x5011;&#x50B3;&#x905E;&#x8CC7;&#x6599;&#x9032;&#x5230; Airflow&#xFF0C;&#x6700;&#x5F8C;&#x51FA;&#x53BB;&#x4E5F;&#x9700;&#x8981; Hooks &#x624D;&#x80FD;&#x9001;&#x51FA;&#x3002;</p><p>&#x548C;&#x5E73;&#x5E38;&#x6211;&#x5011;&#x5E38;&#x5E38;&#x807D;&#x5230;&#x7684; webhook &#x4E0D;&#x592A;&#x4E00;&#x6A23;&#xFF0C; webhook &#x6BD4;&#x8F03;&#x50CF;&#x76E3;&#x807D;&#x7684;&#x6A5F;&#x5236;&#xFF0C;&#x5982;&#x679C;&#xFF58;&#xFF58;&#x4E8B;&#x60C5;&#x767C;&#x751F;&#x8A18;&#x5F97;&#x901A;&#x77E5;&#x6211;&#xFF0C;&#x50CF;&#x662F;&#x300C;&#x6309;&#x8B9A;&#x3001;&#x8A02;&#x95B1;&#x3001;&#x958B;&#x555F;&#x5C0F;&#x9234;&#x943A;&#x300D;&#x7684;&#x5C0F;&#x9234;&#x943A;&#xFF0C;&#x5C31;&#x662F;youtuber&#x767C;&#x7247;&#x7684;&#x6642;&#x5019;&#x53EF;&#x4EE5;&#x6536;&#x5230;&#x901A;&#x77E5;&#xFF0C;&#x5982;&#x679C;&#x5C0D;&#x65BC; webhook &#x9084;&#x662F;&#x6709;&#x9EDE;&#x6A21;&#x7CCA;&#xFF0C;&#x63A8;&#x85A6;&#x770B;&#x9019;&#x7BC7;&#x6587;&#x7AE0; <a href="https://ithelp.ithome.com.tw/articles/10193212?ref=data-azubi-shu-ju-xue-tu">&#x5361;&#x7C73;&#x72D7;&#xFF1A;&#x8A8D;&#x8B58; Webhook</a> &#x3002;</p><h2 id="relationship%EF%BC%9A%E7%AF%80%E9%BB%9E%E9%97%9C%E4%BF%82">Relationship&#xFF1A;&#x7BC0;&#x9EDE;&#x95DC;&#x4FC2;</h2><p>&#x5728;&#x4EFB;&#x52D9;&#x4E4B;&#x9593;&#xFF0C;&#x6211;&#x5011;&#x53EF;&#x4EE5;&#x5B9A;&#x7FA9;&#x524D;&#x5F8C;&#x9806;&#x5E8F;&#x548C;&#x76F8;&#x4E92;&#x95DC;&#x4FC2;&#xFF0C;&#x751A;&#x81F3;&#x5C07;&#x591A;&#x500B;&#x4EFB;&#x52D9;&#x5305;&#x518D;&#x4E00;&#x8D77;&#x6210;&#x70BA; task_group&#xFF0C;&#x5B9A;&#x7FA9;&#x4E0A;&#x6709;&#x591A;&#x7A2E;&#x4E0D;&#x540C;&#x65B9;&#x5F0F;&#xFF0C;&#x50CF;&#x9019;&#x6A23;&#xFF1A;</p><pre><code>task1 &gt;&gt; task2 &gt;&gt; task3
</code></pre><pre><code>task3(task2(task1))
</code></pre><pre><code>task1.set_downstream(task2)
task3.set_upstream(task2)
</code></pre><ul><li>&#x9019;&#x4E09;&#x7A2E;&#x90FD;&#x662F;&#x4EE3;&#x8868;&#x5148;&#x505A; task1&#xFF0C;&#x63A5;&#x8457; task2&#xFF0C;&#x518D;&#x4F86; task3</li></ul><hr><h3 id="taskgroup-%E6%9C%83%E5%83%8F%E9%80%99%E6%A8%A3">task_group &#x6703;&#x50CF;&#x9019;&#x6A23;</h3><pre><code>[task1 ,task2] &gt;&gt; task3
</code></pre><ul><li>&#x4EE3;&#x8868;&#x8981;&#x5148;&#x505A;&#x5B8C; task1&#x3001;task2&#xFF0C;&#x63A5;&#x8457;&#x624D;&#x6703;&#x505A; task3</li><li>&#x800C;&#x4E14; task1&#x3001;task2 &#x7684;&#x57F7;&#x884C;&#x662F;&#x540C;&#x6642;&#x767C;&#x751F;&#x7684;</li><li>task_group &#x7576;&#x4E2D;&#x4E5F;&#x53EF;&#x80FD;&#x6703;&#x6709;&#x66F4;&#x8907;&#x96DC;&#x6709;&#x9806;&#x5E8F;&#x76F8;&#x4F9D;&#x6027;&#x7684;&#x884C;&#x70BA;</li></ul><p></p><h1 id="airflow-%E7%9A%84%E5%9B%9B%E5%A4%A7%E7%B5%84%E6%88%90%E5%85%83%E4%BB%B6components">Airflow &#x7684;&#x56DB;&#x5927;&#x7D44;&#x6210;&#x5143;&#x4EF6;(components)</h1><h2 id="webserver%EF%BC%9A%E7%B6%B2%E9%A0%81%E4%BC%BA%E6%9C%8D%E5%99%A8-%E4%BD%BF%E7%94%A8%E8%80%85%E4%BB%8B%E9%9D%A2">Webserver&#xFF1A;&#x7DB2;&#x9801;&#x4F3A;&#x670D;&#x5668; / &#x4F7F;&#x7528;&#x8005;&#x4ECB;&#x9762;</h2><p>Airflow &#x7684;&#x4F7F;&#x7528;&#x8005;&#x4ECB;&#x9762;&#xFF0C;&#x5C31;&#x662F;&#x6211;&#x5011;&#x524D;&#x5E7E;&#x5929;&#x5B89;&#x88DD;&#x5B8C;&#x958B;&#x555F;&#x7684;&#x7DB2;&#x9801; (<a href="http://localhost:8080/?ref=data-azubi-shu-ju-xue-tu">http://localhost:8080</a>) &#xFF0C;&#x53EF;&#x4EE5;&#x5728;&#x4E0A;&#x9762;&#x8B80;&#x53D6;&#x5404;&#x9805;&#x7D00;&#x9304;&#x6A94;&#x3002;</p><h2 id="scheduler%EF%BC%9A%E6%8E%92%E7%A8%8B%E8%AA%BF%E5%BA%A6%E5%99%A8">Scheduler&#xFF1A;&#x6392;&#x7A0B;&#x8ABF;&#x5EA6;&#x5668;</h2><p>&#x76E3;&#x63A7;&#x6240;&#x6709; DAGs &#x548C;&#x76F8;&#x95DC;&#x7684;&#x4EFB;&#x52D9;&#xFF0C;&#x8ABF;&#x5EA6;&#x76EE;&#x524D;&#x8A72;&#x54EA;&#x4E00;&#x500B; task &#x57F7;&#x884C;&#xFF0C;&#x63A5;&#x4E0B;&#x4F86;&#x53C8;&#x63DB;&#x54EA;&#x4E00;&#x500B;&#x3002;</p><h2 id="executor%EF%BC%9A%E5%9F%B7%E8%A1%8C%E5%99%A8">Executor&#xFF1A;&#x57F7;&#x884C;&#x5668;</h2><p>&#x5C08;&#x6CE8;&#x5728;&#x57F7;&#x884C;&#x4EFB;&#x52D9;&#xFF0C;&#x6709;&#x591A;&#x7A2E;&#x4E0D;&#x540C;&#x985E;&#x578B;&#xFF0C;&#x4F8B;&#x5982;&#xFF1A;LocalExecutor&#x3001;CeleryExecutor &#x548C; KubernetsExecutor&#x3002;</p><blockquote>&#x4E4B;&#x5F8C;&#x6709;&#x6A5F;&#x6703;&#x518D;&#x8A73;&#x7D30;&#x4ECB;&#x7D39;&#xFF0C;&#x9019;&#x90E8;&#x5206;&#x6211;&#x4E5F;&#x53EA;&#x719F;&#x6089; Local &#x548C; Celery&#x3002;</blockquote><h2 id="metadata-database%EF%BC%9A%E6%8F%8F%E8%BF%B0%E6%AA%94%E8%B3%87%E6%96%99%E5%BA%AB">Metadata database&#xFF1A;&#x63CF;&#x8FF0;&#x6A94;&#x8CC7;&#x6599;&#x5EAB;</h2><h3 id="metadata-before-metadata-database">Metadata before Metadata database</h3><p>&#x6211;&#x5011;&#x5148;&#x4F86;&#x8A8D;&#x8B58; metadata&#xFF0C;&#x9019;&#x500B;&#x8A5E;&#x4E5F;&#x6703;&#x5E38;&#x5E38;&#x770B;&#x5230;&#xFF0C;&#x901A;&#x5E38;&#x7FFB;&#x4F5C;&#x300C;&#x8A6E;&#x91CB;&#x8CC7;&#x6599;&#x300D;&#x6216;&#x300C;&#x5F8C;&#x8A2D;&#x8CC7;&#x6599;&#x300D;&#xFF0C;&#x610F;&#x601D;&#x5C31;&#x662F;&#x300C;&#x63CF;&#x8FF0;xx&#x8CC7;&#x6599;&#x300D;&#x7684;&#x300C;&#x8CC7;&#x6599;&#x300D;&#xFF0C;&#x597D;&#x7E5E;&#x53E3;&#xFF0C;&#x5C31;&#x50CF;&#x662F;&#x4E00;&#x672C;&#x66F8;&#x7684;&#x5E8F;&#xFF0C;&#x5C31;&#x662F;&#x63CF;&#x8FF0;&#x6587;&#x5B57;&#x7684;&#x6587;&#x5B57;&#xFF0C;&#x9019;&#x6A23;&#x6709;&#x985E;&#x6BD4;&#x5230;&#x55CE;(&#x81E8;&#x6642;&#x60F3;&#x7684;XD)&#xFF0C;&#x53CD;&#x6B63;&#x901A;&#x5E38;&#x7DB2;&#x9801;&#x7684; header &#x88E1;&#x9762;&#x6709; meta tag&#xFF0C;&#x5C31;&#x662F;&#x63CF;&#x8FF0;&#x7DB2;&#x9801;&#x7684; summary&#xFF0C;&#x5C08;&#x9580;&#x7D66;&#x641C;&#x5C0B;&#x5F15;&#x64CE;(google)&#x770B;&#x7684;&#xFF0C;&#x9019;&#x6A23;&#x5C31;&#x53EF;&#x4EE5;&#x52A0;&#x5FEB;&#x641C;&#x5C0B;&#x5F15;&#x64CE;&#x8A8D;&#x8B58;&#x4F60;&#x7684;&#x7DB2;&#x7AD9;&#xFF0C;&#x6240;&#x4EE5;&#x4F60;&#x770B;&#x5230;&#x5404;&#x7A2E; dataset (&#x8CC7;&#x6599;&#x96C6;)&#xFF0C;&#x5E38;&#x5E38;&#x6703;&#x770B;&#x5230; metadata&#xFF0C;&#x5C31;&#x662F;&#x5728;&#x4ECB;&#x7D39;&#x9019;&#x500B;&#x8CC7;&#x6599;&#x96C6;&#x7684;&#x8CC7;&#x6599;&#x3002;</p><p>&#x6240;&#x4EE5;&#x9019;&#x88E1;&#x7684; Metadata database &#x662F;&#x4EC0;&#x9EBC;&#xFF0C;&#x5C31;&#x662F;&#x7576;&#x4F60;&#x5728;&#x904B;&#x884C; Airflow &#x6642;&#xFF0C;Airflow &#x7576;&#x4E2D;&#x7684;&#x9810;&#x8A2D;&#x503C;&#xFF0C;&#x548C;&#x4F60;&#x63A5;&#x4E0B;&#x4F86;&#x7684;&#x6240;&#x6709;&#x884C;&#x70BA;&#x90FD;&#x6703;&#x88AB;&#x8A18;&#x9304;&#x5728;&#x500B;&#x8CC7;&#x6599;&#x5EAB;&#xFF0C;&#x6240;&#x4EE5;&#x4ED6;&#x4E26;&#x4E0D;&#x662F;&#x4F60;&#x5BE6;&#x969B;&#x5728;&#x8655;&#x7406;&#x7684;&#x8CC7;&#x6599;&#x5EAB;&#xFF0C;&#x800C;&#x662F;&#x7D00;&#x9304;&#x4F60;&#x662F;&#x5982;&#x4F55;&#x8655;&#x7406;&#x8CC7;&#x6599;&#x7684;&#x8CC7;&#x6599;&#x5EAB;&#xFF0C;&#x54C8;&#x54C8;&#xFF0C;&#x4E5F;&#x662F;&#x597D;&#x7E5E;&#x53E3;&#xFF0C;&#x5728;&#x9019;&#x88E1;&#x6703;&#x5132;&#x5B58;&#x6240;&#x6709;&#x5143;&#x4EF6;&#x7684;&#x4E92;&#x52D5;&#x65B9;&#x5F0F;&#x548C;&#x76EE;&#x524D;&#x7684;&#x72C0;&#x614B;&#xFF0C;&#x6BCF;&#x6B21;&#x958B;&#x59CB;&#x904B;&#x884C; Airflow&#xFF0C;&#x4E5F;&#x662F;&#x5F9E;&#x9019;&#x908A;&#x8B80;&#x53D6;&#x904E;&#x53BB;&#x7684;&#x904B;&#x884C;&#x8CC7;&#x6599;&#x51FA;&#x53BB;&#x3002;</p><p></p><h1 id="%E5%85%B6%E4%BB%96%E9%A1%9E%E4%BC%BC-airflow-%E7%9A%84%E5%B7%A5%E5%85%B7">&#x5176;&#x4ED6;&#x985E;&#x4F3C; Airflow &#x7684;&#x5DE5;&#x5177;</h1><ul><li>Spotify &#x7684; Luigi(&#x8DEF;&#x6613;&#x5409;):&#x9019;&#x500B;&#x540D;&#x5B57;&#x5F88;&#x9069;&#x5408;&#x6C34;&#x7BA1;&#x5DE5;&#x8A92;&#xFF0C;1.68k stars / 4k commits<br><a href="https://github.com/spotify/luigi?ref=data-azubi-shu-ju-xue-tu">https://github.com/spotify/luigi</a></li><li>LinkedIn &#x7684; Azkaban(&#x963F;&#x8332;&#x5361;&#x73ED;): 4.3k stars / 3k commits<br><a href="https://github.com/azkaban/azkaban?ref=data-azubi-shu-ju-xue-tu">https://github.com/azkaban/azkaban</a></li><li>Netflix &#x7684; Conductor: 10.7k stars / 3k commits<br><a href="https://github.com/Netflix/conductor?ref=data-azubi-shu-ju-xue-tu">https://github.com/Netflix/conductor</a></li><li>Apache&#x4E5F;&#x6709;&#x53E6;&#x5916;&#x5169;&#x500B;&#x5DE5;&#x5177;&#x80FD;&#x505A;&#x5230;&#x985E;&#x4F3C;&#x7684;&#x5DE5;&#x4F5C;&#x6D41;&#xFF0C;Apache Beam&#x3001;Apache Oozie</li></ul>]]></content:encoded></item><item><title><![CDATA[一、Apache Airflow 的前世今生]]></title><description><![CDATA[Apache Airflow 的歷史、Airflow 是什麼工具、Workflow before Airflow、Airflow 到底是什麼？]]></description><link>https://snhou.com/apache-airflow-history/</link><guid isPermaLink="false">653866444489920107f96189</guid><category><![CDATA[airflow]]></category><dc:creator><![CDATA[Shawn]]></dc:creator><pubDate>Wed, 25 Oct 2023 01:13:51 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1543674892-7d64d45df18b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDI1fHxwaXBlbGluZXxlbnwwfHx8fDE2OTgxOTQ4Nzh8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<blockquote><em>&#x9019;&#x7CFB;&#x5217;&#x7684;&#x6587;&#x7AE0;&#x6E90;&#x81EA;&#x6211; 2023/9/16-2023/10/15 &#xA0;&#x53C3;&#x52A0;&#x7684; iT &#x9435;&#x4EBA;&#x8CFD;&#xFF1A;</em><br><a href="https://ithelp.ithome.com.tw/users/20135427/ironman/6216?ref=data-azubi-shu-ju-xue-tu">2023 &#x9435;&#x4EBA;&#x8CFD;&#x7CFB;&#x5217;&#x6587;&#x7AE0;&#xFF1A;</a><strong><a href="https://ithelp.ithome.com.tw/users/20135427/ironman/6216?ref=data-azubi-shu-ju-xue-tu">Airflow &#x662F;&#x4EC0;&#x9EBC;? &#x80FD;&#x5403;&#x55CE; ? &#x6578;&#x64DA;&#x6C34;&#x7BA1;&#x5DE5;&#x7684;&#x8D85;&#x7D1A;&#x8611;&#x83C7;</a></strong></blockquote><h1 id="%E5%BE%9E%E5%89%8D%E5%BE%9E%E5%89%8D">&#x5F9E;&#x524D;&#x5F9E;&#x524D;</h1><img src="https://images.unsplash.com/photo-1543674892-7d64d45df18b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDI1fHxwaXBlbGluZXxlbnwwfHx8fDE2OTgxOTQ4Nzh8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="&#x4E00;&#x3001;Apache Airflow &#x7684;&#x524D;&#x4E16;&#x4ECA;&#x751F;"><p>2015 &#x5E74;&#xFF0C;Airbnb &#x767C;&#x5C55;&#x8FC5;&#x901F;&#xFF0C;&#x6578;&#x64DA;&#x91CF;&#x5927;&#x5E45;&#x63D0;&#x5347;&#xFF0C;&#x6BCF;&#x5929;&#x5FC5;&#x9808;&#x7BA1;&#x7406;&#x6578;&#x500B;&#x8CC7;&#x6599;&#x6D41;&#x4F86;&#x5B8C;&#x6210;&#x81EA;&#x52D5;&#x5316;&#xFF0C;&#x6578;&#x64DA;&#x7BA1;&#x63A7;&#x9047;&#x5230;&#x56F0;&#x96E3;&#xFF0C;&#x7576;&#x6642;&#x8EAB;&#x70BA; Airbnb &#x7684;&#x8CC7;&#x6599;&#x5DE5;&#x7A0B;&#x5E2B; <a href="https://maximebeauchemin.medium.com/?ref=data-azubi-shu-ju-xue-tu" rel="noreferrer noopener">Maxime Beauchemin</a> &#x958B;&#x767C;&#x51FA;&#x4E86; Airflow&#x3002;</p><blockquote>&#x4FEE;&#x4F46;&#x5E7E;&#x52D2;&#xFF5E;&#x9047;&#x5230;&#x56F0;&#x96E3;&#x9084;&#x80FD;&#x5148;&#x958B;&#x767C;&#x51FA;&#x4E00;&#x500B;&#x7522;&#x54C1;&#xFF01;&#x901A;&#x5E38;&#x5361;&#x4F4F;&#x5728;&#x53F0;&#x7063;&#x53EA;&#x6709; workaround &#x548C; stackoverflow &#x5427;&#xFF5E;&#x679C;&#x7136;&#x5927;&#x795E;&#x601D;&#x8003;&#x5C31;&#x662F;&#x4E0D;&#x4E00;&#x6A23;</blockquote><p>2016 &#x5E74; 4 &#x6708; Airflow &#x5C08;&#x6848;&#x52A0;&#x5165;(&#x6350;&#x7D66;)&#x5B98;&#x65B9; Apache &#x57FA;&#x91D1;&#x6703;(Apache Software Foundation&#xFF0C;ASF)&#xFF0C;&#x9032;&#x5165; Apache &#x5B75;&#x5316;&#x5668;(Apache Incubator)&#xFF0C;2019 &#x5E74;&#x6210;&#x70BA;&#x9802;&#x7D1A;&#x5C08;&#x6848;(Top-Level Project&#xFF0C;TLP)&#x5F9E; Apache &#x5B75;&#x5316;&#x5668;&#x5149;&#x69AE;&#x7562;&#x696D;&#xFF0C;&#x5F9E;&#x6B64; Airflow &#x5C31;&#x6539;&#x540D;&#x70BA; Apache Airflow&#xFF0C;&#x622A;&#x81F3; 2023 &#x5E74; 9 &#x6708;&#xFF0C;&#x5171;&#x6709; 21.4k commits &#x548C; 31.7k stars&#x3002;</p><p></p><ul><li>Apache Airflow &#x5C08;&#x6848;&#x9023;&#x7D50;&#xFF1A;<a href="https://github.com/apache/airflow?ref=data-azubi-shu-ju-xue-tu" rel="noreferrer noopener">https://github.com/apache/airflow</a></li></ul><blockquote>&#x70BA;&#x4EC0;&#x9EBC; Airbnb &#x81EA;&#x5DF1;&#x5DE5;&#x7A0B;&#x5E2B;&#x958B;&#x767C;&#x7684;&#x7522;&#x54C1; Airflow &#x4E0D;&#x81EA;&#x5DF1;&#x7DAD;&#x8B77;&#x8981;&#x7D66; Apache&#xFF0C;&#x9019;&#x6A23;&#x4E0D;&#x662F;&#x5F88;&#x6D6A;&#x8CBB;&#x55CE;&#xFF0C;&#x901A;&#x5E38;&#x662F;&#x56E0;&#x70BA;&#x9019;&#x4E0D;&#x662F;&#x4ED6;&#x5011;&#x4E3B;&#x8981;&#x8B00;&#x751F;&#x7684;&#x5546;&#x696D;&#x6A21;&#x5F0F;&#xFF0C;&#x628A;&#x4ED6;&#x6350;&#x51FA;&#x4F86;&#x8B8A;&#x6210;&#x958B;&#x6E90;&#xFF0C;&#x53CD;&#x800C;&#x5C0D;&#x9019;&#x9805;&#x5C08;&#x6848;&#x66F4;&#x597D;&#xFF0C;Airbnb &#x53EF;&#x80FD;&#x6C92;&#x6709;&#x6210;&#x672C;&#x53BB;&#x9577;&#x671F;&#x7DAD;&#x8B77;&#x3002;<br>Ref: <a href="https://open.firstory.me/story/cl6b2bya904dp01sba54nef7f?ref=data-azubi-shu-ju-xue-tu" rel="noreferrer noopener">Airflow &#x7DAD;&#x8B77;&#x8005; TP &#x8A2A;&#x8AC7; Podcast</a></blockquote><p>&#x76EE;&#x524D; Airflow &#x4E3B;&#x8981;&#x7DAD;&#x8B77;&#x7684;&#x516C;&#x53F8;&#x5C31;&#x662F; <a href="https://www.astronomer.io/?ref=data-azubi-shu-ju-xue-tu" rel="noreferrer noopener">Astronomer</a>&#xFF0C;&#x56E0;&#x70BA; Airflow &#x662F;&#x958B;&#x6E90;&#x7684;&#x6240;&#x4EE5;&#x4E5F;&#x6C92;&#x8FA6;&#x6CD5;&#x5F9E;&#x4E2D;&#x7372;&#x5229;&#xFF0C;Astronomer &#x7684;&#x65B9;&#x5F0F;&#x5C31;&#x662F;&#x80FD;&#x8B93;&#x5927;&#x5BB6;&#x66F4;&#x7C21;&#x55AE;&#x7684;&#x4F7F;&#x7528; Airflow&#xFF0C;&#x6211;&#x5011;&#x5982;&#x679C;&#x8981;&#x81EA;&#x5DF1;&#x67B6;&#x8A2D;&#x74B0;&#x5883;&#xFF0C;&#x53EF;&#x80FD;&#x8981;&#x958B;&#x4E00;&#x500B;&#x96F2;&#x7AEF;&#x7684;&#x865B;&#x64EC;&#x6A5F; (Virtual Machine)&#xFF0C;&#x5728; Google &#x7684; GCP&#x4E0A;&#x53EF;&#x80FD;&#x5C31;&#x662F; Compute Engine&#xFF0C;Amazon &#x7684; AWS &#x4E0A;&#x53EF;&#x80FD;&#x5C31;&#x662F; EC2&#xFF0C;&#x4F46; Astronomer &#x5C31;&#x8B93;&#x4F60;&#x5728;&#x4ED6;&#x5011;&#x5E73;&#x53F0;&#x5C31;&#x80FD;&#x4E00;&#x9375;&#x67B6;&#x8A2D;&#xFF0C;&#x5F8C;&#x7E8C;&#x7DAD;&#x8B77;&#x548C;&#x958B;&#x767C;&#x90FD;&#x80FD;&#x5728;&#x4ED6;&#x5011;&#x5E73;&#x53F0;&#x64CD;&#x4F5C;&#x3002;</p><blockquote>&#x6700;&#x8FD1;&#x767C;&#x73FE; Amazon &#x4E5F;&#x6709;&#x63A8;&#x51FA; MWAA (Managed Workflows for Apache Airflow)&#xFF0C;&#x80FD;&#x8B93; Airflow &#x67B6;&#x8A2D;&#x548C;&#x7DAD;&#x8B77;&#x66F4;&#x7C21;&#x55AE;</blockquote><p></p><h1 id="airflow-%E6%98%AF-%E7%9A%84%E5%B7%A5%E5%85%B7">Airflow &#x662F; ___ &#x7684;&#x5DE5;&#x5177;</h1><ul><li>Apache Airflow is a tool for data orchestration.</li></ul><p>&#x5728;&#x67E5;&#x8CC7;&#x8A0A;&#x7684;&#x6642;&#x5019;&#x5E38;&#x5E38;&#x6703;&#x6709;&#x9019;&#x500B;&#x5B57;&#xFF0C;<strong><strong>Data Orchestration</strong></strong>&#xFF0C;&#x4EE3;&#x8868;&#x8CC7;&#x6599;&#x5354;&#x4F5C;&#x3001;&#x8CC7;&#x6599;&#x7DE8;&#x6392;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x8AAA; Airflow &#x662F;&#x8CC7;&#x6599;&#x5354;&#x8ABF;&#x7BA1;&#x7406;&#x5DE5;&#x5177;&#xFF0C;&#x4F46;&#x807D;&#x5B8C;&#x61C9;&#x8A72;&#x9084;&#x662F;&#x5F88;&#x6A21;&#x7CCA;&#x5427;&#xFF0C;&#x6211;&#x89BA;&#x5F97;&#x4E0A;&#x9762; Podcast &#x63D0;&#x5230;&#x7684;&#x6A02;&#x5718;&#x6307;&#x63EE;&#x6216;&#x662F;&#x9910;&#x5EF3;&#x4E3B;&#x5EDA;&#x7684;&#x8209;&#x4F8B;&#x5C31;&#x597D;&#x61C2;&#x5F88;&#x591A;&#x3002;</p><ul><li>&#x6A02;&#x5718;&#x4E3B;&#x8981;&#x5DE5;&#x4F5C;&#x662F;&#x6F14;&#x594F;&#x97F3;&#x6A02;&#xFF0C;&#x8A92;&#xFF5E;&#x90A3;&#x6307;&#x63EE;&#x5728;&#x5E79;&#x561B;&#xFF1F;&#x6307;&#x63EE;&#x4E26;&#x6C92;&#x6709;&#x76F4;&#x63A5;&#x5728;&#x6F14;&#x594F;&#xFF0C;&#x800C;&#x662F;&#x5728;&#x78BA;&#x4FDD;&#x7BC0;&#x594F;&#x62CD;&#x5B50;&#xFF0C;&#x5354;&#x8ABF;&#x6A02;&#x968A;&#x591A;&#x500B;&#x8072;&#x90E8;&#xFF0C;&#x90A3;&#x53EF;&#x4EE5;&#x6C92;&#x6709;&#x6307;&#x63EE;&#x55CE;&#xFF1F;&#x9019;&#x5C31;&#x8981;&#x770B;&#x898F;&#x6A21;&#x4E86;&#xFF0C;&#x5982;&#x679C;&#x4EBA;&#x6578;&#x5F88;&#x5C11;&#xFF0C;&#x5927;&#x5BB6;&#x4E5F;&#x90FD;&#x5F88;&#x6709;&#x9ED8;&#x5951;&#xFF0C;&#x57FA;&#x672C;&#x4E0A;&#x53EF;&#x4EE5;&#xFF0C;&#x4F46;&#x4EBA;&#x4E00;&#x591A;&#x8D77;&#x4F86;&#x5C31;&#x9EBB;&#x7169;&#x4E86;&#xFF0C;&#x5C31;&#x9700;&#x8981;&#x628A;&#x5354;&#x4F5C;&#x3001;&#x7DE8;&#x6392;&#x3001;&#x5354;&#x8ABF;&#x7BA1;&#x7406;&#x7684;&#x5DE5;&#x4F5C;&#x53E6;&#x5916;&#x6559;&#x7D66;&#x5C08;&#x696D;&#x7684;&#x4EBA;&#x3002;</li><li>&#x9910;&#x5EF3;&#x4E3B;&#x5EDA;&#x4E5F;&#x662F;&#x76F8;&#x4F3C;&#xFF0C;&#x5C0F;&#x9593;&#x7684;&#x53EF;&#x80FD;&#x53EA;&#x6709;&#x4E09;&#x500B;&#x5EDA;&#x5E2B;&#xFF0C;&#x4EBA;&#x4EBA;&#x90FD;&#x8981;&#x716E;&#xFF0C;&#x5927;&#x9593;&#x7684;&#x5C31;&#x6703;&#x5206;&#x914D;&#xFF0C;&#x4E3B;&#x5EDA;&#x6700;&#x91CD;&#x8981;&#x7684;&#x662F;&#x8B93;&#x6240;&#x6709;&#x8A02;&#x55AE;&#x90FD;&#x9806;&#x5229;&#x51FA;&#x55AE;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x6BCF;&#x4E00;&#x9053;&#x83DC;&#x90FD;&#x672C;&#x4EBA;&#x89AA;&#x624B;&#x53BB;&#x716E;&#xFF0C;&#x6240;&#x4EE5;&#x5206;&#x914D;&#x8CC7;&#x6E90;&#x3001;&#x5354;&#x8ABF;&#x7BA1;&#x7406;&#x624D;&#x662F;&#x4E3B;&#x5EDA;&#x771F;&#x6B63;&#x7684;&#x5DE5;&#x4F5C;&#x3002;</li><li>&#x8CC7;&#x6599;&#x4E5F;&#x4E00;&#x6A23;&#xFF0C;&#x5982;&#x679C;&#x6574;&#x9593;&#x516C;&#x53F8;&#x76EE;&#x524D;&#x53EA;&#x6709;&#x4E00;&#x5169;&#x500B;&#x8CC7;&#x6599;&#x6E90;&#xFF0C;&#x6392;&#x7A0B;&#x4E5F;&#x53EA;&#x6709;&#x4E00;&#x5169;&#x500B;&#xFF0C;&#x5176;&#x5BE6;&#x771F;&#x7684;&#x4E0D;&#x9700;&#x8981; Airflow&#xFF0C;&#x6BBA;&#x96DE;&#x7109;&#x7528;&#x725B;&#x5200;&#xFF0C;&#x4F46;&#x662F;&#x7576;&#x8CC7;&#x6599;&#x4F86;&#x6E90;&#x548C;&#x6392;&#x7A0B;&#x8907;&#x96DC;&#x7A0B;&#x5EA6;&#x4E0A;&#x5347;&#x4E4B;&#x5F8C;&#xFF0C;&#x6703;&#x6307;&#x63EE;&#x7684;&#x4E3B;&#x5EDA; Airflow &#x5C31;&#x8981;&#x51FA;&#x99AC;&#x4E86;&#xFF0C;&#x958B;&#x59CB;&#x8CA0;&#x8CAC; Data Orchestration &#x8CC7;&#x6599;&#x6D41;&#x7684;&#x5404;&#x9805;&#x5354;&#x8ABF;&#x7BA1;&#x7406;&#xFF0C;&#x7DE8;&#x6392;&#x51FA;&#x6700;&#x7A69;&#x5B9A;&#x7684;&#x51FA;&#x9910;&#x9806;&#x5E8F;&#xFF0C;&#x6216;&#x662F;&#x78BA;&#x4FDD;&#x591A;&#x500B;&#x8072;&#x90E8;&#x9806;&#x5229;&#x52A0;&#x5165;&#x6F14;&#x594F;&#xFF0C;&#x9019;&#x6A23;&#x5F8C;&#x7E8C;&#x7684;&#x5BA2;&#x4EBA;(&#x8001;&#x95C6;&#x3001;PM)&#x548C;&#x807D;&#x773E;(DS&#x8CC7;&#x6599;&#x79D1;&#x5B78;&#x5BB6;&#x3001;DA&#x8CC7;&#x6599;&#x5206;&#x6790;&#x5E2B;)&#x624D;&#x6703;&#x6EFF;&#x610F;&#xFF0C;&#x6216;&#x662F;&#x7532;&#x65B9;&#x7238;&#x7238;&#x624D;&#x6703;&#x8CB7;&#x55AE;&#x3002;</li></ul><h1 id="workflow-before-airflow"><strong>Workflow before Airflow</strong></h1><p>&#x8A0E;&#x8AD6; Airflow &#x524D;&#xFF0C;&#x5148;&#x554F;&#x554F;&#x5927;&#x5BB6;&#x6709;&#x807D;&#x904E; Workflow &#x55CE;&#xFF1F;&#x53EF;&#x4EE5;&#x7FFB;&#x4F5C;&#x5DE5;&#x4F5C;&#x6D41;&#xFF0C;&#x5728;&#x8CC7;&#x6599;&#x9818;&#x57DF;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x7A31;&#x4F5C; Dataflow (&#x8CC7;&#x6599;&#x6D41;)&#xFF0C;&#x901A;&#x5E38;&#x5C31;&#x662F;&#x4E00;&#x9023;&#x4E32;&#x7684; Data Engineering (&#x8CC7;&#x6599;&#x5DE5;&#x7A0B;)&#x7684;&#x884C;&#x70BA;&#x76F8;&#x4E92;&#x9023;&#x63A5;&#x3002;<br></p><blockquote>&#x4EC0;&#x9EBC;&#xFF1F; Data Engineering &#x662F;&#x4EC0;&#x9EBC;&#xFF1F;&#x597D;&#x591A;&#x540D;&#x8A5E;&#x311A;&#x311A;&#x311A;&#x311A;&#xFF1F;</blockquote><p><br>&#x5176;&#x5BE6;&#x9019;&#x4E9B;&#x901A;&#x901A;&#x90FD;&#x5FD8;&#x8A18;&#x4E5F;&#x6C92;&#x95DC;&#x4FC2;&#xFF0C;&#x5C31;&#x50CF;&#x662F;&#x5927;&#x5B78;&#x4FEE;&#x8AB2;&#x90FD;&#x6703;&#x6709;&#x300C;xxxx&#x5C0E;&#x8AD6;/&#x6982;&#x8AD6;&#x300D;&#xFF0C;&#x90FD;&#x53EA;&#x662F;&#x4E00;&#x4E9B;&#x80CC;&#x666F;&#x77E5;&#x8B58;&#xFF0C;&#x5FD8;&#x8A18;&#x4E5F;&#x53EF;&#x4EE5;&#xFF0C;&#x4EE5;&#x5F8C;&#x4E00;&#x908A;&#x5BE6;&#x4F5C;&#x5C31;&#x6703;&#x6162;&#x6162;&#x60F3;&#x8D77;&#x4F86;&#x4E86;&#x3002;</p><hr><p>&#x597D;&#x7684;&#xFF0C;&#x5207;&#x56DE;&#x6B63;&#x984C;&#xFF0C;Data Engineering &#x5C31;&#x662F;&#x4EFB;&#x4F55;&#x8207;&#x6578;&#x64DA;&#x6709;&#x95DC;&#x7684;&#x884C;&#x70BA;&#xFF0C;&#x53EF;&#x80FD;&#x662F;&#x6536;&#x96C6;&#x6578;&#x64DA;&#x3001;&#x8A2D;&#x8A08;&#x6578;&#x64DA;&#x67B6;&#x69CB;&#x3001;&#x5132;&#x5B58;&#x6578;&#x64DA;&#x3001;&#x5206;&#x6790;&#x6578;&#x64DA;&#x7B49;&#x7B49;&#xFF0C;&#x4E0D;&#x9650;&#x4EFB;&#x4F55;&#x5DE5;&#x5177;&#xFF0C;&#x6240;&#x4EE5;&#x5C31;&#x7B97;&#x4E00;&#x884C;&#x7A0B;&#x5F0F;&#x4E5F;&#x6C92;&#x5BEB;&#xFF0C;&#x7528;&#x624B;&#x5BEB;&#x7D71;&#x8A08;&#x3001;&#x8A08;&#x7B97;&#x6A5F;&#x52A0;&#x7E3D;&#x3001;Excel&#x6574;&#x7406;&#xFF0C;&#x9019;&#x4E9B;&#x90FD;&#x53EF;&#x4EE5;&#x7A31;&#x4F5C; Data Engineering (&#x8CC7;&#x6599;&#x5DE5;&#x7A0B;)&#xFF0C;&#x5E38;&#x5E38;&#x807D;&#x5230;&#x7684; ETL &#xFF0C;extract &#x64F7;&#x53D6;&#x8CC7;&#x6599;&#x3001;transform &#x8F49;&#x63DB;&#x8CC7;&#x6599;&#x3001;load &#x8F09;&#x5165;&#x8CC7;&#x6599;&#xFF0C;&#x90FD;&#x662F; Data Engineering &#x5176;&#x4E2D;&#x4E00;&#x90E8;&#x4EFD;&#x3002;&#x90A3; Workflow &#x52D2;&#xFF0C;Workflow &#x5DE5;&#x4F5C;&#x6D41;&#x5C31;&#x662F;&#x628A;&#x525B;&#x525B;&#x63D0;&#x5230;&#x7684;&#x5404;&#x7A2E;&#x548C;&#x8CC7;&#x6599;&#x8655;&#x7406;&#x7684;&#x884C;&#x70BA;&#x4E32;&#x5728;&#x4E00;&#x8D77;&#x3002;</p><!--kg-card-begin: markdown--><p><img src="https://d1dwq032kyr03c.cloudfront.net/upload/images/20230920/20135427CQywQPWMrh.png" alt="&#x4E00;&#x3001;Apache Airflow &#x7684;&#x524D;&#x4E16;&#x4ECA;&#x751F;" loading="lazy"></p>
<!--kg-card-end: markdown--><h1 id="airflow-%E5%88%B0%E5%BA%95%E6%98%AF%E4%BB%80%E9%BA%BC%EF%BC%9F"><strong>Airflow &#x5230;&#x5E95;&#x662F;&#x4EC0;&#x9EBC;&#xFF1F;</strong></h1><p>Airflow &#x5C31;&#x662F;&#x4E00;&#x500B;&#x53EF;&#x4EE5;&#x7528;&#x7A0B;&#x5F0F;&#x5275;&#x5EFA; Workflow &#x7684;&#x958B;&#x6E90; (open-source) &#x5E73;&#x53F0;&#x5DE5;&#x5177;&#xFF0C;&#x53EF;&#x4EE5;&#x5275;&#x5EFA;&#x3001;&#x6392;&#x7A0B;&#x3001;&#x76E3;&#x63A7;&#x591A;&#x500B;&#x4E0D;&#x540C;&#x7684; Workflow&#xFF0C;&#x4E26;&#x5728; Airflow &#x7684;&#x7DB2;&#x9801;&#x5DE5;&#x5177; (Web UI) &#x67E5;&#x770B;&#xFF0C;&#x65B9;&#x4FBF;&#x8655;&#x7406;&#x8907;&#x96DC;&#x7684;&#x5DE5;&#x4F5C;&#x6D41;&#x7A0B;&#xFF0C;&#x9664;&#x6B64;&#x4E4B;&#x5916;&#xFF0C;Airflow &#x9084;&#x6709;&#x4EE5;&#x4E0B;&#x512A;&#x9EDE;&#xFF1A;</p><ul><li>&#x5168;&#x7A0B;&#x4F7F;&#x7528; Python&#xFF0C;&#x4E0D;&#x7528;&#x53E6;&#x5916;&#x5B78;&#x5DE5;&#x5177;&#x7684;&#x7A0B;&#x5F0F;&#x8A9E;&#x8A00;</li><li>&#x53EF;&#x64F4;&#x5C55;&#x6027;&#x9AD8;&#xFF0C;&#x5F9E;&#x5C0F;&#x578B;&#x5DE5;&#x4F5C;&#x6D41;&#x5230;&#x8655;&#x7406;&#x5E7E;&#x767E;&#x689D;&#x5DE5;&#x4F5C;&#x6D41;&#x90FD;&#x80FD;&#x52DD;&#x4EFB;</li><li>&#x53EF;&#x548C;&#x5927;&#x591A;&#x6578;&#x7684;&#x8EDF;&#x9AD4;&#x548C;&#x8CC7;&#x6599;&#x5EAB;&#x6574;&#x5408;</li><li>&#x793E;&#x7FA4;&#x6D3B;&#x8E8D;&#xFF0C;&#x8A0E;&#x8AD6;&#x5EA6;&#x9AD8;&#xFF0C;&#x4E26;&#x6301;&#x7E8C;&#x66F4;&#x65B0;&#x4E2D;</li></ul><!--kg-card-begin: markdown--><p><img src="https://d1dwq032kyr03c.cloudfront.net/upload/images/20230920/20135427l9sdfPdQPQ.png" alt="&#x4E00;&#x3001;Apache Airflow &#x7684;&#x524D;&#x4E16;&#x4ECA;&#x751F;" loading="lazy"></p>
<!--kg-card-end: markdown--><p>Ref: <a href="https://airflow.apache.org/docs/apache-airflow/stable/core-concepts/dags.html?ref=data-azubi-shu-ju-xue-tu" rel="noreferrer noopener">airflow &#x5B98;&#x65B9;&#x6587;&#x4EF6;</a></p><p>&#x50CF;&#x662F;&#x9019;&#x500B; Airflow &#x5B98;&#x7DB2;&#x7684;&#x7BC4;&#x4F8B;&#xFF0C;&#x6211;&#x5011;&#x53EF;&#x4EE5;&#x8A2D;&#x5B9A;&#x5404;&#x9805;&#x4EFB;&#x52D9;&#x4E4B;&#x9593;&#x7684;&#x9806;&#x5E8F;&#xFF0C;&#x5148;&#x57F7;&#x884C; <code>run_this_first</code> &#x518D;&#x57F7;&#x884C; <code>branching</code> &#xFF0C;&#x63A5;&#x8457;&#x6392;&#x7A0B;&#x5206;&#x958B;&#x5B8C;&#x6210; <code>branch_a</code> &#x548C; <code>branch_b</code> &#xFF0C;&#x6700;&#x5F8C; <code>branch_a</code> &#x518D;&#x7D50;&#x5408; <code>branching</code> &#x7684;&#x8CC7;&#x6599;&#xFF0C;&#x4E00;&#x8D77;&#x57F7;&#x884C; <code>join</code> &#x7684;&#x4EFB;&#x52D9;&#xFF0C;&#x6BCF;&#x500B;&#x4EFB;&#x52D9;&#x4E4B;&#x9593;&#x7684;&#x76F8;&#x4F9D;&#x6027;&#x90FD;&#x53EF;&#x4EE5;&#x81EA;&#x5DF1;&#x8A2D;&#x5B9A;&#x3002;</p>]]></content:encoded></item><item><title><![CDATA[School 42 : 不收費、不問背景、沒有老師的程式學校]]></title><description><![CDATA[School 42 是什麼？要怎麼申請？沒有老師要怎麼學習？這樣學習有用嗎，和自己在家裡學有什麼不一樣？]]></description><link>https://snhou.com/school42/</link><guid isPermaLink="false">644505195a24220211883be3</guid><category><![CDATA[school42]]></category><dc:creator><![CDATA[Shawn]]></dc:creator><pubDate>Thu, 27 Jul 2023 09:14:01 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1588072432836-e10032774350?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDN8fHNjaG9vbHxlbnwwfHx8fDE2ODIxODE5NzY&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1588072432836-e10032774350?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDN8fHNjaG9vbHxlbnwwfHx8fDE2ODIxODE5NzY&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="School 42 : &#x4E0D;&#x6536;&#x8CBB;&#x3001;&#x4E0D;&#x554F;&#x80CC;&#x666F;&#x3001;&#x6C92;&#x6709;&#x8001;&#x5E2B;&#x7684;&#x7A0B;&#x5F0F;&#x5B78;&#x6821;"><p></p><h2 id="%E5%89%8D%E8%A8%80">&#x524D;&#x8A00;</h2><p>&#x4ECA;&#x5E74; 3 &#x6708;&#xFF0C;&#x6211;&#x53C3;&#x52A0;&#x4E86;&#x5728;&#x67CF;&#x6797;&#x7684; School 42 &#x5165;&#x5B78;&#x8003; Piscine&#xFF0C;&#x4E5F;&#x9806;&#x5229;&#x901A;&#x904E;&#x4E86;&#xFF0C;&#x6B63;&#x5F0F;&#x8AB2;&#x7A0B;&#x5F9E; 5 &#x6708;&#x958B;&#x59CB;&#xFF0C;&#x6211;&#x53C3;&#x8207;&#x4E00;&#x500B;&#x591A;&#x6708;&#x4E4B;&#x5F8C;&#xFF0C;&#x5F88;&#x60B2;&#x6158;&#x7684;&#x7C3D;&#x8B49;&#x5230;&#x671F;&#x4E86;&#xFF0C;&#x6211;&#x53EA;&#x80FD;&#x5148;&#x66AB;&#x6642;&#x4F11;&#x5B78;(&#x5728; School 42&#x7684;&#x5236;&#x5EA6;&#x4E2D;&#x53EB;&#x51B7;&#x51CD; Freeze)&#xFF0C;&#x5E0C;&#x671B;&#x6211;&#x9084;&#x6709;&#x6A5F;&#x6703;&#x80FD;&#x56DE;&#x53BB;&#x7E7C;&#x7E8C;&#x5B78;&#x7FD2;&#x3002;</p><h2></h2><h2 id="school-42-%E7%B0%A1%E4%BB%8B">School 42 &#x7C21;&#x4ECB;</h2><p>&#x4E00;&#x9593;&#x7531;&#x6CD5;&#x570B;&#x4F01;&#x696D;&#x5BB6;&#x5C3C;&#x723E;(Xavier Niel)&#x65BC; 2013 &#x5275;&#x7ACB;&#x7684;&#x7A0B;&#x5F0F;&#x5B78;&#x6821;&#xFF0C;&#x4E0D;&#x9700;&#x8981;&#x5B78;&#x8CBB;&#xFF0C;&#x4E5F;&#x6C92;&#x6709;&#x8001;&#x5E2B;&#xFF0C;&#x5B78;&#x751F;&#x9700;&#x8981;&#x900F;&#x904E;&#x89E3;&#x6C7A;&#x4EFB;&#x52D9;&#x7D2F;&#x7A4D;&#x7A0B;&#x5F0F;&#x80FD;&#x529B;&#xFF0C;&#x76EE;&#x524D;&#x5DF2;&#x6709;&#x5C07;&#x8FD1;50&#x500B;&#x6821;&#x5340;&#xFF0C;&#x904D;&#x4F48;&#x5168;&#x4E16;&#x754C;&#x3002;</p><p>&#x76EE;&#x524D;&#x6709;&#x7684;&#x6821;&#x5340;&#x53EF;&#x4EE5;&#x67E5;&#x770B;&#x4E0B;&#x65B9;&#x9023;&#x7D50;&#xFF1A;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.42network.org/42-schools/?ref=data-azubi-shu-ju-xue-tu"><div class="kg-bookmark-content"><div class="kg-bookmark-title">42 Schools | 42 - A Global Network of IT Campuses</div><div class="kg-bookmark-description">The global network of 42 schools is an ever-growing community. Find out how to create a campus and become a partner of 42.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.42network.org/wp-content/themes/e42-network/img/apple-touch-icon.png" alt="School 42 : &#x4E0D;&#x6536;&#x8CBB;&#x3001;&#x4E0D;&#x554F;&#x80CC;&#x666F;&#x3001;&#x6C92;&#x6709;&#x8001;&#x5E2B;&#x7684;&#x7A0B;&#x5F0F;&#x5B78;&#x6821;"><span class="kg-bookmark-author">Home | 42 - The Network</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://www.42network.org/wp-content/uploads/2021/09/42-network-square-og.png" alt="School 42 : &#x4E0D;&#x6536;&#x8CBB;&#x3001;&#x4E0D;&#x554F;&#x80CC;&#x666F;&#x3001;&#x6C92;&#x6709;&#x8001;&#x5E2B;&#x7684;&#x7A0B;&#x5F0F;&#x5B78;&#x6821;"></div></a></figure><p></p><h2 id="42-%E5%90%8D%E7%A8%B1%E7%9A%84%E7%94%B1%E4%BE%86%EF%BC%9F">42 &#x540D;&#x7A31;&#x7684;&#x7531;&#x4F86;&#xFF1F;</h2><p>&#x7D00;&#x5FF5;&#x9053;&#x683C;&#x62C9;&#x65AF;&#xB7;&#x4E9E;&#x7576;&#x65AF; (Douglas Adams) &#x7684;&#x8457;&#x540D;&#x79D1;&#x5E7B;&#x5C0F;&#x8AAA;&#x300A;&#x9280;&#x6CB3;&#x7CFB;&#x6F2B;&#x904A;&#x6307;&#x5357;&#x300B;&#xFF0C;&#x5728;&#x6574;&#x672C;&#x66F8;&#x7684;&#x6700;&#x5F8C;&#xFF0C;&#x627E;&#x5230;&#x7684;&#x5C0D;&#x751F;&#x547D;&#x3001;&#x5B87;&#x5B99;&#x548C;&#x4E00;&#x5207;&#x4E8B;&#x7269;&#x610F;&#x7FA9;&#x7684;&#x7B54;&#x6848;&#xFF0C;&#x5C31;&#x662F; 42&#x3002;</p><blockquote>The answer to the ultimate question of life, the universe and everything is... 42! (Douglas Adams, The Hitchhiker&apos;s Guide to the Galaxy)</blockquote><h2 id="%E8%A6%81%E6%80%8E%E9%BA%BC%E7%94%B3%E8%AB%8B%EF%BC%9F">&#x8981;&#x600E;&#x9EBC;&#x7533;&#x8ACB;&#xFF1F;</h2><p>&#x6C92;&#x6709;&#x5E74;&#x9F61;&#x548C;&#x5B78;&#x6B77;&#x9650;&#x5236;&#xFF0C;&#x4E5F;&#x4E0D;&#x770B;&#x4EFB;&#x4F55;&#x80CC;&#x666F;&#xFF0C;&#x53EA;&#x8981;&#x80FD;&#x901A;&#x904E;&#x7DDA;&#x4E0A;&#x7684;&#x5169;&#x5C0F;&#x6642;&#x7684;&#x908F;&#x8F2F;&#x904A;&#x6232;&#xFF0C;&#x4F60;&#x5C31;&#x6709;&#x6A5F;&#x6703;&#x53C3;&#x52A0;&#x70BA;&#x671F;&#x4E00;&#x500B;&#x6708;&#x7684;&#x5165;&#x5B78;&#x8003; Piscine&#xFF0C;Piscine &#x5C31;&#x50CF;&#x662F;&#x7A0B;&#x5F0F;&#x71DF;&#x968A;(&#x8A73;&#x7D30;&#x5167;&#x5BB9;&#x53EF;&#x4EE5;&#x770B;&#x9019;&#x7BC7;&#x6587;&#x7AE0;)&#xFF0C;&#x53C3;&#x52A0;&#x5B8C;&#x5F8C;&#x5169;&#x9031;&#xFF0C;&#x4F60;&#x5C31;&#x6703;&#x6536;&#x5230;&#x4E00;&#x5C01;&#x4FE1;&#x901A;&#x77E5;&#x6709;&#x6C92;&#x6709;&#x901A;&#x904E;&#xFF0C;&#x901A;&#x904E;&#x7684;&#x8A71;&#x624D;&#x80FD;&#x53C3;&#x52A0;&#x5F8C;&#x7E8C;&#x7684;&#x8AB2;&#x7A0B;&#x3002;</p><p></p><h2 id="%E6%B2%92%E6%9C%89%E8%80%81%E5%B8%AB%E8%A6%81%E6%80%8E%E9%BA%BC%E5%AD%B8%E7%BF%92%EF%BC%9F">&#x6C92;&#x6709;&#x8001;&#x5E2B;&#x8981;&#x600E;&#x9EBC;&#x5B78;&#x7FD2;&#xFF1F;</h2><p>&#x4E3B;&#x8981;&#x6709;&#x5169;&#x7A2E;&#x5B78;&#x7FD2;&#x65B9;&#x5F0F;&#xFF0C;&#x81EA;&#x5B78;&#x4EE5;&#x53CA;&#x540C;&#x5115;&#x5B78;&#x7FD2;&#xFF0C;&#x6574;&#x500B; 42 &#x7684;&#x6838;&#x5FC3;&#x5C31;&#x662F; peer to peer learning(&#x540C;&#x5115;&#x5B78;&#x7FD2;)&#xFF0C;&#x6240;&#x4EE5;&#x624D;&#x6703;&#x5F88;&#x5805;&#x6301;&#x8981;&#x5BE6;&#x9AD4;&#x6821;&#x5340;&#x548C;&#x5BE6;&#x9AD4;&#x5B78;&#x7FD2;&#xFF0C;&#x91CD;&#x9EDE;&#x5C31;&#x662F;&#x5E0C;&#x671B;&#x5927;&#x5BB6;&#x80FD;&#x4E92;&#x76F8;&#x5E6B;&#x5FD9;&#xFF0C;&#x4E00;&#x8D77;&#x5B8C;&#x6210;&#x6311;&#x6230;&#xFF0C;&#x4E26;&#x5728;&#x904E;&#x7A0B;&#x4E2D;&#x5B78;&#x7FD2;&#x3002;</p><p></p><h2 id="%E9%80%99%E6%A8%A3%E5%85%A7%E5%90%91%E7%9A%84%E4%BA%BA%E6%98%AF%E4%B8%8D%E6%98%AF%E4%B8%8D%E9%81%A9%E5%90%88%EF%BC%9F">&#x9019;&#x6A23;&#x5167;&#x5411;&#x7684;&#x4EBA;&#x662F;&#x4E0D;&#x662F;&#x4E0D;&#x9069;&#x5408;&#xFF1F;</h2><p>&#x53EA;&#x80FD;&#x8AAA;&#x6BD4;&#x8F03;&#x4E0D;&#x9069;&#x5408;&#xFF0C;&#x5176;&#x5BE6;&#x6211;&#x4E5F;&#x662F;&#x504F;&#x5167;&#x5411;&#x7684;&#x4EBA;&#xFF0C;&#x4E0D;&#x559C;&#x6B61;&#x793E;&#x4EA4;&#xFF0C;&#x4F46;&#x662F; School 42 &#x7684;&#x5B78;&#x7FD2;&#x65B9;&#x5F0F;&#x7576;&#x4E2D;&#xFF0C;&#x7B97;&#x662F;&#x534A;&#x5F37;&#x8FEB;&#x5B9A;&#x671F;&#x9700;&#x8981;&#x548C;&#x540C;&#x5115;&#x63A5;&#x89F8;&#xFF0C;&#x4F8B;&#x5982;&#x5B8C;&#x6210;&#x6311;&#x6230;&#x6642;&#x9700;&#x8981;&#x627E;&#x540C;&#x5B78;&#x4F86;&#x8A55;&#x4F30;&#x7684;&#x7A0B;&#x5F0F;&#x78BC;&#xFF0C;&#x6216;&#x662F;&#x4F60;&#x4E5F;&#x5FC5;&#x9808;&#x8A55;&#x4F30;&#x540C;&#x5B78;&#x7684;&#x7A0B;&#x5F0F;&#x78BC;&#xFF0C;&#x8A55;&#x4F30;&#x7684;&#x904E;&#x7A0B;&#x4E2D;&#x6703;&#x9700;&#x8981;&#x4E92;&#x76F8;&#x89E3;&#x91CB;&#x7A0B;&#x5F0F;&#xFF0C;&#x552F;&#x6709;&#x9019;&#x6A23;&#x624D;&#x80FD;&#x7E7C;&#x7E8C;&#x5F80;&#x4E0B;&#x4E00;&#x500B;&#x4EFB;&#x52D9;&#x524D;&#x9032;&#xFF0C;&#x6240;&#x4EE5;&#x975E;&#x5E38;&#x5167;&#x5411;&#x7684;&#x4EBA;&#x9700;&#x8981;&#x518D;&#x591A;&#x659F;&#x914C;&#x3002;</p><p></p><h2 id="%E9%80%99%E6%A8%A3%E5%AD%B8%E7%BF%92%E6%9C%89%E7%94%A8%E5%97%8E%EF%BC%8C%E5%92%8C%E8%87%AA%E5%B7%B1%E5%9C%A8%E5%AE%B6%E8%A3%A1%E5%AD%B8%E6%9C%89%E4%BB%80%E9%BA%BC%E4%B8%8D%E4%B8%80%E6%A8%A3%EF%BC%9F">&#x9019;&#x6A23;&#x5B78;&#x7FD2;&#x6709;&#x7528;&#x55CE;&#xFF0C;&#x548C;&#x81EA;&#x5DF1;&#x5728;&#x5BB6;&#x88E1;&#x5B78;&#x6709;&#x4EC0;&#x9EBC;&#x4E0D;&#x4E00;&#x6A23;&#xFF1F;</h2><p>&#x6709;&#x7528;&#x55CE;&#xFF1F;&#x9019;&#x984C;&#x7B54;&#x6848;&#x662F; yes, and no. &#x5C31;&#x50CF;&#x662F;&#x6240;&#x6709;&#x50B3;&#x7D71;&#x6559;&#x80B2;&#x4E00;&#x6A23;&#xFF0C;&#x5C0D;&#x6709;&#x4E9B;&#x4EBA;&#x6709;&#x7528;&#xFF0C;&#x4F46;&#x4E5F;&#x6709;&#x5F88;&#x591A;&#x4EBA;&#x89BA;&#x5F97;&#x6D6A;&#x8CBB;&#x6642;&#x9593;&#xFF0C;&#x6240;&#x4EE5;&#x91CD;&#x9EDE;&#x662F;&#x9019;&#x6A23;&#x7684;&#x65B9;&#x5F0F;&#x9069;&#x4E0D;&#x9069;&#x5408;&#x4F60;&#xFF0C;&#x6BCF;&#x500B;&#x4EBA;&#x53EF;&#x80FD;&#x6709;&#x4E0D;&#x540C;&#x7684;&#x7B54;&#x6848;&#xFF0C;&#x53EF;&#x80FD;&#x53EA;&#x6709;&#x771F;&#x7684;&#x81EA;&#x5DF1;&#x9AD4;&#x9A57;&#x904E;&#x624D;&#x77E5;&#x9053;&#x3002;&#x9019;&#x4E5F;&#x662F;&#x6211;&#x6574;&#x7406;&#x6587;&#x7AE0;&#x7684;&#x539F;&#x56E0;&#xFF0C;&#x56E0;&#x70BA;&#x4E2D;&#x6587;&#x95DC;&#x65BC; School 42 &#x7684;&#x5167;&#x5BB9;&#x771F;&#x7684;&#x4E0D;&#x591A;&#xFF0C;&#x82F1;&#x6587;&#x7684;&#x90E8;&#x5206;&#x5176;&#x5BE6;&#x4E5F;&#x4E0D;&#x592A;&#x591A;&#xFF0C;&#x5E0C;&#x671B;&#x5927;&#x5BB6;&#x770B;&#x5B8C;&#x53EF;&#x4EE5;&#x66F4;&#x4E86;&#x89E3;&#x3002;</p><p>&#x7B2C;&#x4E8C;&#x500B;&#x554F;&#x984C;&#x662F;&#x53BB; School 42 &#x548C;&#x81EA;&#x5DF1;&#x5728;&#x5BB6;&#x88E1;&#x5B78;&#x6709;&#x4EC0;&#x9EBC;&#x4E0D;&#x4E00;&#x6A23;&#xFF0C;&#x5982;&#x679C;&#x4F60;&#x81EA;&#x5DF1;&#x5F88;&#x81EA;&#x5F8B;&#x4E14;&#x5B89;&#x6392;&#x7684;&#x5F88;&#x597D;&#xFF0C;&#x5176;&#x5BE6;&#x771F;&#x7684;&#x53EF;&#x4EE5;&#x81EA;&#x5DF1;&#x5728;&#x5BB6;&#x5B78;&#xFF0C;&#x540C;&#x5115;&#x5B78;&#x7FD2;&#x7684;&#x90E8;&#x5206;&#x4E5F;&#x53EF;&#x4EE5;&#x591A;&#x53C3;&#x52A0;&#x6280;&#x8853;&#x805A;&#x6703;&#x4F86;&#x5F4C;&#x88DC;&#x3002;School 42 &#x76EE;&#x524D;&#x4E5F;&#x6C92;&#x6709;&#x53F0;&#x7063;&#x5206;&#x6821;&#xFF0C;&#x8981;&#x5B78;&#x5FC5;&#x9808;&#x8981;&#x51FA;&#x570B;&#xFF0C;&#x5982;&#x679C;&#x771F;&#x7684;&#x901A;&#x904E; Piscine&#xFF0C;&#x8981;&#x53C3;&#x52A0;&#x5F8C;&#x7E8C;&#x81F3;&#x5C11;&#x6700;&#x5FEB;&#x534A;&#x5E74;-2&#x5E74;&#x7684;&#x57FA;&#x790E;&#x8AB2;&#x7A0B;&#xFF0C;<strong>&#x6700;&#x9EBB;&#x7169;&#x7684;&#x4E8B;&#x8981;&#x60F3;&#x8FA6;&#x6CD5;&#x62FF;&#x5230;&#x7C3D;&#x8B49;&#x7559;&#x4E0B;&#x4F86;</strong>&#xFF0C;&#x4F46;&#x662F;&#x76F8;&#x5C0D;&#x4F86;&#x8AAA;&#xFF0C;&#x5728; School 42 &#x7684;&#x597D;&#x8655;&#x662F;&#x6709;&#x5B89;&#x6392;&#x597D;&#x7684;&#x8AB2;&#x7A0B;&#x898F;&#x5283;&#xFF0C;&#x7D2E;&#x5BE6;&#xFF23;&#x8A9E;&#x8A00;&#x57FA;&#x790E;&#xFF0C;&#x4E5F;&#x6709;&#x5F88;&#x591A;&#x6D3B;&#x52D5;&#x548C;&#x793E;&#x5718;&#x53EF;&#x4EE5;&#x53C3;&#x52A0;&#xFF0C;&#x5C31;&#x50CF;&#x662F;&#x6B63;&#x5E38;&#x5927;&#x5B78;&#x4E00;&#x6A23;&#x3002;</p><p></p><blockquote>&#x5F15;&#x7528;&#x6211;&#x5728; School 42 &#x7684;&#x597D;&#x670B;&#x53CB; Ivan &#x7684;&#x4E00;&#x53E5;&#x8A71; :&#x300C;&#x4F86; School 42 &#x514D;&#x5B78;&#x8CBB;&#x3001;&#x80FD;&#x8A8D;&#x8B58;&#x670B;&#x53CB;&#x3001;&#x6709;&#x514D;&#x8CBB;&#x5496;&#x5561;&#x548C;&#x53EF;&#x980C;&#x3001;&#x9084;&#x6709;&#x8F49;&#x8077;&#x7684;&#x6A5F;&#x6703;&#xFF0C;WHY NOT&#xFF1F;&#x300D;</blockquote><p></p><h2 id="%E9%80%9A%E9%81%8E-piscine-%E4%B9%8B%E5%BE%8C%E5%8F%AF%E4%BB%A5%E6%9C%89%E7%B0%BD%E8%AD%89%E5%97%8E%EF%BC%9F">&#x901A;&#x904E; Piscine &#x4E4B;&#x5F8C;&#x53EF;&#x4EE5;&#x6709;&#x7C3D;&#x8B49;&#x55CE;&#xFF1F;</h2><p>&#x4E0D;&#x80FD;&#xFF0C;School 42 &#x4E26;&#x975E;&#x6B63;&#x898F;&#x7684;&#x5B78;&#x6821;&#xFF0C;&#x6BD4;&#x8F03;&#x50CF;&#x662F;&#x79C1;&#x4EBA;&#x7684;&#x57F9;&#x8A13;&#x6A5F;&#x69CB;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x8ACB;&#x4F60;&#x7533;&#x8ACB;&#x7684;School 42&#x6821; &#x5340;&#x63D0;&#x4F9B;&#x5728;&#x5B78;&#x8B49;&#x660E;&#xFF0C;&#x518D;&#x770B;&#x6709;&#x54EA;&#x4E9B;&#x7C3D;&#x8B49;&#x53EF;&#x4EE5;&#x7533;&#x8ACB;&#xFF0C;&#x4F46;&#x5B78;&#x751F;&#x7C3D;&#x8B49;&#x662F;&#x4E00;&#x5B9A;&#x6C92;&#x6709;&#x7684;&#xFF0C; &#x552F;&#x4E00;&#x7684;&#x597D;&#x6D88;&#x606F;&#x662F;&#xFF0C;&#x5982;&#x679C;&#x5B8C;&#x6210; School 42 &#x7684;&#x5168;&#x90E8;&#x8A08;&#x756B;&#xFF0C;&#x5728;&#x6CD5;&#x570B;&#x662F;&#x53EF;&#x4EE5;&#x88AB;&#x627F;&#x8A8D;&#x7684;&#xFF0C;&#x5927;&#x7D04;&#x7B49;&#x540C;&#x65BC;&#x5927;&#x5B78;&#x7562;&#x696D;&#x3002;</p><h2 id="%E6%9C%AA%E5%AE%8C%E5%BE%85%E7%BA%8C">&#x672A;&#x5B8C;&#x5F85;&#x7E8C;</h2><h3 id="%E6%95%AC%E8%AB%8B%E6%9C%9F%E5%BE%85%E4%B8%8B%E4%B8%80%E7%AF%87%EF%BC%9Aschool-42-%E7%9A%84%E6%A0%B8%E5%BF%83%E8%AA%B2%E7%A8%8B">&#x656C;&#x8ACB;&#x671F;&#x5F85;&#x4E0B;&#x4E00;&#x7BC7;&#xFF1A;School 42 &#x7684;&#x6838;&#x5FC3;&#x8AB2;&#x7A0B;</h3><h3 id="%E6%88%96%E6%98%AF%E6%83%B3%E7%9F%A5%E9%81%93-piscine-%E7%B4%B0%E7%AF%80%E7%9A%84%E5%8F%AF%E4%BB%A5%E7%9C%8B%E9%80%99%E7%AF%87">&#x6216;&#x662F;&#x60F3;&#x77E5;&#x9053; Piscine &#x7D30;&#x7BC0;&#x7684;&#x53EF;&#x4EE5;&#x770B;&#x9019;&#x7BC7;</h3><p></p><!--kg-card-begin: html--><a href="https://www.buymeacoffee.com/snhou?ref=data-azubi-shu-ju-xue-tu" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="School 42 : &#x4E0D;&#x6536;&#x8CBB;&#x3001;&#x4E0D;&#x554F;&#x80CC;&#x666F;&#x3001;&#x6C92;&#x6709;&#x8001;&#x5E2B;&#x7684;&#x7A0B;&#x5F0F;&#x5B78;&#x6821;" style="height: 60px !important; width: 217px !important"></a>
<a href="https://ko-fi.com/F1F6ELGR3?ref=data-azubi-shu-ju-xue-tu" target="_blank"><img height="36" style="border:0px;height:57px;" src="https://storage.ko-fi.com/cdn/kofi5.png?v=3" border="0" alt="School 42 : &#x4E0D;&#x6536;&#x8CBB;&#x3001;&#x4E0D;&#x554F;&#x80CC;&#x666F;&#x3001;&#x6C92;&#x6709;&#x8001;&#x5E2B;&#x7684;&#x7A0B;&#x5F0F;&#x5B78;&#x6821;"></a><!--kg-card-end: html--><p></p>]]></content:encoded></item></channel></rss>