java - Spark 上的 Alluxio 帧 size() 大于 max()

标签 java apache-spark thrift alluxio

我在使用 Spark 的 Alluxio 上遇到了一个奇怪的错误。我使用 Spark 从 Alluxio 读取了 20,000 个文件,并且它有效。但我用 Spark 从 Alluxio 读取了 40.000 个文件,但它不起作用。我使用Alluxio 1.2,Spark 1.6.0,并使用文件API读取数据:FileSystem fs = FileSystem.Factory.get(); AlluxioURI path = new AlluxioURI(/partition0); ...

16/08/19 16:08:40 INFO logger.type: Client registered with FileSystemMasterClient master @ master/127.0.0.1:19998
16/08/19 16:08:41 ERROR logger.type: Frame size (17277505) larger than max length (16777216)!
org.apache.thrift.transport.TTransportException: Frame size (17277505) larger than max length (16777216)!
        at org.apache.thrift.transport.TFramedTransport.readFrame(TFramedTransport.java:137)
        at org.apache.thrift.transport.TFramedTransport.read(TFramedTransport.java:101)
        at org.apache.thrift.transport.TTransport.readAll(TTransport.java:86)
        at org.apache.thrift.protocol.TBinaryProtocol.readAll(TBinaryProtocol.java:429)
        at org.apache.thrift.protocol.TBinaryProtocol.readI32(TBinaryProtocol.java:318)
        at org.apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.java:219)
        at org.apache.thrift.protocol.TProtocolDecorator.readMessageBegin(TProtocolDecorator.java:135)
        at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:69)
        at alluxio.thrift.FileSystemMasterClientService$Client.recv_listStatus(FileSystemMasterClientService.java:503)
        at alluxio.thrift.FileSystemMasterClientService$Client.listStatus(FileSystemMasterClientService.java:489)
        at alluxio.client.file.FileSystemMasterClient$8.call(FileSystemMasterClient.java:220)
        at alluxio.client.file.FileSystemMasterClient$8.call(FileSystemMasterClient.java:216)
        at alluxio.AbstractClient.retryRPC(AbstractClient.java:324)
        at alluxio.client.file.FileSystemMasterClient.listStatus(FileSystemMasterClient.java:216)
        at alluxio.client.file.BaseFileSystem.listStatus(BaseFileSystem.java:195)
        at alluxio.client.file.BaseFileSystem.listStatus(BaseFileSystem.java:186)
        at Main.main(Main.java:119)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731)
        at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
        at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Exception in thread "main" java.io.IOException: Failed after 32 retries.
        at alluxio.AbstractClient.retryRPC(AbstractClient.java:334)
        at alluxio.client.file.FileSystemMasterClient.listStatus(FileSystemMasterClient.java:216)
        at alluxio.client.file.BaseFileSystem.listStatus(BaseFileSystem.java:195)
        at alluxio.client.file.BaseFileSystem.listStatus(BaseFileSystem.java:186)
        at Main.main(Main.java:119)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731)
        at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
        at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

这不是 alluxio.security.authentication.type问题是因为我在本地运行 Alluxio 并且 Alluxio 主地址是正确的。我不明白为什么它不能处理 40.000 个文件,而可以处理 20.000 个文件。

我还修改了alluxio.network.thrift.frame.size.bytes.max但没有结果..

最佳答案

此问题可能由不同的可能原因引起:

  • 请仔细检查Alluxio master地址的端口是否正确。 Alluxio master 的默认监听端口是端口 19998,而导致此错误消息的常见错误是由于在 master 地址中使用了错误的端口(例如,使用端口 19999,这是 Alluxio master 的默认 Web UI 端口)。

  • 请确保Alluxio客户端和master的安全设置一致。 Alluxio通过配置alluxio.security.authentication.type提供了不同的方法来对用户进行身份验证。如果该属性在服务器和客户端之间配置了不同的值(例如,一个使用默认值 NOSASL,而另一个自定义为 SIMPLE),则会发生此错误。请阅读配置-设置了解如何自定义Alluxio集群和应用程序。

  • Apache-Spark 和 Alluxio 之间的配置。您必须更改 Spark 的 JVM 环境才能在 alluxio/conf/alluxio-site.properties 中使用 alluxio.network.thrift.frame.size.bytes.max 。为此,您必须在spark-env.sh中添加export SPARK_CLASSPATH=${ALLUXIO_HOME}/conf:${SPARK_CLASSPATH}或使用spark-submit命令添加 --driver-class-path pathAlluxio/conf

对我来说,这是第三种解决方案

关于java - Spark 上的 Alluxio 帧 size() 大于 max(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39041687/

相关文章:

java - 将集合中元素的类型传递给初始化 ArrayList (Java) 的函数?

scala - 有没有办法优化spark sql代码?

cross-platform - 有没有办法在不知道 thrift 类型的情况下将原始 byte[] 反序列化回 thrift 对象?

c++ thrift 客户端不使用 ssl(SSL_connect 挂起)

c++ - 在 Windows 中从 C++ 应用程序调用 Thrift

java - 我如何将值从 javascript 传递到 struts2 中的 java 类?

java - 如何将 JRebel 与 Mule ESB 集成?

apache-spark - 当数据量远大于Cluster可用内存时,Spark如何进行内存计算

java - Primefaces DataTable 内联编辑 - 不重新加载页面就无法更新模型

apache-spark - hadoop aws 版本兼容性