启动 Spark History Server 写入 minIO
Starting up Spark History Server to write to minIO
我正试图让 Spark History Server 到我集群上的 运行,即在 Kubernetes 上 运行ning,我希望将日志写入 minIO。我还使用 minIO 作为我的 spark-submit 作业的输入和输出的存储,它已经在工作了。
当前工作的 spark-submit 作业
我的 spark-submit 工作看起来像下面这样:
spark-submit \
--conf spark.hadoop.fs.s3a.access.key=XXXX \
--conf spark.hadoop.fs.s3a.secret.key=XXXX \
--conf spark.hadoop.fs.s3a.endpoint=https://someIpv4 \
--conf spark.hadoop.fs.s3a.connection.ssl.enabled=true \
--conf spark.hadoop.fs.s3a.path.style.access=true \
--conf spark.hadoop.fs.default.name="s3a:///" \
--conf spark.driver.extraJavaOptions="-Djavax.net.ssl.trustStore=XXXX -Djavax.net.ssl.trustStorePassword=XXXX \
--conf spark.executor.extraJavaOptions="-Djavax.net.ssl.trustStore=XXXX -Djavax.net.ssl.trustStorePassword=XXXX \
...
如您所见,我正在使用 SSL 连接到 minIO 和 read/write 个文件。
我在尝试什么
我正在尝试在不使用 SSL 的情况下使用 minIO 作为存储来启动历史服务器。
为了启动历史服务器,我使用已经存在的 start-history-server.sh 脚本和一些配置来使用 ./start-history-server.sh --properties-file my_conf_file
命令定义日志存储位置。 my_conf_file
看起来像这样:
spark.eventLog.enabled=true
spark.eventLog.dir=s3a://myBucket/spark-events
spark.history.fs.logDirectory=s3a://myBucket/spark-events
spark.hadoop.fs.s3a.access.key=XXXX
spark.hadoop.fs.s3a.secret.key=XXXX
spark.hadoop.fs.s3a.endpoint=http://someIpv4
spark.hadoop.fs.s3a.path.style.access=true
spark.hadoop.fs.s3a.connection.ssl.enabled=false
所以你看我没有添加任何 SSL 参数。但是当我 运行 ./start-history-server.sh --properties-file my_conf_file
时,我得到这个错误:
INFO AmazonHttpClient: Unable to execute HTTP request: Connection refused (Connection refused)
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:607)
at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:326)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:384)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:232)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3528)
at com.amazonaws.services.s3.AmazonS3Client.headBucket(AmazonS3Client.java:1031)
at com.amazonaws.services.s3.AmazonS3Client.doesBucketExist(AmazonS3Client.java:994)
at org.apache.hadoop.fs.s3a.S3AFileSystem.initialize(S3AFileSystem.java:297)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2669)
at org.apache.hadoop.fs.FileSystem.access0(FileSystem.java:94)
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2685)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373)
at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295)
at org.apache.spark.deploy.history.FsHistoryProvider.<init>(FsHistoryProvider.scala:117)
at org.apache.spark.deploy.history.FsHistoryProvider.<init>(FsHistoryProvider.scala:86)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.apache.spark.deploy.history.HistoryServer$.main(HistoryServer.scala:296)
at org.apache.spark.deploy.history.HistoryServer.main(HistoryServer.scala)
我在网上有什么tried/found
- This person 和我有一个非常相似的问题,但他们似乎使用
spark.hadoop.fs.s3a.path.style.access
解决了它,我已经在使用
- 我能够使用本地文件系统启动历史服务器,所以它似乎工作正常
- 我见过有人,like in this post,使用
spark.hadoop.fs.s3a.impl
键和 org.apache.hadoop.fs.s3a.S3AFileSystem
作为值。但是,当我这样做时,我的 AWS 罐子中似乎不存在这个 class。
- 我有以下 AWS 罐子供我使用:
aws-java-sdk-1.7.4.jar
和 hadoop-aws-2.7.3.jar
- 由于我的 spark-submit 作业 运行 正常,reading/writing 将文件发送到 minIO,并且我没有在其中提供
spark.hadoop.fs.s3a.impl
参数,我认为不需要参数?
有谁知道我应该在哪里looking/what我做错了吗?
我的问题是实际上我的 minIO 不接受 http 请求。我已经在工作的 spark 提交作业使用 https 使用 SSL,所以我将所需的参数添加到 $SPARK_DAEMON_JAVA_OPTS 并且它正在工作。
我正试图让 Spark History Server 到我集群上的 运行,即在 Kubernetes 上 运行ning,我希望将日志写入 minIO。我还使用 minIO 作为我的 spark-submit 作业的输入和输出的存储,它已经在工作了。
当前工作的 spark-submit 作业
我的 spark-submit 工作看起来像下面这样:
spark-submit \
--conf spark.hadoop.fs.s3a.access.key=XXXX \
--conf spark.hadoop.fs.s3a.secret.key=XXXX \
--conf spark.hadoop.fs.s3a.endpoint=https://someIpv4 \
--conf spark.hadoop.fs.s3a.connection.ssl.enabled=true \
--conf spark.hadoop.fs.s3a.path.style.access=true \
--conf spark.hadoop.fs.default.name="s3a:///" \
--conf spark.driver.extraJavaOptions="-Djavax.net.ssl.trustStore=XXXX -Djavax.net.ssl.trustStorePassword=XXXX \
--conf spark.executor.extraJavaOptions="-Djavax.net.ssl.trustStore=XXXX -Djavax.net.ssl.trustStorePassword=XXXX \
...
如您所见,我正在使用 SSL 连接到 minIO 和 read/write 个文件。
我在尝试什么
我正在尝试在不使用 SSL 的情况下使用 minIO 作为存储来启动历史服务器。
为了启动历史服务器,我使用已经存在的 start-history-server.sh 脚本和一些配置来使用 ./start-history-server.sh --properties-file my_conf_file
命令定义日志存储位置。 my_conf_file
看起来像这样:
spark.eventLog.enabled=true
spark.eventLog.dir=s3a://myBucket/spark-events
spark.history.fs.logDirectory=s3a://myBucket/spark-events
spark.hadoop.fs.s3a.access.key=XXXX
spark.hadoop.fs.s3a.secret.key=XXXX
spark.hadoop.fs.s3a.endpoint=http://someIpv4
spark.hadoop.fs.s3a.path.style.access=true
spark.hadoop.fs.s3a.connection.ssl.enabled=false
所以你看我没有添加任何 SSL 参数。但是当我 运行 ./start-history-server.sh --properties-file my_conf_file
时,我得到这个错误:
INFO AmazonHttpClient: Unable to execute HTTP request: Connection refused (Connection refused)
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:607)
at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:326)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:384)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:232)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3528)
at com.amazonaws.services.s3.AmazonS3Client.headBucket(AmazonS3Client.java:1031)
at com.amazonaws.services.s3.AmazonS3Client.doesBucketExist(AmazonS3Client.java:994)
at org.apache.hadoop.fs.s3a.S3AFileSystem.initialize(S3AFileSystem.java:297)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2669)
at org.apache.hadoop.fs.FileSystem.access0(FileSystem.java:94)
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2685)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373)
at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295)
at org.apache.spark.deploy.history.FsHistoryProvider.<init>(FsHistoryProvider.scala:117)
at org.apache.spark.deploy.history.FsHistoryProvider.<init>(FsHistoryProvider.scala:86)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.apache.spark.deploy.history.HistoryServer$.main(HistoryServer.scala:296)
at org.apache.spark.deploy.history.HistoryServer.main(HistoryServer.scala)
我在网上有什么tried/found
- This person 和我有一个非常相似的问题,但他们似乎使用
spark.hadoop.fs.s3a.path.style.access
解决了它,我已经在使用 - 我能够使用本地文件系统启动历史服务器,所以它似乎工作正常
- 我见过有人,like in this post,使用
spark.hadoop.fs.s3a.impl
键和org.apache.hadoop.fs.s3a.S3AFileSystem
作为值。但是,当我这样做时,我的 AWS 罐子中似乎不存在这个 class。- 我有以下 AWS 罐子供我使用:
aws-java-sdk-1.7.4.jar
和hadoop-aws-2.7.3.jar
- 由于我的 spark-submit 作业 运行 正常,reading/writing 将文件发送到 minIO,并且我没有在其中提供
spark.hadoop.fs.s3a.impl
参数,我认为不需要参数?
- 我有以下 AWS 罐子供我使用:
有谁知道我应该在哪里looking/what我做错了吗?
我的问题是实际上我的 minIO 不接受 http 请求。我已经在工作的 spark 提交作业使用 https 使用 SSL,所以我将所需的参数添加到 $SPARK_DAEMON_JAVA_OPTS 并且它正在工作。