| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="utf-8"> |
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> |
| <title>Apache Flink: 获取帮助</title> |
| <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"> |
| <link rel="icon" href="/favicon.ico" type="image/x-icon"> |
| |
| <!-- Bootstrap --> |
| <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"> |
| <link rel="stylesheet" href="/css/flink.css"> |
| <link rel="stylesheet" href="/css/syntax.css"> |
| |
| <!-- Blog RSS feed --> |
| <link href="/blog/feed.xml" rel="alternate" type="application/rss+xml" title="Apache Flink Blog: RSS feed" /> |
| |
| <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> |
| <!-- We need to load Jquery in the header for custom google analytics event tracking--> |
| <script src="/js/jquery.min.js"></script> |
| |
| <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> |
| <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> |
| <!--[if lt IE 9]> |
| <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> |
| <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> |
| <![endif]--> |
| </head> |
| <body> |
| |
| |
| <!-- Main content. --> |
| <div class="container"> |
| <div class="row"> |
| |
| |
| <div id="sidebar" class="col-sm-3"> |
| |
| |
| <!-- Top navbar. --> |
| <nav class="navbar navbar-default"> |
| <!-- The logo. --> |
| <div class="navbar-header"> |
| <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> |
| <span class="icon-bar"></span> |
| <span class="icon-bar"></span> |
| <span class="icon-bar"></span> |
| </button> |
| <div class="navbar-logo"> |
| <a href="/zh/"> |
| <img alt="Apache Flink" src="/img/flink-header-logo.svg" width="147px" height="73px"> |
| </a> |
| </div> |
| </div><!-- /.navbar-header --> |
| |
| <!-- The navigation links. --> |
| <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> |
| <ul class="nav navbar-nav navbar-main"> |
| |
| <!-- First menu section explains visitors what Flink is --> |
| |
| <!-- What is Stream Processing? --> |
| <!-- |
| <li><a href="/zh/streamprocessing1.html">What is Stream Processing?</a></li> |
| --> |
| |
| <!-- What is Flink? --> |
| <li><a href="/zh/flink-architecture.html">Apache Flink 是什么?</a></li> |
| |
| |
| |
| <!-- What is Stateful Functions? --> |
| |
| <li><a href="/zh/stateful-functions.html">What is Stateful Functions?</a></li> |
| |
| <!-- Use cases --> |
| <li><a href="/zh/usecases.html">应用场景</a></li> |
| |
| <!-- Powered by --> |
| <li><a href="/zh/poweredby.html">Flink 用户</a></li> |
| |
| |
| |
| <!-- Second menu section aims to support Flink users --> |
| |
| <!-- Downloads --> |
| <li><a href="/zh/downloads.html">下载</a></li> |
| |
| <!-- Getting Started --> |
| <li class="dropdown"> |
| <a class="dropdown-toggle" data-toggle="dropdown" href="#">教程<span class="caret"></span></a> |
| <ul class="dropdown-menu"> |
| <li><a href="https://ci.apache.org/projects/flink/flink-docs-release-1.11/zh/getting-started/index.html" target="_blank">With Flink <small><span class="glyphicon glyphicon-new-window"></span></small></a></li> |
| <li><a href="https://ci.apache.org/projects/flink/flink-statefun-docs-release-2.1/getting-started/project-setup.html" target="_blank">With Flink Stateful Functions <small><span class="glyphicon glyphicon-new-window"></span></small></a></li> |
| <li><a href="/zh/training.html">Training Course</a></li> |
| </ul> |
| </li> |
| |
| <!-- Documentation --> |
| <li class="dropdown"> |
| <a class="dropdown-toggle" data-toggle="dropdown" href="#">文档<span class="caret"></span></a> |
| <ul class="dropdown-menu"> |
| <li><a href="https://ci.apache.org/projects/flink/flink-docs-release-1.11" target="_blank">Flink 1.11 (Latest stable release) <small><span class="glyphicon glyphicon-new-window"></span></small></a></li> |
| <li><a href="https://ci.apache.org/projects/flink/flink-docs-master" target="_blank">Flink Master (Latest Snapshot) <small><span class="glyphicon glyphicon-new-window"></span></small></a></li> |
| <li><a href="https://ci.apache.org/projects/flink/flink-statefun-docs-release-2.1" target="_blank">Flink Stateful Functions 2.1 (Latest stable release) <small><span class="glyphicon glyphicon-new-window"></span></small></a></li> |
| <li><a href="https://ci.apache.org/projects/flink/flink-statefun-docs-master" target="_blank">Flink Stateful Functions Master (Latest Snapshot) <small><span class="glyphicon glyphicon-new-window"></span></small></a></li> |
| </ul> |
| </li> |
| |
| <!-- getting help --> |
| <li class="active"><a href="/zh/gettinghelp.html">获取帮助</a></li> |
| |
| <!-- Blog --> |
| <li><a href="/blog/"><b>Flink 博客</b></a></li> |
| |
| |
| <!-- Flink-packages --> |
| <li> |
| <a href="https://flink-packages.org" target="_blank">flink-packages.org <small><span class="glyphicon glyphicon-new-window"></span></small></a> |
| </li> |
| |
| |
| <!-- Third menu section aim to support community and contributors --> |
| |
| <!-- Community --> |
| <li><a href="/zh/community.html">社区 & 项目信息</a></li> |
| |
| <!-- Roadmap --> |
| <li><a href="/zh/roadmap.html">开发计划</a></li> |
| |
| <!-- Contribute --> |
| <li><a href="/zh/contributing/how-to-contribute.html">如何参与贡献</a></li> |
| |
| |
| <!-- GitHub --> |
| <li> |
| <a href="https://github.com/apache/flink" target="_blank">Flink on GitHub <small><span class="glyphicon glyphicon-new-window"></span></small></a> |
| </li> |
| |
| |
| |
| <!-- Language Switcher --> |
| <li> |
| |
| <a href="/gettinghelp.html">English</a> |
| |
| </li> |
| |
| </ul> |
| |
| <ul class="nav navbar-nav navbar-bottom"> |
| <hr /> |
| |
| <!-- Twitter --> |
| <li><a href="https://twitter.com/apacheflink" target="_blank">@ApacheFlink <small><span class="glyphicon glyphicon-new-window"></span></small></a></li> |
| |
| <!-- Visualizer --> |
| <li class=" hidden-md hidden-sm"><a href="/visualizer/" target="_blank">Plan Visualizer <small><span class="glyphicon glyphicon-new-window"></span></small></a></li> |
| |
| <hr /> |
| |
| <li><a href="https://apache.org" target="_blank">Apache Software Foundation <small><span class="glyphicon glyphicon-new-window"></span></small></a></li> |
| |
| <li> |
| <style> |
| .smalllinks:link { |
| display: inline-block !important; background: none; padding-top: 0px; padding-bottom: 0px; padding-right: 0px; min-width: 75px; |
| } |
| </style> |
| |
| <a class="smalllinks" href="https://www.apache.org/licenses/" target="_blank">License</a> <small><span class="glyphicon glyphicon-new-window"></span></small> |
| |
| <a class="smalllinks" href="https://www.apache.org/security/" target="_blank">Security</a> <small><span class="glyphicon glyphicon-new-window"></span></small> |
| |
| <a class="smalllinks" href="https://www.apache.org/foundation/sponsorship.html" target="_blank">Donate</a> <small><span class="glyphicon glyphicon-new-window"></span></small> |
| |
| <a class="smalllinks" href="https://www.apache.org/foundation/thanks.html" target="_blank">Thanks</a> <small><span class="glyphicon glyphicon-new-window"></span></small> |
| </li> |
| |
| </ul> |
| </div><!-- /.navbar-collapse --> |
| </nav> |
| |
| </div> |
| <div class="col-sm-9"> |
| <div class="row-fluid"> |
| <div class="col-sm-12"> |
| <h1>获取帮助</h1> |
| |
| <hr /> |
| |
| <div class="page-toc"> |
| <ul id="markdown-toc"> |
| <li><a href="#section" id="markdown-toc-section">有问题吗?</a> <ul> |
| <li><a href="#section-1" id="markdown-toc-section-1">用户邮件列表</a></li> |
| <li><a href="#stack-overflow" id="markdown-toc-stack-overflow">Stack Overflow</a></li> |
| </ul> |
| </li> |
| <li><a href="#bug" id="markdown-toc-bug">发现 Bug?</a></li> |
| <li><a href="#section-2" id="markdown-toc-section-2">收到错误信息?</a> <ul> |
| <li><a href="#notserializableexception-" id="markdown-toc-notserializableexception-">我有一个 NotSerializableException 异常。</a></li> |
| <li><a href="#scala-api" id="markdown-toc-scala-api">使用 Scala API,我收到有关隐式值和证据参数的错误。</a></li> |
| <li><a href="#classcastexception-x-cannot-be-cast-to-x" id="markdown-toc-classcastexception-x-cannot-be-cast-to-x">我看到一个 ClassCastException: X cannot be cast to X.</a></li> |
| <li><a href="#abstractmethoderror--nosuchfielderror-" id="markdown-toc-abstractmethoderror--nosuchfielderror-">我有一个 AbstractMethodError 或 NoSuchFieldError 错误。</a></li> |
| <li><a href="#datastream-" id="markdown-toc-datastream-">尽管事件正在持续发送,我的 DataStream 程序还是没有输出。</a></li> |
| <li><a href="#insufficient-number-of-network-buffers-" id="markdown-toc-insufficient-number-of-network-buffers-">我看到了一个 “Insufficient number of network buffers” 的异常报告。</a></li> |
| <li><a href="#job--hdfshadoop-" id="markdown-toc-job--hdfshadoop-">我的 Job 因为 HDFS/Hadoop 代码的各种异常失败了,我该怎么办?</a></li> |
| </ul> |
| </li> |
| </ul> |
| |
| </div> |
| |
| <h2 id="section">有问题吗?</h2> |
| |
| <p>Apache Flink 社区每天都会回答许多用户的问题。你可以从历史存档中搜索答案和建议,也可以联系社区寻求帮助和指导。</p> |
| |
| <h3 id="section-1">用户邮件列表</h3> |
| |
| <p>许多 Flink 用户、贡献者和提交者都订阅了 Flink 的用户邮件列表。用户邮件列表是一个寻求帮助的好地方。</p> |
| |
| <p>在发送邮件到邮件列表之前,你可以搜索以下网站的邮件列表存档,从中找到你关注问题的相关讨论。</p> |
| |
| <ul> |
| <li><a href="https://lists.apache.org/list.html?user@flink.apache.org">Apache Pony 邮件存档</a></li> |
| <li><a href="http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/">Nabble 存档</a></li> |
| </ul> |
| |
| <p>如果你想发送到邮件列表,你需要:</p> |
| |
| <ol> |
| <li>发送电子邮件至 <code>user-subscribe@flink.apache.org</code> 来订阅邮件列表</li> |
| <li>通过回复确认邮件来确认订阅</li> |
| <li>发送你的电子邮件到 <code>user@flink.apache.org</code></li> |
| </ol> |
| |
| <p>请注意,如果你没有订阅邮件列表,你将不会收到邮件的回复。</p> |
| |
| <h3 id="stack-overflow">Stack Overflow</h3> |
| |
| <p>Flink 社区的许多成员都活跃在 <a href="https://stackoverflow.com">Stack Overflow</a>。你可以在这里搜索问题和答案,或者使用 <a href="https://stackoverflow.com/questions/tagged/apache-flink">[apache-flink]</a> 标签来发布你的问题。</p> |
| |
| <h2 id="bug">发现 Bug?</h2> |
| |
| <p>如果你发现一个意外行为可能是由 Bug 导致的,你可以在 <a href="https://issues.apache.org/jira/issues/?jql=project %3D FLINK">Flink’s JIRA</a> 中搜索已经上报的 Bug 或者发布该 Bug。</p> |
| |
| <p>如果你不确定意外行为的发生是否由 Bug 引起的,请发送问题到 <a href="#user-mailing-list">用户邮件列表</a>。</p> |
| |
| <h2 id="section-2">收到错误信息?</h2> |
| |
| <p>找到导致错误的原因通常是比较困难的。在下文中,我们列出了最常见的错误消息并解释了如何处理它们。</p> |
| |
| <h3 id="notserializableexception-">我有一个 NotSerializableException 异常。</h3> |
| |
| <p>Flink 使用 Java 序列化来分发应用程序逻辑(你实现的函数和操作,以及程序配置等)的副本到并行的工作进程。 |
| 因此,传递给 API 的所有函数都必须是可序列化的,见 |
| <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html">java.io.Serializable</a> 定义。</p> |
| |
| <p>如果你使用的函数是匿名内部类,请考虑以下事项:</p> |
| |
| <ul> |
| <li>为函数构建独立的类或静态内部类。</li> |
| <li>使用 Java 8 lambda 函数。</li> |
| </ul> |
| |
| <p>如果函数已经是静态类,则在创建该类的实例时会检查该类的字段。其中很可能包含不可序列化类型的字段。</p> |
| |
| <ul> |
| <li>在 Java 中,使用 <code>RichFunction</code> 并且在 <code>open()</code> 方法中初始化有问题的字段。</li> |
| <li>在 Scala 中,你通常可以简单地使用 “lazy val” 声明来推迟初始化,直到分布式执行发生。这可能是一个较小的性能成本。你当然也可以在 Scala 中使用 <code>RichFunction</code>。</li> |
| </ul> |
| |
| <h3 id="scala-api">使用 Scala API,我收到有关隐式值和证据参数的错误。</h3> |
| |
| <p>此错误意味着无法提供类型信息的隐式值。确保在你的代码中存在 <code>import org.apache.flink.streaming.api.scala._</code> (DataStream API) 或 |
| <code>import org.apache.flink.api.scala._</code> (DataSet API) 语句。</p> |
| |
| <p>如果在接受泛型参数的函数或类中使用 Flink 操作,则必须为参数提供 TypeInformation 类型参数。 |
| 这可以通过使用上下文绑定来实现:</p> |
| |
| <div class="highlight"><pre><code class="language-scala"><span class="k">def</span> <span class="n">myFunction</span><span class="o">[</span><span class="kt">T:</span> <span class="kt">TypeInformation</span><span class="o">](</span><span class="n">input</span><span class="k">:</span> <span class="kt">DataSet</span><span class="o">[</span><span class="kt">T</span><span class="o">])</span><span class="k">:</span> <span class="kt">DataSet</span><span class="o">[</span><span class="kt">Seq</span><span class="o">[</span><span class="kt">T</span><span class="o">]]</span> <span class="k">=</span> <span class="o">{</span> |
| <span class="n">input</span><span class="o">.</span><span class="n">reduceGroup</span><span class="o">(</span> <span class="n">i</span> <span class="k">=></span> <span class="n">i</span><span class="o">.</span><span class="n">toSeq</span> <span class="o">)</span> |
| <span class="o">}</span></code></pre></div> |
| |
| <p>请参阅 <a href="https://ci.apache.org/projects/flink/flink-docs-master/dev/types_serialization.html">类型提取和序列化</a> 深入讨论 Flink 如何处理类型。</p> |
| |
| <h3 id="classcastexception-x-cannot-be-cast-to-x">我看到一个 ClassCastException: X cannot be cast to X.</h3> |
| |
| <p>当你看到 <code>com.foo.X</code> cannot be cast to <code>com.foo.X</code> ( 或者 cannot be assigned to <code>com.foo.X</code>) 样式的异常时,这意味着 <code>com.foo.X</code> 类的多个版本已经由不同的类加载器加载,并且尝试相互赋值。</p> |
| |
| <p>原因可能是:</p> |
| |
| <ul> |
| <li> |
| <p>通过 <code>child-first</code> 的类加载方式实现类复制。这是一种预期的机制,该机制允许用户使用相同依赖的不同版本。然而,如果这些类的不同副本在 Flink 的核心代码和用户应用程序代码之间移动,则可能发生这种异常。为了验证这个原因,请尝试在配置中设置 <code>classloader.resolve-order:parent-first</code>。如果这可以使错误消失,请写信到邮件列表以检查是否可能是 Bug。</p> |
| </li> |
| <li> |
| <p>从不同的执行中尝试缓存类,例如使用像 Guava 的 Interners 或 Avro 的 Schema 等通用工具进行缓存操作。尝试不使用 Interners,或减少 interner/cache 的使用范围,以确保每当新任务开始执行时都会创建新的缓存。</p> |
| </li> |
| </ul> |
| |
| <h3 id="abstractmethoderror--nosuchfielderror-">我有一个 AbstractMethodError 或 NoSuchFieldError 错误。</h3> |
| |
| <p>此类错误通常表示混淆了某些依赖的版本。这意味着在执行期间加载了不同版本的依赖项(库),而不是编译代码的版本。</p> |
| |
| <p>从 Flink 1.4.0 开始,在默认激活 <code>child-first</code> 类加载方式的情况下,相比 Flink core 所使用的依赖或类路径中的其他依赖(例如来自 Hadoop )而言,应用程序 JAR 文件中的依赖更可能带有不同的版本。</p> |
| |
| <p>如果你在 Flink 1.4 以上的版本中看到这些问题,则可能是属于以下某种情况:</p> |
| |
| <ul> |
| <li>你的程序代码中存在依赖项版本冲突,确保所有依赖项版本都一致。</li> |
| <li>你与一个 Flink 不能支持 <code>child-first</code> 类加载的库发生了冲突。目前会产生这种情况的有 Scala 标准库类、Flink 自己的类、日志 API 和所有的 Hadoop 核心类。</li> |
| </ul> |
| |
| <h3 id="datastream-">尽管事件正在持续发送,我的 DataStream 程序还是没有输出。</h3> |
| |
| <p>如果你的 DataStream 程序使用了 <em>事件时间</em>,那么请检查你的 Watermark 是否已经更新。如果没有产生 Watermark, |
| 事件时间窗口可能永远不会触发,程序将不会产生任何结果。</p> |
| |
| <p>你可以在 Flink 的 Web UI(Watermark 部分)中查看 Watermark 是否正在更新。</p> |
| |
| <h3 id="insufficient-number-of-network-buffers-">我看到了一个 “Insufficient number of network buffers” 的异常报告。</h3> |
| |
| <p>如果你用非常高的并行度运行 Flink 程序,则可能需要增加网络缓冲区的大小。</p> |
| |
| <p>默认情况下,Flink 占用 JVM 堆的 10% 作为网络缓冲区的大小,最小为64MB,最大为1GB。 |
| 你可以通过 <code>taskmanager.network.memory.fraction</code>、 <code>taskmanager.network.memory.min</code>和 |
| <code>taskmanager.network.memory.max</code> 参数调整这些值。</p> |
| |
| <p>详情请参考 <a href="https://ci.apache.org/projects/flink/flink-docs-master/ops/config.html#configuring-the-network-buffers">配置参考</a>。</p> |
| |
| <h3 id="job--hdfshadoop-">我的 Job 因为 HDFS/Hadoop 代码的各种异常失败了,我该怎么办?</h3> |
| |
| <p>最常见的原因是 Flink 的类路径中的 Hadoop 版本与你要访问的 Hadoop 集群(HDFS / YARN)版本不同。</p> |
| |
| <p>解决这个问题的最简单方法是选择一个不含 Hadoop 的 Flink 版本,并通过 export 的方式设置 Hadoop 路径和类路径即可。</p> |
| |
| |
| </div> |
| </div> |
| |
| </div> |
| </div> |
| |
| <hr /> |
| |
| <div class="row"> |
| <div class="footer text-center col-sm-12"> |
| <p>Copyright © 2014-2019 <a href="http://apache.org">The Apache Software Foundation</a>. All Rights Reserved.</p> |
| <p>Apache Flink, Flink®, Apache®, the squirrel logo, and the Apache feather logo are either registered trademarks or trademarks of The Apache Software Foundation.</p> |
| <p><a href="/privacy-policy.html">Privacy Policy</a> · <a href="/blog/feed.xml">RSS feed</a></p> |
| </div> |
| </div> |
| </div><!-- /.container --> |
| |
| <!-- Include all compiled plugins (below), or include individual files as needed --> |
| <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.matchHeight/0.7.0/jquery.matchHeight-min.js"></script> |
| <script src="/js/codetabs.js"></script> |
| <script src="/js/stickysidebar.js"></script> |
| |
| <!-- Google Analytics --> |
| <script> |
| (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ |
| (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), |
| m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) |
| })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); |
| |
| ga('create', 'UA-52545728-1', 'auto'); |
| ga('send', 'pageview'); |
| </script> |
| </body> |
| </html> |