You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by zh...@apache.org on 2022/04/16 06:52:35 UTC

[dolphinscheduler-website] branch master updated: add Blog (#776)

This is an automated email from the ASF dual-hosted git repository.

zhongjiajie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler-website.git


The following commit(s) were added to refs/heads/master by this push:
     new eaf6e2407 add Blog (#776)
eaf6e2407 is described below

commit eaf6e2407cec10f561256b0961985373c6426c53
Author: lifeng <53...@users.noreply.github.com>
AuthorDate: Sat Apr 16 14:52:30 2022 +0800

    add Blog (#776)
    
    * add news
    
    * updata Blog
    
    * Update How_Does_Ziru_Build_A_Job_Scheduling_System_Popular_Among_Data_Analysts.md
---
 ...xpanding_On_Apache_DolphinScheduler_Tutorial.md |   5 +
 blog/en-us/Hangzhou_cisco.md                       |   5 +
 ...ng_Platform_Adapt_to_Apache_DolphinScheduler.md | 273 +++++++++++++++++++++
 ...cheduling_System_Popular_Among_Data_Analysts.md | 161 ++++++++++++
 ...Platform_Adapt_to_Apache_DolphinScheduler.md.md | 235 ++++++++++++++++++
 ...cheduling_System_Popular_Among_Data_Analysts.md | 155 ++++++++++++
 img/2022-4-11/1.png                                | Bin 0 -> 43240 bytes
 img/2022-4-11/10.png                               | Bin 0 -> 452049 bytes
 img/2022-4-11/2.png                                | Bin 0 -> 316268 bytes
 img/2022-4-11/3.png                                | Bin 0 -> 130917 bytes
 img/2022-4-11/4.png                                | Bin 0 -> 77399 bytes
 img/2022-4-11/5.png                                | Bin 0 -> 271286 bytes
 img/2022-4-11/6.png                                | Bin 0 -> 199588 bytes
 img/2022-4-11/7.png                                | Bin 0 -> 233349 bytes
 img/2022-4-11/8.png                                | Bin 0 -> 342109 bytes
 img/2022-4-11/9.png                                | Bin 0 -> 187507 bytes
 img/2022-4-11/en/1.png                             | Bin 0 -> 43240 bytes
 img/2022-4-11/en/10.png                            | Bin 0 -> 99206 bytes
 img/2022-4-11/en/11.png                            | Bin 0 -> 40518 bytes
 img/2022-4-11/en/12.png                            | Bin 0 -> 118146 bytes
 img/2022-4-11/en/13.png                            | Bin 0 -> 205701 bytes
 img/2022-4-11/en/14.png                            | Bin 0 -> 51691 bytes
 img/2022-4-11/en/2.png                             | Bin 0 -> 316268 bytes
 img/2022-4-11/en/3.png                             | Bin 0 -> 88447 bytes
 img/2022-4-11/en/4.png                             | Bin 0 -> 33512 bytes
 img/2022-4-11/en/5.png                             | Bin 0 -> 71776 bytes
 img/2022-4-11/en/6.png                             | Bin 0 -> 79489 bytes
 img/2022-4-11/en/7.png                             | Bin 0 -> 17024 bytes
 img/2022-4-11/en/8.png                             | Bin 0 -> 20083 bytes
 img/2022-4-11/en/9.png                             | Bin 0 -> 147309 bytes
 img/2022-4-6/1.jpg                                 | Bin 0 -> 47612 bytes
 img/2022-4-6/10.png                                | Bin 0 -> 66291 bytes
 img/2022-4-6/11.png                                | Bin 0 -> 113189 bytes
 img/2022-4-6/12.png                                | Bin 0 -> 52325 bytes
 img/2022-4-6/2.png                                 | Bin 0 -> 312744 bytes
 img/2022-4-6/3.png                                 | Bin 0 -> 83662 bytes
 img/2022-4-6/4.png                                 | Bin 0 -> 76174 bytes
 img/2022-4-6/5.png                                 | Bin 0 -> 59139 bytes
 img/2022-4-6/6.png                                 | Bin 0 -> 210075 bytes
 img/2022-4-6/7.png                                 | Bin 0 -> 108903 bytes
 img/2022-4-6/8.png                                 | Bin 0 -> 130973 bytes
 img/2022-4-6/9.png                                 | Bin 0 -> 98358 bytes
 img/2022-4-6/en/1.png                              | Bin 0 -> 37957 bytes
 img/2022-4-6/en/2.png                              | Bin 0 -> 274269 bytes
 img/2022-4-6/en/3.png                              | Bin 0 -> 20606 bytes
 img/2022-4-6/en/4.png                              | Bin 0 -> 101725 bytes
 img/2022-4-6/en/5.png                              | Bin 0 -> 63388 bytes
 img/2022-4-6/en/6.png                              | Bin 0 -> 52113 bytes
 img/2022-4-6/en/7.png                              | Bin 0 -> 152233 bytes
 img/2022-4-6/en/8.png                              | Bin 0 -> 53881 bytes
 site_config/blog.js                                |  30 +++
 51 files changed, 864 insertions(+)

diff --git a/blog/en-us/Fast_Task_Type_Expanding_On_Apache_DolphinScheduler_Tutorial.md b/blog/en-us/Fast_Task_Type_Expanding_On_Apache_DolphinScheduler_Tutorial.md
index fe28b2c13..410a8a59b 100644
--- a/blog/en-us/Fast_Task_Type_Expanding_On_Apache_DolphinScheduler_Tutorial.md
+++ b/blog/en-us/Fast_Task_Type_Expanding_On_Apache_DolphinScheduler_Tutorial.md
@@ -1,3 +1,8 @@
+---
+title:Fast Task Type Expanding On Apache DolphinScheduler | Tutorial
+keywords: Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration,dataops,Meetup
+description:At present, the scheduler plays an indispensable role in big data ecology.
+---
 # Fast Task Type Expanding On Apache DolphinScheduler | Tutorial
 
 <div align=center>
diff --git a/blog/en-us/Hangzhou_cisco.md b/blog/en-us/Hangzhou_cisco.md
index da6fac328..60036f921 100644
--- a/blog/en-us/Hangzhou_cisco.md
+++ b/blog/en-us/Hangzhou_cisco.md
@@ -1,3 +1,8 @@
+---
+title:Cisco Hangzhou's Travel Through Apache DolphinScheduler Alert Module Refactor
+keywords: Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration,dataops,Meetup,Cisco
+description: Cisco Hangzhou has introduced Apache DolphinScheduler
+---
 # Cisco Hangzhou's Travel Through Apache DolphinScheduler Alert Module Refactor
 
 <div align=center>
diff --git a/blog/en-us/How_Does_Live-broadcasting_Platform_Adapt_to_Apache_DolphinScheduler.md b/blog/en-us/How_Does_Live-broadcasting_Platform_Adapt_to_Apache_DolphinScheduler.md
new file mode 100644
index 000000000..e13b59197
--- /dev/null
+++ b/blog/en-us/How_Does_Live-broadcasting_Platform_Adapt_to_Apache_DolphinScheduler.md
@@ -0,0 +1,273 @@
+---
+title:How Does Live-broadcasting Platform Adapt to Apache DolphinScheduler?
+keywords: Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration,dataops,Meetup
+description: Background on the introduction of Apache DolphinScheduler to YY Live
+---
+# How Does Live-broadcasting Platform Adapt to Apache DolphinScheduler?
+
+<div align=center>
+
+<img src="/img/2022-4-11/en/1.png"/>
+
+</div>
+
+>*At the Apache DolphinScheduler Meetup(3.26), Yuan Bingze, a software engineer at YY Live, shared the topic of* *YY Live’s Adaptation and Exploration based on Apache DolphinScheduler* *with us.*
+>*This presentation consists of four main sections:*
+>*1.**Background on the introduction of Apache DolphinScheduler to YY Live*
+>*2.**The introduction process of Apache DolphinScheduler*
+>*3.**Application and adaptation of Apache DolphinScheduler*
+>*4.**YY Live’s future plans*
+## Profile.
+
+<div align=center>
+
+<img src="/img/2022-4-11/en/2.png"/>
+
+</div>
+
+Yuan Bingze, YY Live Software Engineer, has more than 10 years of working experience in big data risk control platform development. Deeply interested in common big data components.
+
+## Background
+
+YY Live is the leading voice social platform company in China. Currently, our team is mainly responsible for securing the company’s business.
+
+### 01 Technical Status
+
+We currently use a layered technical architecture, with the bottom layer being the data source layer, followed by the collection layer, storage layer, management layer, computation, and application layers in descending order.
+
+In the data source layer, we currently pull relational database data from various business parties, as well as data that is transmitted to us through APIs and streams like Kafka.
+
+The collection layer uses a data collection system developed by ourselves.
+
+In the storage layer, we currently put the data mainly in relational databases, such as Clickhouse, and a small portion will be in some non-relational databases, such as Redis and graph libraries. Of course, most of the data is stored in big data systems.
+
+The management team mainly consisted of a big data management system, combined with a computational scheduling and task management system and service governance platform developed by ourselves.
+
+### 02 Problems we encountered before adopting Apache DolphinScheduler
+
+1、Scheduling platform is too complex: In addition to the team’s Xxl-job based task scheduling, some of the older projects have used Crontab, Springboot, Scheduler, Quartz, etc. to manage the start of tasks.
+
+2、Strong demand for task dependencies: The scheduling we currently use can only set up the execution of individual tasks, and cannot form workflows through task dependencies, which rely heavily on personal experience to set up timing. Many tasks need to have dependencies.
+
+3、The tasks are complex and diverse: the current tasks are Spark and Flink tasks based on big data systems, various Java services, Shell, Java applications, Python, etc. tasks in the service governance platform.
+
+## Introducing Apache DolphinScheduler
+
+During the research, we found a demanding scheduling platform should meet the following conditions.
+
+**1、Unified management of tasks and dependencies**
+
+With the increasing demand for business computing, especially a variety of graph computing and tasks, which are scattered among various systems, and very difficult to manage. Besides, some of the tasks have certain dependencies on each other, but the configuration of their time relies on personal experience. There is an urgent need for a product that can unify configuration management dependencies.
+
+**2、Compatible with the company’s internal platform system**
+
+The scheduling task platform is aimed to manage our tasks and to come into service quickly, the scheduling platform needed to be compatible with our company’s inner platform systems, such as the internal Datax and Crontab services.
+
+**3、High availability, high performance, high concurrency, and easy to use**
+
+Finally, to ensure business stability, we also need this scheduling platform to be highly available, high performance, concurrent, and easy to use.
+
+Through our research, we found that Apache DolphinScheduler was perfectly designed for us, and the adaptation process met our needs without much modification.
+
+## Application and Adaptation
+
+Apache DolphinScheduler is a distributed, decentralized, easily scalable visual DAG workflow task scheduling system dedicated to solving the intricate dependencies in the data processing process and making it work out-of-the-box in the data processing, which fits our needs perfectly.
+
+First, let’s look at the architecture of Apache DolphinScheduler to facilitate understanding the next adaptation cases.
+
+<div align=center>
+
+<img src="/img/2022-4-11/en/3.png"/>
+
+</div>
+
+Apache DolphinScheduler has 5 main modules: API, master, worker, log, and alert.
+
+The API interface layer is mainly responsible for handling requests from the front-end UI layer. The service provides RESTful API to provide request services to the outside in a unified manner. The interfaces include workflow creation, definition, query, modification, release, downlink, manual start, stop, pause, resume, start execution from that node, etc.
+
+The MasterServer adopts the concept of distributed centerless design, and is mainly responsible for DAG task slicing, task submission monitoring, and listening to the health status of other MasterServer and WorkerServer at the same time. The MasterServer service registers temporary nodes with Zookeeper when it starts and performs fault tolerance by listening to the changes of Zookeeper temporary nodes.
+
+WorkerServer also adopts the distributed centerless design concept, which is mainly responsible for task execution and providing logging services.
+
+WorkerServer service registers temporary nodes with Zookeeper when it starts and maintains heartbeat, as well as provides logger service.
+
+Alert provides alarm-related interfaces, which mainly include two types of alarm data storage, query and notification functions. The notification function includes email notification and **SNMP (not yet implemented)**.
+
+Currently, we are deploying version 2.0 on 4 physical machines, which have born 2 master instances, 2 API instances, 3 worker and logger instances, and one alert instance.
+
+Next, we share 3 specific cases of adaptation based on Apache DolphinScheduler.
+
+First is the adaptation to our service governance platform, which aims to do task monitoring; although Apache DolphinScheduler itself provides a task monitoring module, our colleagues have long been accustomed to using the service governance platform to unify management monitoring. So we need to report the status of Apache DolphinScheduler tasks to the service governance platform in time.
+
+### 01 Service Governance platform Adaptation — MasterServer Service Description
+
+Before the adaption description, we take a detailed look at the MasterServer service first, which provides:
+
+1、Distributed Quartz, a distributed scheduling component, is mainly responsible for timing task start and stop operations, when Quartz picks up the task, there will be thread pools inside the Master specifically handling the subsequent operations of the task.
+
+2、MasterSchedulerThread is a scanning thread that scans the command table in the database at regular intervals and performs different business operations according to different command types.
+
+3、MasterExecThread (WorkflowExecutThread.java) takes charge of DAG task slicing, task submission monitoring, and logical processing of various command types.
+
+4、MasterTaskExecThread is mainly responsible for task persistence.
+
+### 02 Service Governance Adaptation-code
+
+We require to monitor tasks. Through code analysis, we found that task submission and listening are mainly implemented in the methods of the WorkflowExecuteThread class, which starts multiple instance threads responsible for task execution and listening respectively. The flowchart is as follows:
+
+<div align=center>
+
+<img src="/img/2022-4-11/en/4.png"/>
+
+</div>
+
+Task submission and monitoring flow chart
+
+We aim to monitor tasks, and after analyzing the code, we found that WorkflowExecuteThread implements task execution and listening by startprocess and handle events respectively. We inject our service governance platform data collection code in the handleEvents method so that the task monitoring situation can be reported to our service governance platform in time.
+
+The modified part is as follows:
+
+<div align=center>
+
+<img src="/img/2022-4-11/en/5.png"/>
+
+</div>
+
+The specific effect of the service governance platform is shown below:
+
+**Task submission**
+
+<div align=center>
+
+<img src="/img/2022-4-11/en/6.png"/>
+
+</div>
+
+**Success rate**
+
+<div align=center>
+
+<img src="/img/2022-4-11/en/7.png"/>
+
+</div>
+
+In addition to monitoring the status of our specific tasks, we will also do some monitoring by project, and finally, we will monitor operation through the service governance platform, for example, if some tasks are important, we will configure some telephone alarms, that is, if the task fails or is not executed on time, we will make telephone notifications.
+
+### 03 Datax Service Adaptation Process
+
+The second case is about the adaptation of the Datax service. When we were working on Apache DolphinScheduler, we found that it has integrated Datax type tasks, which is very friendly for us. Because we have a significant number of tasks that are implemented through Datax, we have developed some Datax plugins to adapt the data read and write to various internal systems and stores.
+
+Datax adaptation is divided into two parts, one method is achieved by a custom template, which copies some previous Datax services, and takes slight modification, mainly involving some data interaction between the NoSQL databases.
+
+For the interaction between SQL databases, we still need to achieve it through the configuration.
+
+Unfortunately, we encountered a small bug when configuring Clickhouse read and write tasks at the beginning.
+
+### 04 Datax Service Adaptation — Clickhouse Compatible #8092
+
+When we used Datax to read data from Clickhouse data source, we found that in the SQL, the submission would fail once we refer to parameters, no matter time parameters or other parameters. We suspected that there might be some bugs, and when we read the error log, we also found that when Apache DolphinScheduler submitted the SQL, the parameters are not replaced, and directly submitted to Clickhouse for execution. Because Clickhouse did not recognize Apache DolphinScheduler parameters, it [...]
+
+<div align=center>
+
+<img src="/img/2022-4-11/en/8.png"/>
+
+</div>
+
+<div align=center>
+
+<img src="/img/2022-4-11/en/9.png"/>
+
+</div>
+
+The first thing the system has to do is to parse all the syntax of SQL and then get some column information through the syntax, at which point it has to call the SQL parser. In this process, if the Apache DolphinScheduler does not replace our parameters, errors will occur during the execution of the circle, which will cause the whole task to fail.
+
+Therefore, in the process of solving, since the parser of Clickhouse may not be obtained, the best way is to directly add a parser. First, we build a JSON file, then format all the chains parsed out, and finally go through a parsing of the syntax, calling it layer by layer, and finally being able to call the target parser.
+
+### 05 Time parameter adaptation
+
+The last case is about time parameter adaptation.
+
+While Apache DolphinScheduler does provide time parameters, most of our data require unixtime that is accurate to the millisecond level. Reading through the Apache DolphinScheduler documentation, we, unfortunately, found that it does not provide an implementation of this type of time parameter. While going through the source code later, we found that Apache DolphinScheduler provides a timestamp function that can provide unixtime values.
+
+When using timestamp, we found two small problems, firstly, there will be ambiguity when timestamp directly expresses unixtime, and secondly, timestamp is only accurate to the second level, while most of our data needs millisecond level. To make it easier to use, we made some changes.
+
+<div align=center>
+
+<img src="/img/2022-4-11/en/10.png"/>
+
+</div>
+
+**Adaptation process**
+
+The first thing we did was to remove the ambiguity. In Apache DolphinScheduler, Timestamp is the way to express time, which is usually expressed by date plus time, but Unix time uses GMT, from 00:00:00:00 on January 1, 1970, to the present, and does not take into account the microsecond time expression, which uses integers.
+
+Once requirements are clear, the next step for us is to figure out how to implement them. We found by code analysis that the implementation of the time parameter function is through the API calling layer by layer, and the final main functions are achieved through the TimePlaceHolderUtils class calculateTime method. During the implementation of this method, the constants in the TaskConstants class that express the name of the time function are also called. So we modified some of the const [...]
+
+<div align=center>
+
+<img src="/img/2022-4-11/en/11.png"/>
+
+</div>
+
+time parameter adaptation-calling procedure
+
+<div align=center>
+
+<img src="/img/2022-4-11/en/12.png"/>
+
+</div>
+
+<div align=center>
+
+<img src="/img/2022-4-11/en/13.png"/>
+
+</div>
+
+<div align=center>
+
+<img src="/img/2022-4-11/en/14.png"/>
+
+</div>
+
+After using Apache DolphinScheduler, we only need to check the complementary function when manually executing tasks and fill in the date we want to schedule, then we can directly make the complementary, and we can also fill in the parallelism. This feature is very useful for us, and after Apache DolphinScheduler version 2.0, the problem of time configuration and execution with daily performance difference is also solved, which brings great convenience in use.
+
+## Future Planning
+
+In application, we found that the tasks configured through Apache DolphinScheduler do not currently support a highly available solution in terms of using data sources, which is strongly needed in our case, so we are currently doing the adaptation for high availability as well.
+
+Secondly, we are currently using Apache DolphinScheduler version 2.0, the community is active and the version upgrade is fast, even a small version upgrade will bring some great features or design changes. For example, in the new version, the alert function has been plugged in, and some complementary date conversion problems have been solved. This also drove our team to upgrade to the new version to experience the new features. Although Apache DolphinScheduler is currently only used inte [...]
+
+Although Apache DolphinScheduler is very perfect to solve most of our problems and improve our work efficiency drastically, we still encounter some small bugs in various complex situations, and of course, we have developed some features in use, all of which we will submit to the official after fixing in the future.
+
+## Join the Community
+
+There are many ways to participate and contribute to the DolphinScheduler community, including:
+
+**Documents, translation, Q&A, tests, codes, articles, keynote speeches, etc.**
+
+We assume the first PR (document, code) to contribute to be simple and should be used to familiarize yourself with the submission process and community collaboration style.
+
+So the community has compiled the following list of issues suitable for novices: [https://github.com/apache/dolphinscheduler/issues/5689](https://github.com/apache/dolphinscheduler/issues/5689)
+
+List of non-newbie issues: [https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22](https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22)
+
+How to participate in the contribution: [https://dolphinscheduler.apache.org/en-us/community/development/contribute.html](https://dolphinscheduler.apache.org/en-us/community/development/contribute.html)
+
+**GitHub Code Repository:** [https://github.com/apache/dolphinscheduler](https://github.com/apache/dolphinscheduler)
+
+**Official Website**:[https://dolphinscheduler.apache.org/](https://dolphinscheduler.apache.org/)
+
+**MailList**:dev@dolphinscheduler@apache.org
+
+**Twitter**:@DolphinSchedule
+
+**YouTube:**[https://www.youtube.com/channel/UCmrPmeE7dVqo8DYhSLHa0vA](https://www.youtube.com/channel/UCmrPmeE7dVqo8DYhSLHa0vA)
+
+**Slack:**[https://s.apache.org/dolphinscheduler-slack](https://s.apache.org/dolphinscheduler-slack)
+
+**Contributor Guide:**[https://dolphinscheduler.apache.org/en-us/community/index.html](https://dolphinscheduler.apache.org/en-us/community/index.html)
+
+Your Star for the project is important, don’t hesitate to lighten a Star for Apache DolphinScheduler ❤️
+
+
+
diff --git a/blog/en-us/How_Does_Ziru_Build_A_Job_Scheduling_System_Popular_Among_Data_Analysts.md b/blog/en-us/How_Does_Ziru_Build_A_Job_Scheduling_System_Popular_Among_Data_Analysts.md
new file mode 100644
index 000000000..279c187ed
--- /dev/null
+++ b/blog/en-us/How_Does_Ziru_Build_A_Job_Scheduling_System_Popular_Among_Data_Analysts.md
@@ -0,0 +1,161 @@
+---
+title:How Does Ziru Build A Job Scheduling System Popular Among Data Analysts?
+keywords: Apache,DolphinScheduler,scheduler,big data,ETL,airflow,hadoop,orchestration,dataops,Meetup
+description: As one of the creators of enterprise data assets
+---
+# **How Does Ziru Build A Job Scheduling System Popular Among Data Analysts?**
+
+<div align=center>
+
+<img src="/img/2022-4-6/en/1.png"/>
+
+</div>
+
+>*As one of the creators of enterprise data assets, data analysts need to command certain professional skills such as dimension&metrics management, pedigree analysis, and ETL scheduling platform operations. However, for data analysts with varying levels of programming skills, a scheduling platform that is easy to operate and use will give them wings rather than adding additional learning costs.*
+>*Compared with most companies, Ziru differs from others in that a large amount of data warehouse processing on its big data platform is not done by professional warehouse engineers, but by data analysts. The reason why the data analysts of Ziru can do the complex data processing and analysis work that can only be done by professional teams is that their scheduling system is migrated to Apache DolphinScheduler.*
+>*At the Apache DolphinScheduler & Apache ShenYu(Incubating) Meetup, Liu Tao, the R&D Manager of Ziru Big Data Platform, shared with us what a popular scheduling system for data analysts looks like.*
+## **Author Bio**
+
+<div align=center>
+
+<img src="/img/2022-4-6/en/2.png"/>
+
+</div>
+
+Liu Tao, the R&D manager of Ziru Big Data Platform, is responsible for building the basic platform of Ziru Big Data and constructing a one-stop Big Data development platform.
+
+## **1 Status of Ziru Big Data Platform**
+
+Ziru Big Data Platform consists of Data Sources, Data Access, Data Process, Data Sink , and Data Application layers. The data sources include MySQL, Oracle, and other business library data, as well as various log data, which are collected through Hive offline T plus 1method, In addition to the use of Hive acid plus Flink to achieve a 10-minute level business library data updates.
+
+Data processing is the part that analysts care about, in which you can configure scheduling, dependencies, and SQL development. As for the data sink, we use ClickHouse’s OLAP engine, and the data application layer uses NetEase Youshu to provide the reporting platform.
+
+Ziru’s big data platform is almost the same as most platforms in the industry, But what is unique is that in addition to professional data warehouse development engineers, a large number of data analysts are also involved in the processing of data warehouses. This requires the big data platform to be simplified enough.
+
+## **2 Analysts’ expectations for a job scheduling system**
+
+Due to the varying levels of coding among data analysts, some analysts can write SQL, while others cannot write SQL at all. Even analysts who can write SQL find it difficult to understand **task-dependent concepts**.
+
+As a result, the analysts’ expectations for a scheduler are to be simple and have a low cost of use.
+
+## **3 How Airflow is implemented**
+
+<div align=center>
+
+<img src="/img/2022-4-6/en/3.png"/>
+
+</div>
+
+Hivepartitionsensor in Airflow
+
+<div align=center>
+
+<img src="/img/2022-4-6/en/4.png"/>
+
+</div>
+
+In the beginning, Ziyu used the Airflow solution, which offers a visualization plug-in Airflow DAG createmanager plug-in for analysts to use. We use hivepartitionsensor at the underlying level, with data dependency configuration scheduling. This set of solutions is a fair experience for analysts but faces several major problems.
+
+1. The underlying implementation of data dependencies leads to very complex task re-runs;
+
+2. Poor scheduling performance for multi-tasks, with some tasks having a higher calling delay;
+
+3. The cost for integration with the one-stop big data platform re-development is relatively high;
+
+4. Multi-tenancy is not natively supported.
+
+## **4 Apache DolphinScheduler Transformation and Airflow Task Migration**
+
+These challenges above prompted us to make a new scheduling selection. After a comparative analysis, we chose Apache DolphinScheduler.
+
+Data dependency is a well-understood concept for analysts, but task dependency is more puzzling.
+
+A more ideal solution would be to show data dependencies to the analyst, with the underlying implementation being task dependencies, and this data dependency can be produced automatically, without a manual dependency table entered by the analysts.
+
+To achieve this goal, we need to solve a problem first, **how to determine the input and output table of this SQL based on a piece of SQL?**
+
+<div align=center>
+
+<img src="/img/2022-4-6/en/5.png"/>
+
+</div>
+
+Since it is in the Hive environment, we need to look at the parsing process of Hive SQL.
+
+As shown above, hive uses antlr for syntactic and semantic parsing to generate an abstract syntax tree. For example, a SQL statement is as follows:
+
+<div align=center>
+
+<img src="/img/2022-4-6/en/6.png"/>
+
+</div>
+
+Parsed it into a syntax tree:
+
+<div align=center>
+
+<img src="/img/2022-4-6/en/7.png"/>
+
+</div>
+
+Traversing this abstract syntax tree gives us the exact input and output, and we found that we don’t need to do it from scratch, which can be simply implemented in Hive 147.
+
+[https://issues.apache.org/jira/browse/HIVE-147](https://issues.apache.org/jira/browse/HIVE-147)
+
+<div align=center>
+
+<img src="/img/2022-4-6/en/8.png"/>
+
+</div>
+
+Once we have parsed the input and output, we can associate the input and output tables with the corresponding Apache DolphinScheduler scheduling tasks, thus achieving the goal of showing the analysts a data dependency while the underlying implementation is a task dependency. Though this implementation will produce small tasks, most of which end up with only one table output, leading to a large number of scheduling tasks. But so far, it does not pose performance problems, and we can see i [...]
+
+<div align=center>
+
+<img src="/img/2022-4-6/en/7.png"/>
+
+</div>
+
+This is followed by the challenge of smoothly migrating tasks from Airflow to Apache DolphinScheduler. The tasks in airflow are all Python files, and the scheduler of airflow keeps scanning the file directory where the Python files are located to generate the scheduling tasks. The core implementation class is DagFileProcessorManager above, we can refer to the implementation of this class to parse the Python tasks and generate the JSON strings needed for the Apache DolphinScheduler task d [...]
+
+That’s all I have to share, thank you!
+
+# Join the Community
+
+There are many ways to participate and contribute to the DolphinScheduler community, including:
+
+**Documents, translation, Q&A, tests, codes, articles, keynote speeches, etc.**
+
+We assume the first PR (document, code) to contribute to be simple and should be used to familiarize yourself with the submission process and community collaboration style.
+
+So the community has compiled the following list of issues suitable for novices: [https://github.com/apache/dolphinscheduler/issues/5689](https://github.com/apache/dolphinscheduler/issues/5689)
+
+List of non-newbie issues: [https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22](https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22)
+
+How to participate in the contribution: [https://dolphinscheduler.apache.org/en-us/community/development/contribute.html](https://dolphinscheduler.apache.org/en-us/community/development/contribute.html)
+
+**GitHub Code Repository:** [https://github.com/apache/dolphinscheduler](https://github.com/apache/dolphinscheduler)
+
+**Official Website**:[https://dolphinscheduler.apache.org/](https://dolphinscheduler.apache.org/)
+
+**MailList**:dev@dolphinscheduler@apache.org
+
+**Twitter**:@DolphinSchedule
+
+**YouTube:**[https://www.youtube.com/channel/UCmrPmeE7dVqo8DYhSLHa0vA](https://www.youtube.com/channel/UCmrPmeE7dVqo8DYhSLHa0vA)
+
+**Slack:**[https://s.apache.org/dolphinscheduler-slack](https://s.apache.org/dolphinscheduler-slack)
+
+**Contributor Guide:**[https://dolphinscheduler.apache.org/en-us/community/index.html](https://dolphinscheduler.apache.org/en-us/community/index.html)
+
+Your Star for the project is important, don’t hesitate to lighten a Star for Apache DolphinScheduler ❤️
+
+
+
+
+
+
+
+
+
+
diff --git a/blog/zh-cn/How_Does_Live-broadcasting_Platform_Adapt_to_Apache_DolphinScheduler.md.md b/blog/zh-cn/How_Does_Live-broadcasting_Platform_Adapt_to_Apache_DolphinScheduler.md.md
new file mode 100644
index 000000000..a2a1d3384
--- /dev/null
+++ b/blog/zh-cn/How_Does_Live-broadcasting_Platform_Adapt_to_Apache_DolphinScheduler.md.md
@@ -0,0 +1,235 @@
+# 论语音社交视频直播平台与 Apache DolphinScheduler 的适配度有多高
+
+<div align=center>
+
+<img src="/img/2022-4-11/1.png"/>
+
+</div>
+
+在 Apache DolphinScheduler Meetup 上,**YY 直播 软件工程师 袁丙泽**为我们分享了《YY直播基于Apache DolphinScheduler的适配与探索》。
+
+本次演讲主要包括四个部分:
+
+* YY直播引入Apache DolphinScheduler的背景
+* Apache DolphinScheduler的引入过程
+* Apache DolphinScheduler应用的适配
+* YY直播未来的规划
+<div align=center>
+
+<img src="/img/2022-4-11/2.png"/>
+
+</div>
+
+**袁丙泽**YY直播 软件工程师,10 余年工作经验,主要从事风控大数据平台开发工作,对常用大数据组件深感兴趣,研发经验丰富。
+
+## **背景**
+
+YY直播是中国领先的语音社交视频直播企业,目前我们团队的主要职责是保障公司的业务安全。
+
+### **01**技术现状
+
+目前我们采用分层的技术架构,最底层是数据源层,其次从下往上依次是采集层、存储层和管理层和计算层与应用层。 
+
+ 
+
+在**数据源层**,我们目前会去拉取各个业务方的一个关系型数据库数据,以及通过API向我们传输的数据,还有一些数据是通过Kafka这种流的方式来传输给我们。
+
+ 
+
+**采集层**采用了我们自己研发的一套数据采集系统。
+
+ 
+
+**存储层**中,我们目前将数据主要放在了关系型数据库中,如Clickhouse,还有一小部分会放在一些非关系型数据库中,如Redis和图库。当然大部分数据都存储在大数据系统中。
+
+ 
+
+**管理层**我们主要有大数据管理系统,结合自己研发的一个计算调度以及任务管理系统和服务治理平台。
+
+### **02**调度Apache DolphinScheduler之前的问题
+
+1、调度平台复杂:团队除了有基于Xxl-job的任务调度外,部分老项目中有使用Crontab、Springboot、Scheduler、Quartz等管理任务的启动。
+
+2、任务依赖需求强烈:目前我们所使用的的调度,仅能设置单个任务的执行,无法通过任务依赖形成工作流,任务依赖设置严重依赖于个人经验设定定时时间。实际上很多任务都需要有依赖关系。
+
+3、任务复杂多样:目前任务有基于大数据系统的Spark、Flink任务,服务治理平台中各种Java服务任务、Shell、Java application、Python等。
+
+## **引入过程**
+
+
+在需求调研中,我们实际上需要一款调度平台,需要满足如下条件:
+
+**1、统一管理任务及依赖关系**
+
+随着业务计算的需求越来越多,特别是各种各样的画像计算和任务,这些任务分散在各个系统当中,管理起来非常困难,部分任务之间有一定的依赖关系,但配置其时间依靠的是个人经验。急需一款能够统一配置管理依赖的产品。
+
+**2、兼容公司内部各平台系统**
+
+我们需要调度任务平台管理我们的任务,同时为了快速投入使用,调度平台需要兼容我们公司其他的平台系统,如内部的Datax和Crontab服务。
+
+**3、高可用、高性能、高并发,容易使用**
+
+最后为了保证业务的稳定性,我们也需要这种调度平台能够高可用、高性能、高并发,并且容易使用。
+
+ 
+
+通过调研我们发现,Apache DolphinScheduler几乎就是为我们设计的,适配过程中无需太多修改,就能满足我们需求。
+
+## **应用适配**
+
+Apache DolphinScheduler 是一个分布式去中心化,易扩展的可视化DAG工作流任务调度系统,致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用,这非常符合我们的需求。
+
+首先了解下Apache DolphinScheduler的架构,便于理解接下来的适配案例。
+
+<div align=center>
+
+<img src="/img/2022-4-11/3.png"/>
+
+</div>
+
+Apache DolphinScheduler主要有API、master、 worker、 log以及 alert这5个模块。
+
+API接口层,主要负责处理前端UI层的请求。该服务统一提供RESTful api向外部提供请求服务。接口包括工作流的创建、定义、查询、修改、发布、下线、手工启动、停止、暂停、恢复、从该节点开始执行等等。
+
+ 
+
+MasterServer采用分布式无中心设计理念,MasterServer主要负责 DAG 任务切分、任务提交监控,并同时监听其它MasterServer和WorkerServer的健康状态。MasterServer服务启动时向Zookeeper注册临时节点,通过监听Zookeeper临时节点变化来进行容错处理。
+
+WorkerServer也采用分布式无中心设计理念,WorkerServer主要负责任务的执行和提供日志服务。WorkerServer服务启动时向Zookeeper注册临时节点,并维持心跳。workServer还提供有logger服务。
+
+ 
+
+Alert提供告警相关接口,接口主要包括两种类型的告警数据的存储、查询和通知功能。其中通知功能又有邮件通知和**SNMP(暂未实现)**两种。
+
+ 
+
+目前我们部署的是2.0版本,主要使用了4台物理机,在这4台物理机上部署了2个master实例,2个API实例和3个worker与logger实例,一个alert实例。
+
+ 
+
+接下来分享3个具体的适配案例。
+
+ 
+
+首先是与我们服务治理平台的适配,该适配主要目的是用于任务监控;尽管Apache DolphinScheduler本身提供有任务监控模块,我们同事早已经习惯利用服务治理平台统一管理监控。所以我们需要把Apache DolphinScheduler任务运行状态及时上报至服务治理平台。
+
+### **01**服务治理适配—MasterServer服务说明
+
+在适配之前,再次详细了解下MasterServer服务,MasterServer提供有:
+
+1. Distributed Quartz分布式调度组件,主要负责定时任务的启停操作,当quartz挑起任务后,Master内部会有线程池具体负责处理任务的后续操作;
+2. MasterSchedulerThread是一个扫描线程,定时扫描数据库中的command表,根据不同的命令类型进行不同的业务操作;
+3. MasterExecThread(WorkflowExecutThread.java)主要负责DAG任务切分、任务提交监控、各种不同命令类型的逻辑处理;
+4. MasterTaskExecThread主要负责任务的持久化。
+### **02**服务治理适配-code
+
+我们的需求是监控任务,通过代码分析,我们发现任务提交与监听主要在WorkflowExecuteThread类中的方法中实现,该类会启动多个实例线程。分别负责任务执行与监听。其流程图如下:
+
+<div align=center>
+
+<img src="/img/2022-4-11/4.png"/>
+
+</div>
+
+任务提交及监控流程图
+
+我们的需求是监控任务,通过分析代码后发现,WorkflowExecuteThread主要有startprocess和handle events两个方法分别实现了任务执行与监听。其实我们主要在handleEvents方法中注入我们的服务治理平台数据收集代码,这样就能把任务监听情况及时上报到我们服务治理平台了。
+
+ 
+
+其修改部分如下:
+
+<div align=center>
+
+<img src="/img/2022-4-11/5.png"/>
+
+</div>
+
+在服务治理平台中具体的效果图如下:
+
+<div align=center>
+
+<img src="/img/2022-4-11/6.png"/>
+
+</div>
+
+除了监控我们的具体任务状况外,我们还会分 project去做一些监控,最后都通过服务治理平台来做监控操作,比如像一些任务如果比较重要,我们就会配置一些电话报警,即一旦这个任务失败或者未按时执行完毕,便会进行电话通知。
+
+### **03**Datax服务适配过程
+
+第2个案例是关于Datax服务的适配过程。我们在研究Apache DolphinScheduler的时候,发现其已经集成了Datax类型的任务,这个对我们非常友好。因为我们也有数量相当多的任务是通过Datax来实现的,并且我们也开发了一部分Datax的插件,来去适配内部各个系统与存储的数据读写。
+
+Datax适配的时候主要分为两部分,一部分是通过这种自定义模板来去实现,这部分其实就是我们将之前的一些Datax的服务拷贝过来,稍加修改,就能够实现了,主要涉及到的是一些非关型数据库之间的一些数据交互。
+
+ 
+
+而纯粹的关型数据库之间的交互,我们还是需要通过配置方式实现。
+
+ 
+
+首先我们在配置Clickhouse读写任务时,就遇见了一个小bug。
+
+### **04**Datax服务适配—Clickhouse兼容#8092
+
+我们在使用Datax来读取Clickhouse数据源的数据时,发现在sql当中,只要引用参数,无论时间参数还是其他参数,在提交的时都会失败,我们就怀疑其中可能有一些bug,阅读错误日志的时候,也发现在Apache DolphinScheduler提交 SQL时,是参数并未被替换就直接提交给了Clickhouse去执行,由于clickhouse并不能识别我们的Apache DolphinScheduler参数,所以就直接抛出异常了。我们梳理了一下Apache DolphinScheduler在执行datax任务时读取clickhouse的流程。其中在将我们在Apache DolphinScheduler配置转为datax配置流程如下:
+
+<div align=center>
+
+<img src="/img/2022-4-11/7.png"/>
+
+</div> 
+
+系统首先要做的就是先去解析sql的所有语法,然后通过语法拿到一些列的信息,这时它要去调用sql解析器。在这个过程当中,如果Apache DolphinScheduler没有对我们的这个参数去做替换,在执行这个 circle的时候就会发生错误,最后导致整个任务失败。
+
+ 
+
+因此在解决的过程中,既然可能获取不到Clickhouse的解析器,最好的方法就是直接加入一个解析器。首先构建一个Json文件,然后格式化解析出来的所有的链,最后对语法去做一次解析,层层调用,最后能够调用到目标解析器。
+
+### **05**Time参数适配Apache DolphinScheduler现状
+
+最后的案例是关于时间参数适配。
+
+ 
+
+Apache DolphinScheduler虽然提供有时间参数,但是我们自己的数据大部分都需要精确到毫秒级别的unixtime时间。通过阅读Apache DolphinScheduler的文档,我们遗憾地发现其并未提供该类型时间参数的实现。翻阅源码过程中,我们发现Apache DolphinScheduler提供有timestamp函数,实际上能够提供unixtime时间值。
+
+ 
+
+在使用timestamp的时候,我们发现有两个小问题,首先timestamp直接表达unixtime有一些歧义,其次timestamp仅支持到秒级别,而我们大部分数据需要毫秒级别。为了方便使用,我们对此部分做了一些修改进行适配。
+
+<div align=center>
+
+<img src="/img/2022-4-11/8.png"/>
+
+</div>
+
+**适配过程**
+
+首先我们做的第一件事情就是消除歧义,在Apache DolphinScheduler中,Timestamp是表达时间的方式,从Wiki百科获得的关于Timestamp和Unix time时间表达的解释能看出,Timestamp通常是通过日期加时间来表示的,但是Unix time时间采用的是格林威治时间,从1970年1月1日零时零分零秒至今,并且不考虑微秒的时间表达,采用的是整数。
+
+明确了需求,接下来就需要了解如何实现了。我们通过分析代码发现,时间参数函数的实现是通过api方式层层调用,最终主要函数均通过在TimePlaceHolderUtils类中calculateTime的方法实现。该方法实现过程中,也会调用TaskConstants类中的表达时间函数名称的常量。于是我们对其中 TaskConstants类的一些常量进行了修改。又因为我们需要毫秒级别的函数,加入了一个 milli_unixtime函数,最后为了满足设备用户的需求,我们加入了一些更精度更高的函数,如微秒和纳秒的函数。
+
+<div align=center>
+
+<img src="/img/2022-4-11/9.png"/>
+
+</div>
+
+<div align=center>
+
+<img src="/img/2022-4-11/10.png"/>
+
+</div>
+
+在补数功能上,在使用Apache DolphinScheduler之后,我们只需要在手动执行任务的时候选中补数的功能,再填充上我们要调度的日期,就可以直接进行补充了,同时我们还可以填写并行度。这个功能对我们这来说非常实用的,在Apache DolphinScheduler 2.0版本以后,时间的配置和执行的时间有日绩差的问题也被解决,在使用上带来了很大的便利。
+
+## **未来规划**
+
+在使用的过程中,我们发现通过Apache DolphinScheduler配置的任务在使用数据源方面,目前还不支持高可用的方案,这个需求在我们这里是比较强烈的,因此目前我们也正在做高可用的适配。
+
+其次,我们目前使用的是Apache DolphinScheduler的2.0版本,因为社区比较活跃,版本升级也比较快,即使是一个小版本的升级,也会带来一些很大的功能和设计上的一些变化。比如在新版本当中,告警功能已经插件化,也解决了一些补数日期换算的问题。这也驱动着我们团队升级到新的版本去体验一些新的功能。虽然目前Apache DolphinScheduler只是在我们自己的小团队内部使用,但我们也正在思考让整个公司普遍使用的可行性方案。
+
+ 
+
+尽管Apache DolphinScheduler非常完美地解决我们的大部分问题,并且大幅度提高我们的工作效率。但在各种复杂的情况下,我们还是会遇见一些小的Bug,我们未来也会在修复后提交给官方,当然我们自己在使用过程中也尝试了一些小Future,未来也会提交给官方共同讨论。
+
diff --git a/blog/zh-cn/How_Does_Ziru_Build_A_Job_Scheduling_System_Popular_Among_Data_Analysts.md b/blog/zh-cn/How_Does_Ziru_Build_A_Job_Scheduling_System_Popular_Among_Data_Analysts.md
new file mode 100644
index 000000000..40b987a65
--- /dev/null
+++ b/blog/zh-cn/How_Does_Ziru_Build_A_Job_Scheduling_System_Popular_Among_Data_Analysts.md
@@ -0,0 +1,155 @@
+# 数据分析师干了专业数仓工程师的活,自如是怎么做到的?
+
+<div align=center>
+
+<img src="/img/2022-4-6/1.jpg"/>
+
+</div>
+
+数据分析师作为企业数据资产的缔造者之一,具有一定的维度与指标体系管理、血缘分析、ETL 调度平台等技能。能够灵活使用调度平台会为数据分析师带来很大的便利,然而对于编程技能水平参差不齐的数据分析师来说,一个操作简单,使用成本低的调度平台才能让他们如虎添翼,而不是增加额外的学习成本。
+
+与大多企业相比,自如大数据平台的独特之处在于,大量的数仓加工并非由专业的数仓工程师完成,而是由数据分析师所做。而自如的数据分析师之所以能够做到专业团队才能完成的复杂的数据处理、分析工作,与其调度系统迁移到 Apache DolphinScheduler 分不开。
+
+在不久前的 Apache DolphinScheduler& Apache ShenYu(Incubating) Meetup 上,**自如大数据研发经理 刘涛**,为我们分享了受数据分析师们欢迎的调度系统是什么样的。
+
+<div align=center>
+
+<img src="/img/2022-4-6/2.png"/>
+
+</div>
+
+**刘涛**自如大数据研发经理,负责自如大数据基础平台构建,建设一站式大数据开发平台。
+
+
+## 01 **自如大数据平台现状**
+
+<div align=center>
+
+<img src="/img/2022-4-6/3.png"/>
+
+</div>
+
+自如大数据平台
+
+上图是自如大数据离线平台的简单图示,数据源包括 MySQL、Oracle 等业务库数据,以及各种日志数据,通过 Hive 离线 T 加 1 采集、另外使用Hive acid加上Flink实现了一个10分钟级别的业务库数据更新。
+
+数据加工是分析师关心的部分,这个过程可以配置调度、配置依赖和 SQL 开发。而在数据落地上,我们采用了 ClickHouse 的 OLAP 引擎,数据应用层使用网易有数提供报表平台。
+
+自如的大数据平台与业界大多数平台相差不大,但独特之处在于除了支持专业数仓开发工程师外,大量的数据分析师参与到了数仓加工之中。这就要求大数据平台要足够简化。
+
+## 02 **分析师的期望**
+
+<div align=center>
+
+<img src="/img/2022-4-6/4.png"/>
+
+</div>
+
+由于数据分析师的编码水平参差不齐,有些分析师会写 SQL,而有些分析师根本不会写 SQL。即使是对于会写 SQL 的分析师,在面对任务依赖概念的理解上,也会觉得难度很大。
+
+因此,分析师群体对于调度的期望是要简单,上手成本低。
+
+## **03 Airflow的实现方式**
+
+<div align=center>
+
+<img src="/img/2022-4-6/5.png"/>
+
+</div>
+
+<div align=center>
+
+<img src="/img/2022-4-6/6.png"/>
+
+</div>
+
+一开始,自如选用的是 Airflow,使用Airflow 可视化插件Airflow DAG createmanager plug-in来供分析师用,底层使用hivepartitionsensor,用数据依赖的方式配置调度,便于分析师理解和使用,这套解决方案,对于分析师来说体验尚可,但是面临几个较大的问题:
+
+1. 数据依赖的底层实现导致的任务重跑非常复杂;
+2. 任务量比较多后,调度性能较差,有些任务调起延迟较大;
+3. 与一站式大数据开发平台集成二开成本比较高;
+4. 原生不支持多租户。
+## **04 Apache DolphinScheduler改造与 Airflow任务迁移**
+
+
+以上几个比较重要的挑战,促使我们重新进行调度选型。经过对比分析后,我们选择了 Apache DolphinScheduler。
+
+对于分析师来说,数据依赖是一个好理解的概念,但任务依赖就比较让人费解。
+
+比较理想的方案是对分析师展示的是数据依赖,底层实现是任务依赖,并且这数据依赖是自动生产的,不需要分析师手动输入依赖表。
+
+做到这一点,首先需要解决一个问题,**如何根据一段 SQL,判断出这段 SQL 的输入输出表?**
+
+<div align=center>
+
+<img src="/img/2022-4-6/7.png"/>
+
+</div>
+
+<div align=center>
+
+<img src="/img/2022-4-6/8.png"/>
+
+</div>
+
+由于是在 Hive 的环境中,所以需要看下 Hive  sql 的解析过程。
+
+如上图所示hive利用antlr 进行语法和语义解析,生成抽象语法树。举例,如下一段 sql 语句:
+
+<div align=center>
+
+<img src="/img/2022-4-6/9.png"/>
+
+</div>
+
+解析成的语法树:
+
+<div align=center>
+
+<img src="/img/2022-4-6/10.png"/>
+
+</div>
+
+遍历这棵抽象语法树就可以准确获得输入输出,我们发现并不需要从头来做,Hive 147 中就实现了这个功能。
+
+[https://issues.apache.org/jira/browse/HIVE-147](https://issues.apache.org/jira/browse/HIVE-147)
+
+<div align=center>
+
+<img src="/img/2022-4-6/11.png"/>
+
+</div>
+
+我们解析了输入输出之后,就可以把输入输出表和对应的 Apache DolphinScheduler调度任务关联起来,这样就完成了对分析师看到的是数据依赖,底层实现是任务依赖。当然这种实现就会让每个任务都很小,大部分任务都是只最终产出一张表,调度数量会比较多,但目前来看,没有带来性能问题。
+
+<div align=center>
+
+<img src="/img/2022-4-6/12.png"/>
+
+</div>
+
+这之后就是面临的如何把Airflow中的任务平滑的迁移到 Apache DolphinScheduler 中,Airflow的任务都是一个个Python文件,Airflow 的调度器不停地扫描Pyhton文件所在文件目录,生成调度任务。核心实现类就是上图中的 DagFileProcessorManager,我们就可以参考这个类的实现来解析Python任务,生成Apache DolphinScheduler 任务定义需要的 Json 串,从而完成调度任务的迁移。
+
+最后是做个广告,我们是自如大数据基础平台,负责大数据的部署、 运维、 监控、优化、二开,并且在此之上构建一站式的大数据开发平台,欢迎加入我们。
+
+我的分享就到这里,感谢大家!
+
+
+## 05 **特别感谢**
+
+**联合主办方**
+
+Apache ShenYu(Incubating)
+
+**合作方**
+
+示说网、开源中国、CSDN、稀土掘金、开源社、SeaTunnel 社区、思否 和 ALC 北京
+
+**礼品赞助**
+
+YY 直播
+
+Apache ShenYu(Incubating)
+
+**感谢主持人,低代码无代码平台 Treelab  张德通**,以及**活动志愿者 曹海洋** 对本场活动的大力支持!
+
diff --git a/img/2022-4-11/1.png b/img/2022-4-11/1.png
new file mode 100644
index 000000000..f1034f919
Binary files /dev/null and b/img/2022-4-11/1.png differ
diff --git a/img/2022-4-11/10.png b/img/2022-4-11/10.png
new file mode 100644
index 000000000..76cb35c6a
Binary files /dev/null and b/img/2022-4-11/10.png differ
diff --git a/img/2022-4-11/2.png b/img/2022-4-11/2.png
new file mode 100644
index 000000000..060e969b8
Binary files /dev/null and b/img/2022-4-11/2.png differ
diff --git a/img/2022-4-11/3.png b/img/2022-4-11/3.png
new file mode 100644
index 000000000..8c5f5aadc
Binary files /dev/null and b/img/2022-4-11/3.png differ
diff --git a/img/2022-4-11/4.png b/img/2022-4-11/4.png
new file mode 100644
index 000000000..d7e1c7a60
Binary files /dev/null and b/img/2022-4-11/4.png differ
diff --git a/img/2022-4-11/5.png b/img/2022-4-11/5.png
new file mode 100644
index 000000000..01beafb4f
Binary files /dev/null and b/img/2022-4-11/5.png differ
diff --git a/img/2022-4-11/6.png b/img/2022-4-11/6.png
new file mode 100644
index 000000000..a3c9813e7
Binary files /dev/null and b/img/2022-4-11/6.png differ
diff --git a/img/2022-4-11/7.png b/img/2022-4-11/7.png
new file mode 100644
index 000000000..9569a563d
Binary files /dev/null and b/img/2022-4-11/7.png differ
diff --git a/img/2022-4-11/8.png b/img/2022-4-11/8.png
new file mode 100644
index 000000000..c937f7432
Binary files /dev/null and b/img/2022-4-11/8.png differ
diff --git a/img/2022-4-11/9.png b/img/2022-4-11/9.png
new file mode 100644
index 000000000..732c66f59
Binary files /dev/null and b/img/2022-4-11/9.png differ
diff --git a/img/2022-4-11/en/1.png b/img/2022-4-11/en/1.png
new file mode 100644
index 000000000..f1034f919
Binary files /dev/null and b/img/2022-4-11/en/1.png differ
diff --git a/img/2022-4-11/en/10.png b/img/2022-4-11/en/10.png
new file mode 100644
index 000000000..78a11f353
Binary files /dev/null and b/img/2022-4-11/en/10.png differ
diff --git a/img/2022-4-11/en/11.png b/img/2022-4-11/en/11.png
new file mode 100644
index 000000000..e56e03664
Binary files /dev/null and b/img/2022-4-11/en/11.png differ
diff --git a/img/2022-4-11/en/12.png b/img/2022-4-11/en/12.png
new file mode 100644
index 000000000..8be90b7d0
Binary files /dev/null and b/img/2022-4-11/en/12.png differ
diff --git a/img/2022-4-11/en/13.png b/img/2022-4-11/en/13.png
new file mode 100644
index 000000000..208853917
Binary files /dev/null and b/img/2022-4-11/en/13.png differ
diff --git a/img/2022-4-11/en/14.png b/img/2022-4-11/en/14.png
new file mode 100644
index 000000000..6cd3caa3e
Binary files /dev/null and b/img/2022-4-11/en/14.png differ
diff --git a/img/2022-4-11/en/2.png b/img/2022-4-11/en/2.png
new file mode 100644
index 000000000..060e969b8
Binary files /dev/null and b/img/2022-4-11/en/2.png differ
diff --git a/img/2022-4-11/en/3.png b/img/2022-4-11/en/3.png
new file mode 100644
index 000000000..e2f591e26
Binary files /dev/null and b/img/2022-4-11/en/3.png differ
diff --git a/img/2022-4-11/en/4.png b/img/2022-4-11/en/4.png
new file mode 100644
index 000000000..89783db5a
Binary files /dev/null and b/img/2022-4-11/en/4.png differ
diff --git a/img/2022-4-11/en/5.png b/img/2022-4-11/en/5.png
new file mode 100644
index 000000000..67c67289f
Binary files /dev/null and b/img/2022-4-11/en/5.png differ
diff --git a/img/2022-4-11/en/6.png b/img/2022-4-11/en/6.png
new file mode 100644
index 000000000..255a8c7fc
Binary files /dev/null and b/img/2022-4-11/en/6.png differ
diff --git a/img/2022-4-11/en/7.png b/img/2022-4-11/en/7.png
new file mode 100644
index 000000000..21671b2a9
Binary files /dev/null and b/img/2022-4-11/en/7.png differ
diff --git a/img/2022-4-11/en/8.png b/img/2022-4-11/en/8.png
new file mode 100644
index 000000000..982b2ef19
Binary files /dev/null and b/img/2022-4-11/en/8.png differ
diff --git a/img/2022-4-11/en/9.png b/img/2022-4-11/en/9.png
new file mode 100644
index 000000000..4be556a48
Binary files /dev/null and b/img/2022-4-11/en/9.png differ
diff --git a/img/2022-4-6/1.jpg b/img/2022-4-6/1.jpg
new file mode 100644
index 000000000..6ba1de924
Binary files /dev/null and b/img/2022-4-6/1.jpg differ
diff --git a/img/2022-4-6/10.png b/img/2022-4-6/10.png
new file mode 100644
index 000000000..3684975bb
Binary files /dev/null and b/img/2022-4-6/10.png differ
diff --git a/img/2022-4-6/11.png b/img/2022-4-6/11.png
new file mode 100644
index 000000000..b7646e6c0
Binary files /dev/null and b/img/2022-4-6/11.png differ
diff --git a/img/2022-4-6/12.png b/img/2022-4-6/12.png
new file mode 100644
index 000000000..b30a07c01
Binary files /dev/null and b/img/2022-4-6/12.png differ
diff --git a/img/2022-4-6/2.png b/img/2022-4-6/2.png
new file mode 100644
index 000000000..1ba1fb681
Binary files /dev/null and b/img/2022-4-6/2.png differ
diff --git a/img/2022-4-6/3.png b/img/2022-4-6/3.png
new file mode 100644
index 000000000..933c1f1ad
Binary files /dev/null and b/img/2022-4-6/3.png differ
diff --git a/img/2022-4-6/4.png b/img/2022-4-6/4.png
new file mode 100644
index 000000000..fbe54814c
Binary files /dev/null and b/img/2022-4-6/4.png differ
diff --git a/img/2022-4-6/5.png b/img/2022-4-6/5.png
new file mode 100644
index 000000000..a1d442b8e
Binary files /dev/null and b/img/2022-4-6/5.png differ
diff --git a/img/2022-4-6/6.png b/img/2022-4-6/6.png
new file mode 100644
index 000000000..e4dfa0f7a
Binary files /dev/null and b/img/2022-4-6/6.png differ
diff --git a/img/2022-4-6/7.png b/img/2022-4-6/7.png
new file mode 100644
index 000000000..3a2512132
Binary files /dev/null and b/img/2022-4-6/7.png differ
diff --git a/img/2022-4-6/8.png b/img/2022-4-6/8.png
new file mode 100644
index 000000000..06db77c0a
Binary files /dev/null and b/img/2022-4-6/8.png differ
diff --git a/img/2022-4-6/9.png b/img/2022-4-6/9.png
new file mode 100644
index 000000000..078636abc
Binary files /dev/null and b/img/2022-4-6/9.png differ
diff --git a/img/2022-4-6/en/1.png b/img/2022-4-6/en/1.png
new file mode 100644
index 000000000..8817d5ade
Binary files /dev/null and b/img/2022-4-6/en/1.png differ
diff --git a/img/2022-4-6/en/2.png b/img/2022-4-6/en/2.png
new file mode 100644
index 000000000..0bd4959ad
Binary files /dev/null and b/img/2022-4-6/en/2.png differ
diff --git a/img/2022-4-6/en/3.png b/img/2022-4-6/en/3.png
new file mode 100644
index 000000000..207d651b4
Binary files /dev/null and b/img/2022-4-6/en/3.png differ
diff --git a/img/2022-4-6/en/4.png b/img/2022-4-6/en/4.png
new file mode 100644
index 000000000..1b72f0ff8
Binary files /dev/null and b/img/2022-4-6/en/4.png differ
diff --git a/img/2022-4-6/en/5.png b/img/2022-4-6/en/5.png
new file mode 100644
index 000000000..d93e169df
Binary files /dev/null and b/img/2022-4-6/en/5.png differ
diff --git a/img/2022-4-6/en/6.png b/img/2022-4-6/en/6.png
new file mode 100644
index 000000000..f9a710492
Binary files /dev/null and b/img/2022-4-6/en/6.png differ
diff --git a/img/2022-4-6/en/7.png b/img/2022-4-6/en/7.png
new file mode 100644
index 000000000..f62f16640
Binary files /dev/null and b/img/2022-4-6/en/7.png differ
diff --git a/img/2022-4-6/en/8.png b/img/2022-4-6/en/8.png
new file mode 100644
index 000000000..966177623
Binary files /dev/null and b/img/2022-4-6/en/8.png differ
diff --git a/site_config/blog.js b/site_config/blog.js
index f784edab5..f27204963 100644
--- a/site_config/blog.js
+++ b/site_config/blog.js
@@ -3,6 +3,22 @@ export default {
         barText: 'Blog',
         postsTitle: 'All posts',
         list: [
+            {
+
+                title: 'How Does Live-broadcasting Platform Adapt to Apache DolphinScheduler?',
+                author: 'Debra Chen',
+                dateStr: '2022-4-16',
+                desc: 'Background on the introduction of Apache DolphinScheduler to YY Live... ',
+                link: '/en-us/blog/How_Does_Live-broadcasting_Platform_Adapt_to_Apache_DolphinScheduler.html',
+            },
+            {
+
+                title: 'How Does Ziru Build A Job Scheduling System Popular Among Data Analysts?',
+                author: 'Debra Chen',
+                dateStr: '2022-4-16',
+                desc: 'As one of the creators of enterprise data assets... ',
+                link: '/en-us/blog/How_Does_Ziru_Build_A_Job_Scheduling_System_Popular_Among_Data_Analysts.html',
+            },
             {
 
                 title: 'Fast Task Type Expanding On Apache DolphinScheduler | Tutorial',
@@ -191,6 +207,20 @@ export default {
         barText: '博客',
         postsTitle: '所有文章',
         list: [
+            {
+                title: '论语音社交视频直播平台与 Apache DolphinScheduler 的适配度有多高',
+                author: 'Debra Chen',
+                dateStr: '2022-4-16',
+                desc: 'YY直播引入Apache DolphinScheduler的背景...',
+                link: '/zh-cn/blog/How_Does_Live-broadcasting_Platform_Adapt_to_Apache_DolphinScheduler.html',
+            },
+            {
+                title: '数据分析师干了专业数仓工程师的活,自如是怎么做到的?',
+                author: 'Debra Chen',
+                dateStr: '2022-4-16',
+                desc: '数据分析师作为企业数据资产的缔造者之一...',
+                link: '/zh-cn/blog/How_Does_Ziru_Build_A_Job_Scheduling_System_Popular_Among_Data_Analysts.html',
+            },
             {
                 title: '极速开发扩充 Apache DolphinScheduler Task 类型 | 实用教程',
                 author: 'Debra Chen',