You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@dolphinscheduler.apache.org by li...@apache.org on 2019/11/29 11:57:09 UTC

[incubator-dolphinscheduler-website] branch master updated: Added English page for plugin development page, migrated developer guide to developer, removed blog system architecture design page and style modification

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

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


The following commit(s) were added to refs/heads/master by this push:
     new e7bbc7f  Added English page for plugin development page, migrated developer guide to developer, removed blog system architecture design page and style modification
     new 4bf11bd  Merge pull request #42 from break60/master
e7bbc7f is described below

commit e7bbc7fe2f510767941c34e277206f60934d3913
Author: break60 <79...@qq.com>
AuthorDate: Fri Nov 29 17:32:11 2019 +0800

    Added English page for plugin development page, migrated developer guide to developer, removed blog system architecture design page and style modification
---
 .../architecture-design.md                         |  0
 .../backend-development.md                         |  0
 .../frontend-development.md                        |  0
 docs/en-us/development/plugin-development.md       | 54 +++++++++++++++
 .../architecture-design.md                         | 78 ++++++++++++++++++++++
 .../backend-development.md                         |  0
 .../frontend-development.md                        |  0
 .../plugin-development.md                          |  0
 md_json/docs.json                                  | 39 ++++++-----
 site_config/blog.js                                | 14 ----
 site_config/development.js                         | 52 +++++++++++++++
 site_config/docs.js                                | 48 -------------
 site_config/site.js                                |  4 +-
 src/components/header/index.jsx                    | 20 +++---
 src/pages/blogDetail/index.scss                    |  2 +-
 15 files changed, 217 insertions(+), 94 deletions(-)

diff --git a/docs/en-us/developer_guide/architecture-design.md b/docs/en-us/development/architecture-design.md
similarity index 100%
rename from docs/en-us/developer_guide/architecture-design.md
rename to docs/en-us/development/architecture-design.md
diff --git a/docs/en-us/developer_guide/backend-development.md b/docs/en-us/development/backend-development.md
similarity index 100%
rename from docs/en-us/developer_guide/backend-development.md
rename to docs/en-us/development/backend-development.md
diff --git a/docs/en-us/developer_guide/frontend-development.md b/docs/en-us/development/frontend-development.md
similarity index 100%
rename from docs/en-us/developer_guide/frontend-development.md
rename to docs/en-us/development/frontend-development.md
diff --git a/docs/en-us/development/plugin-development.md b/docs/en-us/development/plugin-development.md
new file mode 100644
index 0000000..eda2d82
--- /dev/null
+++ b/docs/en-us/development/plugin-development.md
@@ -0,0 +1,54 @@
+## Task Plugin Development
+
+Remind:Currently, task plugin development does not support hot deployment.
+
+### Shell-based tasks
+
+#### YARN-based calculations (see MapReduceTask)
+
+- Need to be **cn.dolphinscheduler.server.worker.task** Down **TaskManager** Create a custom task in the class (also need to register the corresponding task type in TaskType)
+- Need to inherit**cn.dolphinscheduler.server.worker.task** Down **AbstractYarnTask**
+- Constructor Scheduling **AbstractYarnTask** Construction method
+- Inherit **AbstractParameters** Custom task parameter entity
+- Rewrite **AbstractTask** of **init** Parsing in method**Custom task parameters**
+- Rewrite **buildCommand** Encapsulation command
+
+
+
+#### Non-YARN-based calculations (see ShellTask)
+- Need to be **cn.dolphinscheduler.server.worker.task** Down **TaskManager** A custom task
+
+- Need to inherit**cn.dolphinscheduler.server.worker.task** Down **AbstractTask**
+
+- Instantiation in constructor **ShellCommandExecutor**
+
+  ```
+  public ShellTask(TaskProps props, Logger logger) {
+    super(props, logger);
+  
+    this.taskDir = props.getTaskDir();
+  
+    this.processTask = new ShellCommandExecutor(this::logHandle,
+        props.getTaskDir(), props.getTaskAppId(),
+        props.getTenantCode(), props.getEnvFile(), props.getTaskStartTime(),
+        props.getTaskTimeout(), logger);
+    this.processDao = DaoFactory.getDaoInstance(ProcessDao.class);
+  }
+  ```
+
+  Incoming custom tasks **TaskProps**And custom**Logger**,TaskProps Encapsulate task information, Logger is installed with custom log information
+
+- Inherit **AbstractParameters** Custom task parameter entity
+
+- Rewrite **AbstractTask** of **init** Parsing in method**Custom task parameter entity**
+
+- Rewrite **handle** method,transfer **ShellCommandExecutor** of **run** method,The first parameter is passed in**command**,Pass the second parameter to ProcessDao and set the corresponding **exitStatusCode**
+
+### Non-SHELL-based tasks (see SqlTask)
+
+- Need to be **cn.dolphinscheduler.server.worker.task** Down **TaskManager** A custom task
+- Need to inherit**cn.dolphinscheduler.server.worker.task** Down **AbstractTask**
+- Inherit **AbstractParameters** Custom task parameter entity
+- Constructor or override **AbstractTask** of **init** in the method, parse the custom task parameter entity
+- Rewrite **handle** Methods to implement business logic and set the corresponding**exitStatusCode**
+
diff --git a/docs/zh-cn/developer_guide/architecture-design.md b/docs/zh-cn/development/architecture-design.md
similarity index 85%
rename from docs/zh-cn/developer_guide/architecture-design.md
rename to docs/zh-cn/development/architecture-design.md
index 087e834..2044f87 100755
--- a/docs/zh-cn/developer_guide/architecture-design.md
+++ b/docs/zh-cn/development/architecture-design.md
@@ -302,3 +302,81 @@ public class TaskLogFilter extends Filter<ILoggingEvent {
 本文从调度出发,初步介绍了大数据分布式工作流调度系统--DolphinScheduler的架构原理及实现思路。未完待续
 
 
+ some processes need to be processed before other processes. This can be configured at the start of the process or at the time of scheduled start. There are 5 levels, followed by HIGHEST, HIGH, MEDIUM, LOW, and LOWEST. As shown below
+
+      <p align="center">
+         <img src="https://analysys.github.io/easyscheduler_docs_cn/images/process_priority.png" alt="Process Priority Configuration" width="40%" />
+       </p>
+
+    - The priority of the task is also divided into 5 levels, followed by HIGHEST, HIGH, MEDIUM, LOW, and LOWEST. As shown below
+
+      <p align="center">
+         <img src="https://analysys.github.io/easyscheduler_docs_cn/images/task_priority.png" alt="task priority configuration" width="35%" />
+       </p>
+
+##### VI. Logback and gRPC implement log access
+
+- Since the Web (UI) and Worker are not necessarily on the same machine, viewing the log is not as it is for querying local files. There are two options:
+  - Put the logs on the ES search engine
+  - Obtain remote log information through gRPC communication
+- Considering the lightweightness of DolphinScheduler as much as possible, gRPC was chosen to implement remote access log information.
+
+ <p align="center">
+   <img src="https://analysys.github.io/easyscheduler_docs_cn/images/grpc.png" alt="grpc remote access" width="50%" />
+ </p>
+
+- We use a custom Logback FileAppender and Filter function to generate a log file for each task instance.
+- The main implementation of FileAppender is as follows:
+
+```java
+ /**
+  * task log appender
+  */
+ Public class TaskLogAppender extends FileAppender<ILoggingEvent {
+ 
+     ...
+
+    @Override
+    Protected void append(ILoggingEvent event) {
+
+        If (currentlyActiveFile == null){
+            currentlyActiveFile = getFile();
+        }
+        String activeFile = currentlyActiveFile;
+        // thread name: taskThreadName-processDefineId_processInstanceId_taskInstanceId
+        String threadName = event.getThreadName();
+        String[] threadNameArr = threadName.split("-");
+        // logId = processDefineId_processInstanceId_taskInstanceId
+        String logId = threadNameArr[1];
+        ...
+        super.subAppend(event);
+    }
+}
+```
+
+Generate a log in the form of /process definition id/process instance id/task instance id.log
+
+- Filter matches the thread name starting with TaskLogInfo:
+- TaskLogFilter is implemented as follows:
+
+```java
+ /**
+ * task log filter
+ */
+Public class TaskLogFilter extends Filter<ILoggingEvent {
+
+    @Override
+    Public FilterReply decide(ILoggingEvent event) {
+        If (event.getThreadName().startsWith("TaskLogInfo-")){
+            Return FilterReply.ACCEPT;
+        }
+        Return FilterReply.DENY;
+    }
+}
+```
+
+
+
+### summary
+
+Starting from the scheduling, this paper introduces the architecture principle and implementation ideas of the big data distributed workflow scheduling system-DolphinScheduler. To be continued
\ No newline at end of file
diff --git a/docs/zh-cn/developer_guide/backend-development.md b/docs/zh-cn/development/backend-development.md
similarity index 100%
rename from docs/zh-cn/developer_guide/backend-development.md
rename to docs/zh-cn/development/backend-development.md
diff --git a/docs/zh-cn/developer_guide/frontend-development.md b/docs/zh-cn/development/frontend-development.md
similarity index 100%
rename from docs/zh-cn/developer_guide/frontend-development.md
rename to docs/zh-cn/development/frontend-development.md
diff --git a/docs/zh-cn/developer_guide/plugin-development.md b/docs/zh-cn/development/plugin-development.md
similarity index 100%
rename from docs/zh-cn/developer_guide/plugin-development.md
rename to docs/zh-cn/development/plugin-development.md
diff --git a/md_json/docs.json b/md_json/docs.json
index d770ea8..0b8a72f 100755
--- a/md_json/docs.json
+++ b/md_json/docs.json
@@ -2,17 +2,12 @@
   "en-us": [
     {
       "filename": "architecture-design.md",
-      "link": "/en-us/docs/developer_guide/architecture-design.html",
+      "link": "/en-us/docs/development/architecture-design.html",
       "meta": {}
     },
     {
       "filename": "backend-development.md",
-      "link": "/en-us/docs/developer_guide/backend-development.html",
-      "meta": {}
-    },
-    {
-      "filename": "frontend-development.md",
-      "link": "/en-us/docs/developer_guide/frontend-development.html",
+      "link": "/en-us/docs/development/backend-development.html",
       "meta": {}
     },
     {
@@ -26,6 +21,16 @@
       "meta": {}
     },
     {
+      "filename": "frontend-development.md",
+      "link": "/en-us/docs/development/frontend-development.html",
+      "meta": {}
+    },
+    {
+      "filename": "plugin-development.md",
+      "link": "/en-us/docs/development/plugin-development.html",
+      "meta": {}
+    },
+    {
       "filename": "faq.md",
       "link": "/en-us/docs/faq.html",
       "meta": {}
@@ -59,32 +64,32 @@
   "zh-cn": [
     {
       "filename": "architecture-design.md",
-      "link": "/zh-cn/docs/developer_guide/architecture-design.html",
+      "link": "/zh-cn/docs/development/architecture-design.html",
       "meta": {}
     },
     {
       "filename": "backend-development.md",
-      "link": "/zh-cn/docs/developer_guide/backend-development.html",
+      "link": "/zh-cn/docs/development/backend-development.html",
       "meta": {}
     },
     {
-      "filename": "frontend-development.md",
-      "link": "/zh-cn/docs/developer_guide/frontend-development.html",
+      "filename": "contribute.md",
+      "link": "/zh-cn/docs/development/contribute.html",
       "meta": {}
     },
     {
-      "filename": "plugin-development.md",
-      "link": "/zh-cn/docs/developer_guide/plugin-development.html",
+      "filename": "developers.md",
+      "link": "/zh-cn/docs/development/developers.html",
       "meta": {}
     },
     {
-      "filename": "contribute.md",
-      "link": "/zh-cn/docs/development/contribute.html",
+      "filename": "frontend-development.md",
+      "link": "/zh-cn/docs/development/frontend-development.html",
       "meta": {}
     },
     {
-      "filename": "developers.md",
-      "link": "/zh-cn/docs/development/developers.html",
+      "filename": "plugin-development.md",
+      "link": "/zh-cn/docs/development/plugin-development.html",
       "meta": {}
     },
     {
diff --git a/site_config/blog.js b/site_config/blog.js
index 50471cc..d85128c 100755
--- a/site_config/blog.js
+++ b/site_config/blog.js
@@ -9,13 +9,6 @@ export default {
         dateStr: '2019-9-27',
         desc: 'Apache Dolphin Scheduler(Incubating) will organize a meetup in Shanghai  2019.10.26. Welcome to rigister.',
         link: '/en-us/blog/meetup_2019_10_26.html',
-      },
-      {
-        title: 'DolphinScheduler Architecture Desgin',
-        author: 'xiaochun',
-        dateStr: '2019-9-20',
-        desc: 'Blog description, some text to sum up the main content of the blog',
-        link: '/en-us/blog/architecture-design.html'
       }
     ],
   },
@@ -29,13 +22,6 @@ export default {
         dateStr: '2019-9-27',
         desc: 'Apache Dolphin Scheduler(Incubating) 将于2019年10月26日在上海组织一次会议,欢迎踊跃报名。 ',
         link: '/zh-cn/blog/meetup_2019_10_26.html',
-      },
-      {
-        title: 'DolphinScheduler系统架构设计',
-        author: 'xiaochun.liu',
-        dateStr: '2019-9-20',
-        desc: '介绍DolphinScheduler整体架构',
-        link: '/zh-cn/blog/architecture-design.html',
       }
     ],
   },
diff --git a/site_config/development.js b/site_config/development.js
index 53ae908..ff0d3fa 100755
--- a/site_config/development.js
+++ b/site_config/development.js
@@ -2,6 +2,32 @@ export default {
   'en-us': {
     sidemenu: [
       {
+        title: 'Developer guide',
+        children: [
+          {
+            title: 'Architecture Design',
+            link: '/en-us/docs/development/architecture-design.html',
+          },
+          {
+            title: 'Backend Development',
+            link: '/en-us/docs/development/backend-development.html',
+          },
+          {
+            title: 'plugin-development',
+            link: '/en-us/docs/development/plugin-development.html',
+          },
+          {
+            title: 'Frontend Development',
+            link: '/en-us/docs/development/frontend-development.html',
+          },
+          {
+            title: 'Api Document',
+            target: '_blank',
+            link: 'http://106.75.43.194:8888/easyscheduler/doc.html?language=en&lang=en'
+          },
+        ],
+      },
+      {
         title: 'Committer Guide',
         children: [
           {
@@ -20,6 +46,32 @@ export default {
   'zh-cn': {
       sidemenu: [
         {
+          title: '开发者指南',
+          children: [
+            {
+              title: '架构设计',
+              link: '/zh-cn/docs/development/architecture-design.html',
+            },
+            {
+              title: '后端开发',
+              link: '/zh-cn/docs/development/backend-development.html',
+            },
+            {
+              title: '插件开发',
+              link: '/zh-cn/docs/development/plugin-development.html',
+            },
+            {
+              title: '前端开发',
+              link: '/zh-cn/docs/development/frontend-development.html',
+            },
+            {
+              title: '接口文档',
+              target: '_blank',
+              link: 'http://106.75.43.194:8888/easyscheduler/doc.html?language=zh_CN&lang=zh'
+            },
+          ],
+        },
+        {
           title: '提交者向导',
           children: [
             {
diff --git a/site_config/docs.js b/site_config/docs.js
index d0fb3ef..3a3c338 100755
--- a/site_config/docs.js
+++ b/site_config/docs.js
@@ -23,28 +23,6 @@ export default {
         ]
       },
       {
-        title: 'Developer guide',
-        children: [
-          {
-            title: 'Architecture Design',
-            link: '/en-us/docs/developer_guide/architecture-design.html',
-          },
-          {
-            title: 'Backend Development',
-            link: '/en-us/docs/developer_guide/backend-development.html',
-          },
-          {
-            title: 'Frontend Development',
-            link: '/en-us/docs/developer_guide/frontend-development.html',
-          },
-          {
-            title: 'Api Document',
-            target: '_blank',
-            link: 'http://106.75.43.194:8888/easyscheduler/doc.html?language=en&lang=en'
-          },
-        ],
-      },
-      {
         title: 'Release',
         children: [
           {
@@ -89,32 +67,6 @@ export default {
         ],
       },
       {
-        title: '开发者指南',
-        children: [
-          {
-            title: '架构设计',
-            link: '/zh-cn/docs/developer_guide/architecture-design.html',
-          },
-          {
-            title: '后端开发',
-            link: '/zh-cn/docs/developer_guide/backend-development.html',
-          },
-          {
-            title: '插件开发',
-            link: '/zh-cn/docs/developer_guide/architecture-design.html',
-          },
-          {
-            title: '前端开发',
-            link: '/zh-cn/docs/developer_guide/frontend-development.html',
-          },
-          {
-            title: '接口文档',
-            target: '_blank',
-            link: 'http://106.75.43.194:8888/easyscheduler/doc.html?language=zh_CN&lang=zh'
-          },
-        ],
-      },
-      {
         title: '版本发布',
         children: [
           {
diff --git a/site_config/site.js b/site_config/site.js
index 38c8b70..2c28e40 100755
--- a/site_config/site.js
+++ b/site_config/site.js
@@ -37,7 +37,7 @@ export default {
       {
         key: 'development',
         text: 'DEVELOPMENT',
-        link: '/en-us/docs/development/developers.html',
+        link: '/en-us/docs/development/architecture-design.html',
       },
       {
         key: 'community',
@@ -129,7 +129,7 @@ export default {
       {
         key: 'development',
         text: '开发者',
-        link: '/zh-cn/docs/development/developers.html',
+        link: '/zh-cn/docs/development/architecture-design.html',
       },
       {
         key: 'community',
diff --git a/src/components/header/index.jsx b/src/components/header/index.jsx
index 14672b1..cd0e993 100755
--- a/src/components/header/index.jsx
+++ b/src/components/header/index.jsx
@@ -48,6 +48,7 @@ class Header extends React.Component {
   constructor(props) {
     super(props);
     this.state = {
+      current: '',
       menuBodyVisible: false,
       language: props.language,
       search: siteConfig.defaultSearch,
@@ -69,15 +70,6 @@ class Header extends React.Component {
       }
     });
   }
-  state = {
-    current: 'home',
-  }
-
-  handleClick = e => {
-    this.setState({
-      current: e.key,
-    });
-  }
 
   componentWillReceiveProps(nextProps) {
     this.setState({
@@ -85,9 +77,11 @@ class Header extends React.Component {
     });
   }
 
-  toggleMenu() {
+  
+
+  handleClick = e => {
     this.setState({
-      menuBodyVisible: !this.state.menuBodyVisible,
+      current: e.key,
     });
   }
 
@@ -206,6 +200,7 @@ class Header extends React.Component {
               onClick={this.toggleMenu}
               src={type === 'primary' ? getLink('/img/system/menu_white.png') : getLink('/img/system/menu_gray.png')}
             />
+            <div>
             <Menu className={type === 'primary'? 'whiteClass': 'blackClass'} onClick={this.handleClick} selectedKeys={[this.state.current]} mode="horizontal">
             {siteConfig[language].pageMenu.map(item => (
               item.children ? <SubMenu
@@ -217,7 +212,7 @@ class Header extends React.Component {
             >
             <Menu.ItemGroup>
             {item.children.map(items => (
-              <Menu.Item key={items.key}><a href={getLink(items.link)} target={items.target || '_self'}>{items.text}</a></Menu.Item>
+              <Menu.Item key={items.key} ><a href={getLink(items.link)} target={items.target || '_self'}>{items.text}</a></Menu.Item>
             ))}
             </Menu.ItemGroup>
           </SubMenu> : <Menu.Item key={item.key}>
@@ -226,6 +221,7 @@ class Header extends React.Component {
             ))}
           </Menu>
           </div>
+          </div>
         </div>
       </header>
     );
diff --git a/src/pages/blogDetail/index.scss b/src/pages/blogDetail/index.scss
index b2c9cd1..20dee13 100755
--- a/src/pages/blogDetail/index.scss
+++ b/src/pages/blogDetail/index.scss
@@ -6,6 +6,6 @@
   .blog-content {
     padding: 80px 20%;
     margin: $headerHeight auto 0;
-    max-width: 735px;
+    min-width: 735px;
   }
 }
\ No newline at end of file