<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Apache Linkis Blog</title>
        <link>https://linkis.apache.org/zh-CN/blog</link>
        <description>Apache Linkis Blog</description>
        <lastBuildDate>Wed, 08 Mar 2023 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh-CN</language>
        <item>
            <title><![CDATA[Linkis 1.3.2 整合OceanBase]]></title>
            <link>https://linkis.apache.org/zh-CN/blog/2023/03/08/linkis-integration-with-oceanbase</link>
            <guid>/2023/03/08/linkis-integration-with-oceanbase</guid>
            <pubDate>Wed, 08 Mar 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[本文主要介绍在 Linkis 1.3.2 版本中，整合 OceanBase 数据库。 OceanBase 数据库兼容 MySQL 5.7/8.0 的绝大部分功能和语法。因此可以将 OceanBase 数据库当成 MySQL 来使用。]]></description>
            <content:encoded><![CDATA[<p>本文主要介绍在 <code>Linkis</code> 1.3.2 版本中，整合 OceanBase 数据库。 OceanBase 数据库兼容 MySQL 5.7/8.0 的绝大部分功能和语法。因此可以将 OceanBase 数据库当成 MySQL 来使用。</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="1-准备工作">1. 准备工作<a class="hash-link" href="#1-准备工作" title="Direct link to heading">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="11-环境安装">1.1 环境安装<a class="hash-link" href="#11-环境安装" title="Direct link to heading">​</a></h3><p>安装部署 OceanBase 数据库，参看<a href="https://www.oceanbase.com/docs/community-observer-cn-10000000000901197" target="_blank" rel="noopener noreferrer">快速体验OceanBase</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="12-环境验证">1.2 环境验证<a class="hash-link" href="#12-环境验证" title="Direct link to heading">​</a></h3><p>可以使用 MySQL 命令验证 OceanBase 数据库安装情况。</p><div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">mysql </span><span class="token operator">-</span><span class="token plain">h${ip} </span><span class="token operator">-</span><span class="token plain">P${port} </span><span class="token operator">-</span><span class="token plain">u${username} </span><span class="token operator">-</span><span class="token plain">p${password} </span><span class="token operator">-</span><span class="token plain">D${db_name}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>连接成功如下图所示：
<img loading="lazy" src="/zh-CN/assets/images/ob-conn-ad13249d704982c7e8d9ffa0c47ce50a.png" width="1092" height="202" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="2-linkis提交-oceanbase-数据库任务">2. Linkis提交 OceanBase 数据库任务<a class="hash-link" href="#2-linkis提交-oceanbase-数据库任务" title="Direct link to heading">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="21-通过-shell-提交任务">2.1 通过 shell 提交任务<a class="hash-link" href="#21-通过-shell-提交任务" title="Direct link to heading">​</a></h3><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">sh</span><span class="token plain"> ./bin/linkis-cli -engineType jdbc-4 -codeType jdbc -code </span><span class="token string" style="color:rgb(255, 121, 198)">"show tables"</span><span class="token plain"> -submitUser hadoop -proxyUser hadoop -runtimeMap wds.linkis.jdbc.connect.url</span><span class="token operator">=</span><span class="token plain">jdbc:mysql://</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">${ip}</span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">:</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">${port}</span><span class="token plain">/</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">${db_name}</span><span class="token plain"> -runtimeMap wds.linkis.jdbc.driver</span><span class="token operator">=</span><span class="token plain">com.mysql.jdbc.Driver -runtimeMap wds.linkis.jdbc.username</span><span class="token operator">=</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">${username}</span><span class="token plain"> -runtimeMap wds.linkis.jdbc.password</span><span class="token operator">=</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">${password}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="22-通过-linkis-sdk-提交任务">2.2 通过 Linkis SDK 提交任务<a class="hash-link" href="#22-通过-linkis-sdk-提交任务" title="Direct link to heading">​</a></h3><p><code>Linkis</code> 提供了 <code>Java</code> 和 <code>Scala</code> 的 <code>SDK</code> 向 <code>Linkis</code> 服务端提交任务。具体可以参考 <a href="/zh-CN/docs/latest/user-guide/sdk-manual">JAVA SDK Manual</a>。对于 <code>OceanBase</code> 任务您只需要修改 <code>Demo</code> 中的 <code>EngineConnType</code> 和 <code>CodeType</code> 参数即可:</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">Map&lt;String, Object&gt; labels = new HashMap&lt;String, Object&gt;();</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">labels.put(LabelKeyConstant.ENGINE_TYPE_KEY, "jdbc-4"); // required engineType Label</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">labels.put(LabelKeyConstant.USER_CREATOR_TYPE_KEY, "hadoop-IDE");// required execute user and creator</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">labels.put(LabelKeyConstant.CODE_TYPE_KEY, "jdbc"); // required codeType</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="23-多数据源支持">2.3 多数据源支持<a class="hash-link" href="#23-多数据源支持" title="Direct link to heading">​</a></h3><p>地址：登陆管理台--&gt;数据源管理</p><p>步骤1：新建数据源</p><p><img loading="lazy" src="/zh-CN/assets/images/ds-manage-zh-7e6a06f4bf99a16104bdad137c28662f.png" width="1907" height="603" class="img_ev3q"></p><p><img loading="lazy" src="/zh-CN/assets/images/new-zh-98bba34d9c176383dcbf475e8d3ae0fc.png" width="782" height="800" class="img_ev3q"></p><p>步骤2：连接测试</p><p>点击测试连接按钮进行测试
<img loading="lazy" src="/zh-CN/assets/images/ob-test-zh-64d4ef94aeea497a8b21b8d1b8d852a4.png" width="1670" height="331" class="img_ev3q"></p><p>步骤3：发布数据源</p><p><img loading="lazy" src="/zh-CN/assets/images/publish-1-zh-dee369ba7c72e7b4b53907159a0074bb.png" width="1670" height="263" class="img_ev3q"></p><p><img loading="lazy" src="/zh-CN/assets/images/publish-2-zh-4d4d7f85f71179c80a60026c45eb93c4.png" width="800" height="201" class="img_ev3q"></p><p>步骤4：通过指定数据源名称提交 OceanBase 任务</p><p>请求URL：<code>http://${gateway_url}:${port}/api/rest_j/v1/entrance/submit</code></p><p>请求方式：POST</p><p>请求参数：</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"executionContent"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token property">"code"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"show databases"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token property">"runType"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"jdbc"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"params"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token property">"variable"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token property">"configuration"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token property">"startup"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token property">"runtime"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                </span><span class="token property">"wds.linkis.engine.runtime.datasource"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"ob-test"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"labels"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token property">"engineType"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"jdbc-4"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>响应结果：</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"method"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"/api/entrance/submit"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"status"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"message"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"OK"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"data"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token property">"taskID"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">93</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token property">"execID"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"exec_id018017linkis-cg-entrance000830fb1364:9104IDE_hadoop_jdbc_0"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>管理台查看任务执行情况：</p><p><img loading="lazy" src="/zh-CN/assets/images/show-status-zh-2379e1ed08870b9a60410c85df3e0af8.png" width="1899" height="455" class="img_ev3q"></p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[引擎物料管理]]></title>
            <link>https://linkis.apache.org/zh-CN/blog/2022/12/02/material-manage</link>
            <guid>/2022/12/02/material-manage</guid>
            <pubDate>Fri, 02 Dec 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[背景]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="背景">背景<a class="hash-link" href="#背景" title="Direct link to heading">​</a></h2><p>引擎物料管理是linkis引擎物料管理系统，主要用来管理Linkis的引擎物料文件，存储用户的各种引擎文件，包括引擎类型、引擎版本等信息。总体流程为压缩文件经前端浏览器上传至物料库（BML），物料压缩文件解压、校验，需要执行时如果发现本地不存在该引擎，则需要去物料库中寻找并下载安装注册从而执行。</p><p>具备以下功能点：</p><p>1)、支持上传打包好的引擎文件，上传文件大小受nginx的配置影响，文件类型为zip文件类型，在windows环境下自行打包zip压缩文件不支持。</p><p>2)、支持对已有的引擎物料进行更新，更新后在BML中新增一个bml引擎物料的存储版本，可以对当前的版本进行回滚和删除。</p><p>3)、一个引擎涉及两个引擎物料，分别是lib和conf，可以进行分别管理。</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="架构图">架构图<a class="hash-link" href="#架构图" title="Direct link to heading">​</a></h2><p><img loading="lazy" src="/zh-CN/assets/images/bml-94c1a3494a1d7b2321ad2c911c530901.jpg" width="934" height="924" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="架构说明">架构说明<a class="hash-link" href="#架构说明" title="Direct link to heading">​</a></h2><p>1、引擎物料管理在Linkis web管理台中，需要管理员权限，在开发调试时需要设置测试环境下的管理员字段。</p><p>2、引擎物料管理涉及引擎物料文件的增加、更新、删除，物料文件分为lib和conf分别存储。文件中涉及两个版本的概念，一个是引擎本身的版本，另一个则是物料版本，在更新操作中物料如果存在修改则会新增一个物料版本并将其存储在BML中，支持物料版本的删除和回滚。</p><p>3、利用BML Service对引擎物料文件进行存储，通过RPC调用BML的服务对文件进行存储，得到存储的资源id和版本并保存。</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="核心流程">核心流程<a class="hash-link" href="#核心流程" title="Direct link to heading">​</a></h3><ol><li>上传zip类型的引擎插件文件，先存储在引擎插件Home目录中并解压文件，之后进行启动刷新程序。</li><li>对解压后的引擎文件中的conf、lib目录进行压缩，上传至BML（物料管理系统）中，分别获取对应的BML的资源id和资源版本，读取对应引擎名称和版本信息。</li><li>在引擎物料资源表中，新增引擎物料的记录，每次上传都会分别产生lib和conf两条数据。除了记录这个引擎的名称和类型信息外，最重要的是记录了该引擎在物料管理系统中的信息，包括引擎的资源id和版本信息，关联至BML中的资源表。</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="数据库设计">数据库设计<a class="hash-link" href="#数据库设计" title="Direct link to heading">​</a></h2><p>引擎物料资源信息表(linkis_cg_engine_conn_plugin_bml_resources)</p><table><thead><tr><th>字段名</th><th>作用</th><th>备注</th></tr></thead><tbody><tr><td>id</td><td>引擎物料包标识id</td><td>Primary key</td></tr><tr><td>engine_conn_type</td><td>存放资源的位置</td><td>如Spark</td></tr><tr><td>version</td><td>引擎的版本</td><td>如Spark的v2.4.3</td></tr><tr><td>file_name</td><td>引擎文件名</td><td>如lib.zip</td></tr><tr><td>file_size</td><td>引擎文件大小</td><td></td></tr><tr><td>last_modified</td><td>文件最后的修改时间</td><td></td></tr><tr><td>bml_resource_id</td><td>记录资源在BML（物料管理系统）中的id</td><td>用于在BML中标识引擎文件的id</td></tr><tr><td>bml_resource_version</td><td>记录资源在BML中的版本</td><td>如v000001</td></tr><tr><td>create_time</td><td>资源的创建时间</td><td></td></tr><tr><td>last_update_time</td><td>资源最后的更新时间</td><td></td></tr></tbody></table>]]></content:encoded>
            <category>bml</category>
            <category>linki1.3.1</category>
        </item>
        <item>
            <title><![CDATA[Linkis 1.3.0 PES(Public Enhancement Services) 服务组内部分服务的合并]]></title>
            <link>https://linkis.apache.org/zh-CN/blog/2022/10/09/linkis-service-merge</link>
            <guid>/2022/10/09/linkis-service-merge</guid>
            <pubDate>Sun, 09 Oct 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[前言]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_LWe7" id="前言">前言<a class="hash-link" href="#前言" title="Direct link to heading">​</a></h3><p>随着业务的发展和社区产品的更新迭代，我们发现Linkis1.X服务过多，可以适当进行服务合并，减少服务数量，方便部署和调试。目前Linkis服务主要分为三大类，包括计算治理服务（CG: entrance/ecp/ecm/linkismanager）、公共增强服务（PS:publicservice/datasource/cs）和微服务治理服务（MG：Gateway/Eureka）。这三类服务延伸的子服务过多，可以进行服务合并，做到将PS的服务全部合并，CG服务支持全部合并，同时支持将ecm服务单独出去。</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="服务合并变动">服务合并变动<a class="hash-link" href="#服务合并变动" title="Direct link to heading">​</a></h3><p>本次服务合并主要变动如下：</p><ul><li>支持Restful服务转发：修改点主要为Gateway的转发逻辑，类似于现在publicservice服务合并参数：wds.linkis.gateway.conf.publicservice.list</li><li>支持将RPC服务远程调用改为本地调用，类似LocalMessageSender，现在已经可以通过改Sender完成本地调用的返回</li><li>配置文件变动</li><li>服务启停脚本变动</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="待实现目标">待实现目标<a class="hash-link" href="#待实现目标" title="Direct link to heading">​</a></h3><ul><li>基本目标：合并PS服务为一个服务</li><li>基本目标：合并CG服务为CG-Service和ECM</li><li>进阶目标：合并CG服务为一个服</li><li>终结目标：去掉eureka、gateway变为单体服务</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="具体变动">具体变动<a class="hash-link" href="#具体变动" title="Direct link to heading">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="gateway变动orgapachelinkisgatewayujesroutehacontextgatewayrouter">Gateway变动（org.apache.linkis.gateway.ujes.route.HaContextGatewayRouter）<a class="hash-link" href="#gateway变动orgapachelinkisgatewayujesroutehacontextgatewayrouter" title="Direct link to heading">​</a></h4><div class="language-scala codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-scala codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">//变动前</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">override def route(gatewayContext: GatewayContext): ServiceInstance = {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    if (gatewayContext.getGatewayRoute.getRequestURI.contains(HaContextGatewayRouter.CONTEXT_SERVICE_STR) ||</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        gatewayContext.getGatewayRoute.getRequestURI.contains(HaContextGatewayRouter.OLD_CONTEXT_SERVICE_PREFIX)){</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      val params: util.HashMap[String, String] = gatewayContext.getGatewayRoute.getParams</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      if (!gatewayContext.getRequest.getQueryParams.isEmpty) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        for ((k, vArr) &lt;- gatewayContext.getRequest.getQueryParams) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          if (vArr.nonEmpty) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            params.putIfAbsent(k, vArr.head)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      if (gatewayContext.getRequest.getHeaders.containsKey(ContextHTTPConstant.CONTEXT_ID_STR)) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        params.putIfAbsent(ContextHTTPConstant.CONTEXT_ID_STR, gatewayContext.getRequest.getHeaders.get(ContextHTTPConstant.CONTEXT_ID_STR)(0))</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      if (null == params || params.isEmpty) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        dealContextCreate(gatewayContext)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      } else {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        var contextId : String = null</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        for ((key, value) &lt;- params) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          if (key.equalsIgnoreCase(ContextHTTPConstant.CONTEXT_ID_STR)) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            contextId = value</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        if (StringUtils.isNotBlank(contextId)) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          dealContextAccess(contextId.toString, gatewayContext)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        } else {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          dealContextCreate(gatewayContext)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }else{</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      null</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  //变动后</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  override def route(gatewayContext: GatewayContext): ServiceInstance = {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    if (</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        gatewayContext.getGatewayRoute.getRequestURI.contains(</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          RPCConfiguration.CONTEXT_SERVICE_REQUEST_PREFIX</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        )</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    ) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      val params: util.HashMap[String, String] = gatewayContext.getGatewayRoute.getParams</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      if (!gatewayContext.getRequest.getQueryParams.isEmpty) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        for ((k, vArr) &lt;- gatewayContext.getRequest.getQueryParams.asScala) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          if (vArr.nonEmpty) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            params.putIfAbsent(k, vArr.head)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      if (gatewayContext.getRequest.getHeaders.containsKey(ContextHTTPConstant.CONTEXT_ID_STR)) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        params.putIfAbsent(</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          ContextHTTPConstant.CONTEXT_ID_STR,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          gatewayContext.getRequest.getHeaders.get(ContextHTTPConstant.CONTEXT_ID_STR)(0)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        )</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      if (null == params || params.isEmpty) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        dealContextCreate(gatewayContext)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      } else {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        var contextId: String = null</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        for ((key, value) &lt;- params.asScala) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          if (key.equalsIgnoreCase(ContextHTTPConstant.CONTEXT_ID_STR)) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            contextId = value</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        if (StringUtils.isNotBlank(contextId)) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          dealContextAccess(contextId, gatewayContext)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        } else {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          dealContextCreate(gatewayContext)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    } else {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      null</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  //变动前</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  def dealContextCreate(gatewayContext:GatewayContext):ServiceInstance = {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    val serviceId =  findService(HaContextGatewayRouter.CONTEXT_SERVICE_STR, list =&gt; {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      val services = list.filter(_.contains(HaContextGatewayRouter.CONTEXT_SERVICE_STR))</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      services.headOption</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    })</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    val serviceInstances = ServiceInstanceUtils.getRPCServerLoader.getServiceInstances(serviceId.orNull)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    if (serviceInstances.size &gt; 0) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      val index = new Random().nextInt(serviceInstances.size)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      serviceInstances(index)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    } else {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      logger.error(s"No valid instance for service : " + serviceId.orNull)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      null</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  //变动后</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  def dealContextCreate(gatewayContext: GatewayContext): ServiceInstance = {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    val serviceId = findService(</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      RPCConfiguration.CONTEXT_SERVICE_NAME,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      list =&gt; {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        val services = list.filter(_.contains(RPCConfiguration.CONTEXT_SERVICE_NAME))</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        services.headOption</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    )</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    val serviceInstances =</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      ServiceInstanceUtils.getRPCServerLoader.getServiceInstances(serviceId.orNull)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    if (serviceInstances.size &gt; 0) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      val index = new Random().nextInt(serviceInstances.size)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      serviceInstances(index)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    } else {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      logger.error(s"No valid instance for service : " + serviceId.orNull)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      null</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  //变动前</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  def dealContextAccess(contextIdStr:String, gatewayContext: GatewayContext):ServiceInstance = {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    val contextId : String = {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      var tmpId : String = null</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      if (serializationHelper.accepts(contextIdStr)) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        val contextID : ContextID = serializationHelper.deserialize(contextIdStr).asInstanceOf[ContextID]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        if (null != contextID) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          tmpId = contextID.getContextId</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        } else {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          logger.error(s"Deserializate contextID null. contextIDStr : " + contextIdStr)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      } else {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        logger.error(s"ContxtIDStr cannot be deserialized. contextIDStr : " + contextIdStr)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      if (null == tmpId) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        contextIdStr</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      } else {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        tmpId</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    val instances = contextIDParser.parse(contextId)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    var serviceId:Option[String] = None</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    serviceId = findService(HaContextGatewayRouter.CONTEXT_SERVICE_STR, list =&gt; {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      val services = list.filter(_.contains(HaContextGatewayRouter.CONTEXT_SERVICE_STR))</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        services.headOption</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      })</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    val serviceInstances = ServiceInstanceUtils.getRPCServerLoader.getServiceInstances(serviceId.orNull)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    if (instances.size() &gt; 0) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      serviceId.map(ServiceInstance(_, instances.get(0))).orNull</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    } else if (serviceInstances.size &gt; 0) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      serviceInstances(0)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    } else {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      logger.error(s"No valid instance for service : " + serviceId.orNull)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      null</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">//变动后</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">def dealContextAccess(contextIdStr: String, gatewayContext: GatewayContext): ServiceInstance = {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    val contextId: String = {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      var tmpId: String = null</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      if (serializationHelper.accepts(contextIdStr)) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        val contextID: ContextID =</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          serializationHelper.deserialize(contextIdStr).asInstanceOf[ContextID]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        if (null != contextID) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          tmpId = contextID.getContextId</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        } else {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          logger.error(s"Deserializate contextID null. contextIDStr : " + contextIdStr)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      } else {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        logger.error(s"ContxtIDStr cannot be deserialized. contextIDStr : " + contextIdStr)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      if (null == tmpId) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        contextIdStr</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      } else {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        tmpId</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    val instances = contextIDParser.parse(contextId)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    var serviceId: Option[String] = None</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    serviceId = findService(</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      RPCConfiguration.CONTEXT_SERVICE_NAME,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      list =&gt; {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        val services = list.filter(_.contains(RPCConfiguration.CONTEXT_SERVICE_NAME))</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        services.headOption</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    )</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    val serviceInstances =</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      ServiceInstanceUtils.getRPCServerLoader.getServiceInstances(serviceId.orNull)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    if (instances.size() &gt; 0) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      serviceId.map(ServiceInstance(_, instances.get(0))).orNull</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    } else if (serviceInstances.size &gt; 0) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      serviceInstances(0)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    } else {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      logger.error(s"No valid instance for service : " + serviceId.orNull)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      null</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">//变动前</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">object HaContextGatewayRouter{</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  val CONTEXT_ID_STR:String = "contextId"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  val CONTEXT_SERVICE_STR:String = "ps-cs"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  @Deprecated</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  val OLD_CONTEXT_SERVICE_PREFIX = "contextservice"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  val CONTEXT_REGEX: Regex = (normalPath(API_URL_PREFIX) + "rest_[a-zA-Z][a-zA-Z_0-9]*/(v\\d+)/contextservice/" + ".+").r</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">//变动后</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">object HaContextGatewayRouter {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  val CONTEXT_ID_STR: String = "contextId"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  @deprecated("please use RPCConfiguration.CONTEXT_SERVICE_REQUEST_PREFIX")</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  val CONTEXT_SERVICE_REQUEST_PREFIX = RPCConfiguration.CONTEXT_SERVICE_REQUEST_PREFIX</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  @deprecated("please use RPCConfiguration.CONTEXT_SERVICE_NAME")</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  val CONTEXT_SERVICE_NAME: String =</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    if (</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        RPCConfiguration.ENABLE_PUBLIC_SERVICE.getValue &amp;&amp; RPCConfiguration.PUBLIC_SERVICE_LIST</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          .exists(_.equalsIgnoreCase(RPCConfiguration.CONTEXT_SERVICE_REQUEST_PREFIX))</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    ) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      RPCConfiguration.PUBLIC_SERVICE_APPLICATION_NAME.getValue</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    } else {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      RPCConfiguration.CONTEXT_SERVICE_APPLICATION_NAME.getValue</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  val CONTEXT_REGEX: Regex =</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    (normalPath(API_URL_PREFIX) + "rest_[a-zA-Z][a-zA-Z_0-9]*/(v\\d+)/contextservice/" + ".+").r</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="rpc服务变动orgapachelinkisrpcconfrpcconfiguration">RPC服务变动（org.apache.linkis.rpc.conf.RPCConfiguration）<a class="hash-link" href="#rpc服务变动orgapachelinkisrpcconfrpcconfiguration" title="Direct link to heading">​</a></h4><div class="language-scala codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-scala codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">//变动前</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">val BDP_RPC_BROADCAST_THREAD_SIZE: CommonVars[Integer] = CommonVars("wds.linkis.rpc.broadcast.thread.num", new Integer(25))</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">//变动后</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">val BDP_RPC_BROADCAST_THREAD_SIZE: CommonVars[Integer] = CommonVars("wds.linkis.rpc.broadcast.thread.num", 25)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">//变动前</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">val PUBLIC_SERVICE_LIST: Array[String] = CommonVars("wds.linkis.gateway.conf.publicservice.list", "query,jobhistory,application,configuration,filesystem,udf,variable,microservice,errorcode,bml,datasource").getValue.split(",")</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">//变动后</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">val PUBLIC_SERVICE_LIST: Array[String] = CommonVars("wds.linkis.gateway.conf.publicservice.list", "cs,contextservice,data-source-manager,metadataquery,metadatamanager,query,jobhistory,application,configuration,filesystem,udf,variable,microservice,errorcode,bml,datasource").getValue.split(",")</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="配置文件变动">配置文件变动<a class="hash-link" href="#配置文件变动" title="Direct link to heading">​</a></h4><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">##去除部分</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#删除如下配置文件</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">linkis</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">dist/package/conf/linkis</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">ps</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">cs.properties</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">linkis</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">dist/package/conf/linkis</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">ps</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">source</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">manager.properties</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">linkis</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">dist/package/conf/linkis</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">ps</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">metadataquery.properties</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">##修改部分</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#修改linkis-dist/package/conf/linkis-ps-publicservice.properties</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#restful修改前</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.server.restful.scan.packages=org.apache.linkis.jobhistory.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.variable.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.configuration.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.udf.api</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.filesystem.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.filesystem.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.instance.label.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.metadata.restful.api</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.cs.server.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.bml.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.errorcode.server.restful</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#restful修改后</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.server.restful.scan.packages=org.apache.linkis.cs.server.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.datasourcemanager.core.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.metadata.query.server.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.jobhistory.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.variable.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.configuration.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.udf.api</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.filesystem.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.filesystem.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.instance.label.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.metadata.restful.api</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.cs.server.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.bml.restful</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.errorcode.server.restful</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#mybatis修改前</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.server.mybatis.mapperLocations=classpath</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">org/apache/linkis/jobhistory/dao/impl/</span><span class="token important">*.xml</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">classpath</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">org/apache/linkis/variable/dao/impl/</span><span class="token important">*.xml</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">classpath</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">org/apache/linkis/configuration/dao/impl/</span><span class="token important">*.xml</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">classpath</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">org/apache/linkis/udf/dao/impl/</span><span class="token important">*.xml</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">classpath</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">org/apache/linkis/instance/label/dao/impl/</span><span class="token important">*.xml</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">classpath</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">org/apache/linkis/metadata/hive/dao/impl/</span><span class="token important">*.xml</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org/apache/linkis/metadata/dao/impl/</span><span class="token important">*.xml</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">classpath</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">org/apache/linkis/bml/dao/impl/</span><span class="token important">*.xml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.server.mybatis.typeAliasesPackage=org.apache.linkis.configuration.entity</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.jobhistory.entity</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.udf.entity</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.variable.entity</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.instance.label.entity</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.manager.entity</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.metadata.domain</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.bml.entity</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.server.mybatis.BasePackage=org.apache.linkis.jobhistory.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.variable.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.configuration.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.udf.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.instance.label.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.metadata.hive.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.metadata.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.bml.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.errorcode.server.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.publicservice.common.lock.dao</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#mybatis修改后</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.server.mybatis.mapperLocations=classpath</span><span class="token important">*:org/apache/linkis/cs/persistence/dao/impl/*.xml</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">classpath</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">org/apache/linkis/datasourcemanager/core/dao/mapper/</span><span class="token important">*.xml</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">classpath</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">org/apache/linkis/jobhistory/dao/impl/</span><span class="token important">*.xml</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">classpath</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">org/apache/linkis/variable/dao/impl/</span><span class="token important">*.xml</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">classpath</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">org/apache/linkis/configuration/dao/impl/</span><span class="token important">*.xml</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">classpath</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">org/apache/linkis/udf/dao/impl/</span><span class="token important">*.xml</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">classpath</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">org/apache/linkis/instance/label/dao/impl/</span><span class="token important">*.xml</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">classpath</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">org/apache/linkis/metadata/hive/dao/impl/</span><span class="token important">*.xml</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org/apache/linkis/metadata/dao/impl/</span><span class="token important">*.xml</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">classpath</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">org/apache/linkis/bml/dao/impl/</span><span class="token important">*.xml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.server.mybatis.typeAliasesPackage=org.apache.linkis.cs.persistence.entity</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.datasourcemanager.common.domain</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.datasourcemanager.core.vo</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.configuration.entity</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.jobhistory.entity</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.udf.entity</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.variable.entity</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.instance.label.entity</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.manager.entity</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.metadata.domain</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.bml.entity</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.server.mybatis.BasePackage=org.apache.linkis.cs.persistence.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.datasourcemanager.core.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.jobhistory.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.variable.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.configuration.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.udf.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.instance.label.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.metadata.hive.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.metadata.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.bml.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.errorcode.server.dao</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">org.apache.linkis.publicservice.common.lock.dao</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="部署脚本变动linkis-distpackagesbinlinkis-start-allsh">部署脚本变动（linkis-dist/package/sbin/linkis-start-all.sh）<a class="hash-link" href="#部署脚本变动linkis-distpackagesbinlinkis-start-allsh" title="Direct link to heading">​</a></h4><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">#服务启动脚本去掉如下部分</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#linkis-ps-cs</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_NAME</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"ps-cs"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_IP</span><span class="token operator">=</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$CS_INSTALL_IP</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">startApp</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$ENABLE_METADATA_QUERY</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"> </span><span class="token operator">==</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"true"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">then</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">#linkis-ps-data-source-manager</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_NAME</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"ps-data-source-manager"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_IP</span><span class="token operator">=</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$DATASOURCE_MANAGER_INSTALL_IP</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  startApp</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">#linkis-ps-metadataquery</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_NAME</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"ps-metadataquery"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_IP</span><span class="token operator">=</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$METADATA_QUERY_INSTALL_IP</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  startApp</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">fi</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#linkis-ps-cs</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_NAME</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"ps-cs"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_IP</span><span class="token operator">=</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$CS_INSTALL_IP</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">checkServer</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$ENABLE_METADATA_QUERY</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"> </span><span class="token operator">==</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"true"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">then</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">#linkis-ps-data-source-manager</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_NAME</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"ps-data-source-manager"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_IP</span><span class="token operator">=</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$DATASOURCE_MANAGER_INSTALL_IP</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  checkServer</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">#linkis-ps-metadataquery</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_NAME</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"ps-metadataquery"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_IP</span><span class="token operator">=</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$METADATA_QUERY_INSTALL_IP</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  checkServer</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">fi</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#服务停止脚本去掉如下部分</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#linkis-ps-cs</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_NAME</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"ps-cs"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_IP</span><span class="token operator">=</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$CS_INSTALL_IP</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">stopApp</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$ENABLE_METADATA_QUERY</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"> </span><span class="token operator">==</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"true"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">then</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">#linkis-ps-data-source-manager</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_NAME</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"ps-data-source-manager"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_IP</span><span class="token operator">=</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$DATASOURCE_MANAGER_INSTALL_IP</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  stopApp</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">#linkis-ps-metadataquery</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_NAME</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"ps-metadataquery"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_IP</span><span class="token operator">=</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$METADATA_QUERY_INSTALL_IP</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  stopApp</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">fi</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>更多服务合并变动细节参见：<a href="https://github.com/apache/linkis/pull/2927/files" target="_blank" rel="noopener noreferrer">https://github.com/apache/linkis/pull/2927/files</a></p>]]></content:encoded>
            <category>blog</category>
            <category>linki1.3.0</category>
            <category>service merge</category>
        </item>
        <item>
            <title><![CDATA[基于 CDH6.3.2 部署 Apache Linkis1.1.1 和 DSS1.1.0]]></title>
            <link>https://linkis.apache.org/zh-CN/blog/2022/09/27/linkis111-deploy</link>
            <guid>/2022/09/27/linkis111-deploy</guid>
            <pubDate>Tue, 27 Sep 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[前言]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_LWe7" id="前言">前言<a class="hash-link" href="#前言" title="Direct link to heading">​</a></h3><p>随着业务的发展和社区产品的更新迭代，我们发现Linkis1.X在资源管理，引擎管理方面有极大的性能提升，可以更好的满足数据中台的建设。相较于0.9.3版本和我们之前使用的平台， 在用户体验方面也得到很大的提升，任务失败页面无法方便查看详情等问题也都得到改善，因此决定升级Linkis以及WDS套件，那么如下是具体的实践操作，希望给大家带来参考。 </p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="一环境">一、环境<a class="hash-link" href="#一环境" title="Direct link to heading">​</a></h2><h4 class="anchor anchorWithStickyNavbar_LWe7" id="cdh632-各组件版本">CDH6.3.2 各组件版本<a class="hash-link" href="#cdh632-各组件版本" title="Direct link to heading">​</a></h4><ul><li>hadoop:3.0.0-cdh6.3.2</li><li>hive:2.1.1-cdh6.3.2</li><li>spark：2.4.8</li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="硬件环境">硬件环境<a class="hash-link" href="#硬件环境" title="Direct link to heading">​</a></h4><p>2台 128G 云物理机</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="二linkis安装部署">二、Linkis安装部署<a class="hash-link" href="#二linkis安装部署" title="Direct link to heading">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="21编译代码or-release安装包">2.1编译代码or release安装包？<a class="hash-link" href="#21编译代码or-release安装包" title="Direct link to heading">​</a></h3><p>本次安装部署采用的是<strong>release安装包</strong>方式部署。为了适配司内CDH6.3.2版本，hadoop和hive的相关依赖包需要替换成CDH6.3.2版本，这里采用的是直接替换安装包的方式。需要替换的依赖包与模块如下l列表所示。</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">--涉及到的模块</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">linkis-engineconn-plugins/spark</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">linkis-engineconn-plugins/hive</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">/linkis-commons/public-module</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">/linkis-computation-governance/</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">-----需要更换cdh包的列表</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/spark/dist/v2.4.8/lib/hive-shims-0.23-2.1.1-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/spark/dist/v2.4.8/lib/hive-shims-scheduler-2.1.1-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/spark/dist/v2.4.8/lib/hadoop-annotations-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/spark/dist/v2.4.8/lib/hadoop-auth-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/spark/dist/v2.4.8/lib/hadoop-common-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/spark/dist/v2.4.8/lib/hadoop-hdfs-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/spark/dist/v2.4.8/lib/hadoop-hdfs-client-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/hive/dist/v2.1.1/lib/hadoop-client-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/hive/dist/v2.1.1/lib/hadoop-mapreduce-client-common-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/hive/dist/v2.1.1/lib/hadoop-mapreduce-client-jobclient-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/hive/dist/v2.1.1/lib/hadoop-yarn-api-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/hive/dist/v2.1.1/lib/hadoop-yarn-client-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/hive/dist/v2.1.1/lib/hadoop-yarn-server-common-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/hive/dist/v2.1.1/lib/hadoop-hdfs-client-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/hive/dist/v2.1.1/lib/hadoop-mapreduce-client-core-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/hive/dist/v2.1.1/lib/hadoop-mapreduce-client-shuffle-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/hive/dist/v2.1.1/lib/hadoop-yarn-common-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/flink/dist/v1.12.2/lib/hadoop-annotations-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/flink/dist/v1.12.2/lib/hadoop-auth-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/flink/dist/v1.12.2/lib/hadoop-mapreduce-client-core-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/flink/dist/v1.12.2/lib/hadoop-yarn-api-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/flink/dist/v1.12.2/lib/hadoop-yarn-client-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-engineconn-plugins/flink/dist/v1.12.2/lib/hadoop-yarn-common-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-commons/public-module/hadoop-annotations-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-commons/public-module/hadoop-auth-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-commons/public-module/hadoop-common-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-commons/public-module/hadoop-hdfs-client-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-computation-governance/linkis-cg-linkismanager/hadoop-annotations-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-computation-governance/linkis-cg-linkismanager/hadoop-auth-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-computation-governance/linkis-cg-linkismanager/hadoop-yarn-api-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-computation-governance/linkis-cg-linkismanager/hadoop-yarn-client-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./lib/linkis-computation-governance/linkis-cg-linkismanager/hadoop-yarn-common-3.0.0-cdh6.3.2.jar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="22部署过程中遇到的问题">2.2部署过程中遇到的问题<a class="hash-link" href="#22部署过程中遇到的问题" title="Direct link to heading">​</a></h3><p>1、kerberos配置
需要在linkis.properties公共配置中添加
各个引擎conf也需要添加</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.keytab.enable=true</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.keytab.file=/hadoop/bigdata/kerberos/keytab</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.keytab.host.enabled=false</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.keytab.host=your_host</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>2、更换Hadoop依赖包后启动报错java.lang.NoClassDefFoundError:org/apache/commons/configuration2/Configuration</p><p><img loading="lazy" alt="image" src="/zh-CN/assets/images/config-err-0b7267a47e539866aefbe8be9db6c197.png" width="750" height="216" class="img_ev3q"></p><p>原因：Configuration类冲突，在linkis-commons模块下在添加一个commons-configuration2-2.1.1.jar解决冲突</p><p>3、script中运行spark、python等报错no plugin for XXX
现象：在配置文件中修改完spark/python的版本后，启动引擎报错no plugin for XXX
<img loading="lazy" alt="image" src="/zh-CN/assets/images/pugin-error-0b7267a47e539866aefbe8be9db6c197.png" width="750" height="216" class="img_ev3q">
原因：LabelCommonConfig.java和GovernaceCommonConf.scala这两个类中写死了引擎的版本，修改相应版本，编译后替换掉linkis以及其他组件（包括schedulis等）里面所有包含这两个类的jar（linkis-computation-governance-common-1.1.1.jar和linkis-label-common-1.1.1.jar）</p><p>4、python引擎执行报错，初始化失败</p><ul><li><p>修改python.py,移除引入pandas模块</p></li><li><p>配置python加载目录，修改python引擎的linkis-engineconn.properties</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">pythonVersion=/usr/local/bin/python3.6</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul><p>5、运行pyspark任务失败报错
<img loading="lazy" alt="image" src="/zh-CN/assets/images/pyspark-error-59e263d21e848c5bda995cdc900e0ca9.png" width="1542" height="341" class="img_ev3q">
原因：未设置PYSPARK_VERSION
解决方法：
在/etc/profile下设置两个参数</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">export PYSPARK_PYTHON=/usr/local/bin/python3.6</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export PYSPARK_DRIVER_PYTHON=/usr/local/bin/python3.6</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>6、执行pyspark任务报错
java.lang.NoSuchFieldError: HIVE_STATS_JDBC_TIMEOUT
<img loading="lazy" alt="image" src="/zh-CN/assets/images/spark-hive-verion-error-73f07dc42df540b1aeb4ea048a131fa8.png" width="1549" height="361" class="img_ev3q">
原因：spark2.4.8里面使用的是hive1.2.1的包，但是我们的hive升级到了2.1.1版本，hive2里面已经去掉了这个参数，然后spark-sql里面的代码依然是要调用hive的这个参数的，然后就报错了，
所以在spark-sql/hive代码中删除掉了HIVE_STATS_JDBC_TIMEOUT这个参数，重新编译后打包，替换spark2.4.8中的spark-hive_2.11-2.4.8.jar</p><p>7、jdbc引擎执行出现代理用户异常</p><p>现象：用A用户去执行一个jdbc任务1，引擎选了可以复用，然后我也用B用户去执行一个jdbc任务2，发现 任务2的提交人是A
分析原因：
ConnectionManager::getConnection
<img loading="lazy" alt="image" src="/zh-CN/assets/images/jdbc-engine-analyze-e765a7057a729bb49816e9e7ebffc787.png" width="1027" height="439" class="img_ev3q">
这里创建datasource的时候是根据key来判断是否创建，而这个key是jdbc url ，但这种粒度可能有点大，因为有可能是不同的用户去访问同一个数据源，比如说hive,他们的url是一样的，但是账号密码是不一样的，所以当第一个用户去创建datasource时，username已经指定了，第二个用户进来的时候，发现这个数据源存在，就直接拿这个数据源去用，而不是创建一个新的datasource，所以造成了用户B提交的代码通过A去执行了。<br>
<!-- -->解决方法：数据源缓存map的key粒度降低，改成jdbc.url+jdbc.user。</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="三dss部署">三、DSS部署<a class="hash-link" href="#三dss部署" title="Direct link to heading">​</a></h2><p>安装过程参考官网文档进行安装配置，下面说明一下在安装调试过程中遇到的一些事项。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="31-dss-左侧数据库展示的数据库列表显示不全">3.1 DSS 左侧数据库展示的数据库列表显示不全<a class="hash-link" href="#31-dss-左侧数据库展示的数据库列表显示不全" title="Direct link to heading">​</a></h4><p>分析：DSS数据源模块显示的数据库信息是来源于hive的元数据库，但由于CDH6中通过sentry进行权限控制，大部分的hive表元数据信息没有存在于hive metastore中，所以展示的数据存在缺失。
解决方法：
将原有逻辑改造成使用jdbc链接hive的方式，从jdbc中获取表数据展示。
简单逻辑描述：
jdbc的properties信息通过linkis控制台配置的IDE-jdbc的配置信息获取。
DBS：通过connection.getMetaData()获取schema
TBS：connection.getMetaData().getTables()获取对应db下的tables
COLUMNS:通过执行describe  table 获取表的columns信息</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="32-dss-工作流中执行jdbc脚本报错-jdbcname-is-empty">3.2 DSS 工作流中执行jdbc脚本报错 jdbc.name is empty<a class="hash-link" href="#32-dss-工作流中执行jdbc脚本报错-jdbcname-is-empty" title="Direct link to heading">​</a></h4><p>分析：dss workflow中默认执行的creator是Schedulis，由于在管理台中未配置Schedulis的相关引擎参数，导致读取的参数全为空。
在控制台中添加Schedulis的Category时报错，”Schedulis目录已存在“。由于调度系统中的creator是schedulis，导致无法添加Schedulis Category,为了更好的标识各个系统，所以将dss workflow中默认执行的creator改成nodeexcetion，该参数可以在dss-flow-execution-server.properties中添加wds.linkis.flow.job.creator.v1=nodeexecution一行配置即可。</p>]]></content:encoded>
            <category>blog</category>
            <category>linki1.1.1</category>
            <category>hadoop3.0.0-cdh6.3.2</category>
            <category>spark2.4.8</category>
            <category>hive2.1.1</category>
        </item>
        <item>
            <title><![CDATA[Linkis1.1.1 适配 hadoop3.1.1 以及部署其他系统服务]]></title>
            <link>https://linkis.apache.org/zh-CN/blog/2022/08/08/linkis111-compile-integration</link>
            <guid>/2022/08/08/linkis111-compile-integration</guid>
            <pubDate>Mon, 08 Aug 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[环境以及版本]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="环境以及版本">环境以及版本<a class="hash-link" href="#环境以及版本" title="Direct link to heading">​</a></h2><ul><li>jdk-8 , maven-3.6.3</li><li>node-14.15.0(是否需要自己编译前端代码调整)</li><li>Gradle-4.6(是否编译Qualitis质量服务)</li><li>hadoop-3.1.1,Spark-3.0.1,Hive-3.1.2,Flink-1.13.2,Sqoop-1.4.7 (Apache版本)</li><li>linkis-1.1.1</li><li>DataSphereStudio-1.1.0</li><li>Schudulis-0.7.0</li><li>Qualitis-0.9.2</li><li>Visualis-1.0.0</li><li>Streamis-0.2.0</li><li>Exchangis-1.0.0</li><li>Chrome建议100以下的版本</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="各组件场景以及版本">各组件场景以及版本<a class="hash-link" href="#各组件场景以及版本" title="Direct link to heading">​</a></h2><table><thead><tr><th>系统名字</th><th>版本</th><th>场景</th></tr></thead><tbody><tr><td>linkis</td><td>1.1.1</td><td>引擎编排,运行执行hive,spark,flinkSql,shell,python等,数据源统一管理等</td></tr><tr><td>DataSphereStudio</td><td>1.1.0</td><td>实现对任务的dag编排,实现整合其他系统的规范以及统一接入,提供基于SparkSql的服务Api</td></tr><tr><td>Schudulis</td><td>0.7.0</td><td>任务调度,以及调度详情和重跑,并且提供基于选择时间的补漏数据</td></tr><tr><td>Qualitis</td><td>0.9.2</td><td>提供内置Sql的版本等功能,对常见的数据质量以及可以自定义sql,对一些不符合规则的数据进行校验并写入到对应的库中</td></tr><tr><td>Exchangis</td><td>1.0.0</td><td>Hive到Mysql,Mysql到Hive之间的数据交换</td></tr><tr><td>Streamis</td><td>0.2.0</td><td>流式开发应用中心</td></tr><tr><td>Visualis</td><td>1.0.0</td><td>可视化报表展示,可以分享外链接</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="部署顺序">部署顺序<a class="hash-link" href="#部署顺序" title="Direct link to heading">​</a></h2><p>  从序号3之后的顺序可以自己选择进行调整.但是在部署exchangis中需要注意一点,将exchangis的sqoop引擎插件,给copy到linkis的lib下的engine插件包下
Schedulis,Qualitis,Exchangis,Streamis,Visualis等系统,都是通过各自的appconn来与dss进行整合,注意每次整合组件-appconn后,进行重启dss对应的服务模块或者重启dss</p><ol><li>linkis</li><li>DataSphereStudio</li><li>Schedulis</li><li>Qualitis</li><li>Exchangis</li><li>Streamis</li><li>Visualis</li></ol><p><img loading="lazy" alt="image.png" src="/zh-CN/assets/images/sx1-808e41fd5ce8b7cdf2a72953efcfb52a.png" width="1184" height="690" class="img_ev3q"></p><p>如果你集成了Skywalking的话,就可以在扩拓扑图中,看到服务的状态和连接状态,如下图
<img loading="lazy" alt="image.png" src="/zh-CN/assets/images/sx2-72292e18cadcfa92b920613ea29abb73.png" width="677" height="607" class="img_ev3q">
同时你也可以看清晰到在追踪中看到调用链路,如下图,也便于你定位具体服务的错误日志文件
<img loading="lazy" alt="image.png" src="/zh-CN/assets/images/sx3-967b6ac9e375892ec45cfc8fe8e1a46c.png" width="1913" height="319" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="依赖调整以及打包">依赖调整以及打包<a class="hash-link" href="#依赖调整以及打包" title="Direct link to heading">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="linkis">linkis<a class="hash-link" href="#linkis" title="Direct link to heading">​</a></h3><p>由于spark是采用了3.x版本的,scala也是需要升级到12版本
<a href="https://github.com/apache/linkis/tree/release-1.1.1" target="_blank" rel="noopener noreferrer">原项目代码地址</a>
<a href="https://github.com/ruY9527/linkis/tree/release-1.1.1-hadoop3.x" target="_blank" rel="noopener noreferrer">适配修改代码参考地址</a></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="linkis的pom文件">linkis的pom文件<a class="hash-link" href="#linkis的pom文件" title="Direct link to heading">​</a></h4><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">hadoop.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">3.1.1</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">hadoop.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">scala.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">2.12.10</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">scala.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">scala.binary.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">2.12</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">scala.binary.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">&lt;!-- 将hadoop-hdfs 替换成为hadoop-hdfs-client --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">dependency</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">groupId</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">org.apache.hadoop</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">groupId</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">artifactId</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">hadoop-hdfs-client</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">artifactId</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">${hadoop.version}</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="linkis-hadoop-common的pom文件">linkis-hadoop-common的pom文件<a class="hash-link" href="#linkis-hadoop-common的pom文件" title="Direct link to heading">​</a></h4><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">       </span><span class="token comment" style="color:rgb(98, 114, 164)">&lt;!-- 注意这里的 &lt;version&gt;${hadoop.version}&lt;/version&gt; , 根据你有没有遇到错误来进行调整 --&gt;</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">       </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">dependency</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">groupId</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">org.apache.hadoop</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">groupId</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">artifactId</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">hadoop-hdfs-client</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">artifactId</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">${hadoop.version}</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">dependency</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="linkis-engineplugin-hive的pom文件">linkis-engineplugin-hive的pom文件<a class="hash-link" href="#linkis-engineplugin-hive的pom文件" title="Direct link to heading">​</a></h4><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">hive.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">3.1.2</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">hive.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="linkis-engineplugin-spark的pom文件">linkis-engineplugin-spark的pom文件<a class="hash-link" href="#linkis-engineplugin-spark的pom文件" title="Direct link to heading">​</a></h4><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">spark.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">3.0.1</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">spark.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>SparkScalaExecutor 中 getField 方法需调整下代码</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">protected def getField(obj: Object, name: String): Object = {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    // val field = obj.getClass.getField(name)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    val field = obj.getClass.getDeclaredField("in0")</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        field.setAccessible(true)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        field.get(obj)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  }</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="linkis-engineconn-plugin-flink的pom文件">linkis-engineconn-plugin-flink的pom文件<a class="hash-link" href="#linkis-engineconn-plugin-flink的pom文件" title="Direct link to heading">​</a></h4><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">flink.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">1.13.2</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">flink.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>由于flink1.12.2版本和1.13.2有些类的调整,这里目前参考社区同学给出的临时"暴力"方法: 将1.12.2部分的类给copy到1.13.2,调整scala版本到12,自己编译
涉及到flink具体的模块: flink-sql-client_${scala.binary.version}</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">-- 注意,下列的类是从1.12.2给copy到1.13.2版本来</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">org.apache.flink.table.client.config.entries.DeploymentEntry</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">org.apache.flink.table.client.config.entries.ExecutionEntry</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">org.apache.flink.table.client.gateway.local.CollectBatchTableSink</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">org.apache.flink.table.client.gateway.local.CollectStreamTableSink</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" alt="image.png" src="/zh-CN/assets/images/flink1-087dcf93f3692dc19b9eff3ba204823d.png" width="937" height="472" class="img_ev3q"><img loading="lazy" alt="image.png" src="/zh-CN/assets/images/flink2-fa8164c77b9feccfd6381b816995fcdd.png" width="937" height="482" class="img_ev3q"></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="linkis-engineplugin-python">linkis-engineplugin-python<a class="hash-link" href="#linkis-engineplugin-python" title="Direct link to heading">​</a></h4><p><a href="https://github.com/apache/linkis/commit/7a26e85c53fc7cd55ddefbd78b1748b00f85ddd6" target="_blank" rel="noopener noreferrer">参考pr</a>
如果linkis-engineplugin-python下的resource/python的python.py文件中,有import pandas as pd , 如果不想安装pandas的话,需对其进行移除</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="linkis-label-common">linkis-label-common<a class="hash-link" href="#linkis-label-common" title="Direct link to heading">​</a></h4><p>org.apache.linkis.manager.label.conf.LabelCommonConfig
修改默认版本,便于后续的自编译调度组件使用</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">    public static final CommonVars&lt;String&gt; SPARK_ENGINE_VERSION =</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            CommonVars.apply("wds.linkis.spark.engine.version", "3.0.1");</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    public static final CommonVars&lt;String&gt; HIVE_ENGINE_VERSION =</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            CommonVars.apply("wds.linkis.hive.engine.version", "3.1.2");</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="linkis-computation-governance-common">linkis-computation-governance-common<a class="hash-link" href="#linkis-computation-governance-common" title="Direct link to heading">​</a></h4><p>org.apache.linkis.governance.common.conf.GovernanceCommonConf
修改默认版本,便于后续的自编译调度组件使用</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">  val SPARK_ENGINE_VERSION = CommonVars("wds.linkis.spark.engine.version", "3.0.1")</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  val HIVE_ENGINE_VERSION = CommonVars("wds.linkis.hive.engine.version", "3.1.2")</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="编译">编译<a class="hash-link" href="#编译" title="Direct link to heading">​</a></h4><p>确保以上修改和环境都有,依次执行</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">cd</span><span class="token plain"> linkis-x.x.x</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    mvn -N  </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    mvn clean </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"> -DskipTests</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="编译错误">编译错误<a class="hash-link" href="#编译错误" title="Direct link to heading">​</a></h4><ul><li>如果你整理进行编译的时候,出现了错误,尝试单独进入到一个模块中进行编译,看是否有错误,根据具体的错误来进行调整</li><li>比如下面举例(群友适配cdh低版本的时候,存在py4j版本不适配): 如果你遇到了这种问题,可以调整下有对应方法的版本来进行是否适配</li></ul><p><img loading="lazy" alt="image.png" src="/zh-CN/assets/images/linkis1-8a23252e4187925ce9aa3baf384fc782.png" width="937" height="493" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dataspherestudio">DataSphereStudio<a class="hash-link" href="#dataspherestudio" title="Direct link to heading">​</a></h3><p><a href="https://github.com/WeBankFinTech/DataSphereStudio/tree/1.1.0" target="_blank" rel="noopener noreferrer">原项目代码地址</a>
<a href="https://github.com/ruY9527/DataSphereStudio/tree/1.1.0-hadoop3.x" target="_blank" rel="noopener noreferrer">适配修改代码参考地址</a></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="dataspherestudio的pom文件">DataSphereStudio的pom文件<a class="hash-link" href="#dataspherestudio的pom文件" title="Direct link to heading">​</a></h4><p>由于dss依赖了linkis,所有编译dss之前编译linkis</p><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">&lt;!-- scala 环境一致 --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">scala.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">2.12.10</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">scala.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="dss-dolphinschuduler-token">dss-dolphinschuduler-token<a class="hash-link" href="#dss-dolphinschuduler-token" title="Direct link to heading">​</a></h4><p>DolphinSchedulerTokenRestfulApi: 去掉类型的转换</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">responseRef.getValue("expireTime")</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="web调整">web调整<a class="hash-link" href="#web调整" title="Direct link to heading">​</a></h4><p> <a href="https://github.com/WeBankFinTech/DataSphereStudio-Doc/blob/main/zh_CN/%E5%BC%80%E5%8F%91%E6%96%87%E6%A1%A3/%E5%89%8D%E7%AB%AF%E7%BC%96%E8%AF%91%E6%96%87%E6%A1%A3.md" target="_blank" rel="noopener noreferrer">前端编译地址</a>
<a href="https://github.com/WeBankFinTech/DataSphereStudio/commit/1dc9d99648e9f78b2dfb4776df4b9f46ef530c8a" target="_blank" rel="noopener noreferrer">参考pr</a>
将如下目录从master分支的内容覆盖,或者web基于master分支去build
<img loading="lazy" alt="image.png" src="/zh-CN/assets/images/dss1-20ef6540150ed9310355835fb507fbee.png" width="937" height="540" class="img_ev3q"></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="编译-1">编译<a class="hash-link" href="#编译-1" title="Direct link to heading">​</a></h4><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">cd</span><span class="token plain"> DataSphereStudio</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    mvn -N  </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    mvn clean </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"> -DskipTests</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="schedulis">Schedulis<a class="hash-link" href="#schedulis" title="Direct link to heading">​</a></h3><p><a href="https://github.com/WeBankFinTech/Schedulis/tree/release-0.7.0" target="_blank" rel="noopener noreferrer">原项目代码地址</a>
<a href="https://github.com/ruY9527/Schedulis/tree/release-0.7.0-hadoop.x" target="_blank" rel="noopener noreferrer">适配修改代码参考地址</a></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="schedulis的pom文件">Schedulis的pom文件<a class="hash-link" href="#schedulis的pom文件" title="Direct link to heading">​</a></h4><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">       </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">hadoop.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">3.1.1</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">hadoop.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">       </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">hive.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">3.1.2</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">hive.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">       </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">spark.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">3.0.1</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">spark.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="azkaban-jobtype">azkaban-jobtype<a class="hash-link" href="#azkaban-jobtype" title="Direct link to heading">​</a></h4><p>下载对应版本的jobtype文件(注意对应好版本): <a href="https://github.com/WeBankFinTech/Schedulis/blob/master/docs/schedulis_deploy_cn.md" target="_blank" rel="noopener noreferrer">下载地址</a>
下载完后,将整个jobtypes放在jobtypes下
<img loading="lazy" alt="image.png" src="/zh-CN/assets/images/schedulis1-3dd098ac55f1fff03d5466bf1acf503b.png" width="937" height="455" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="qualitis">Qualitis<a class="hash-link" href="#qualitis" title="Direct link to heading">​</a></h3><p><a href="https://github.com/WeBankFinTech/Qualitis/tree/release-0.9.2" target="_blank" rel="noopener noreferrer">原项目代码地址</a></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="forgerock包下载">forgerock包下载<a class="hash-link" href="#forgerock包下载" title="Direct link to heading">​</a></h4><p><a href="https://github.com/WeBankFinTech/Qualitis/releases" target="_blank" rel="noopener noreferrer">release地址</a> 下的<a href="https://github.com/WeBankFinTech/Qualitis/releases/tag/release-0.9.1" target="_blank" rel="noopener noreferrer">release-0.9.1</a>,解压完后放在.m2\repository\org下即可.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="编译-2">编译<a class="hash-link" href="#编译-2" title="Direct link to heading">​</a></h4><p>gradle建议使用4.6</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token builtin class-name" style="color:rgb(189, 147, 249)">cd</span><span class="token plain"> Qualitis</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">gradle clean distZip</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>编译完后,会再qualitis下有一个qualitis-0.9.2.zip文件
<img loading="lazy" alt="image.png" src="/zh-CN/assets/images/qualitis1-8e3dba5b4b155e0c96ad3b1680ca7914.png" width="879" height="161" class="img_ev3q"></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="dss-qualitis-appconn编译">dss-qualitis-appconn编译<a class="hash-link" href="#dss-qualitis-appconn编译" title="Direct link to heading">​</a></h4><p>将appconn内从给copy到DataSphereStudio下的appconns中(创建dss-qualitis-appconn文件夹),如下图
对dss-qualitis-appconn进行编译,out下的qualitis就是dss整合qualitis的包
<img loading="lazy" alt="image.png" src="/zh-CN/assets/images/qualitis2-15148e52070389ee6491f08119d6445b.png" width="937" height="490" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="exchangis">Exchangis<a class="hash-link" href="#exchangis" title="Direct link to heading">​</a></h3><p><a href="https://github.com/WeBankFinTech/Exchangis/tree/release-1.0.0" target="_blank" rel="noopener noreferrer">原项目代码地址</a>
<a href="https://github.com/ruY9527/Exchangis/tree/release-1.0.0-hadoop3.x" target="_blank" rel="noopener noreferrer">适配修改代码参考地址</a></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="exchangis的pom文件">Exchangis的pom文件<a class="hash-link" href="#exchangis的pom文件" title="Direct link to heading">​</a></h4><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">&lt;!-- scala 版本保持一致 --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">scala.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">2.12.10</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">scala.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="后端编译">后端编译<a class="hash-link" href="#后端编译" title="Direct link to heading">​</a></h4><p><a href="https://github.com/WeBankFinTech/Exchangis/blob/dev-1.0.0/docs/zh_CN/ch1/exchangis_deploy_cn.md" target="_blank" rel="noopener noreferrer">官方编译文档</a>
assembly-package的target包中wedatasphere-exchangis-1.0.0.tar.gz是自身的服务包
linkis-engineplugin-sqoop是需要放入linkis中(lib/linkis-engineconn-plugins)
exchangis-appconn.zip是需要放入dss中(dss-appconns)</p><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">mvn clean install </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" alt="image.png" src="/zh-CN/assets/images/exchangis1-4921fd02462370bd7c40cb7f9ceb7fb2.png" width="937" height="459" class="img_ev3q"></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="前端编译">前端编译<a class="hash-link" href="#前端编译" title="Direct link to heading">​</a></h4><p>如果前端你是自己用nginx部署的话,需要注意是拿到dist下面dist文件夹
<img loading="lazy" alt="image.png" src="/zh-CN/assets/images/exchangis2-e5f54b200065ab3ceec007472851d54a.png" width="1873" height="907" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="visualis">Visualis<a class="hash-link" href="#visualis" title="Direct link to heading">​</a></h3><p><a href="https://github.com/WeBankFinTech/Visualis/tree/v1.0.0" target="_blank" rel="noopener noreferrer">原项目代码地址</a>
<a href="https://github.com/ruY9527/Visualis/tree/v1.0.0-hadoop3.x" target="_blank" rel="noopener noreferrer">适配修改代码参考地址</a></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="visualis的pom文件">Visualis的pom文件<a class="hash-link" href="#visualis的pom文件" title="Direct link to heading">​</a></h4><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">scala.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">2.12.10</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">scala.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="编译-3">编译<a class="hash-link" href="#编译-3" title="Direct link to heading">​</a></h4><p> <a href="https://github.com/WeBankFinTech/Visualis/blob/master/visualis_docs/zh_CN/Visualis_deploy_doc_cn.md" target="_blank" rel="noopener noreferrer">官方编译文档</a>
assembly下的target中visualis-server-zip是自身服务的包
visualis-appconn的target是visualis.zip是dss需要的包(dss-appconns)
build是前端打出来的包</p><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">cd Visualis</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">mvn -N install</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">mvn clean package -DskipTests=true</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" alt="image.png" src="/zh-CN/assets/images/visualis1-526c531225821a7aa99946d3a194ec18.png" width="937" height="460" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="streamis">Streamis<a class="hash-link" href="#streamis" title="Direct link to heading">​</a></h3><p><a href="https://github.com/WeBankFinTech/Streamis/tree/0.2.0" target="_blank" rel="noopener noreferrer">原项目代码地址</a>
<a href="https://github.com/ruY9527/Streamis/tree/0.2.0-hadoop3.x" target="_blank" rel="noopener noreferrer">适配修改代码参考地址</a></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="streamis的pom文件">Streamis的pom文件<a class="hash-link" href="#streamis的pom文件" title="Direct link to heading">​</a></h4><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">scala.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">2.12.10</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">scala.version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>streamis-project-server的pom文件</p><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">       </span><span class="token comment" style="color:rgb(98, 114, 164)">&lt;!-- 如果你这里是1.0.1的话,就调整到${dss.version} --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">       </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">dependency</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">groupId</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">com.webank.wedatasphere.dss</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">groupId</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">artifactId</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">dss-sso-integration-standard</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">artifactId</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">${dss.version}</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">version</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">scope</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain">compile</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">scope</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">dependency</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="编译-4">编译<a class="hash-link" href="#编译-4" title="Direct link to heading">​</a></h4><p> <a href="https://github.com/WeBankFinTech/Streamis/blob/main/docs/zh_CN/0.2.0/Streamis%E5%AE%89%E8%A3%85%E6%96%87%E6%A1%A3.md" target="_blank" rel="noopener noreferrer">官方编译文档</a>
assembly下target包wedatasphere-streamis-0.2.0-dist.tar.gz是自身后端服务的包
streamis-appconn下target的streamis.zip包是dss需要的(dss-appconns)
dist下的dist是前端的包</p><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">cd ${STREAMIS_CODE_HOME}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">mvn -N install</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">mvn clean install</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" alt="image.png" src="/zh-CN/assets/images/streamis1-067a0add4da497c30b77a6c0aba3128a.png" width="937" height="463" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="安装部署">安装部署<a class="hash-link" href="#安装部署" title="Direct link to heading">​</a></h2><p><a href="https://linkis.apache.org/zh-CN/docs/1.1.1/deployment/quick-deploy" target="_blank" rel="noopener noreferrer">官方部署地址</a>
<a href="https://linkis.apache.org/zh-CN/blog/2022/02/21/linkis-deploy" target="_blank" rel="noopener noreferrer">常见错误地址</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="路径统一">路径统一<a class="hash-link" href="#路径统一" title="Direct link to heading">​</a></h3><p>建议将相关的组件,部署同一个路径(比如我这里全部解压在/home/hadoop/application下)
<img loading="lazy" alt="image.png" src="/zh-CN/assets/images/deploy1-74f8a7facb0f4a9de3d43c233bcbb29c.png" width="650" height="219" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="linkis部署注意点">linkis部署注意点<a class="hash-link" href="#linkis部署注意点" title="Direct link to heading">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="deploy-config文件夹">deploy-config文件夹<a class="hash-link" href="#deploy-config文件夹" title="Direct link to heading">​</a></h4><p>db.sh中, MYSQL配置的linkis连接的地址,HIVE的元数据连接地址
linkis-env.sh</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">-- 保存script脚本的路径,下一次会有一个用户名字的文件夹,对应用户的脚本就存放在该文件夹中</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">WORKSPACE_USER_ROOT_PATH</span><span class="token operator">=</span><span class="token plain">file:///home/hadoop/logs/linkis</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">-- 存放物料以及引擎执行的log文件</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">HDFS_USER_ROOT_PATH</span><span class="token operator">=</span><span class="token plain">hdfs:///tmp/linkis</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">-- 引擎每次执行的log以及启动engineConnExec.sh相关的信息</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">ENGINECONN_ROOT_PATH</span><span class="token operator">=</span><span class="token plain">/home/hadoop/logs/linkis/apps</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">-- Yarn主节点访问地址</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">Active resourcemanager</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">YARN_RESTFUL_URL</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">-- Hadoop/Hive/Spark的conf地址</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">HADOOP_CONF_DIR</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">HIVE_CONF_DIR</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">SPARK_CONF_DIR</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">-- 指定对应的版本</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SPARK_VERSION</span><span class="token operator">=</span><span class="token number">3.0</span><span class="token plain">.1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">HIVE_VERSION</span><span class="token operator">=</span><span class="token number">3.1</span><span class="token plain">.2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">-- 指定linkis安装后的路径,比如我这里就同意指定在对应组件下的路径</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">LINKIS_HOME</span><span class="token operator">=</span><span class="token plain">/home/hadoop/application/linkis/linkis-home</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="flink">flink<a class="hash-link" href="#flink" title="Direct link to heading">​</a></h4><p>如果你使用了flink的话,可以尝试从 <a target="_blank" href="/zh-CN/assets/files/flink-engine-2a1a0199ef097db16d2d0238005245e3.sql">flink-engine.sql</a> 导入到linkis的数据库中.</p><p>需要修改@FLINK_LABEL版本为自己对应的版本,yarn的队列默认是default.</p><p>同时这个版本,如果你遇见了"1G"转换数字类型的错误,尝试去掉1g的单位以及正则校验的规则.参考如下:</p><p><img loading="lazy" alt="flink3.png" src="/zh-CN/assets/images/flink3-7e851b84808cf7d6116653a6978ca63d.png" width="1592" height="712" class="img_ev3q"></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="lzo使用">lzo使用<a class="hash-link" href="#lzo使用" title="Direct link to heading">​</a></h4><p>如果你的hive使用了lzo的话,将对应的lzo的jar包给copy到hive路径下.比如下面路径:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">lib/linkis-engineconn-plugins/hive/dist/v3.1.2/lib</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="常见问题注意点">常见问题注意点<a class="hash-link" href="#常见问题注意点" title="Direct link to heading">​</a></h4><ul><li>Mysql的驱动包一定要copy到/lib/linkis-commons/public-module/和/lib/linkis-spring-cloud-services/linkis-mg-gateway/</li><li>初始化密码在conf/linkis-mg-gateway.properties中的wds.linkis.admin.password</li><li>ps-cs 在启动脚本中,有可能存在存在失败的情况,如果有的话,使用 sh linkis-daemon.sh ps-cs , 对其进行单独启动</li><li>目前日志是有时间备份的话,有时候之前的错误日志找不到的话,可能是备份到对应日期的文件夹里去了</li><li>目前lib/linkis-engineconn-plugins是默认只有spark/shell/python/hive,如果你想要appconn,flink,sqoop就分别去dss中,linkis和exchangis中获取</li><li>配置文件版本检查</li></ul><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">linkis.properties中,flink看有没有使用</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.spark.engine.version</span><span class="token operator">=</span><span class="token number">3.0</span><span class="token plain">.1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.hive.engine.version</span><span class="token operator">=</span><span class="token number">3.1</span><span class="token plain">.2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.flink.engine.version</span><span class="token operator">=</span><span class="token number">1.13</span><span class="token plain">.2</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><img loading="lazy" alt="image.png" src="/zh-CN/assets/images/deploy2-cc5f46ae416646c300738e32a63754fe.png" width="1425" height="193" class="img_ev3q">
<img loading="lazy" alt="image.png" src="/zh-CN/assets/images/deploy3-a07614a61a4284be9bb0ad32c1ac6045.png" width="726" height="213" class="img_ev3q"></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="错误记录">错误记录<a class="hash-link" href="#错误记录" title="Direct link to heading">​</a></h4><ol><li>版本不兼容,如果你遇到了下面这种错误的话,是scala版本是否没有完全保持一致,检查后再编译一下即可.</li></ol><p><img loading="lazy" alt="1905943989d7782456c356b6ce0d72b.png" src="/zh-CN/assets/images/deploy4-fe0bda10b58063c12e25064aabcc9b8d.png" width="1630" height="524" class="img_ev3q"></p><ol start="2"><li>yarn配置Active节点地址,如果是配置了Standby地址的话,就会出现如下的错误</li></ol><p><img loading="lazy" alt="1ca32f79d940016d72bf1393e4bccc8.jpg" src="/zh-CN/assets/images/deploy5-9a10e4fd895a0dd493b263f827fe9f92.jpg" width="937" height="525" class="img_ev3q"></p><ol start="3"><li></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dss部署注意点">DSS部署注意点<a class="hash-link" href="#dss部署注意点" title="Direct link to heading">​</a></h3><p><a href="https://github.com/WeBankFinTech/DataSphereStudio-Doc/tree/main/zh_CN" target="_blank" rel="noopener noreferrer">官方安装文档</a></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="config文件夹">config文件夹<a class="hash-link" href="#config文件夹" title="Direct link to heading">​</a></h4><p>db.sh: 配置dss的数据库
config.sh</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">-- dss的安装路径,比如我这里就定义在dss下的文件夹中</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">DSS_INSTALL_HOME</span><span class="token operator">=</span><span class="token plain">/home/hadoop/application/dss/dss</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="conf文件夹">conf文件夹<a class="hash-link" href="#conf文件夹" title="Direct link to heading">​</a></h4><p>dss.properties</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"># 主要检查spark/hive等版本有,如果没有,就追加上</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.spark.engine.version=3.0.1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.hive.engine.version=3.1.2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.flink.engine.version=1.13.2</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>dss-flow-execution-server.properties</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"># 主要检查spark/hive等版本有,如果没有,就追加上</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.spark.engine.version=3.0.1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.hive.engine.version=3.1.2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.flink.engine.version=1.13.2</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>如果调度是想使用dolphinscheduler的话,请参数这个pr添加对应的spark/hive版本
<a href="https://github.com/WeBankFinTech/DataSphereStudio/pull/914/files" target="_blank" rel="noopener noreferrer">参考pr</a></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="dss-appconns">dss-appconns<a class="hash-link" href="#dss-appconns" title="Direct link to heading">​</a></h4><p>exchangis,qualitis,streamis,visualis 都分别要从 Exchangis , Qualitis , Streamis, Visualis 的项目去获取</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="常见问题注意点-1">常见问题注意点<a class="hash-link" href="#常见问题注意点-1" title="Direct link to heading">​</a></h4><ul><li>由于dss我们整合了schedulis,qualitis,exchangis等组件,所有创建一个项目会同步调用这些组件的接口创建,所以确保dss_appconn_instance中的配置路径都是正确的,可以访问的</li><li>chrome浏览器建议内核使用10版本一下的,否则会出现你可以单独Scdulis,Qaulitis等组件,但是却无法通过dss登录成功问题</li><li>hostname和ip,如果是使用ip访问的话,执行appconn-install.sh安装的时候,也确保是ip. 否则会出现访问其他组件的时候,会提示没有登录或者没有权限</li></ul><p><img loading="lazy" alt="ec4989a817646f785c59f6802d0fab2.jpg" src="/zh-CN/assets/images/deploy6-93dece9bd52296bfd4a8269e387f6be0.jpg" width="820" height="555" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="schedulis部署注意点">Schedulis部署注意点<a class="hash-link" href="#schedulis部署注意点" title="Direct link to heading">​</a></h3><p> <a href="https://github.com/WeBankFinTech/Schedulis/blob/master/docs/schedulis_deploy_cn.md" target="_blank" rel="noopener noreferrer">官方部署文档</a></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="conf文件夹-1">conf文件夹<a class="hash-link" href="#conf文件夹-1" title="Direct link to heading">​</a></h4><p>azkaban.properties</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"># azkaban.jobtype.plugin.dir和executor.global.properties这里最好改成绝对路径</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"># Azkaban JobTypes Plugins</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">azkaban.jobtype.plugin.dir=/home/hadoop/application/schedulis/apps/schedulis_0.7.0_exec/plugins/jobtypes</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"># Loader for projects</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">executor.global.properties=/home/hadoop/application/schedulis/apps/schedulis_0.7.0_exec/conf/global.properties</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"># 引擎的版本</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.spark.engine.version=3.0.1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.hive.engine.version=3.1.2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.flink.engine.version=1.13.2</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="web模块">web模块<a class="hash-link" href="#web模块" title="Direct link to heading">​</a></h4><p>plugins/viewer/system/conf:  这里需要配置数据库连接地址,与schedulis保持一致
azkaban.properties:  用户参数和系统管理的配置</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">viewer.plugins=system</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">viewer.plugin.dir=/home/hadoop/application/schedulis/apps/schedulis_0.7.0_web/plugins/viewer</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="常见问题注意点-2">常见问题注意点<a class="hash-link" href="#常见问题注意点-2" title="Direct link to heading">​</a></h4><p>如果出现资源或者web界面出现没有css等静态文件的话,将相关的路径修改为绝对路径
如果出现配置文件加载不到的问题,也可以将路径修改为绝对路径
比如:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">### web模块中</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">web.resource.dir=/home/hadoop/application/schedulis/apps/schedulis_0.7.0_web/web/</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">viewer.plugin.dir=/home/hadoop/application/schedulis/apps/schedulis_0.7.0_web/plugins/viewer</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">### exec模块中</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">azkaban.jobtype.plugin.dir=/home/hadoop/application/schedulis/apps/schedulis_0.7.0_exec/plugins/jobtypes</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">executor.global.properties=/home/hadoop/application/schedulis/apps/schedulis_0.7.0_exec/conf/global.properties</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="qualitis部署注意点">Qualitis部署注意点<a class="hash-link" href="#qualitis部署注意点" title="Direct link to heading">​</a></h3><p><a href="https://github.com/WeBankFinTech/Qualitis/blob/master/docs/zh_CN/ch1/%E5%BF%AB%E9%80%9F%E6%90%AD%E5%BB%BA%E6%89%8B%E5%86%8C%E2%80%94%E2%80%94%E5%8D%95%E6%9C%BA%E7%89%88.md" target="_blank" rel="noopener noreferrer">官方部署文档</a></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="conf文件夹-2">conf文件夹<a class="hash-link" href="#conf文件夹-2" title="Direct link to heading">​</a></h4><p>application-dev.yml</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">  # 这里配置正确的spark版本</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  spark:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    application:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      name: IDE</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      reparation: 50</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    engine:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      name: spark</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      version: 3.0.1</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="exchangis部署注意点">Exchangis部署注意点<a class="hash-link" href="#exchangis部署注意点" title="Direct link to heading">​</a></h3><p><a href="https://github.com/WeBankFinTech/Exchangis/blob/dev-1.0.0/docs/zh_CN/ch1/exchangis_deploy_cn.md" target="_blank" rel="noopener noreferrer">官方部署文档</a></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="常见问题注意点-3">常见问题注意点<a class="hash-link" href="#常见问题注意点-3" title="Direct link to heading">​</a></h4><p>如果点击数据源出现没有发布的错误的话,可以尝试将linkis_ps_dm_datasource的published_version_id值修改为1(如果是null的话)</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="visualis-1">Visualis<a class="hash-link" href="#visualis-1" title="Direct link to heading">​</a></h3><p><a href="https://github.com/WeBankFinTech/Visualis/blob/master/visualis_docs/zh_CN/Visualis_deploy_doc_cn.md" target="_blank" rel="noopener noreferrer">官方部署文档</a></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="常见问题注意点-4">常见问题注意点<a class="hash-link" href="#常见问题注意点-4" title="Direct link to heading">​</a></h4><p>如果出现预览视图一致出不来的话,请检查bin/phantomjs该文件是否完整上传.
如果能看到如下结果的话,说明是上传是完整的</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">./phantomjs -v</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">2.1.1</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="streamis-1">Streamis<a class="hash-link" href="#streamis-1" title="Direct link to heading">​</a></h3><p> <a href="https://github.com/WeBankFinTech/Streamis/blob/main/docs/zh_CN/0.2.0/Streamis%E5%AE%89%E8%A3%85%E6%96%87%E6%A1%A3.md" target="_blank" rel="noopener noreferrer">官方部署文档</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dss-appconn">dss-appconn<a class="hash-link" href="#dss-appconn" title="Direct link to heading">​</a></h3><p>qualitis,exchangis,streamis,visualis是分别要从各种的模块中编译好,copy到dss下的dss-appconns中,然后执行bin下的appconn-install.sh来为各自的组件进行安装
如果你在整合的时候,如果到一些如下的Sql脚本错误的话,请检测错误的Sql周边是否有注释,如果有的话,删掉注释再重新appconn-install一遍尝试
<img loading="lazy" alt="903ceec2f69fc1c7a2be5f309f69726.png" src="/zh-CN/assets/images/deploy7-3d8d21245d502290cf376d396905122c.png" width="1887" height="81" class="img_ev3q">
比如qualitis举例,下面的ip和host端口,根据自己具体使用的来</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">qualitis</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">127.0.0.1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">8090</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="nginx部署举例">Nginx部署举例<a class="hash-link" href="#nginx部署举例" title="Direct link to heading">​</a></h2><p> linkis.conf:   dss/linkis/visualis 前端
exchangis.conf:  exchangis前端
streamis.conf:      streamis前端
Schedulis和Qualitis是分别在自己项目中.
linkis/visualis需要将前端打包出来的dist或者build在这里修改为对应组件的名字
<img loading="lazy" alt="image.png" src="/zh-CN/assets/images/deploy8-3db0b22721e52b2f2b8b389637b8ead7.png" width="778" height="183" class="img_ev3q">
<img loading="lazy" alt="image.png" src="/zh-CN/assets/images/deploy9-363fc68aa5231009c4a649fa457e8e3a.png" width="1219" height="465" class="img_ev3q">
<img loading="lazy" alt="image.png" src="/zh-CN/assets/images/deploy10-4c6b8e7214798a09d2d7245cdbb25b4a.png" width="1192" height="499" class="img_ev3q"></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="linkisconf">linkis.conf<a class="hash-link" href="#linkisconf" title="Direct link to heading">​</a></h4><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">server {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">listen       8089;# 访问端口</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">server_name  localhost;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">#charset koi8-r;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">#access_log  /var/log/nginx/host.access.log  main;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">location /dss/visualis {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"># 修改为自己的前端路径</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">root   /home/hadoop/application/webs; # 静态文件目录</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">autoindex on;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">location /dss/linkis {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"># 修改为自己的前端路径</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">root   /home/hadoop/application/webs; # linkis管理台的静态文件目录</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">autoindex on;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">location / {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"># 修改为自己的前端路径</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">root   /home/hadoop/application/webs/dist; # 静态文件目录</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">#root /home/hadoop/dss/web/dss/linkis;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">index  index.html index.html;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">location /ws {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">proxy_pass http://127.0.0.1:9001;#后端Linkis的地址</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">proxy_http_version 1.1;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">proxy_set_header Upgrade $http_upgrade;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">proxy_set_header Connection upgrade;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">location /api {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">proxy_pass http://127.0.0.1:9001; #后端Linkis的地址</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">proxy_set_header Host $host;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">proxy_set_header X-Real-IP $remote_addr;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">proxy_set_header x_real_ipP $remote_addr;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">proxy_set_header remote_addr $remote_addr;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">proxy_http_version 1.1;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">proxy_connect_timeout 4s;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">proxy_read_timeout 600s;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">proxy_send_timeout 12s;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">proxy_set_header Upgrade $http_upgrade;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">proxy_set_header Connection upgrade;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">#error_page  404              /404.html;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"># redirect server error pages to the static page /50x.html</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">#</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">error_page   500 502 503 504  /50x.html;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">location = /50x.html {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">root   /usr/share/nginx/html;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="exchangisconf">exchangis.conf<a class="hash-link" href="#exchangisconf" title="Direct link to heading">​</a></h4><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">server {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            listen       9800; # 访问端口 如果该端口被占用，则需要修改</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            server_name  localhost;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            #charset koi8-r;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            #access_log  /var/log/nginx/host.access.log  main;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            location / {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            # 修改为自己路径</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            root   /home/hadoop/application/webs/exchangis/dist/dist; # Exchangis 前端部署目录</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            autoindex on;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            location /api {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_pass http://127.0.0.1:9001;  # 后端Linkis的地址，需要修改</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_set_header Host $host;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_set_header X-Real-IP $remote_addr;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_set_header x_real_ipP $remote_addr;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_set_header remote_addr $remote_addr;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_http_version 1.1;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_connect_timeout 4s;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_read_timeout 600s;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_send_timeout 12s;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_set_header Upgrade $http_upgrade;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_set_header Connection upgrade;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            #error_page  404              /404.html;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            # redirect server error pages to the static page /50x.html</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            #</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            error_page   500 502 503 504  /50x.html;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            location = /50x.html {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            root   /usr/share/nginx/html;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="streamisconf">streamis.conf<a class="hash-link" href="#streamisconf" title="Direct link to heading">​</a></h4><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">server {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    listen       9088;# 访问端口 如果该端口被占用，则需要修改</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    server_name  localhost;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    location / {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    # 修改为自己的路径</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        root   /home/hadoop/application/webs/streamis/dist/dist; # 请修改成Streamis前端的静态文件目录</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        index  index.html index.html;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    location /api {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    proxy_pass http://127.0.0.1:9001; #后端Linkis的地址,请修改成Linkis网关的ip和端口</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    proxy_set_header Host $host;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    proxy_set_header X-Real-IP $remote_addr;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    proxy_set_header x_real_ipP $remote_addr;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    proxy_set_header remote_addr $remote_addr;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    proxy_http_version 1.1;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    proxy_connect_timeout 4s;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    proxy_read_timeout 600s;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    proxy_send_timeout 12s;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    proxy_set_header Upgrade $http_upgrade;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    proxy_set_header Connection upgrade;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    #error_page  404              /404.html;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    # redirect server error pages to the static page /50x.html</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    #</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    error_page   500 502 503 504  /50x.html;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    location = /50x.html {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    root   /usr/share/nginx/html;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>]]></content:encoded>
            <category>blog</category>
            <category>linki1.1.1</category>
            <category>hadoop3.1.1</category>
            <category>spark3.0.1</category>
            <category>hive3.1.2</category>
            <category>flink1.13.2</category>
        </item>
        <item>
            <title><![CDATA[如何进行 Kubernetes 部署]]></title>
            <link>https://linkis.apache.org/zh-CN/blog/2022/07/16/deploy-linkis-with-kubernetes</link>
            <guid>/2022/07/16/deploy-linkis-with-kubernetes</guid>
            <pubDate>Sat, 16 Jul 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[1. 依赖版本]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="1-依赖版本">1. 依赖版本<a class="hash-link" href="#1-依赖版本" title="Direct link to heading">​</a></h2><ul><li><p>kind github：<a href="https://github.com/kubernetes-sigs/kind" target="_blank" rel="noopener noreferrer">https://github.com/kubernetes-sigs/kind</a></p></li><li><p>kind官网：<a href="https://kind.sigs.k8s.io/" target="_blank" rel="noopener noreferrer">kind.sigs.k8s.io/</a></p></li></ul><p>版本:</p><ul><li>kind 0.14.0</li><li>docker  20.10.17</li><li>node v16.0.0</li></ul><p>注意：</p><ul><li><p>1.先确保前后端能够正常编译</p></li><li><p>2.确保组件依赖版本</p></li><li><p>3.kind是用docker容器模拟节点的 机器重启回来容器都变了 调度器就不工作了 这个是kind的limitation,官方文档有详细说明。</p></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="2安装docker">2.安装docker<a class="hash-link" href="#2安装docker" title="Direct link to heading">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="21-安装教程">2.1 安装教程<a class="hash-link" href="#21-安装教程" title="Direct link to heading">​</a></h3><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">sudo yum install -y yum-utils device-mapper-persistent-data lvm2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">sudo yum makecache fast</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">sudo yum -y install docker-ce</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">systemctl start docker</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">systemctl enable docker</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="22-设置国内镜像">2.2 设置国内镜像<a class="hash-link" href="#22-设置国内镜像" title="Direct link to heading">​</a></h3><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">vi /etc/docker/daemon.json</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">{</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">"registry-mirrors": ["http://hub-mirror.c.163.com"],</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">"insecure-registries": ["https://registry.mydomain.com","http://hub-mirror.c.163.com"]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="3-安装kind">3. 安装kind<a class="hash-link" href="#3-安装kind" title="Direct link to heading">​</a></h2><p>（1）手工下载kind二进制</p><p><a href="https://github.com/kubernetes-sigs/kind/releases" target="_blank" rel="noopener noreferrer">https://github.com/kubernetes-sigs/kind/releases</a></p><p>（2）安装kind二进制</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">chmod +x ./kind</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">mv kind-linux-amd64 /usr/bin/kind</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="4-安装jdk-和-maven">4. 安装JDK 和 Maven<a class="hash-link" href="#4-安装jdk-和-maven" title="Direct link to heading">​</a></h2><p>（1）参考通用安装教程，安装如下组件</p><p>jdk 1.8</p><p>mavne 3.5+</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="5-安装nodejs">5. 安装NodeJS<a class="hash-link" href="#5-安装nodejs" title="Direct link to heading">​</a></h2><p>（1）安装版本</p><p>node v16.0.0</p><p>（2）安装nvm</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">export http_proxy=http://10.0.0.150:7890</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export https_proxy=http://10.0.0.150:7890</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export NVM_DIR="$HOME/.nvm"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[ -s "$NVM_DIR/nvm.sh" ] &amp;&amp; \. "$NVM_DIR/nvm.sh"  # This loads nvm</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[ -s "$NVM_DIR/bash_completion" ] &amp;&amp; \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>（3）安装nodejs</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">nvm ls-remote</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">nvm install v14.19.3</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>（4）配置NPM</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">npm config set registry https://registry.npmmirror.com</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">npm config set sass_binary_site https://registry.npmmirror.com/binary.html?path=node-sass/</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>（5）编译前端</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">npm install -g yarn</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">yarn</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">yarn build</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">yarn </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="6-编译linkis">6. 编译linkis<a class="hash-link" href="#6-编译linkis" title="Direct link to heading">​</a></h2><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">\# 1. When compiling for the first time, execute the following command first</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./mvnw -N install</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">\# 2. make the linkis distribution package</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">\# - Option 1: make the linkis distribution package only</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./mvnw clean install -Dmaven.javadoc.skip=true -Dmaven.test.skip=true</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">\# - Option 2: make the linkis distribution package and docker image</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./mvnw clean install -Pdocker -Dmaven.javadoc.skip=true -Dmaven.test.skip=true</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">\# - Option 3: linkis distribution package and docker image (included web)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./mvnw clean install -Pdocker -Dmaven.javadoc.skip=true -Dmaven.test.skip=true -Dlinkis.build.web=true</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="7-创建集群">7. 创建集群<a class="hash-link" href="#7-创建集群" title="Direct link to heading">​</a></h2><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">dos2unix ./linkis-dist/helm/scripts/*.sh</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./linkis-dist/helm/scripts/create-test-kind.sh</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="8-安装helm-charts">8. 安装helm charts<a class="hash-link" href="#8-安装helm-charts" title="Direct link to heading">​</a></h2><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain"> ./scripts/install-charts.sh linkis linkis-demo</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="9访问linkis页面">9.访问linkis页面<a class="hash-link" href="#9访问linkis页面" title="Direct link to heading">​</a></h2><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl port-forward -n linkis  --address=0.0.0.0 service/linkis-demo-web 8087:8087</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">http://10.0.2.101:8087</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="10使用linkis客户端测试">10.使用Linkis客户端测试<a class="hash-link" href="#10使用linkis客户端测试" title="Direct link to heading">​</a></h2><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl -n linkis exec -it linkis-demo-ps-publicservice-77d7685d9-f59ht -- bash</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./linkis-cli -engineType shell-1 -codeType shell -code "echo \"hello\" "  -submitUser hadoop -proxyUser hadoop</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="11安装kubectl">11.安装kubectl<a class="hash-link" href="#11安装kubectl" title="Direct link to heading">​</a></h2><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">cat &lt;&lt;EOF &gt; /etc/yum.repos.d/kubernetes.repo</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[kubernetes]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">name=Kubernetes</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">enabled=1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">gpgcheck=1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">repo_gpgcheck=1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">EOF</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">yum install -y --nogpgcheck kubectl</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl config view&nbsp;&nbsp;查看集群信息</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl config get-contexts&nbsp;&nbsp;得到所有集群context对象信息</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">kubectl cluster-info&nbsp;&nbsp;查看当前集群情况</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>]]></content:encoded>
            <category>github</category>
        </item>
        <item>
            <title><![CDATA[如何编写 Github Action]]></title>
            <link>https://linkis.apache.org/zh-CN/blog/2022/07/04/how-to-add-auto-bot</link>
            <guid>/2022/07/04/how-to-add-auto-bot</guid>
            <pubDate>Mon, 04 Jul 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[1 概述]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="1-概述">1 概述<a class="hash-link" href="#1-概述" title="Direct link to heading">​</a></h2><p>大家知道，<a href="#21-%E4%BB%80%E4%B9%88%E6%98%AF%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90">持续集成</a>由很多操作组成，比如抓取代码、运行测试、登录远程服务器，发布到第三方服务等等。gitHub 把这些操作就称为 actions。很多操作在不同项目里面是类似的，完全可以共享。github注意到了这一点，想出了一个很妙的点子，允许开发者把每个操作写成独立的脚本文件，存放到代码仓库，使得其他开发者可以引用。如果你需要某个 action，不必自己写复杂的脚本，直接引用他人写好的 action 即可，整个持续集成过程，就变成了一个 actions 的组合。这就是gitHub actions 最特别的地方。</p><p>Github为广大开发者提供了一个<a href="https://github.com/marketplace" target="_blank" rel="noopener noreferrer">github action市场</a>，我们可以从这个市场中找到我们想要的github action并配置到仓库的<code>workflow</code>中实现自动化操作，当然这个市场能提供的github action有限，有些情况下找不到能满足我们需求的github action，本篇博客在后面我也会教大家如何自己编写github action。</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="2-一些名词术语">2 一些名词术语<a class="hash-link" href="#2-一些名词术语" title="Direct link to heading">​</a></h2><h4 class="anchor anchorWithStickyNavbar_LWe7" id="21-什么是持续集成">2.1 什么是持续集成<a class="hash-link" href="#21-什么是持续集成" title="Direct link to heading">​</a></h4><p>简单说就是自动化程序，举个例子，对于前端程序员每次提交代码到 Github 的仓库后，Github 都会自动创建一个虚拟机（Mac / Windows / Linux 任我们选），来执行一段或多段指令（由我们定），例如：</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">npm</span><span class="token plain"> run build</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="22-yaml是什么">2.2 yaml是什么<a class="hash-link" href="#22-yaml是什么" title="Direct link to heading">​</a></h4><p>我们集成github action的做法，就是在我们仓库的根目录下，创建一个 <code>.github/workflow</code>目录，里面放一个 <code>*.yaml</code>文件——这个yaml文件就是我们配置github action所用的文件。它是一个非常容易的脚本语言，对于不熟悉yaml的用户可以<a href="https://www.codeproject.com/Articles/1214409/Learn-YAML-in-five-minutes" target="_blank" rel="noopener noreferrer">参考此处</a>。</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="3-开始编写第一个workflow">3 开始编写第一个workflow<a class="hash-link" href="#3-开始编写第一个workflow" title="Direct link to heading">​</a></h2><h4 class="anchor anchorWithStickyNavbar_LWe7" id="31-如何自定workflow的名字">3.1 如何自定workflow的名字<a class="hash-link" href="#31-如何自定workflow的名字" title="Direct link to heading">​</a></h4><p>Workflow的名称，github在存储库的Action页面上显示Workflow的名称。如果我们省略 name，则github会将其设置为相对于存储库根目录的工作流文件路径。</p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  Say Hello</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="32-如何自定workflow的触发事件">3.2 如何自定workflow的触发事件<a class="hash-link" href="#32-如何自定workflow的触发事件" title="Direct link to heading">​</a></h4><p>事件有很多，例如：用户提交pull request到仓库、用户给仓库提交issue或者用户关闭issue等，我们希望某些事件发生时，自动执行workflow，这就需要定义触发事件了。下面是自定触发事件的一个例子：</p><div class="language-yml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  Say Hello</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">on</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  pull_request</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>上面的代码能在用户提交pull request时触发workflow，对于多个事件我们用方括号括起来，例如：</p><div class="language-yml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  Say Hello</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">on</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">pull_request</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">pull</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>当然我们希望触发事件能更具体一些，就比如当一个pull request关闭或重新开启时触发workflow：</p><div class="language-yml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  Say Hello</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">on</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">pull_request</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">reopend</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">closed</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>想了解更多的触发事件请参考此处的<a href="https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#about-workflow-events" target="_blank" rel="noopener noreferrer">文档</a>。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="33-如何定义一个job">3.3 如何定义一个job<a class="hash-link" href="#33-如何定义一个job" title="Direct link to heading">​</a></h4><p>一个Workflow由一个或多个jobs构成，含义是一次持续集成的运行，可以完成多个任务，下面是一个例子。</p><div class="language-yml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  Say Hello</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">on</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  pull_request</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">jobs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">my_first_job</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> My first job</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">my_second_job</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> My second job</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>每个job必须具有一个id与之关联。上面的<code>my_first_job</code>和<code>my_second_job</code>就是job的id。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="34-如何定义-job-的运行环境">3.4 如何定义 job 的运行环境<a class="hash-link" href="#34-如何定义-job-的运行环境" title="Direct link to heading">​</a></h4><p>指定运行job的运行环境，github上可用的操作系统为：</p><ul><li>Windows</li><li>macos</li><li>linux</li></ul><p>下面是指定运行环境的一个例子：</p><div class="language-yml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># 受限于篇幅，前面代码部分省略</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">jobs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">my_first_job</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> My first job</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">runs-on</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> macos</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token number">10.15</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="35-step的使用">3.5 step的使用<a class="hash-link" href="#35-step的使用" title="Direct link to heading">​</a></h4><p>每个job由多个step构成，它会从上至下依次执行。step可以运行commands（如linux命令）以及action。
下面是一个输出hello world的例子：</p><div class="language-yml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># 受限于篇幅，前面代码部分省略</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">jobs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">my_first_job</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> My first job</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">runs-on</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> macos</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token number">10.15</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">step</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Print a greeting</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)"># 定义 step 的环境变量</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">env</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">FIRST_WORD</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Hello</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">SECOND_WORD</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> WORD</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token comment" style="color:rgb(98, 114, 164)"># 运行指令：输出环境变量</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">run</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">|</span><span class="token scalar string" style="color:rgb(255, 121, 198)"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token scalar string" style="color:rgb(255, 121, 198)">        echo $FIRST_WORD $SECOND_WORD.</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>接下来是action的使用，这里的action其实就是命令，比如github官方给了我们一些<a href="https://github.com/marketplace?type=actions&amp;query=actions" target="_blank" rel="noopener noreferrer">默认的命令</a>，我么可以直接使用这些命令来减少仓库中workflow的代码量。最常见的action是<a href="https://link.zhihu.com/?target=https%3A//github.com/marketplace/actions/checkout" target="_blank" rel="noopener noreferrer">checkout</a>，它可以把仓库中最新的代码克隆到Workflow的工作区：</p><div class="language-yml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># 受限于篇幅，前面代码部分省略</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">step</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Check out git repository </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">uses</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> actions/checkout@v2</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>有些action会需要传入额外的参数，一般使用with来设置参数值：</p><div class="language-yml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># 受限于篇幅，前面代码部分省略</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">step</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Check out git repository </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">uses</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> actions/checkout@v2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">uses</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> actions/setup</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">node@v2.2.0</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">with</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">node-version</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">14</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="4-如何编写自己的action">4 如何编写自己的action<a class="hash-link" href="#4-如何编写自己的action" title="Direct link to heading">​</a></h2><h4 class="anchor anchorWithStickyNavbar_LWe7" id="41-actionyml的配置">4.1 action.yml的配置<a class="hash-link" href="#41-actionyml的配置" title="Direct link to heading">​</a></h4><p>当在github action市场上找不到我们想要的action时我们可以自己动手编写满足自己需求的action。自定action需要在<code>.github</code>目录下新建一个<code>actions</code>目录，然后再新建一个自定的action名称的目录。每个action都需要有一个action.yml的配置文件，action.yml的runs段制定了操作的启动方式。启动方式可以分为三种：运行 Node.js脚本，运行Docker镜像，运行组合脚本。下面说明action.yml的常用参数：</p><ul><li>name: 自定action的名字</li><li>description: 对action需要传入的参数或者输出进行声明</li><li>inputs: 自定需要输入的参数</li><li>outputs: 输出的变量</li><li>runs: 启动方式</li></ul><p>下面是一个action.yml的配置例子：</p><div class="language-yml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"example action"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">description</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"This is an example action"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">inputs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">param1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">description</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"The first param of this action"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">required</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token boolean important">true</span><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">#必传参数必须要设置required为true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">param2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">description</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"The second param of this action"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">required</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token boolean important">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">outputs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">out1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">description</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"The outputs of this action"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">runs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">using</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> node16</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">main</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> dist/index.js</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">post</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> dist/index.js</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>将runs.using设置为node16或node12，就可以指定为启动Node.js脚本。用main字段指定脚本的入口点。启动的方式类似于直接运行node main.js，所以并不会从 package.json中安装依赖。因此，在开发时，一般都会使用打包工具将依赖项打包到一起，输出一个单独的js文件，然后将这个文件作为入口点。post字段可以指定清理工作，这里的内容将会在 workflow 结束时运行。</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="42使用docker镜像">4.2使用Docker镜像<a class="hash-link" href="#42使用docker镜像" title="Direct link to heading">​</a></h4><p>若使用Docker，我们需要把action.yml中的runs修改为：</p><div class="language-yml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token key atrule">runs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">using</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> docker</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">image</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Dockerfile</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>image 指定镜像启动需要的Dockerfile，这里指定为项目根目录下的Dockerfile文件，在 Dockerfile中，用ENTRYPOINT或者CMD指定启动的脚本。比如这样定义一个用python运行脚本的程序：</p><div class="language-docker codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-docker codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">FROM python:3</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">RUN pip install --no-cache-dir requests</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">COPY . .</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">CMD [ "python", "/main.py"]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>这里可以看出使用Docker的优点：可以自定义运行环境，就能够使用除了Node.js以外的环境，也能使用其他的语言。</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="5-github-action项目实战">5 Github action项目实战<a class="hash-link" href="#5-github-action项目实战" title="Direct link to heading">​</a></h2><p>在本节我会以一个具体的例子来讲述如何编写自己的github action。</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="问题">问题<a class="hash-link" href="#问题" title="Direct link to heading">​</a></h5><p>假设我们的github仓库中有许多待处理的issue，用户提交的每一个pull request可能会关联一个issue，如果每合并一个pull request后就要手动关闭一个issue会相当繁琐。</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="解决">解决<a class="hash-link" href="#解决" title="Direct link to heading">​</a></h5><p>这时workflow就派上用场了。我们可以监听pull request的closed事件，同时判断closed时是被merged关闭还是非merged关闭。如果是merged关闭则关闭关联的issue。
但这里仍然有一个问题，如何获取关联的issue？我们可以要求用户在提交pull request时在描述部分添加需要关联的issue如<code>#345</code>，再把<code>345</code>的issue编号抽取出来。如何实现这个功能呢？我们可以自己来编写github action。为了让github action程序更加简洁，这里我使用docker来启动github action。首先是准备action.yml：</p><div class="language-yml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># github action 的名称</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Auto_close_associate_issue"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># 该action的描述</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">description</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Auto close an issue which associate with a PR."</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#定义需要输入的参数</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">inputs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)"># 第一个参数名叫prbody</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">prbody</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">#对该参数名的描述</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">description</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"The body of the PR to search for related issues"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)"># 必须参数</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">required</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token boolean important">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">outputs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">#输出的参数名</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">issurNumber</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">description</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"The issue number"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">runs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)"># 使用docker镜像</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">using</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"docker"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">image</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Dockerfile"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>接下来是编写脚本文件，在这我使用node.js来编写脚本，此脚本的思路是：先从环境中获取变量值，抽取出issue编号再输出到环境中，对应的脚本（取名为main.js）如下：</p><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// 获取环境变量，所有传给github action的参数一律大写，且需要加上INPUT_前缀，此处是github规定的</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">let</span><span class="token plain"> body </span><span class="token operator">=</span><span class="token plain"> process</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">env</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">'INPUT_PRBODY'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// 利用正则表达式抽取出issue编号数字</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">let</span><span class="token plain"> pattern </span><span class="token operator">=</span><span class="token plain"> </span><span class="token regex regex-delimiter">/</span><span class="token regex regex-source language-regex">#\d+</span><span class="token regex regex-delimiter">/</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">let</span><span class="token plain"> issueNumber </span><span class="token operator">=</span><span class="token plain"> body</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">match</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">pattern</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">replace</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'#'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">''</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// 输出到环境中</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token console class-name">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">::set-output name=issueNumber::</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">issueNumber</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>接下来是docker的镜像文件（文件名为Dockerfile）：</p><div class="language-yml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">FROM node</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token number">10.15</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">COPY . .</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">CMD </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"node"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"/main.js"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>最后在<code>.github/actions/Auto_close_associate_issue</code>路径下放入<code>action.yml</code>、<code>Dockerfile</code>以及<code>main.js</code>三个文件，一个action的编写到此结束。</p><p>最后的最后就是编写workflow，workflow的配置在<a href="#3-%E5%BC%80%E5%A7%8B%E7%BC%96%E5%86%99%E7%AC%AC%E4%B8%80%E4%B8%AAworkflow">开始编写第一个workflow</a>中进行了细致讲述，这里就不作具体赘述了，具体配置如下：</p><div class="language-yml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Auto close issue when PR is merged</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">on</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">pull_request_target</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">types</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> closed </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">jobs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">close-issue</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">runs-on</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> ubuntu</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">latest</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">steps</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">uses</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> actions/checkout@v2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Auto issue closer"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">uses</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> ./.github/actions/Auto_close_associate_issue/</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Closer</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">with</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">prbody</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> github.event.pull_request.body </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Close Issue</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">uses</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> peter</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">evans/close</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">issue@v2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">if</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> github.event.pull_request.merged </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">with</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">issue-number</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> steps.Closer.outputs.issueNumber </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">comment</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> The associated PR has been merged</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> this issue is automatically closed</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> you can reopend if necessary.</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token key atrule">env</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">Github_Token</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> secrets.GITHUB_TOKEN </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token key atrule">PRNUM</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> github.event.pull_request.number </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>]]></content:encoded>
            <category>github</category>
        </item>
        <item>
            <title><![CDATA[Apache Linkis Meet up]]></title>
            <link>https://linkis.apache.org/zh-CN/blog/2022/06/09/meetup-content-review</link>
            <guid>/2022/06/09/meetup-content-review</guid>
            <pubDate>Thu, 09 Jun 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[|Data|Topic & Video|Scripts|]]></description>
            <content:encoded><![CDATA[<table><thead><tr><th align="left"><strong>Data</strong></th><th align="left"><strong>Topic &amp; Video</strong></th><th align="left"><strong>Scripts</strong></th></tr></thead><tbody><tr><td align="left">8/27/2022</td><td align="left"><a href="https://space.bilibili.com/598542776/channel/collectiondetail?sid=681893" target="_blank" rel="noopener noreferrer">Meetup 04期：2022 一站式开源大数据平台WeDataSphere社区年中大会视频集合</a><br><a href="https://space.bilibili.com/598542776/channel/collectiondetail?sid=681893" target="_blank" rel="noopener noreferrer">Meetup 04：2022 Community mid-year conference video collection of WeDataSphere One-stop Open Source Big Data Platform</a></td><td align="left"><a href="https://pan.baidu.com/s/1_Ectkxf5WpRcaLQXWxu72g?pwd=eeik" target="_blank" rel="noopener noreferrer"> 演讲稿合集 A collection of speeches </a></td></tr><tr><td align="left">6/27/2022</td><td align="left"><a href="https://space.bilibili.com/598542776/channel/seriesdetail?sid=2649896" target="_blank" rel="noopener noreferrer"> Meetup 03期：Linkis-1.1.0新功能介绍、上海合合信息合数据工坊IDS</a><br><a href="https://space.bilibili.com/598542776/channel/seriesdetail?sid=2649896" target="_blank" rel="noopener noreferrer">Meetup 03: Linkis-1.1.0 New function introduction, Shanghai HEHE Information and Data Workshop IDS</a></td><td align="left"><a href="https://pan.baidu.com/s/1TpN4qJFdjA666PWmWyiw6A?pwd=na3h" target="_blank" rel="noopener noreferrer"> 演讲稿合集 A collection of speeches </a></td></tr><tr><td align="left">4/13/2022</td><td align="left"><a href="https://www.bilibili.com/video/BV1r5411U7Dx/" target="_blank" rel="noopener noreferrer">Meetup 02期：Qualitis 数据质量 0.9.0版本介绍</a><br><a href="https://www.bilibili.com/video/BV1r5411U7Dx/?spm_id_from=333.788.recommend_more_video.-1" target="_blank" rel="noopener noreferrer">Meetup 02：Introduction to Data Quality Platform Qualitis&nbsp;V0.9.0 </a></td><td align="left"><a href="https://uploader.shimo.im/f/bpeDQgadrMVFUiNL.pptx?fileGuid=m8AZV9z6xMsOevAb" target="_blank" rel="noopener noreferrer">Qualitis 数据质量0.9.0版本介绍.pptx</a></td></tr><tr><td align="left">4/13/2022</td><td align="left"><a href="https://www.bilibili.com/video/BV1WS4y127ma/" target="_blank" rel="noopener noreferrer">Meetup 02期：Prophecis 机器学习Studio版本更新介绍</a><br><a href="https://www.bilibili.com/video/BV1r5411U7Dx/?spm_id_from=333.788.recommend_more_video.-1" target="_blank" rel="noopener noreferrer">Meetup 02：Introduction to Mechine Learning Platform Prophecis Studio</a></td><td align="left"><a href="https://uploader.shimo.im/f/eL3HOVtYTgeCGOtr.pptx?fileGuid=m8AZV9z6xMsOevAb" target="_blank" rel="noopener noreferrer">Prophecis 机器学习Studio版本更新介绍(V0.3.0).pptx</a></td></tr><tr><td align="left">4/13/2022</td><td align="left"><a href="https://www.bilibili.com/video/BV1vY4y1H7j2/" target="_blank" rel="noopener noreferrer">Meetup 02期：调度系统 Schedulis 0.6.2 发布</a><br><a href="https://www.bilibili.com/video/BV1vY4y1H7j2" target="_blank" rel="noopener noreferrer">Meetup 02</a><a href="https://www.bilibili.com/video/BV1vY4y1H7j2" target="_blank" rel="noopener noreferrer">: The Scheduling System Schedulis is Release v0.6.2</a></td><td align="left"><a href="https://uploader.shimo.im/f/rD98D9SwNavhWga3.pptx?fileGuid=m8AZV9z6xMsOevAb" target="_blank" rel="noopener noreferrer">Schedulis 0.6.2 发布.pptx</a></td></tr><tr><td align="left">4/13/2022</td><td align="left"><a href="https://www.bilibili.com/video/BV1pF411G7AH/" target="_blank" rel="noopener noreferrer">Meetup 02期：DataSphereStudio 1.0 系统介绍</a><br><a href="https://www.bilibili.com/video/BV1pF411G7AH" target="_blank" rel="noopener noreferrer">Meetup 02:&nbsp;Introduciton to DataSphereStudio 1.0 System</a></td><td align="left"><a href="https://uploader.shimo.im/f/HluZrVJDRpEsSYy4.pptx?fileGuid=m8AZV9z6xMsOevAb" target="_blank" rel="noopener noreferrer">DSS 1.0.1 系统介绍-WeDataSphere meetup 202204(1).pptx</a></td></tr><tr><td align="left">2/24/2022</td><td align="left"><a href="https://www.bilibili.com/video/BV1La411h7Pf" target="_blank" rel="noopener noreferrer">Meetup 01:Linkis 1.0.3 新版本发布</a><br><a href="https://www.bilibili.com/video/BV1La411h7Pf" target="_blank" rel="noopener noreferrer">Meetup 01:Linkis 1.0.3 New Version Released </a></td><td align="left"><a href="https://uploader.shimo.im/f/qM7PpEBm8bUowyUW.pdf?fileGuid=m8AZV9z6xMsOevAb" target="_blank" rel="noopener noreferrer">基于Linkis的企业大数据平台改造之路_张延召.pdf</a><br><a href="https://uploader.shimo.im/f/GcYE1BwtDKHFfN8W.pdf?fileGuid=m8AZV9z6xMsOevAb" target="_blank" rel="noopener noreferrer">Apache Linkis V1.0.3 介绍-v0.2-邸帅.pdf</a></td></tr></tbody></table>]]></content:encoded>
            <category>meetup</category>
        </item>
        <item>
            <title><![CDATA[如何下载安装包中默认没有的引擎插件]]></title>
            <link>https://linkis.apache.org/zh-CN/blog/2022/04/15/how-to-download-engineconn-plugin</link>
            <guid>/2022/04/15/how-to-download-engineconn-plugin</guid>
            <pubDate>Fri, 15 Apr 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[本文主要指引大家如何下载每个版本对应的非默认引擎安装插件包。]]></description>
            <content:encoded><![CDATA[<blockquote><p><em>本文主要指引大家如何下载每个版本对应的非默认引擎安装插件包。</em></p></blockquote><p>考虑到发布包的大小和大家使用插件的情况，linkis发布的二进制安装包中只包含了部分常用引擎/hive/spark/python/shell，
非常用引擎，项目代码中有对应的模块<code>flink/io_file/pipeline/sqoop</code>(不同版本之间可能有区别)，
为了方便大家使用，基于linkis每个版本的release分支代码: <a href="https://github.com/apache/linkis" target="_blank" rel="noopener noreferrer">https://github.com/apache/linkis</a>, 编译出这部分引擎，供大家选择使用。</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="下载链接">下载链接<a class="hash-link" href="#下载链接" title="Direct link to heading">​</a></h2><table><thead><tr><th align="left"><strong>linkis版本</strong></th><th align="left"><strong>包含的引擎</strong></th><th align="left"><strong>引擎物料包下载链接</strong></th></tr></thead><tbody><tr><td align="left">1.4.0</td><td align="left">jdbc<br>pipeline<br>io_file<br>flink<br>openlookeng<br>sqoop<br>presto<br>elasticsearch<br>trino<br>impala<br></td><td align="left"><a href="https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeDatasphere/Linkis/engineconn-plugin/1.4.0-engineconn-plugin.tar" target="_blank" rel="noopener noreferrer">1.4.0-engineconn-plugin.tar</a></td></tr><tr><td align="left">1.3.2</td><td align="left">jdbc<br>pipeline<br>io_file<br>flink<br>openlookeng<br>sqoop<br>presto<br>elasticsearch<br>trino<br>seatunnel<br></td><td align="left"><a href="https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeDatasphere/Linkis/engineconn-plugin/1.3.2-engineconn-plugin.tar" target="_blank" rel="noopener noreferrer">1.3.2-engineconn-plugin.tar</a></td></tr><tr><td align="left">1.3.1</td><td align="left">jdbc<br>pipeline<br>io_file<br>flink<br>openlookeng<br>sqoop<br>presto<br>elasticsearch<br>trino<br>seatunnel<br></td><td align="left"><a href="https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeDatasphere/Linkis/engineconn-plugin/1.3.1-engineconn-plugin.tar" target="_blank" rel="noopener noreferrer">1.3.1-engineconn-plugin.tar</a></td></tr><tr><td align="left">1.3.0</td><td align="left">jdbc<br>pipeline<br>io_file<br>flink<br>openlookeng<br>sqoop<br>presto<br>elasticsearch<br></td><td align="left"><a href="https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeDatasphere/Linkis/engineconn-plugin/1.3.0-engineconn-plugin.tar" target="_blank" rel="noopener noreferrer">1.3.0-engineconn-plugin.tar</a></td></tr><tr><td align="left">1.2.0</td><td align="left">jdbc<br>pipeline<br>flink<br>openlookeng<br>sqoop<br>presto<br>elasticsearch<br></td><td align="left"><a href="https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeDatasphere/Linkis/engineconn-plugin/1.2.0-engineconn-plugin.tar" target="_blank" rel="noopener noreferrer">1.2.0-engineconn-plugin.tar</a></td></tr><tr><td align="left">1.1.3</td><td align="left">jdbc<br>pipeline<br>flink<br>openlookeng<br>sqoop</td><td align="left"><a href="https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeDatasphere/Linkis/engineconn-plugin/1.1.3-engineconn-plugin.tar" target="_blank" rel="noopener noreferrer">1.1.3-engineconn-plugin.tar</a></td></tr><tr><td align="left">1.1.2</td><td align="left">jdbc<br>pipeline<br>flink<br>openlookeng<br>sqoop</td><td align="left"><a href="https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeDatasphere/Linkis/engineconn-plugin/1.1.2-engineconn-plugin.tar" target="_blank" rel="noopener noreferrer">1.1.2-engineconn-plugin.tar</a></td></tr><tr><td align="left">1.1.1</td><td align="left">jdbc<br>pipeline<br>flink<br>openlookeng<br></td><td align="left"><a href="https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeDatasphere/Linkis/engineconn-plugin/1.1.1-engineconn-plugin.tar" target="_blank" rel="noopener noreferrer">1.1.1-engineconn-plugin.tar</a></td></tr><tr><td align="left">1.1.0</td><td align="left">jdbc<br>pipeline<br>flink<br></td><td align="left"><a href="https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeDatasphere/Linkis/engineconn-plugin/1.1.0-engineconn-plugin.tar" target="_blank" rel="noopener noreferrer">1.1.0-engineconn-plugin.tar</a></td></tr><tr><td align="left">1.0.3</td><td align="left">jdbc<br>pipeline<br>flink<br></td><td align="left"><a href="https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeDatasphere/Linkis/engineconn-plugin/1.0.3-engineconn-plugin.tar" target="_blank" rel="noopener noreferrer">1.0.3-engineconn-plugin.tar</a></td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="引擎类型">引擎类型<a class="hash-link" href="#引擎类型" title="Direct link to heading">​</a></h2><table><thead><tr><th align="left"><strong>引擎名</strong></th><th align="left"><strong>支持底层组件版本<br>(默认依赖版本)</strong></th><th align="left"><strong>Linkis 版本要求</strong></th><th align="left"><strong>是否默认包含在发布包中</strong></th><th align="left"><strong>说明</strong></th></tr></thead><tbody><tr><td align="left">Spark</td><td align="left">Apache 2.0.0~2.4.7, <br>CDH &gt;= 5.4.0, <br>（默认Apache Spark 2.4.3）</td><td align="left">&gt;<!-- -->=1.0.3</td><td align="left">是</td><td align="left">Spark EngineConn， 支持SQL, Scala, Pyspark 和R 代码</td></tr><tr><td align="left">Hive</td><td align="left">Apache &gt;= 1.0.0, <br>CDH &gt;= 5.4.0, <br>（默认Apache Hive 2.3.3）</td><td align="left">&gt;<!-- -->=1.0.3</td><td align="left">是</td><td align="left">Hive EngineConn， 支持HiveQL 代码</td></tr><tr><td align="left">Python</td><td align="left">Python &gt;= 2.6, <br>（默认Python2*）</td><td align="left">&gt;<!-- -->=1.0.3</td><td align="left">是</td><td align="left">Python EngineConn， 支持python 代码</td></tr><tr><td align="left">Shell</td><td align="left">Bash &gt;= 2.0</td><td align="left">&gt;<!-- -->=1.0.3</td><td align="left">是</td><td align="left">Shell EngineConn， 支持Bash shell 代码</td></tr><tr><td align="left">JDBC</td><td align="left">MySQL &gt;= 5.0, Hive &gt;=1.2.1, <br>(默认Hive-jdbc 2.3.4)</td><td align="left">&gt;<!-- -->=1.0.3</td><td align="left">否</td><td align="left">JDBC EngineConn, 已支持Mysql,Oracle,KingBase,PostgreSQL,SqlServer,DB2,Greenplum,DM,Doris,ClickHouse,TiDB,Starrocks,GaussDB和OceanBase, 可快速扩展支持其他有JDBC Driver 包的引擎, 如SQLite</td></tr><tr><td align="left">Flink</td><td align="left">Flink &gt;= 1.12.2, <br>(默认Apache Flink 1.12.2)</td><td align="left">&gt;<!-- -->=1.0.2</td><td align="left">否</td><td align="left">Flink EngineConn， 支持FlinkSQL 代码，也支持以Flink Jar 形式启动一个新的Yarn 应用程序</td></tr><tr><td align="left">Pipeline</td><td align="left">-</td><td align="left">&gt;<!-- -->=1.0.2</td><td align="left">否</td><td align="left">Pipeline EngineConn， 支持文件的导入和导出</td></tr><tr><td align="left">openLooKeng</td><td align="left">openLooKeng &gt;= 1.5.0, <br>(默认openLookEng 1.5.0)</td><td align="left">&gt;<!-- -->=1.1.1</td><td align="left">否</td><td align="left">openLooKeng EngineConn， 支持用Sql查询数据虚拟化引擎openLooKeng</td></tr><tr><td align="left">Sqoop</td><td align="left">Sqoop &gt;= 1.4.6, <br>(默认Apache Sqoop 1.4.6)</td><td align="left">&gt;<!-- -->=1.1.2</td><td align="left">否</td><td align="left">Sqoop EngineConn， 支持 数据迁移工具 Sqoop 引擎</td></tr><tr><td align="left">Presto</td><td align="left">Presto &gt;= 0.180</td><td align="left">&gt;<!-- -->=1.2.0</td><td align="left">否</td><td align="left">Presto EngineConn， 支持Presto SQL 代码</td></tr><tr><td align="left">ElasticSearch</td><td align="left">ElasticSearch &gt;=6.0</td><td align="left">&gt;<!-- -->=1.2.0</td><td align="left">否</td><td align="left">ElasticSearch EngineConn， 支持SQL 和DSL 代码</td></tr><tr><td align="left">Trino</td><td align="left">Trino &gt;=371</td><td align="left">&gt;=1.3.1</td><td align="left">否</td><td align="left">Trino EngineConn， 支持Trino SQL 代码</td></tr><tr><td align="left">Seatunnel</td><td align="left">Seatunnel &gt;=2.1.2</td><td align="left">&gt;=1.3.1</td><td align="left">否</td><td align="left">Seatunnel EngineConn， 支持Seatunnel SQL 代码</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="安装引擎指引">安装引擎指引<a class="hash-link" href="#安装引擎指引" title="Direct link to heading">​</a></h2><p>下载引擎的物料包后，解压包</p><div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">tar -xvf  1.0.3-engineconn-plugin.tar</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">cd 1.0.3-engineconn-plugin</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>将需要要使用的引擎物料包拷贝至linkis的引擎插件目录，然后刷新引擎物料即可</p><p>详细流程参考<a href="https://linkis.apache.org/zh-CN/docs/latest/deployment/install-engineconn" target="_blank" rel="noopener noreferrer">安装 EngineConnPlugin 引擎</a>。</p>]]></content:encoded>
            <category>engine</category>
            <category>guide</category>
        </item>
        <item>
            <title><![CDATA[openLooKeng 的引擎的实现]]></title>
            <link>https://linkis.apache.org/zh-CN/blog/2022/03/20/openlookeng</link>
            <guid>/2022/03/20/openlookeng</guid>
            <pubDate>Sun, 20 Mar 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[概述]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorWithStickyNavbar_LWe7" id="概述">概述<a class="hash-link" href="#概述" title="Direct link to heading">​</a></h2><p>openLooKeng是一种"开箱即用"的引擎，支持在任何地点（包括地理上的远程数据源）对任何数据进行原位分析。它通过SQL 2003接口提供了所有数据的全局视图。openLooKeng具有高可用性、自动伸缩、内置缓存和索引支持，为企业工作负载提供了所需的可靠性。</p><p>openLooKeng用于支持数据探索、即席查询和批处理，具有100+毫秒至分钟级的近实时时延，而无需移动数据。openLooKeng还支持层次化部署，使地理上远程的openLooKeng集群能够参与相同的查询。利用其跨区域查询计划优化能力，涉及远程数据的查询可以达到接近“本地”的性能。
Linkis实现openLooKeng引擎可以让Linkis拥有数据虚拟化的能力，支持提交跨源异构查询、跨域跨DC查询型任务。Linkis作为计算中间件通过利用openLooKeng的连接器基于Linkis的EngineConn的连通通能力可以做到连接更多的底层计算存储组件。</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="开发实现方式">开发实现方式<a class="hash-link" href="#开发实现方式" title="Direct link to heading">​</a></h2><p>openLooKeng ec的实现基于Linkis的EngineConn Plugin（ECP）进行扩展，因为OpengLooKeng服务支持多用户通过Client进行查询，所以实现模式为采用多用户并发引擎的实现模式。
也就是多个用户提交的任务，可以同时在一个EC进程里面进行运行，可以极大的复用EC资源，减少资源浪费。具体类图如下：</p><p>【缺图】</p><p>具体实现为openLooKengEngineConnExecutor继承于ConcurrentComputationExecutor，支持多用户多任务并发，并且支持对接到多个不同的openLooKeng集群。</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="架构">架构<a class="hash-link" href="#架构" title="Direct link to heading">​</a></h2><p>架构图：
<img loading="lazy" src="https://user-images.githubusercontent.com/7869972/166736911-c0f50968-3996-40d0-afdf-52b35d4cd71c.png" alt="image" class="img_ev3q"></p><p>任务流转图如下：
<img loading="lazy" src="https://user-images.githubusercontent.com/7869972/166737177-57f8f84a-b16d-44bd-b7cf-a61fc2cc160c.png" alt="image" class="img_ev3q"></p><p>基于Linkis和openLooKeng的能力可以提供如下能力：</p><ul><li>1.基于Linkis的计算中间件层的连接能力可以让上层应用工具快速对接使用openLooKeng，提交任务，并获取日志、进度、结果。</li><li>2.基于Linkis的公共服务能力可以做到对openLooKeng的sql完成自定义变量替换、UDF管理等</li><li>3.基于Linkis的上下文能力可以打通OpengLooKeng的结果传递给下游Spark、Hive等EC进行查询</li><li>4.基于Linkis的资源管控和多租户能力可以将任务进行租户隔离和openLooKeng资源的使用</li><li>5.基于OpengLooKeng的连接器能力上层应用工具可以做到完成提交跨源异构查询、跨域跨DC查询型任务，并获得秒级返回。</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="后续计划">后续计划<a class="hash-link" href="#后续计划" title="Direct link to heading">​</a></h2><p>后续两个社区将继续进行合作，计划推出以下功能：</p><ul><li>1.Linkis支持openLooKeng on Yarn模式</li><li>2.Linkis完成对openLooKeng的资源管控，任务可以现在Linkis进行排队，资源足够才进行提交</li><li>3.基于openLooKeng的混算能力优化Linkis Orchestrator的能力去完成后续计划的EC间的混算能力。</li></ul>]]></content:encoded>
            <category>engine</category>
        </item>
        <item>
            <title><![CDATA[Linkis 部署排障]]></title>
            <link>https://linkis.apache.org/zh-CN/blog/2022/02/21/linkis-deploy</link>
            <guid>/2022/02/21/linkis-deploy</guid>
            <pubDate>Mon, 21 Feb 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[linkis的部署说明和注意点]]></description>
            <content:encoded><![CDATA[<blockquote><p>linkis的部署说明和注意点</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="1-前置准备注意事项">1. 前置准备注意事项<a class="hash-link" href="#1-前置准备注意事项" title="Direct link to heading">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="11-linux服务器">1.1 linux服务器<a class="hash-link" href="#11-linux服务器" title="Direct link to heading">​</a></h3><p><strong>硬件要求</strong><br>
<!-- -->安装linkis 微服务近10个，每个微服务默认配置启动的jvm -Xmx 内存大小为 512M(内存不够的情况下，可以尝试调小至256/128M，内存足够情况下也可以调大)</p><p><strong>软件要求</strong><br>
<!-- -->基本的软件环境<br>
<!-- -->使用下面命令检查是否已安装对应的软件 ，若未安装，请先进行安装</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">#java环境 推荐&gt;=1.0.8</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">command</span><span class="token plain"> -v  java</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#yum 包管理工具，主要是在执行linkis web管理台安装脚本时,会通过yum安装nginx/policycoreutils-python软件</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">command</span><span class="token plain"> -v  yum</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#linkis的数据库初始化时，会使用到mysql客户端连接数据库，执行sql语句</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">command</span><span class="token plain"> -v mysql</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">command</span><span class="token plain"> -v  telnet</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#用于解压linkis的相关安装包</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">command</span><span class="token plain"> -v  </span><span class="token function" style="color:rgb(80, 250, 123)">tar</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#初始的服务配置文件linkis-*.properties是执行安装脚本install.sh时候，根据`deploy-config/*sh`配置的数据 通过sed 替换到properties文件中的</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">command</span><span class="token plain"> -v </span><span class="token function" style="color:rgb(80, 250, 123)">sed</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="12-添加部署用户">1.2 添加部署用户<a class="hash-link" href="#12-添加部署用户" title="Direct link to heading">​</a></h3><p>部署用户: linkis核心进程的启动用户，同时此用户会默认作为管理员权限，<font color="red">部署过程中会生成对应的管理员登录密码，位于conf/linkis-mg-gateway.properties文件中</font></p><p>linkis支持指定提交、执行的用户。linkis主要进程服务会通过sudo -u  ${linkis-user} 切换到对应用户下，然后执行对应的引擎启动命令，所以引擎linkis-engine进程归属的用户是任务的执行者（所以部署用户需要有sudo权限，而且是免密的）</p><p>以hadoop用户为例:</p><p>先查看系统中是否已经有 hadoop 用户，若已经存在，则直接授权即可；若不存在，先创建用户，再授权。</p><p>查看是否已存在 hadoop 用户</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ </span><span class="token function" style="color:rgb(80, 250, 123)">id</span><span class="token plain"> hadoop</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">uid</span><span class="token operator">=</span><span class="token number">2001</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">hadoop</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">gid</span><span class="token operator">=</span><span class="token number">2001</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">hadoop</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">groups</span><span class="token operator">=</span><span class="token number">2001</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">hadoop</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>若不存在，则需要创建 hadoop 用户，并加入 hadoop 用户组</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ </span><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">useradd</span><span class="token plain"> hadoop -g hadoop</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ </span><span class="token function" style="color:rgb(80, 250, 123)">vi</span><span class="token plain"> /etc/sudoers</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#加上配置</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">hadoop </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">ALL</span><span class="token operator">=</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">ALL</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> NOPASSWD: NOPASSWD: ALL</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>修改安装用户的环境变量,<code>vim /home/hadoop/.bash_rc</code>配置环境变量，环境变量如下：</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token builtin class-name" style="color:rgb(189, 147, 249)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">JAVA_HOME</span><span class="token operator">=</span><span class="token plain">/opt/jdk1.8</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">HADOOP_HOME</span><span class="token operator">=</span><span class="token plain">/opt/install/hadoop</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">HADOOP_CONF_DIR</span><span class="token operator">=</span><span class="token plain">/etc/conf/hadoop</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">HIVE_HOME</span><span class="token operator">=</span><span class="token plain">/opt/install/hive</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">HIVE_CONF_DIR</span><span class="token operator">=</span><span class="token plain">/etc/conf/conf</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SPARK_HOME</span><span class="token operator">=</span><span class="token plain">/opt/install/spark</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SPARK_CONF_DIR</span><span class="token operator">=</span><span class="token plain">/etc/spark/conf</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">PYSPARK_ALLOW_INSECURE_GATEWAY</span><span class="token operator">=</span><span class="token number">1</span><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)"># 如果是Pyspark，则必须加此参数</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>刷新配置  </p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">source</span><span class="token plain"> /home/hadoop/.bash_rc</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#如果.bashrc文件不存，可以配置到.bash_profile中</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>查看是否生效</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ </span><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> -su hadoop</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">echo</span><span class="token plain"> </span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$JAVA_HOME</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">echo</span><span class="token plain"> </span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$HADOOP_HOME</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><font color="red">以下操作都是在hadoop用户下进行</font><h3 class="anchor anchorWithStickyNavbar_LWe7" id="13-安装包准备">1.3 安装包准备<a class="hash-link" href="#13-安装包准备" title="Direct link to heading">​</a></h3><p>linkis安装包，推荐使用1.X及上版本
0.X 和1.X的版本差异化比较大，1.0.3前是<code>com.webank.wedatasphere.linkis</code>的包名，linkis&gt;=1.0.3为<code>org.apache.linkis</code>的包名</p><p><a href="https://linkis.apache.org/zh-CN/download/main" target="_blank" rel="noopener noreferrer">下载地址</a>:<a href="https://linkis.apache.org/zh-CN/download/main" target="_blank" rel="noopener noreferrer">https://linkis.apache.org/zh-CN/download/main</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="14-底层依赖检查">1.4 底层依赖检查<a class="hash-link" href="#14-底层依赖检查" title="Direct link to heading">​</a></h3><p>可以执行相应的命令，查看是否支持</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">spark/hive/hdfs/python/</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ spark-submit --version //spark 任务会通过这个命令提交到YARN上执行</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ python --version</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ hdfs  version</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ hive --version</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="15-资源依赖">1.5 资源依赖<a class="hash-link" href="#15-资源依赖" title="Direct link to heading">​</a></h3><p>可以访问的mysql数据库资源 用来存储linkis自身的业务数据的数据库<br>
<!-- -->可以访问的yarn资源队列 spark/hive/flink引擎的执行都需要yarn队列资源<br>
<!-- -->可以访问的hive的matedata数据库资源(mysql为例) hive引擎执行时需要  </p><div class="theme-admonition theme-admonition-caution alert alert--warning admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>注意</div><div class="admonitionContent_S0QG"><p>注意：hive spark的版本,如果和默认版本区别比较大，最好修改linkis maven依赖相关的hive/spark版本，然后重新进行编译</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="2-安裝">2. 安裝<a class="hash-link" href="#2-安裝" title="Direct link to heading">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="21-安装包解压">2.1 安装包解压<a class="hash-link" href="#21-安装包解压" title="Direct link to heading">​</a></h3><p>上传安装包<code>apache-linkis-1.3.1-bin.tar.gz</code>后，进行解压安装包 </p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ </span><span class="token function" style="color:rgb(80, 250, 123)">tar</span><span class="token plain"> -xvf apache-linkis-1.3.1-bin.tar.gz</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>解压后的目录结构如下</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">-rw-r--r-- </span><span class="token number">1</span><span class="token plain"> hadoop hadoop </span><span class="token number">518192043</span><span class="token plain"> Jun </span><span class="token number">20</span><span class="token plain"> 09:50 apache-linkis-1.3.1-bin.tar.gz</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">drwxrwxr-x </span><span class="token number">2</span><span class="token plain"> hadoop hadoop      </span><span class="token number">4096</span><span class="token plain"> Jun </span><span class="token number">20</span><span class="token plain"> 09:56 bin  //执行环境检查和安装的脚本</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">drwxrwxr-x </span><span class="token number">2</span><span class="token plain"> hadoop hadoop      </span><span class="token number">4096</span><span class="token plain"> Jun </span><span class="token number">20</span><span class="token plain"> 09:56 deploy-config // 部署时依赖的DB等环境配置信息</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">drwxrwxr-x </span><span class="token number">4</span><span class="token plain"> hadoop hadoop      </span><span class="token number">4096</span><span class="token plain"> Jun </span><span class="token number">20</span><span class="token plain"> 09:56 </span><span class="token function" style="color:rgb(80, 250, 123)">docker</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">drwxrwxr-x </span><span class="token number">4</span><span class="token plain"> hadoop hadoop      </span><span class="token number">4096</span><span class="token plain"> Jun </span><span class="token number">20</span><span class="token plain"> 09:56 helm</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">-rwxrwxr-x </span><span class="token number">1</span><span class="token plain"> hadoop hadoop     </span><span class="token number">84732</span><span class="token plain"> Jan </span><span class="token number">22</span><span class="token plain">  </span><span class="token number">2020</span><span class="token plain"> LICENSE</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">drwxr-xr-x </span><span class="token number">2</span><span class="token plain"> hadoop hadoop     </span><span class="token number">20480</span><span class="token plain"> Jun </span><span class="token number">20</span><span class="token plain"> 09:56 licenses</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">drwxrwxr-x </span><span class="token number">7</span><span class="token plain"> hadoop hadoop      </span><span class="token number">4096</span><span class="token plain"> Jun </span><span class="token number">20</span><span class="token plain"> 09:56 linkis-package // 实际的软件包，包括lib/服务启动脚本工具/db的初始化脚本/微服务的配置文件等</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">-rwxrwxr-x </span><span class="token number">1</span><span class="token plain"> hadoop hadoop    </span><span class="token number">119503</span><span class="token plain"> Jan </span><span class="token number">22</span><span class="token plain">  </span><span class="token number">2020</span><span class="token plain"> NOTICE</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">-rw-r--r-- </span><span class="token number">1</span><span class="token plain"> hadoop hadoop     </span><span class="token number">11959</span><span class="token plain"> Jan </span><span class="token number">22</span><span class="token plain">  </span><span class="token number">2020</span><span class="token plain"> README_CN.md</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">-rw-r--r-- </span><span class="token number">1</span><span class="token plain"> hadoop hadoop     </span><span class="token number">12587</span><span class="token plain"> Jan </span><span class="token number">22</span><span class="token plain">  </span><span class="token number">2020</span><span class="token plain"> README.md</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="22-配置linkis自身数据库信息">2.2 配置linkis自身数据库信息<a class="hash-link" href="#22-配置linkis自身数据库信息" title="Direct link to heading">​</a></h3><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">vim</span><span class="token plain"> deploy-config/db.sh</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">示例:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">MYSQL_HOST</span><span class="token operator">=</span><span class="token plain">xx.xx.xx.xx</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">MYSQL_PORT</span><span class="token operator">=</span><span class="token number">3306</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">MYSQL_DB</span><span class="token operator">=</span><span class="token plain">linkis_test</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">MYSQL_USER</span><span class="token operator">=</span><span class="token plain">test</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">MYSQL_PASSWORD</span><span class="token operator">=</span><span class="token plain">xxxxx</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="23-配置基础环境变量">2.3 配置基础环境变量<a class="hash-link" href="#23-配置基础环境变量" title="Direct link to heading">​</a></h3><p>文件位于<code>deploy-config/linkis-env.sh</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="基础目录配置">基础目录配置<a class="hash-link" href="#基础目录配置" title="Direct link to heading">​</a></h4><blockquote><p>请确认部署用户deployUser，拥有这些配置目录的读写权限</p></blockquote><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">deployUser</span><span class="token operator">=</span><span class="token plain">hadoop </span><span class="token comment" style="color:rgb(98, 114, 164)">#执行部署的用户，之前创建的用户hadoop</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">WORKSPACE_USER_ROOT_PATH</span><span class="token operator">=</span><span class="token plain">file:///tmp/linkis   </span><span class="token comment" style="color:rgb(98, 114, 164)"># 指定用户使用的目录路径，一般用于存储用户的脚本文件和日志文件等，是用户的工作空间。 对应的配置文件配置项为  wds.linkis.filesystem.root.path(linkis.properties)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">RESULT_SET_ROOT_PATH</span><span class="token operator">=</span><span class="token plain">file:///tmp/linkis   </span><span class="token comment" style="color:rgb(98, 114, 164)"># 结果集日志等文件路径，用于存储Job的结果集文件  wds.linkis.resultSet.store.path(linkis-cg-entrance.properties) //如果未配置 使用HDFS_USER_ROOT_PATH的配置</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">HDFS_USER_ROOT_PATH</span><span class="token operator">=</span><span class="token plain">hdfs:///tmp/linkis   </span><span class="token comment" style="color:rgb(98, 114, 164)">#  结果集日志等文件路径，用于存储Job的结果集文件  wds.linkis.filesystem.hdfs.root.path(linkis.properties)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">ENGINECONN_ROOT_PATH</span><span class="token operator">=</span><span class="token plain">/appcom/tmp </span><span class="token comment" style="color:rgb(98, 114, 164)">#存放执行引擎的工作路径，需要部署用户有写权限的本地目录   wds.linkis.engineconn.root.dir(linkis-cg-engineconnmanager.properties)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>注意：确认部署用户是否有对应文件目录的读写的权限</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="hive的meta配置">HIVE的META配置<a class="hash-link" href="#hive的meta配置" title="Direct link to heading">​</a></h4><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">HIVE_META_URL</span><span class="token operator">=</span><span class="token plain">jdbc:mysql://127.0.0.1:3306/hive_meta_demo?useUnicode</span><span class="token operator">=</span><span class="token plain">true</span><span class="token operator">&amp;</span><span class="token plain">amp</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">characterEncoding</span><span class="token operator">=</span><span class="token plain">UTF-8 </span><span class="token comment" style="color:rgb(98, 114, 164)"># HiveMeta元数据库的URL</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">HIVE_META_USER</span><span class="token operator">=</span><span class="token plain">demo   </span><span class="token comment" style="color:rgb(98, 114, 164)"># HiveMeta元数据库的用户</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">HIVE_META_PASSWORD</span><span class="token operator">=</span><span class="token plain">demo123    </span><span class="token comment" style="color:rgb(98, 114, 164)"># HiveMeta元数据库的密码</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="yarn的resourcemanager的地址">Yarn的ResourceManager的地址<a class="hash-link" href="#yarn的resourcemanager的地址" title="Direct link to heading">​</a></h4><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#可以通过访问http://xx.xx.xx.xx:8088/ws/v1/cluster/scheduler 接口确认是否正常</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">YARN_RESTFUL_URL</span><span class="token operator">=</span><span class="token plain">http://xx.xx.xx.xx:8088 </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>执行spark任务时，需要使用到yarn的ResourceManager，linkis默认它是未开启权限验证的，如果ResourceManager开启了密码权限验证，请安装部署后，修改<code>linkis_cg_engine_conn_plugin_bml_resources</code>表数据(或则参见<a href="#6-%E6%A3%80%E6%9F%A5%E5%BC%95%E6%93%8E%E7%89%A9%E6%96%99%E8%B5%84%E6%BA%90%E6%98%AF%E5%90%A6%E4%B8%8A%E4%BC%A0%E6%88%90%E5%8A%9F">检查引擎物料资源是否上传成功</a>)</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="ldap-登录验证">LDAP 登录验证<a class="hash-link" href="#ldap-登录验证" title="Direct link to heading">​</a></h4><blockquote><p>linkis默认是使用静态用户和密码,静态用户即部署用户，静态密码会在执行部署是随机生成一个密码串，存储于{InstallPath}/conf/linkis-mg-gateway.properties(&gt;=1.0.3版本)。</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">#LDAP配置，默认Linkis只支持部署用户登录，如果需要支持多用户登录可以使用LDAP，需要配置以下参数：</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#LDAP_URL=ldap://localhost:1389/</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#LDAP_BASEDN=dc=webank,dc=com</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></blockquote><h4 class="anchor anchorWithStickyNavbar_LWe7" id="基础组件环境信息">基础组件环境信息<a class="hash-link" href="#基础组件环境信息" title="Direct link to heading">​</a></h4><blockquote><p>最好通过用户的系统环境变量配置(步骤 1.2 添加部署用户已说明), deploy-config/linkis-env.sh配置文件中可以不进行配置 直接注释掉</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">###HADOOP CONF DIR</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#HADOOP_CONF_DIR=/appcom/config/hadoop-config</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">###HIVE CONF DIR</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#HIVE_CONF_DIR=/appcom/config/hive-config</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">###SPARK CONF DIR</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#SPARK_CONF_DIR=/appcom/config/spark-config</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></blockquote><h4 class="anchor anchorWithStickyNavbar_LWe7" id="引擎版本信息">引擎版本信息<a class="hash-link" href="#引擎版本信息" title="Direct link to heading">​</a></h4><div class="theme-admonition theme-admonition-caution alert alert--warning admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>注意</div><div class="admonitionContent_S0QG"><p>如果使用的官方发布包 无需修改，如果是有自行修改Hive/Spark引擎版本编译的，需要修改。</p></div></div><p>如果spark不是2.4.3的版本，需要修改参数：</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">## Engine version conf</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#SPARK_VERSION，如果安装的Spark版本不是2.4.3，则需要修改为相应的版本，如3.1.1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SPARK_VERSION</span><span class="token operator">=</span><span class="token number">3.1</span><span class="token plain">.1</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>如果hive不是2.3.3的版本，需要修改参数：</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">## Engine version conf</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">##HIVE_VERSION，如果安装的Hive版本不是2.3.3，则需要修改为相应的版本，如2.3.4</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">HIVE_VERSION</span><span class="token operator">=</span><span class="token number">2.3</span><span class="token plain">.4</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>如果配置了，执行安装部署后，实际会在<code>{linkisInstallPath}/conf/linkis.properties</code>文件中被更新</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">#wds.linkis.spark.engine.version=</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#wds.linkis.hive.engine.version=</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#wds.linkis.python.engine.version=</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="jvm内存配置">JVM内存配置<a class="hash-link" href="#jvm内存配置" title="Direct link to heading">​</a></h4><blockquote><p>微服务启动jvm内存配置，可以根据机器实际情况进行调整，如果机器内存资源较少，可以尝试调小至256/128M</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">## java application default jvm memory</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SERVER_HEAP_SIZE</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"512M"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></blockquote><h4 class="anchor anchorWithStickyNavbar_LWe7" id="安装目录配置">安装目录配置<a class="hash-link" href="#安装目录配置" title="Direct link to heading">​</a></h4><blockquote><p>linkis最终会被安装到此目录下，不配置默认是与当前安装包同一级目录下</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">##The decompression directory and the installation directory need to be inconsistent</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">LINKIS_HOME</span><span class="token operator">=</span><span class="token plain">/appcom/Install/LinkisInstall</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="3-部署流程">3. 部署流程<a class="hash-link" href="#3-部署流程" title="Direct link to heading">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="31-执行部署脚本">3.1 执行部署脚本<a class="hash-link" href="#31-执行部署脚本" title="Direct link to heading">​</a></h3><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sh</span><span class="token plain"> bin/install.sh</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>注意</div><div class="admonitionContent_S0QG"><ul><li>如果出现报错，又不清楚具体是执行什么命令报错，可以加 -v 参数<code>sh -v bin/install.sh</code>，将shell脚本执行过程日志打印出来，方便定位问题</li><li>权限问题:mkdir: cannot create directory ‘xxxx’: Permission denied,请确认部署用户是否拥有该路径的读写权限 </li></ul></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="32-可能遇到的问题">3.2 可能遇到的问题<a class="hash-link" href="#32-可能遇到的问题" title="Direct link to heading">​</a></h3><p>执行成功提示如下:
<code>Congratulations! You have installed Linkis 1.0.3 successfully, please use sh /data/Install/linkis/sbin/linkis-start-all.sh to start it!  
Your default account password is [hadoop/5e8e312b4]</code></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="33-配置的修改">3.3 配置的修改<a class="hash-link" href="#33-配置的修改" title="Direct link to heading">​</a></h3><p>安装完成后，如果需要修改配置，可以重新执行安装，或则修改对应${InstallPath}/conf/*properties文件，重启对应的服务</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="34-添加mysql驱动103版本">3.4 添加mysql驱动(&gt;=1.0.3)版本<a class="hash-link" href="#34-添加mysql驱动103版本" title="Direct link to heading">​</a></h3><p>因为license原因，linkis官方发布包中(dss集成的全家桶会包含，无需手动添加)移除了mysql-connector-java，需要手动添加<br>
<!-- -->具体参见<a href="/zh-CN/docs/latest/deployment/deploy-quick#-44-%E6%B7%BB%E5%8A%A0mysql%E9%A9%B1%E5%8A%A8%E5%8C%85"> 添加mysql驱动包</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="35-启动服务">3.5 启动服务<a class="hash-link" href="#35-启动服务" title="Direct link to heading">​</a></h3><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sh</span><span class="token plain"> sbin/linkis-start-all.sh</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="36-检查服务是否正常启动">3.6 检查服务是否正常启动<a class="hash-link" href="#36-检查服务是否正常启动" title="Direct link to heading">​</a></h3><p>访问eureka服务页面(http://eurekaip:20303)，1.0.x版本，以下服务是必须正常启动</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">LINKIS-CG-ENGINECONNMANAGER</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">LINKIS-CG-ENGINEPLUGIN</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">LINKIS-CG-ENTRANCE</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">LINKIS-CG-LINKISMANAGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">LINKIS-MG-EUREKA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">LINKIS-MG-GATEWAY</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">LINKIS-PS-CS</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">LINKIS-PS-PUBLICSERVICE</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>如果有服务未启动，可以在对应的log/${服务名}.log文件中查看详细异常日志。</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="4-安装web前端">4. 安装web前端<a class="hash-link" href="#4-安装web前端" title="Direct link to heading">​</a></h2><p>web端是使用nginx作为静态资源服务器的，访问请求流程是:
linkis管理台请求-&gt;nginx ip:port-&gt;linkis-gateway ip:port-&gt; 其他服务</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="41-下载前端安装包并解压">4.1 下载前端安装包并解压<a class="hash-link" href="#41-下载前端安装包并解压" title="Direct link to heading">​</a></h3><p>tar -xvf apache-linkis-1.0.x-incubating-web-bin.tar.gz</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="42-修改配置configsh">4.2 修改配置config.sh<a class="hash-link" href="#42-修改配置configsh" title="Direct link to heading">​</a></h3><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">#管理台访问的端口 http://localhost:8088</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">linkis_port</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"8088"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#linkis-mg-gateway服务地址</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">linkis_url</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"http://localhost:9020"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="43-执行前端部署">4.3 执行前端部署<a class="hash-link" href="#43-执行前端部署" title="Direct link to heading">​</a></h3><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">#nginx 需要sudo权限进行安装</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">sh</span><span class="token plain"> install.sh</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>安装后，linkis的nginx配置文件默认是 在/etc/nginx/conf.d/linkis.conf
nginx的日志文件在 /var/log/nginx/access.log 和/var/log/nginx/error.log</p><div class="language-nginx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-nginx codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        server {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            listen       8188;# 访问端口 如果端口被占用，则需要修改</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            server_name  localhost;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            #charset koi8-r;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            #access_log  /var/log/nginx/host.access.log  main;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            location /linkis/visualis {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            root   /appcom/Install/linkis-web/linkis/visualis; # 静态文件目录 </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            autoindex on;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            location / {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            root   /appcom/Install/linkis-web/dist; # 静态文件目录 </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            index  index.html index.html;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            location /ws {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_pass http://localhost:9020;#后端Linkis的地址</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_http_version 1.1;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_set_header Upgrade $http_upgrade;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_set_header Connection upgrade;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            location /api {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_pass http://localhost:9020; #后端Linkis的地址</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_set_header Host $host;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_set_header X-Real-IP $remote_addr;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_set_header x_real_ipP $remote_addr;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_set_header remote_addr $remote_addr;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_http_version 1.1;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_connect_timeout 4s;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_read_timeout 600s;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_send_timeout 12s;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_set_header Upgrade $http_upgrade;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            proxy_set_header Connection upgrade;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            #error_page  404              /404.html;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            # redirect server error pages to the static page /50x.html</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            #</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            error_page   500 502 503 504  /50x.html;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            location = /50x.html {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            root   /usr/share/nginx/html;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            }</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        }</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>如果需要修改端口或则静态资源目录等，请修改/etc/nginx/conf.d/linkis.conf 文件后执行 <code>sudo nginx -s reload</code> 命令</p><div class="theme-admonition theme-admonition-caution alert alert--warning admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>注意</div><div class="admonitionContent_S0QG"><ul><li>目前暂未集成visualis功能，安装过程中如果提示安装linkis/visualis失败，可以忽略 </li><li>查看nginx是否正常启动：检查nginx进程是否存在 ps -ef |grep nginx </li><li>检查nginx的配置是否正确 sudo nginx -T  </li><li>如果端口被占用，可以修改nginx启动的服务端口<code>/etc/nginx/conf.d/linkis.conf</code>listen端口值，保存后重新启动</li><li>如果访问管理台出现接口502，或则<code>Unexpected token &lt; in JSON at position 0</code>异常，请确认linkis-mg-gateway是否正常启动，如果正常启动，查看nginx配置文件中配置的linkis-mg-gateway服务地址是否正确</li></ul></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="44-登录web端查看信息">4.4 登录web端查看信息<a class="hash-link" href="#44-登录web端查看信息" title="Direct link to heading">​</a></h3><p><a href="http://xx.xx.xx.xx:8188/#/login" target="_blank" rel="noopener noreferrer">http://xx.xx.xx.xx:8188/#/login</a>
用户名/密码在{InstallPath}/conf/linkis-mg-gateway.properties中查看</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">#未使用LDAP配置时</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.admin.user</span><span class="token operator">=</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">#用户</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">wds.linkis.admin.password</span><span class="token operator">=</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">#密码</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="5-yarn队列检查">5 Yarn队列检查<a class="hash-link" href="#5-yarn队列检查" title="Direct link to heading">​</a></h2><blockquote><p>如果需要使用到spark/hive/flink引擎    </p></blockquote><p>登录后查看能否正常显示yarn队列资源(点击页面右下角按钮)<br>
<!-- -->正常如下图所示:<br>
<img loading="lazy" src="https://user-images.githubusercontent.com/7869972/159955494-2f305a38-a3d6-4798-83aa-58cde23bc436.png" alt="yarn-normal" class="img_ev3q"></p><p>若如果无法显示：可以按以下指引调整 </p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="51-查看yarn地址是否配置正确">5.1 查看yarn地址是否配置正确<a class="hash-link" href="#51-查看yarn地址是否配置正确" title="Direct link to heading">​</a></h3><p>数据库表 linkis_cg_rm_external_resource_provider<br>
<!-- -->插入yarn数据信息  </p><div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">INSERT</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">INTO</span><span class="token plain"> </span><span class="token identifier punctuation" style="color:rgb(248, 248, 242)">`</span><span class="token identifier">linkis_cg_rm_external_resource_provider</span><span class="token identifier punctuation" style="color:rgb(248, 248, 242)">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token identifier punctuation" style="color:rgb(248, 248, 242)">`</span><span class="token identifier">resource_type</span><span class="token identifier punctuation" style="color:rgb(248, 248, 242)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token identifier punctuation" style="color:rgb(248, 248, 242)">`</span><span class="token identifier">name</span><span class="token identifier punctuation" style="color:rgb(248, 248, 242)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token identifier punctuation" style="color:rgb(248, 248, 242)">`</span><span class="token identifier">labels</span><span class="token identifier punctuation" style="color:rgb(248, 248, 242)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token identifier punctuation" style="color:rgb(248, 248, 242)">`</span><span class="token identifier">config</span><span class="token identifier punctuation" style="color:rgb(248, 248, 242)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">VALUES</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'Yarn'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'default'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token boolean">NULL</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token string" style="color:rgb(255, 121, 198)">'{\r\n"rmWebAddress": "http://xx.xx.xx.xx:8088",\r\n"hadoopVersion": "2.7.2",\r\n"authorEnable":false,\r\n"user":"hadoop",\r\n"pwd":"123456"\r\n}'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">config字段属性</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token string" style="color:rgb(255, 121, 198)">"rmWebAddress"</span><span class="token plain">: </span><span class="token string" style="color:rgb(255, 121, 198)">"http://xx.xx.xx.xx:8088"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">#需要带上http以及端口</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token string" style="color:rgb(255, 121, 198)">"hadoopVersion"</span><span class="token plain">: </span><span class="token string" style="color:rgb(255, 121, 198)">"2.7.2"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token string" style="color:rgb(255, 121, 198)">"authorEnable"</span><span class="token plain">:</span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">//是否需要认证 可以在浏览器中通过访问http://xx.xx.xx.xx:8088验证用户名和密码</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token string" style="color:rgb(255, 121, 198)">"user"</span><span class="token plain">:</span><span class="token string" style="color:rgb(255, 121, 198)">"user"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token comment" style="color:rgb(98, 114, 164)">//用户名</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token string" style="color:rgb(255, 121, 198)">"pwd"</span><span class="token plain">:</span><span class="token string" style="color:rgb(255, 121, 198)">"pwd"</span><span class="token comment" style="color:rgb(98, 114, 164)">//密码</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>更新后，因为程序中有使用到缓存，想要立即生效，需要重启linkis-cg-linkismanager服务</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sh</span><span class="token plain"> sbin/linkis-daemon.sh  restart cg-linkismanager</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="52-查看yarn队列是否正确">5.2 查看yarn队列是否正确<a class="hash-link" href="#52-查看yarn队列是否正确" title="Direct link to heading">​</a></h4><p>异常信息:<code>desc: queue ide is not exists in YARN.</code>
表明配置的yarn队列不存在，需要进行调整</p><p>修改方式:linkis管理台/参数配置&gt;全局设置&gt;yarn队列名<!-- -->[wds.linkis.rm.yarnqueue]<!-- -->,修改一个可以使用的yarn队列,可以使用的yarn 队列可以在 rmWebAddress:<a href="http://xx.xx.xx.xx:8088/cluster/scheduler" target="_blank" rel="noopener noreferrer">http://xx.xx.xx.xx:8088/cluster/scheduler</a> 上查看到  </p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="53-查看yarn队列">5.3 查看yarn队列<a class="hash-link" href="#53-查看yarn队列" title="Direct link to heading">​</a></h4><ul><li>查看hadoop集群地址: http://ip:8088/cluster  </li><li>查看yarn队列地址：http://ip:8888/cluster/scheduler  </li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="6-检查引擎物料资源是否上传成功">6 检查引擎物料资源是否上传成功<a class="hash-link" href="#6-检查引擎物料资源是否上传成功" title="Direct link to heading">​</a></h2><div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">#登陆到linkis的数据库 </span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">select</span><span class="token plain"> </span><span class="token operator">*</span><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> linkis_cg_engine_conn_plugin_bml_resources</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>正常如下：
<img loading="lazy" src="https://user-images.githubusercontent.com/29391030/156343249-9f6dca8f-4e0d-438b-995f-4f469270a22d.png" alt="bml" class="img_ev3q"></p><p>查看引擎的物料记录是否存在(如果有更新,查看更新时间是否正确)。</p><p>如果不存在或则未更新，先尝试手动刷新物料资源(详细见<a href="/zh-CN/docs/latest/deployment/install-engineconn#23-%E5%BC%95%E6%93%8E%E5%88%B7%E6%96%B0">引擎物料资源刷新</a>)。通过<code>log/linkis-cg-engineplugin.log</code>日志，查看物料失败的具体原因，很多时候可能是hdfs目录没有权限导致，检查gateway地址配置是否正确<code>conf/linkis.properties:wds.linkis.gateway.url</code>  </p><p>引擎的物料资源默认上传到hdfs目录为 <code>/apps-data/${deployUser}/bml</code>  </p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">hdfs dfs -ls /apps-data/hadoop/bml</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">#如果没有该目录 请手动创建目录并授予${deployUser}读写权限</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">hdfs dfs -mkdir  /apps-data</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">hdfs dfs -chown hadoop:hadoop   /apps-data</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="7-验证基础功能">7 验证基础功能<a class="hash-link" href="#7-验证基础功能" title="Direct link to heading">​</a></h2><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">#引擎的engineType 拼接的版本号，一定要与实际的相匹配</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">sh bin/linkis-cli -submitUser  hadoop  -engineType shell-1 -codeType shell  -code "whoami"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">sh bin/linkis-cli -submitUser  hadoop  -engineType hive-2.3.3  -codeType hql  -code "show tables"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">sh bin/linkis-cli -submitUser  hadoop  -engineType spark-2.4.3 -codeType sql  -code "show tables"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">sh bin/linkis-cli -submitUser  hadoop  -engineType python-python2 -codeType python  -code 'print("hello, world!")'</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="8-查看支持的各个引擎的版本">8 查看支持的各个引擎的版本<a class="hash-link" href="#8-查看支持的各个引擎的版本" title="Direct link to heading">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="81-方式1查看引擎打包的目录">8.1 方式1:查看引擎打包的目录<a class="hash-link" href="#81-方式1查看引擎打包的目录" title="Direct link to heading">​</a></h3><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ tree linkis-package/lib/linkis-engineconn-plugins/ -L 3</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">linkis-package/lib/linkis-engineconn-plugins/</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── hive</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│&nbsp;&nbsp; ├── dist</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│&nbsp;&nbsp; │&nbsp;&nbsp; └── v2.3.3  #版本为2.3.3  engineType 为hive-2.3.3</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│&nbsp;&nbsp; └── plugin</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│&nbsp;&nbsp;     └── 2.3.3</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── python</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│&nbsp;&nbsp; ├── dist</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│&nbsp;&nbsp; │&nbsp;&nbsp; └── vpython2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│&nbsp;&nbsp; └── plugin</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│&nbsp;&nbsp;     └── python2 #版本为python2 engineType 为python-python2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">├── shell</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│&nbsp;&nbsp; ├── dist</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│&nbsp;&nbsp; │&nbsp;&nbsp; └── v1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│&nbsp;&nbsp; └── plugin</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│&nbsp;&nbsp;     └── 1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">└── spark</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    ├── dist</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    │&nbsp;&nbsp; └── v2.4.3</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    └── plugin</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        └── 2.4.3</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="82-方式2查看linkis的数据库表">8.2 方式2:查看linkis的数据库表<a class="hash-link" href="#82-方式2查看linkis的数据库表" title="Direct link to heading">​</a></h3><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">select</span><span class="token plain"> *  from linkis_cg_engine_conn_plugin_bml_resources</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="9-安装部署常见问题的排障"><font color="red">9. 安装部署常见问题的排障</font><a class="hash-link" href="#9-安装部署常见问题的排障" title="Direct link to heading">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="90-登陆密码问题">9.0 登陆密码问题<a class="hash-link" href="#90-登陆密码问题" title="Direct link to heading">​</a></h3><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">  linkis默认是使用静态用户和密码,静态用户即部署用户，静态密码会在执行部署是随机生成一个密码串，存储于{InstallPath}/conf/linkis-mg-gateway.properties(&gt;=1.0.3版本)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="91-版本兼容性问题">9.1 版本兼容性问题<a class="hash-link" href="#91-版本兼容性问题" title="Direct link to heading">​</a></h3><p>linkis默认支持的引擎，与dss兼容关系可以查看此文档 <a href="https://github.com/apache/linkis/blob/master/README.md" target="_blank" rel="noopener noreferrer">https://github.com/apache/linkis/blob/master/README.md</a>   </p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="92-如何定位服务端异常日志">9.2 如何定位服务端异常日志<a class="hash-link" href="#92-如何定位服务端异常日志" title="Direct link to heading">​</a></h3><p>linkis的微服务比较多，若对系统不熟悉，有时候无法定位到具体哪个模块出现了异常，可以通过全局日志搜索方式  </p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">tail</span><span class="token plain"> -f log/* </span><span class="token operator">|</span><span class="token function" style="color:rgb(80, 250, 123)">grep</span><span class="token plain"> -5n exception</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">或则tail -f log/* </span><span class="token operator">|</span><span class="token function" style="color:rgb(80, 250, 123)">grep</span><span class="token plain"> -5n ERROR</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">less</span><span class="token plain"> log/* </span><span class="token operator">|</span><span class="token function" style="color:rgb(80, 250, 123)">grep</span><span class="token plain"> -5n exception</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">或则less log/* </span><span class="token operator">|</span><span class="token function" style="color:rgb(80, 250, 123)">grep</span><span class="token plain"> -5n ERROR</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain">  </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="93-执行引擎任务的异常排查">9.3 执行引擎任务的异常排查<a class="hash-link" href="#93-执行引擎任务的异常排查" title="Direct link to heading">​</a></h3><p><strong> step1:找到引擎的启动部署目录 </strong><br>
<!-- -->方式1：如果执行日志中有显示，可以在管理台上查看到 如下图:<br>
<img loading="lazy" src="https://user-images.githubusercontent.com/29391030/156343802-9d47fa98-dc70-4206-b07f-df439b291028.png" alt="engine-log" class="img_ev3q">
方式2:如果方式1中没有找到，可以通过找到<code>conf/linkis-cg-engineconnmanager.properties</code>配置的<code>wds.linkis.engineconn.root.dir</code>的参数，该值就是引擎启动部署的目录，子目录按执行引擎的用户进行了隔离。</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">如果不清楚taskid，可以按时间排序后进行选择 ll -rt /appcom/tmp/</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">${执行的用户}</span><span class="token plain">/workDir   </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">cd</span><span class="token plain"> /appcom/tmp/</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">${执行的用户}</span><span class="token plain">/workDir/</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">${taskId}</span><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">目录大体如下  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">conf -</span><span class="token operator">&gt;</span><span class="token plain"> /appcom/tmp/engineConnPublickDir/6a09d5fb-81dd-41af-a58b-9cb5d5d81b5a/v000002/conf </span><span class="token comment" style="color:rgb(98, 114, 164)">#引擎的配置文件  </span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">engineConnExec.sh </span><span class="token comment" style="color:rgb(98, 114, 164)">#生成的引擎的启动脚本  </span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">lib -</span><span class="token operator">&gt;</span><span class="token plain"> /appcom/tmp/engineConnPublickDir/45bf0e6b-0fa5-47da-9532-c2a9f3ec764d/v000003/lib </span><span class="token comment" style="color:rgb(98, 114, 164)">#引擎依赖的包  </span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">logs </span><span class="token comment" style="color:rgb(98, 114, 164)">#引擎启动执行的相关日志  </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong> step2：查看引擎的日志 </strong>   </p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">less</span><span class="token plain"> logs/stdout  </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong> step3：尝试手动执行脚本(如果需要) </strong><br>
<!-- -->可以通过尝试手动执行脚本，进行调试 </p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">sh -v engineConnExec.sh  </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="94-cdh适配版本的注意事项">9.4 CDH适配版本的注意事项<a class="hash-link" href="#94-cdh适配版本的注意事项" title="Direct link to heading">​</a></h3><p>CDH本身不是使用的官方标准的hive/spark包,进行适配时，最好修改linkis的源码中的hive/spark版本的依赖，进行重新编译部署。<br>
<!-- -->具体可以参考CDH适配博文<br>
<a href="https://mp.weixin.qq.com/s/__QxC1NoLQFwme1yljy-Nw" target="_blank" rel="noopener noreferrer">【Linkis1.0——CDH5环境中的安装与踩坑】</a><br>
<a href="https://mp.weixin.qq.com/s/9Pl9P0hizDWbbTBf1yzGJA" target="_blank" rel="noopener noreferrer">【DSS1.0.0+Linkis1.0.2——CDH5环境中的试用记录】</a><br>
<a href="https://mp.weixin.qq.com/s/vcFge4BNiEuW-7OC3P-yaw" target="_blank" rel="noopener noreferrer">【DSS1.0.0与Linkis1.0.2——JDBC引擎相关问题汇总】</a><br>
<a href="https://mp.weixin.qq.com/s/VxZ16IPMd1CvcrvHFuU4RQ" target="_blank" rel="noopener noreferrer">【DSS1.0.0与Linkis1.0.2——Flink引擎相关问题汇总】</a>  </p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="95-http接口的调试">9.5 Http接口的调试<a class="hash-link" href="#95-http接口的调试" title="Direct link to heading">​</a></h3><ul><li>方式1 可以开启<a href="/zh-CN/docs/latest/api/login-api/#2%E5%85%8D%E7%99%BB%E5%BD%95%E9%85%8D%E7%BD%AE">免登陆模式指引</a>  </li><li>方式2 postman中的，请求头带上登陆成功的cookie值
cookie值可以在浏览器端登陆成功后，获取
<img loading="lazy" src="https://user-images.githubusercontent.com/7869972/157619718-3afb480f-6087-4d5c-9a77-5e75c8cb4a3c.png" alt="bml" class="img_ev3q"></li></ul><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">Cookie: bdp-user-ticket-id</span><span class="token operator">=</span><span class="token plain">xxxxxxxxxxxxxxxxxxxxxxxxxxx</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>方式3 http请求头添加静态的Token令牌<br>Token在conf/token.properties进行配置
如:TEST-AUTH=hadoop,root,user01</li></ul><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">Token-Code:TEST-AUTH</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Token-User:hadoop</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="96-异常问题的排查流程">9.6 异常问题的排查流程<a class="hash-link" href="#96-异常问题的排查流程" title="Direct link to heading">​</a></h3><p>首先要按上述步骤检查服务/环境等是否都正常启动<br>
<!-- -->按上述罗列的一些场景的方式进行基础问题的排查<br>
<a href="https://docs.qq.com/doc/DSGZhdnpMV3lTUUxq" target="_blank" rel="noopener noreferrer">QA文档</a>中查找是否有解决方案，链接：<a href="https://docs.qq.com/doc/DSGZhdnpMV3lTUUxq" target="_blank" rel="noopener noreferrer">https://docs.qq.com/doc/DSGZhdnpMV3lTUUxq</a><br>
<!-- -->通过搜索issue中的内容,看是否能找到解决方案<br>
<img loading="lazy" src="https://user-images.githubusercontent.com/29391030/156343419-81cc25e0-aa94-4c06-871c-bb036eb6d4ff.png" alt="issues" class="img_ev3q"><br>
<!-- -->通过官网文档搜索，对于某些问题，可以通过官网搜索关键字进行查询，比如搜索"部署"相关。(如果出现404,请浏览器中刷新一下)<br>
<img loading="lazy" src="https://user-images.githubusercontent.com/29391030/156343459-7911bd05-4d8d-4a7b-b9f8-35c152d52c41.png" alt="search" class="img_ev3q">  </p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="10-相关的资料如何获取">10. 相关的资料如何获取<a class="hash-link" href="#10-相关的资料如何获取" title="Direct link to heading">​</a></h2><p>linkis官网文档正在不断的完善,可以在本官网查看/关键字搜索相关文档。<br>
<!-- -->相关博文链接  </p><ul><li>Linkis的技术博文集  <a href="https://github.com/apache/linkis/issues/1233" target="_blank" rel="noopener noreferrer">https://github.com/apache/linkis/issues/1233</a>  </li><li>公众号技术博文<a href="https://mp.weixin.qq.com/mp/homepage?__biz=MzI4MDkxNzUxMg==&amp;hid=1&amp;sn=088cbf2bbed1c80d003c5865bc92ace8&amp;scene=18" target="_blank" rel="noopener noreferrer">https://mp.weixin.qq.com/mp/homepage?__biz=MzI4MDkxNzUxMg==&amp;hid=1&amp;sn=088cbf2bbed1c80d003c5865bc92ace8&amp;scene=18</a>  </li><li>官网文档 <a href="https://linkis.apache.org/zh-CN/docs/latest/about/introduction" target="_blank" rel="noopener noreferrer">https://linkis.apache.org/zh-CN/docs/latest/about/introduction</a>  </li><li>bilibili技术分享视频 <a href="https://space.bilibili.com/598542776?spm_id_from=333.788.b_765f7570696e666f.2" target="_blank" rel="noopener noreferrer">https://space.bilibili.com/598542776?spm_id_from=333.788.b_765f7570696e666f.2</a></li></ul>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[如何编写博客]]></title>
            <link>https://linkis.apache.org/zh-CN/blog/2022/02/08/how-to-user-blog</link>
            <guid>/2022/02/08/how-to-user-blog</guid>
            <pubDate>Tue, 08 Feb 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[本文主要指引大家如何在 Linkis 官网发布博文，欢迎大家提交关于Apache Linkis的博文文档，包括但不仅限于Linkis的安装/源码解析/架构/经验分享等。]]></description>
            <content:encoded><![CDATA[<blockquote><p><em>本文主要指引大家如何在 Linkis 官网发布博文，欢迎大家提交关于Apache Linkis的博文文档，包括但不仅限于Linkis的安装/源码解析/架构/经验分享等。</em></p></blockquote><p>本文主要参考Docusaurus的官方<a href="https://docusaurus.io/zh-CN/blog" target="_blank" rel="noopener noreferrer">博文规范和示例</a>，指引和规范可能并不完善，有任何意见或建议，欢迎提出。</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="资源路径">资源路径<a class="hash-link" href="#资源路径" title="Direct link to heading">​</a></h2><ul><li>中文博文仓库路径:<a href="https://github.com/apache/linkis-website/tree/dev/i18n/zh-CN/docusaurus-plugin-content-blog" target="_blank" rel="noopener noreferrer">https://github.com/apache/linkis-website/tree/dev/i18n/zh-CN/docusaurus-plugin-content-blog</a></li><li>英文博文仓库路径:<a href="https://github.com/apache/linkis-website/tree/dev/blog" target="_blank" rel="noopener noreferrer">https://github.com/apache/linkis-website/tree/dev/blog</a></li></ul><p>每篇博文需要支持中文和英文，提交时请不要遗漏对应的英文文档。</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="文件命名">文件命名<a class="hash-link" href="#文件命名" title="Direct link to heading">​</a></h2><p>框架会自动从目录/文件名中，解析出 YYYY-MM-DD 格式的发布日期</p><ul><li>如：blog/2021-02-08-how-to-user-blog.md </li><li>http的访问路径是: http://xxxxx/blog/2021/02/08/how-to-user-blog</li></ul><p>博文发布日志会根据文件自动解析出对应的日期:2021-02-08，这样默认就是按照日期进行排序。</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="图文博客规范">图文博客规范<a class="hash-link" href="#图文博客规范" title="Direct link to heading">​</a></h2><ul><li>⚠ 如果博文有涉及到图片资源，需要加载本地图片资源，请使用文件夹的形式，这样可以方便的把博客所需要的图片等资源和Markdown 文档放在一起。</li><li>⚠ 如果是架构/流程等图片，原始的工程文件，如.vsdx文件，也请上传至img目录下，方便后续修改。请保证不要再英文博文中出现中文图片。 </li></ul><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token operator">|</span><span class="token plain">-- blog</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token operator">|</span><span class="token plain">   </span><span class="token operator">|</span><span class="token plain">--2021-02-08-how-to-user-blog </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token operator">|</span><span class="token plain">   </span><span class="token operator">|</span><span class="token plain">    </span><span class="token operator">|</span><span class="token plain">-- img //存放图片</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token operator">|</span><span class="token plain">   </span><span class="token operator">|</span><span class="token plain">    </span><span class="token operator">|</span><span class="token plain">-- index.md //博文内容</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>参考示例:</p><ul><li>源码：<a href="https://github.com/facebook/docusaurus/tree/main/website/blog/2022-01-24-docusaurus-2021-recap" target="_blank" rel="noopener noreferrer">https://github.com/facebook/docusaurus/tree/main/website/blog/2022-01-24-docusaurus-2021-recap</a></li><li>视觉效果:<a href="https://docusaurus.io/zh-CN/blog/2022/01/24/docusaurus-2021-recap" target="_blank" rel="noopener noreferrer">https://docusaurus.io/zh-CN/blog/2022/01/24/docusaurus-2021-recap</a></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="摘要">摘要<a class="hash-link" href="#摘要" title="Direct link to heading">​</a></h2><p>博客的首页（默认为 /blog ）是博客列表页，会展示所有的博客文章。</p><p>在博文中使用 <!-- --> 来标记文章摘要。 <!-- --> 以上的内容均将成为摘要，会在博客主页进行展示。
举个例子：</p><div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token front-matter-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule">title</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> 摘要示例</span><span class="token front-matter-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block"></span><span class="token front-matter-block punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">All these will be part of the blog post summary.</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">甚至包括这一行。</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">&lt;!--truncate--&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">但这一行和这一行下方的内容将不会被截取。</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">这行不会。</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">这行也不会。</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="元数据信息">元数据信息<a class="hash-link" href="#元数据信息" title="Direct link to heading">​</a></h2><p>Markdown 文档可以使用以下 Markdown 前端元数据字段，由---两边的线括起来。</p><div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token front-matter-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule">title</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> Welcome Docusaurus v2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule">description</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> This is my first post on Docusaurus 2.</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block front-matter yaml language-yaml">data</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml datetime number">2022-02-01</span><span class="token front-matter-block front-matter yaml language-yaml"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule">slug</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> welcome</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token front-matter-block front-matter yaml language-yaml">docusaurus</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token front-matter-block front-matter yaml language-yaml">v2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule">authors</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block front-matter yaml language-yaml">  </span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token front-matter-block front-matter yaml language-yaml"> </span><span class="token front-matter-block front-matter yaml language-yaml key atrule">name</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> Joel Marcey</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block front-matter yaml language-yaml">    </span><span class="token front-matter-block front-matter yaml language-yaml key atrule">title</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> Co</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token front-matter-block front-matter yaml language-yaml">creator of Docusaurus 1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block front-matter yaml language-yaml">    </span><span class="token front-matter-block front-matter yaml language-yaml key atrule">url</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> https</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml">//github.com/JoelMarcey</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block front-matter yaml language-yaml">    </span><span class="token front-matter-block front-matter yaml language-yaml key atrule">image_url</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> https</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml">//github.com/JoelMarcey.png</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block front-matter yaml language-yaml">  </span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token front-matter-block front-matter yaml language-yaml"> </span><span class="token front-matter-block front-matter yaml language-yaml key atrule">name</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> Sébastien Lorber</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block front-matter yaml language-yaml">    </span><span class="token front-matter-block front-matter yaml language-yaml key atrule">title</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> Docusaurus maintainer</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block front-matter yaml language-yaml">    </span><span class="token front-matter-block front-matter yaml language-yaml key atrule">url</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> https</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml">//sebastienlorber.com</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block front-matter yaml language-yaml">    </span><span class="token front-matter-block front-matter yaml language-yaml key atrule">image_url</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> https</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml">//github.com/slorber.png</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule">tags</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> </span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token front-matter-block front-matter yaml language-yaml">hello</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> docusaurus</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token front-matter-block front-matter yaml language-yaml">v2</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token front-matter-block front-matter yaml language-yaml"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule">image</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> https</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml">//i.imgur.com/mErPwqL.png</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule">hide_table_of_contents</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> </span><span class="token front-matter-block front-matter yaml language-yaml boolean important">false</span><span class="token front-matter-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token front-matter-block"></span><span class="token front-matter-block punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Welcome to this blog. 此博客使用 </span><span class="token url">[</span><span class="token url content bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token url content bold content">Docusaurus 2</span><span class="token url content bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token url">](</span><span class="token url">https://docusaurus.io/</span><span class="token url">)</span><span class="token plain"> 搭建。</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">&lt;!--truncate--&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">这是我的首篇博文。</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">下方是一系列内容。</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>常用参数 </p><table><thead><tr><th>姓名</th><th>类型</th><th>默认</th><th>说明</th></tr></thead><tbody><tr><td><code>authors</code></td><td><code>string</code></td><td><code>未定义</code></td><td>博客文章作者（或唯一作者）列表。</td></tr><tr><td><code>authors.url</code></td><td><code>string</code></td><td><code>未定义</code></td><td>作者姓名将链接到的 URL。这可能是 GitHub、Twitter、Facebook 个人资料 URL 等。</td></tr><tr><td><code>authors.image_url</code></td><td><code>string</code></td><td><code>未定义</code></td><td>作者缩略图的 URL。</td></tr><tr><td><code>authors.title</code></td><td><code>string</code></td><td><code>未定义</code></td><td>作者的描述。</td></tr><tr><td><code>title</code></td><td><code>string</code></td><td>降价标题</td><td>博文标题。</td></tr><tr><td><code>date</code></td><td><code>string</code></td><td>文件名或文件创建时间</td><td>博文创建日期。如果未指定，则可以从文件或文件夹名称中提取，例如，<code>2021-04-15-blog-post.mdx</code>、<code>2021-04-15-blog-post/index.mdx</code>、<code>2021/ 04/15/blog-post.mdx</code>。否则，就是 Markdown 文件的创建时间。</td></tr><tr><td><code>tags</code></td><td><code>Tag[]</code></td><td><code>未定义</code></td><td>两个字符串字段“标签”和“永久链接”的字符串或对象列表，用于标记您的帖子。</td></tr><tr><td><code>keywords</code></td><td><code>string[]</code></td><td><code>未定义</code></td><td>关键字元标记，将成为 <code>&lt;head&gt;</code> 中的 <code>&lt;meta name="keywords" content="keyword1,keyword2,..."/&gt;</code>，供搜索引擎使用。</td></tr><tr><td><code>description</code></td><td><code>string</code></td><td>第一行 Markdown 内容</td><td>您的文档的描述，它将成为 <code>&lt;meta name="description" content="..."/&gt;</code> 和 <code>&lt;meta property="og:description" content="..."/&gt;</code> in <code>&lt;head&gt;</code>，被搜索引擎使用。</td></tr><tr><td><code>image</code></td><td><code>string</code></td><td><code>未定义</code></td><td>显示帖子链接时将使用的封面或缩略图。</td></tr><tr><td><code>slug</code></td><td><code>string</code></td><td>文件路径</td><td>允许自定义博客文章 url (<code>/&lt;routeBasePath&gt;/&lt;slug&gt;</code>)。支持多种模式：<code>slug: my-blog-post</code>, <code>slug: /my/path/to/blog/post</code>, slug: <code>/</code>。</td></tr></tbody></table><table><thead><tr><th>Name</th><th>Type</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>authors</code></td><td><code>Authors</code></td><td><code>undefined</code></td><td>List of blog post authors (or unique author).</td></tr><tr><td><code>authors.url</code></td><td><code>string</code></td><td><code>undefined</code></td><td>The URL that the author's name will be linked to. This could be a GitHub, Twitter, Facebook profile URL, etc.</td></tr><tr><td><code>authors.image_url</code></td><td><code>string</code></td><td><code>undefined</code></td><td>The URL to the author's thumbnail image.</td></tr><tr><td><code>authors.title</code></td><td><code>string</code></td><td><code>undefined</code></td><td>A description of the author.</td></tr><tr><td><code>title</code></td><td><code>string</code></td><td>Markdown title</td><td>The blog post title.</td></tr><tr><td><code>date</code></td><td><code>string</code></td><td>File name or file creation time</td><td>The blog post creation date. If not specified, this can be extracted from the file or folder name, e.g, <code>2021-04-15-blog-post.mdx</code>, <code>2021-04-15-blog-post/index.mdx</code>, <code>2021/04/15/blog-post.mdx</code>. Otherwise, it is the Markdown file creation time.</td></tr><tr><td><code>tags</code></td><td><code>Tag[]</code></td><td><code>undefined</code></td><td>A list of strings or objects of two string fields <code>label</code> and <code>permalink</code> to tag to your post.</td></tr><tr><td><code>keywords</code></td><td><code>string[]</code></td><td><code>undefined</code></td><td>Keywords meta tag, which will become the <code>&lt;meta name="keywords" content="keyword1,keyword2,..."/&gt;</code> in <code>&lt;head&gt;</code>, used by search engines.</td></tr><tr><td><code>description</code></td><td><code>string</code></td><td>The first line of Markdown content</td><td>The description of your document, which will become the <code>&lt;meta name="description" content="..."/&gt;</code> and <code>&lt;meta property="og:description" content="..."/&gt;</code> in <code>&lt;head&gt;</code>, used by search engines.</td></tr><tr><td><code>image</code></td><td><code>string</code></td><td><code>undefined</code></td><td>Cover or thumbnail image that will be used when displaying the link to your post.</td></tr><tr><td><code>slug</code></td><td><code>string</code></td><td>File path</td><td>Allows to customize the blog post url (<code>/&lt;routeBasePath&gt;/&lt;slug&gt;</code>). Support multiple patterns: <code>slug: my-blog-post</code>, <code>slug: /my/path/to/blog/post</code>, slug: <code>/</code>.</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="作者信息维护">作者信息维护<a class="hash-link" href="#作者信息维护" title="Direct link to heading">​</a></h2><p>对于普通的博客文章作者来说，维护每篇博客文章中内联的作者信息可能很乏味。
可以在配置文件中全局声明这些作者：
<code>blog/authors.yml</code></p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token key atrule">Casion</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Casion</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">title</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Development Engineer of WeBank</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">url</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> https</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">//github.com/casionone/</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">image_url</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> https</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">//avatars.githubusercontent.com/u/7869972</span><span class="token punctuation" style="color:rgb(248, 248, 242)">?</span><span class="token plain">v=4</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>]]></content:encoded>
            <category>blog</category>
            <category>guide</category>
        </item>
    </channel>
</rss>