blob: a325192993604628cd6c0a6cf180862a042f9096 [file] [log] [blame]
<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-1.3.1 plugin-docs plugin-id-default docs-doc-id-user-guide/sdk-manual">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v2.2.0">
<title data-rh="true">Linkis SDK Manual | Apache Linkis</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://linkis.apache.org/docs/1.3.1/user-guide/sdk-manual"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="1.3.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-1.3.1"><meta data-rh="true" name="docsearch:version" content="1.3.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-1.3.1"><meta data-rh="true" property="og:title" content="Linkis SDK Manual | Apache Linkis"><meta data-rh="true" name="description" content="Linkis provides a convenient interface for JAVA and SCALA calls. You only need to import the linkis-computation-client module to use it. After 1.0, it supports the method of submitting with Label. The following will introduce the way to use the SDK."><meta data-rh="true" property="og:description" content="Linkis provides a convenient interface for JAVA and SCALA calls. You only need to import the linkis-computation-client module to use it. After 1.0, it supports the method of submitting with Label. The following will introduce the way to use the SDK."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://linkis.apache.org/docs/1.3.1/user-guide/sdk-manual"><link data-rh="true" rel="alternate" href="https://linkis.apache.org/docs/1.3.1/user-guide/sdk-manual" hreflang="en"><link data-rh="true" rel="alternate" href="https://linkis.apache.org/zh-CN/docs/1.3.1/user-guide/sdk-manual" hreflang="zh-CN"><link data-rh="true" rel="alternate" href="https://linkis.apache.org/docs/1.3.1/user-guide/sdk-manual" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://AE29KQB3IA-dsn.algolia.net" crossorigin="anonymous"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Linkis RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Linkis Atom Feed">
<link rel="alternate" type="application/json" href="/blog/feed.json" title="Apache Linkis JSON Feed">
<link rel="search" type="application/opensearchdescription+xml" title="Apache Linkis" href="/opensearch.xml"><link rel="stylesheet" href="/assets/css/styles.05b34e03.css">
<link rel="preload" href="/assets/js/runtime~main.00388f66.js" as="script">
<link rel="preload" href="/assets/js/main.5c2f2a32.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="Apache Linkis Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.png" alt="Apache Linkis Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Linkis</b></a><a class="navbar__item navbar__link" href="/download/main">Download</a><a class="navbar__item navbar__link" href="/community/how-to-subscribe">Community</a><a class="navbar__item navbar__link" href="/blog">Blog</a><a class="navbar__item navbar__link" href="/team">Team</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/user">Users</a><a href="https://docs.qq.com/doc/DUkdTTGhVSlZ0VXVt" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">FAQ</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">ASF</a><ul class="dropdown__menu"><li><a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer" class="dropdown__link">Foundation</a></li><li><a href="https://www.apache.org/licenses/" target="_blank" rel="noopener noreferrer" class="dropdown__link">License</a></li><li><a href="https://www.apache.org/events/current-event" target="_blank" rel="noopener noreferrer" class="dropdown__link">Events</a></li><li><a href="https://www.apache.org/security/" target="_blank" rel="noopener noreferrer" class="dropdown__link">Security</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship</a></li><li><a href="https://privacy.apache.org/policies/privacy-policy-public.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Privacy</a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks</a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Doc</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/latest/about/introduction">1.7.0</a></li><li><a class="dropdown__link" href="/docs/1.6.0/about/introduction">1.6.0</a></li><li><a class="dropdown__link" href="/docs/1.5.0/about/introduction">1.5.0</a></li><li><a class="dropdown__link" href="/docs/1.4.0/about/introduction">1.4.0</a></li><li><a class="dropdown__link" href="/docs/1.8.0/about/introduction">Next(1.8.0)</a></li><li><a class="dropdown__link" href="/versions">All Version</a></li></ul></div><a href="https://github.com/apache/linkis" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link header-github-link" aria-label="GitHub"></a><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link"><svg viewBox="0 0 24 24" width="20" height="20" aria-hidden="true" class="iconLanguage_nlXk"><path fill="currentColor" d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"></path></svg>English</a><ul class="dropdown__menu"><li><a href="/docs/1.3.1/user-guide/sdk-manual" target="_self" rel="noopener noreferrer" class="dropdown__link dropdown__link--active" lang="en">English</a></li><li><a href="/zh-CN/docs/1.3.1/user-guide/sdk-manual" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="zh-CN">简体中文</a></li></ul></div><div class="searchBox_ZlJk"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20" aria-hidden="true"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/1.3.1/about/introduction">About Linkis</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/1.3.1/quick/live-demo">Quick Experience</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/1.3.1/deployment/deploy-quick">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/1.3.1/user-guide/how-to-use">User Guide</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/1.3.1/user-guide/how-to-use">How to Use</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/1.3.1/user-guide/linkiscli-manual">Shell Scripts Manual</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/1.3.1/user-guide/sdk-manual">Linkis SDK Manual</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/1.3.1/user-guide/datasource-client">DataSource Client SDK</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/1.3.1/user-guide/dynamic-variables">built-in time variable</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/1.3.1/user-guide/datasource-manual">Data Source Manual</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" tabindex="0" href="/docs/1.3.1/user-guide/control-panel/overview">Control Panel</a></div></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/1.3.1/engine-usage/overview">Engine Usage</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/1.3.1/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/1.3.1/architecture/overview">Architecture</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/1.3.1/development/directory-structure">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/1.3.1/tuning-and-troubleshooting/overview">Tuning And Troubleshooting</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/1.3.1/upgrade/upgrade-from-0.X-to-1.0-guide">Upgrade Guide</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="theme-doc-version-banner alert alert--warning margin-bottom--md" role="alert"><div>This is documentation for <!-- -->Apache Linkis<!-- --> <b>1.3.1</b>, which is no longer actively maintained.</div><div class="margin-top--md">For up-to-date documentation, see the <b><a href="/docs/latest/user-guide/sdk-manual">latest version</a></b> (<!-- -->1.7.0<!-- -->).</div></div><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">User Guide</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Linkis SDK Manual</span><meta itemprop="position" content="2"></li></ul></nav><span class="theme-doc-version-badge badge badge--secondary">Version: 1.3.1</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Linkis SDK Manual</h1></header><blockquote><p>Linkis provides a convenient interface for JAVA and SCALA calls. You only need to import the linkis-computation-client module to use it. After 1.0, it supports the method of submitting with Label. The following will introduce the way to use the SDK.</p></blockquote><p><strong>Engine version and script type supported by Linkis</strong></p><table><tr><th>Engine plugin</th><th>Default supported versions</th><th>Script type</th><th>Type Description</th></tr><tr><th rowspan="3">Spark</th><th rowspan="3">2.4.3</th><th>py</th><th>python script</th></tr><tr><th>scala</th><th>scala script</th></tr><tr><th>sql</th><th>sql script</th></tr><tr><th>Hive</th><th>2.3.3</th><th>hql</th><th>hql script</th></tr><tr><th>Python</th><th>python2</th><th>python</th><th>python script</th></tr><tr><th>Shell</th><th>1</th><th>shell</th><th>shell script</th></tr><tr><th>JDBC</th><th>4</th><th>jdbc</th><th>sql script name</th></tr><tr><th>Flink</th><th>1.12.2</th><th>sql</th><th>sql script</th></tr><tr><th>openLooKeng</th><th>1.5.0</th><th>sql</th><th>sql script</th></tr><tr><th>Pipeline</th><th>1</th><th>pipeline</th><th>File import and export</th></tr><tr><th>Presto</th><th>0.234</th><th>psql</th><th>sql script</th></tr><tr><th>Sqoop</th><th>1.4.6</th><th>appconn</th><th>File import and export</th></tr><tr><th rowspan="2">Elasticsearch</th><th rowspan="2">7.6.2</th><th>esjson</th><th>json script</th></tr><tr><th>essql</th><th>sql script</th></tr><tr><th>trino</th><th>371</th><th>tsql</th><th>sql script</th></tr></table><p><strong>Linkis common label</strong></p><table><thead><tr><th align="left">label key</th><th align="left">label value</th><th align="left">description</th></tr></thead><tbody><tr><td align="left">engineType</td><td align="left">spark-2.4.3</td><td align="left">the engine type and version</td></tr><tr><td align="left">userCreator</td><td align="left">user + &quot;-AppName&quot;</td><td align="left">the running user and your AppName</td></tr><tr><td align="left">codeType</td><td align="left">sql</td><td align="left">script type</td></tr><tr><td align="left">jobRunningTimeout</td><td align="left">10</td><td align="left">If the job does not finish for 10s, it will automatically initiate Kill. The unit is s</td></tr><tr><td align="left">jobQueuingTimeout</td><td align="left">10</td><td align="left">If the job queue exceeds 10s and fails to complete, Kill will be automatically initiated. The unit is s</td></tr><tr><td align="left">jobRetryTimeout</td><td align="left">10000</td><td align="left">The waiting time for a job to fail due to resources or other reasons is ms. If a job fails due to insufficient queue resources, the retry is initiated 10 times by default</td></tr><tr><td align="left">tenant</td><td align="left">hduser02</td><td align="left">tenant label</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="1-import-dependent-modules">1. Import dependent modules<a class="hash-link" href="#1-import-dependent-modules" 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">&lt;dependency&gt;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> &lt;groupId&gt;org.apache.linkis&lt;/groupId&gt;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> &lt;artifactId&gt;linkis-computation-client&lt;/artifactId&gt;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> &lt;version&gt;${linkis.version}&lt;/version&gt;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">&lt;/dependency&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><h2 class="anchor anchorWithStickyNavbar_LWe7" id="2-java-test-code">2. Java test code<a class="hash-link" href="#2-java-test-code" title="Direct link to heading"></a></h2><p>Create a Java test class LinkisClientTest, the specific interface meaning can be found in the notes:</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">package org.apache.linkis.client.test;</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">import org.apache.linkis.common.utils.Utils;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.linkis.httpclient.dws.authentication.StaticAuthenticationStrategy;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.linkis.httpclient.dws.config.DWSClientConfig;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.linkis.httpclient.dws.config.DWSClientConfigBuilder;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.linkis.manager.label.constant.LabelKeyConstant;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.linkis.protocol.constants.TaskConstant;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.linkis.ujes.client.UJESClient;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.linkis.ujes.client.UJESClientImpl;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.linkis.ujes.client.request.JobSubmitAction;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.linkis.ujes.client.request.JobExecuteAction;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.linkis.ujes.client.request.ResultSetAction;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.linkis.ujes.client.response.*;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.commons.io.IOUtils;</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">import java.util.HashMap;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import java.util.Map;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import java.util.concurrent.TimeUnit;</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 class LinkisClientTest {</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"> // 1. build config: linkis gateway url</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> private static DWSClientConfig clientConfig = ((DWSClientConfigBuilder) (DWSClientConfigBuilder.newBuilder()</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .addServerUrl(&quot;http://127.0.0.1:9001/&quot;) //set linkis-mg-gateway url: http://{ip}:{port}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .connectionTimeout(30000) //connectionTimeOut</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .discoveryEnabled(false) //disable discovery</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .discoveryFrequency(1, TimeUnit.MINUTES) // discovery frequency</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .loadbalancerEnabled(true) // enable loadbalance</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .maxConnectionSize(5) // set max Connection</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .retryEnabled(false) // set retry</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .readTimeout(30000) //set read timeout</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .setAuthenticationStrategy(new StaticAuthenticationStrategy()) //AuthenticationStrategy Linkis authen suppory static and Token</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .setAuthTokenKey(&quot;hadoop&quot;) // set submit user</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .setAuthTokenValue(&quot;123456&quot;))) // set passwd or token (setAuthTokenValue(&quot;test&quot;))</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .setDWSVersion(&quot;v1&quot;) //linkis rest version v1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .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"> // 2. new Client(Linkis Client) by clientConfig</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> private static UJESClient client = new UJESClientImpl(clientConfig);</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 void main(String[] args) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // The user needs to be consistent with the value of AuthTokenKey</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> String user = &quot;hadoop&quot;; </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> String executeCode = &quot;df=spark.sql(\&quot;show tables\&quot;)\n&quot; +</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> &quot;show(df)&quot;; // code support:sql/hql/py/scala</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> try {</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"> System.out.println(&quot;user : &quot; + user + &quot;, code : [&quot; + executeCode + &quot;]&quot;);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // 3. build job and execute</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> JobExecuteResult jobExecuteResult = toSubmit(user, executeCode);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> System.out.println(&quot;execId: &quot; + jobExecuteResult.getExecID() + &quot;, taskId: &quot; + jobExecuteResult.taskID());</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // 4. get job info</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> JobInfoResult jobInfoResult = client.getJobInfo(jobExecuteResult);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> int sleepTimeMills = 1000;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> int logFromLen = 0;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> int logSize = 100;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> while (!jobInfoResult.isCompleted()) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // 5. get progress and log</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> JobProgressResult progress = client.progress(jobExecuteResult);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> System.out.println(&quot;progress: &quot; + progress.getProgress());</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> JobLogResult logRes = client.log(jobExecuteResult, logFromLen, logSize);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> logFromLen = logRes.fromLine();</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // 0: info 1: warn 2: error 3: all</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> System.out.println(logRes.log().get(3));</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> Utils.sleepQuietly(sleepTimeMills);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> jobInfoResult = client.getJobInfo(jobExecuteResult);</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"> JobInfoResult jobInfo = client.getJobInfo(jobExecuteResult);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // 6. Get the result set list (if the user submits multiple SQLs at a time,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // multiple result sets will be generated)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> String resultSet = jobInfo.getResultSetList(client)[0];</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // 7. get resultContent</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> ResultSetResult resultSetResult = client.resultSet(ResultSetAction.builder().setPath(resultSet).setUser(jobExecuteResult.getUser()).build());</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> System.out.println(&quot;metadata: &quot; + resultSetResult.getMetadata()); // column name type</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> System.out.println(&quot;res: &quot; + resultSetResult.getFileContent()); //row data</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> } catch (Exception e) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> e.printStackTrace();// please use log</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> IOUtils.closeQuietly(client);</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"> IOUtils.closeQuietly(client);</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"> private static JobExecuteResult toSubmit(String user, String code) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // 1. build params</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // set label map :EngineTypeLabel/UserCreatorLabel/EngineRunTypeLabel/Tenant</span><br></span><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, &quot;spark-2.4.3&quot;); // required engineType Label</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> labels.put(LabelKeyConstant.USER_CREATOR_TYPE_KEY, user + &quot;-APPName&quot;);// required execute user and creator eg:hadoop-IDE</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> labels.put(LabelKeyConstant.CODE_TYPE_KEY, &quot;py&quot;); // required codeType</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // set start up map :engineConn start params</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> Map&lt;String, Object&gt; startupMap = new HashMap&lt;String, Object&gt;(16);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // Support setting engine native parameters,For example: parameters of engines such as spark/hive</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> startupMap.put(&quot;spark.executor.instances&quot;, 2);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // setting linkis params</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> startupMap.put(&quot;wds.linkis.rm.yarnqueue&quot;, &quot;dws&quot;);</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. build jobSubmitAction</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> JobSubmitAction jobSubmitAction = JobSubmitAction.builder()</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .addExecuteCode(code)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .setStartupParams(startupMap)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .setUser(user) //submit user</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .addExecuteUser(user) // execute user</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .setLabels(labels) .</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .build();</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // 3. to execute</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> return client.submit(jobSubmitAction);</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>Run the above code to complete task submission/execution/log/result set acquisition, etc.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="3-scala-test-code">3. Scala test code<a class="hash-link" href="#3-scala-test-code" title="Direct link to heading"></a></h2><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">package org.apache.linkis.client.test</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">import org.apache.commons.io.IOUtils</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.commons.lang3.StringUtils</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.linkis.common.utils.Utils</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.linkis.httpclient.dws.authentication.StaticAuthenticationStrategy</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.linkis.httpclient.dws.config.DWSClientConfigBuilder</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.linkis.manager.label.constant.LabelKeyConstant</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.linkis.ujes.client.request._</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import org.apache.linkis.ujes.client.response._</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">import java.util</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">import java.util.concurrent.TimeUnit</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">object LinkisClientTest {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // 1. build config: linkis gateway url</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> val clientConfig = DWSClientConfigBuilder.newBuilder()</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .addServerUrl(&quot;http://127.0.0.1:9001/&quot;) //set linkis-mg-gateway url: http://{ip}:{port}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .connectionTimeout(30000) //connectionTimeOut</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .discoveryEnabled(false) //disable discovery</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .discoveryFrequency(1, TimeUnit.MINUTES) // discovery frequency</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .loadbalancerEnabled(true) // enable loadbalance</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .maxConnectionSize(5) // set max Connection</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .retryEnabled(false) // set retry</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .readTimeout(30000) //set read timeout</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .setAuthenticationStrategy(new StaticAuthenticationStrategy()) //AuthenticationStrategy Linkis authen suppory static and Token</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .setAuthTokenKey(&quot;hadoop&quot;) // set submit user</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .setAuthTokenValue(&quot;hadoop&quot;) // set passwd or token (setAuthTokenValue(&quot;BML-AUTH&quot;))</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .setDWSVersion(&quot;v1&quot;) //link rest version v1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .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"> // 2. new Client(Linkis Client) by clientConfig</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> val client = UJESClient(clientConfig)</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"> def main(args: Array[String]): Unit = {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> val user = &quot;hadoop&quot; // execute user user needs to be consistent with the value of AuthTokenKey</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> val executeCode = &quot;df=spark.sql(\&quot;show tables\&quot;)\n&quot; +</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> &quot;show(df)&quot;; // code support:sql/hql/py/scala</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> try {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // 3. build job and execute</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> println(&quot;user : &quot; + user + &quot;, code : [&quot; + executeCode + &quot;]&quot;)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // It is recommended to use submit, which supports the transfer of task labels</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> val jobExecuteResult = toSubmit(user, executeCode)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> println(&quot;execId: &quot; + jobExecuteResult.getExecID + &quot;, taskId: &quot; + jobExecuteResult.taskID)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // 4. get job info</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> var jobInfoResult = client.getJobInfo(jobExecuteResult)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> where logFromLen = 0</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> val logSize = 100</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> val sleepTimeMills: Int = 1000</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> while (!jobInfoResult.isCompleted) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // 5. get progress and log</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> val progress = client.progress(jobExecuteResult)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> println(&quot;progress: &quot; + progress.getProgress)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> val logObj = client.log(jobExecuteResult, logFromLen, logSize)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> logFromLen = logObj.fromLine</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> val logArray = logObj.getLog</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // 0: info 1: warn 2: error 3: all</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> if (logArray != null &amp;&amp; logArray.size &gt;= 4 &amp;&amp; StringUtils.isNotEmpty(logArray.get(3))) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> println(s&quot;log: ${logArray.get(3)}&quot;)</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"> Utils.sleepQuietly(sleepTimeMills)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> jobInfoResult = client.getJobInfo(jobExecuteResult)</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 (!jobInfoResult.isSucceed) {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> println(&quot;Failed to execute job: &quot; + jobInfoResult.getMessage)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> throw new Exception(jobInfoResult.getMessage)</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"> // 6. Get the result set list (if the user submits multiple SQLs at a time,</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // multiple result sets will be generated)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> val jobInfo = client.getJobInfo(jobExecuteResult)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> val resultSetList = jobInfoResult.getResultSetList(client)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> println(&quot;All result set list:&quot;)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> resultSetList.foreach(println)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> val oneResultSet = jobInfo.getResultSetList(client).head</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // 7. get resultContent</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> val resultSetResult: ResultSetResult = client.resultSet(ResultSetAction.builder.setPath(oneResultSet).setUser(jobExecuteResult.getUser).build)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> println(&quot;metadata: &quot; + resultSetResult.getMetadata) // column name type</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> println(&quot;res: &quot; + resultSetResult.getFileContent) //row data</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> } catch {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> case e: Exception =&gt; {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> e.printStackTrace() //please use log</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"> IOUtils.closeQuietly(client)</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"> def toSubmit(user: String, code: String): JobExecuteResult = {</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // 1. build params</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // set label map :EngineTypeLabel/UserCreatorLabel/EngineRunTypeLabel/Tenant</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> val labels: util.Map[String, Any] = new util.HashMap[String, Any]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> labels.put(LabelKeyConstant.ENGINE_TYPE_KEY, &quot;spark-2.4.3&quot;); // required engineType Label</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> labels.put(LabelKeyConstant.USER_CREATOR_TYPE_KEY, user + &quot;-APPName&quot;); // The requested user and application name, both parameters must be missing, where APPName cannot contain &quot;-&quot;, it is recommended to replace it with &quot;_&quot;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> labels.put(LabelKeyConstant.CODE_TYPE_KEY, &quot;py&quot;); // specify the script type</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 startupMap = new java.util.HashMap[String, Any]()</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // Support setting engine native parameters,For example: parameters of engines such as spark/hive</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> startupMap.put(&quot;spark.executor.instances&quot;, 2);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // setting linkis params</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> startupMap.put(&quot;wds.linkis.rm.yarnqueue&quot;, &quot;default&quot;);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // 2. build jobSubmitAction</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> val jobSubmitAction = JobSubmitAction.builder</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .addExecuteCode(code)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .setStartupParams(startupMap)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .setUser(user) //submit user</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .addExecuteUser(user) //execute user</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .setLabels(labels) .</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> .build</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> // 3. to execute</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> client.submit(jobSubmitAction)</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></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/linkis-website/edit/dev/versioned_docs/version-1.3.1/user-guide/sdk-manual.md" target="_blank" rel="noreferrer noopener" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_vwxv"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/1.3.1/user-guide/linkiscli-manual"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Shell Scripts Manual</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/1.3.1/user-guide/datasource-client"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">DataSource Client SDK</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#1-import-dependent-modules" class="table-of-contents__link toc-highlight">1. Import dependent modules</a></li><li><a href="#2-java-test-code" class="table-of-contents__link toc-highlight">2. Java test code</a></li><li><a href="#3-scala-test-code" class="table-of-contents__link toc-highlight">3. Scala test code</a></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Linkis</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/latest/about/introduction">Document</a></li><li class="footer__item"><a class="footer__link-item" href="/faq/main">FAQ</a></li><li class="footer__item"><a href="https://github.com/apache/linkis/releases" target="_blank" rel="noopener noreferrer" class="footer__link-item">Releases</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/apache/linkis" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub</a></li><li class="footer__item"><a href="https://github.com/apache/linkis/issues" target="_blank" rel="noopener noreferrer" class="footer__link-item">Issue Tracker</a></li><li class="footer__item"><a href="https://github.com/apache/linkis/pulls" target="_blank" rel="noopener noreferrer" class="footer__link-item">Pull Requests</a></li></ul></div><div class="col footer__col"><div class="footer__title">Subscribe Mailing List</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/how-to-subscribe">How to Subscribe</a></li><li class="footer__item"><a href="mailto:dev-subscribe@linkis.apache.org" target="_blank" rel="noopener noreferrer" class="footer__link-item">Subscribe Mail</a></li><li class="footer__item"><a href="https://lists.apache.org/list.html?dev@linkis.apache.org" target="_blank" rel="noopener noreferrer" class="footer__link-item">Mail Archive</a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><div><img style="height:50px" alt="Apache Software Foundation" src="/img/incubator-logo.svg"><p style="color: #999999; padding: 0 20px 30px;font-weight:400;text-align:left">Apache Linkis is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</p><p></p>
<p style="padding: 0 20px 30px;color: #999999;font-weight: 400;"> Copyright © 2025 The Apache Software Foundation. Licensed under the Apache License, Version 2.0. Apache Linkis, Apache Incubator, Apache, the Apache feather logo, the Apache Linkis logo and the Apache Incubator project logo are trademarks of The Apache Software Foundation.</p>
<div></div></div></div></div></div></footer></div>
<script src="/assets/js/runtime~main.00388f66.js"></script>
<script src="/assets/js/main.5c2f2a32.js"></script>
</body>
</html>