相关疑难解决方法(0)

Spark submit会自动将jar上传到集群吗?

我正在尝试从本地计算机终端向我的群集提交Spark应用程序.我正在使用--master yarn-cluster.我也需要在我的集群上运行驱动程序,而不是在我提交应用程序的机器上运行,即我的本地机器

当我提供本地机器中应用程序jar的路径时,spark-submit会自动将其上传到我的群集吗?

我正在使用

    bin/spark-submit 
--class com.my.application.XApp 
--master yarn-cluster --executor-memory 100m 
--num-executors 50 /Users/nish1013/proj1/target/x-service-1.0.0-201512141101-assembly.jar 
1000
Run Code Online (Sandbox Code Playgroud)

并得到错误

Diagnostics: java.io.FileNotFoundException: File file:/Users/nish1013/proj1/target/x-service-1.0.0-201512141101- does not exist
Run Code Online (Sandbox Code Playgroud)

在文档中,http://spark.apache.org/docs/latest/submitting-applications.html#launching-applications-with-spark-submit

高级依赖关系管理 使用spark-submit时,应用程序jar以及--jars选项中包含的任何jar都将自动传输到群集.

但似乎没有!

apache-spark

18
推荐指数
2
解决办法
2万
查看次数

Spark是否允许为DynamoDB使用Amazon Assumed Role和STS临时凭证?

我需要使用Java使用Spark从DynamoDB表中获取数据.它与用户的访问密钥和密钥一起正常工作:

final JobConf jobConf = new JobConf(sc.hadoopConfiguration());
jobConf.set("dynamodb.servicename", "dynamodb");
jobConf.set("dynamodb.input.tableName", tableName);
jobConf.set("mapred.output.format.class", "org.apache.hadoop.dynamodb.write.DynamoDBOutputFormat");
jobConf.set("mapred.input.format.class", "org.apache.hadoop.dynamodb.read.DynamoDBInputFormat");
jobConf.set("dynamodb.awsAccessKeyId",  accessKey);
jobConf.set("dynamodb.awsSecretAccessKey", secretKey);
jobConf.set("dynamodb.endpoint", endpoint);
Run Code Online (Sandbox Code Playgroud)

我需要使用AWS假定角色和STS(至少出于安全原因)使用spark从DynamoDB中获取数据.可能吗?我发现,有可能使用假定角色访问AWS S3火花(https://issues.apache.org/jira/browse/HADOOP-12537,https://hadoop.apache.org/docs/current3/hadoop- aws/tools/hadoop-aws/index.html),但没有找到类似DynamoDB的想法.

为了接收STS临时凭证,我使用以下代码:

AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.defaultClient();
AssumeRoleRequest assumeRequest = new AssumeRoleRequest()
        .withRoleArn(roleArn)  // arn:aws:iam::XXXXXXX:role/assume-role-DynamoDB-ReadOnly
        .withDurationSeconds(3600)
        .withRoleSessionName("assumed-role-session");
AssumeRoleResult assumeResult = stsClient.assumeRole(assumeRequest);
Credentials credentials = assumeResult.getCredentials();
Run Code Online (Sandbox Code Playgroud)

调用credentials.getAccessKeyId(), credentials.getSecretAccessKey() and credentials.getSessionToken()返回生成的临时凭证.有了这些凭据,我成功地可以使用java aws sdk AmazonDynamoDBClient(非火花方法)从DynamoDB获取数据.

火花有可能吗?spark是否允许使用以下内容: jobConf.set("dynamodb.awsSessionToken”, sessionToken)

java hadoop amazon-dynamodb apache-spark aws-sdk

10
推荐指数
1
解决办法
1866
查看次数

如何理解spark --jars、extraClassPath和extraLibraryPath的关系和使用?

首先,我也见过类似的问题。另一个问题链接 但我认为它的答案不是很清楚。

\n\n

我的一些问题如下\xef\xbc\x9a

\n\n

\xef\xbc\x881\xef\xbc\x89 --jars 参数 与spark.executor.extraClassPath 参数相同,如果不同,有什么区别?

\n\n

我检查了spark-submit命令行中的--jars上的--help,解释如下:

\n\n
 Comma-separated list of local jars to include on the driver\n                          and executor classpaths.\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,我在spark-submit命令行中没有找到spark.executor.extraClassPath的解释。最后在spark官网找到了如下关于spark.executor.extraClassPath的解释:

\n\n
Extra classpath entries to prepend to the classpath of executors. \n
Run Code Online (Sandbox Code Playgroud)\n\n

从两个\xef\xbc\x9f的解释来看貌似效果一样

\n\n

但我从另一个问题链接中看到以下段落:

\n\n
\n

--jars 与 SparkContext.addJar:这些是相同的,只有一个是通过 Spark 提交设置的,另一个是通过代码设置的。选择更适合您的一款。需要注意的一件重要事情是,使用这两个选项中的任何一个都不会将 JAR 添加到驱动程序/执行程序类路径中,您需要使用这两个选项上的 extraClassPath 配置显式添加它们。

\n
\n\n

怎么又这样了?

\n\n

\xef\xbc\x882\xef\xbc\x89spark.executor.extraClassPath 和spark.executor.extraLibraryPath,与spark.driver.extraXXXXpath 相同,前缀相同\xe3\x80\x82

\n\n

extraClassPath 和 extraLibraryPath 有什么区别?

\n\n

Spark.executor.extraLibraryPath的解释来自spark官网\xe3\x80\x82

\n\n
Set a special library path to use when launching …
Run Code Online (Sandbox Code Playgroud)

classpath apache-spark

6
推荐指数
0
解决办法
442
查看次数

何时使用SPARK_CLASSPATH或SparkContext.addJar

我正在使用一个独立的火花群,一个主人和两个工人.我真的不明白如何明智地使用SPARK_CLASSPATH或SparkContext.addJar.我试过两个,看起来addJar不像以前那样工作.

在我的情况下,我试图在闭包或外面使用一些joda-time函数.如果我使用joda-time jar的路径设置SPARK_CLASSPATH,一切正常.但是,如果我删除SPARK_CLASSPATH并添加我的程序:

JavaSparkContext sc = new JavaSparkContext("spark://localhost:7077", "name", "path-to-spark-home", "path-to-the-job-jar");
sc.addJar("path-to-joda-jar");
Run Code Online (Sandbox Code Playgroud)

它不再起作用,虽然在日志中我可以看到:

14/03/17 15:32:57 INFO SparkContext: Added JAR /home/hduser/projects/joda-time-2.1.jar at http://127.0.0.1:46388/jars/joda-time-2.1.jar with timestamp 1395066777041
Run Code Online (Sandbox Code Playgroud)

并且立即:

Caused by: java.lang.NoClassDefFoundError: org/joda/time/DateTime
    at com.xxx.sparkjava1.SimpleApp.main(SimpleApp.java:57)
    ... 6 more
Caused by: java.lang.ClassNotFoundException: org.joda.time.DateTime
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
Run Code Online (Sandbox Code Playgroud)

我以前认为SPARK_CLASSPATH正在为作业的驱动程序部分设置类路径,而SparkContext.addJar正在设置执行程序的类路径,但它似乎不再正确.

谁知道比我更好?

apache-spark

5
推荐指数
1
解决办法
1万
查看次数

如何使用 *local* 包运行 spark shell?

此处的页面 ( http://spark.apache.org/docs/latest/programming-guide.html ) 指示通过以下方式启动 shell 时可以包含包:

$SPARK_HOME/bin/spark-shell --packages com.databricks:spark-csv_2.11:1.4.0
Run Code Online (Sandbox Code Playgroud)

包含本地包(手动下载的包)的语法是什么?与Maven坐标有关吗?

packages maven apache-spark

5
推荐指数
1
解决办法
8699
查看次数

从本地 spark 实例读取 google storage gs:// 文件系统

问题很简单:您有一个本地 spark 实例(集群或只是在本地模式下运行它)并且您想从 gs:// 读取

google-cloud-storage apache-spark google-cloud-platform

4
推荐指数
2
解决办法
9163
查看次数

SparkContext.addJar 在本地模式下不起作用

当spark作业中需要有jar文件时,需要通过两种方式添加到spark作业中:
1.--jar path命令中的选项。
2 SparkContext.addJar("path")..
谁能告诉我这两种方式之间的区别?
这个问题来看,答案是它们是相同的,只是优先级不同,但我认为这不是真的。--jars如果我在纱线集群模式下提交 Spark 作业,根据官方网站,如果命令中的选项中未包含 jar 文件,则 addJar() 将无法工作。

如果您将 SparkContext.addJar 函数与本地文件一起使用并在纱线集群模式下运行,则 --jars 选项允许 SparkContext.addJar 函数工作。如果您将其与 HDFS、HTTP、HTTPS 或 FTP 文件一起使用,则不需要使用它。

原因是驱动程序与客户端运行在不同的机器上。因此,--jars命令中的选项似乎来自客户端,而函数addJar()只能在驱动程序中的 jar 上工作。

然后我在本地模式下进行了测试。

1.spark-shell --master local --jars path/to/jar

如果我以这种方式启动spark-shell,则jar中的对象可以在spark-shell中使用

2.spark-shell --master local

如果我以这种方式启动spark-shell并使用sc.addJar("path/to/jar"),则jar文件中的对象无法导入到spark-shell中,并且出现class cannot be found错误。

我的问题是:

为什么该方法SparkContext.addJar()在本地模式下不起作用?

SparkContext.addJar()和 和有什么区别--jars

我的环境:hortonworks 2.5集群,spark版本是1.6.2。如果有人能对此有所了解,我将不胜感激。

apache-spark

3
推荐指数
1
解决办法
3311
查看次数

Spark提交---packages vs --jars

有人可以解释--packages--jars提交火花脚本之间的区别吗?

nohup ./bin/spark-submit   --jars ./xxx/extrajars/stanford-corenlp-3.8.0.jar,./xxx/extrajars/stanford-parser-3.8.0.jar \
--packages datastax:spark-cassandra-connector_2.11:2.0.7 \
--class xxx.mlserver.Application \
--conf spark.cassandra.connection.host=192.168.0.33 \
--conf spark.cores.max=4 \
--master spark://192.168.0.141:7077  ./xxx/xxxanalysis-mlserver-0.1.0.jar   1000  > ./logs/nohup.out &
Run Code Online (Sandbox Code Playgroud)

另外,--packages如果依赖关系在我的应用程序中,我是否需要配置pom.xml?(我问是因为我只是通过更改版本来炸毁我的应用程序,--packages而忘记了在中对其进行更改pom.xml

我正在使用--jars当前版本,因为jar很大(超过100GB),因此减慢了有阴影的jar的编译速度。我承认我不确定为什么要使用--packages其他软件,因为我正在遵循datastax文档

java scala cassandra apache-spark

3
推荐指数
1
解决办法
5347
查看次数