spark-shell运行spark任务参数设置

本文详细解析了在使用Spark Shell执行小程序时遇到的资源分配错误,并提供了具体的解决方案,包括如何正确设置--executor-memory、--total-executor-cores和--executor-cores参数,以及如何在YARN上执行Spark Shell。

 

2016年09月23日 11:02:02 zrc199021 阅读数:12548

之前初学spark用spark-shell执行小程序的时候, 每次执行action操作(比如count,collect或者println),都会报错:

WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

同时如果去spark ui上(公司默认为ip:18080)会看到spark-shell为核数core为0: 
这里写图片描述

原因是启动spark-shell的时候没有给他分配资源, 所以我们应该在启动spark-shell的时候这么写:

/home/mr/spark/bin/spark-shell --executor-memory 4G \
                               --total-executor-cores 10 \ 
                               --executor-cores 1
  • 1
  • 2
  • 3

其中 :

--executor-memory 是指定每个executor(执行器)占用的内存 
--total-executor-cores是所有executor总共使用的cpu核数 
--executor-cores是每个executor使用的cpu核数 
对于spark-shell还可以在yarn上执行: 
--master yarn-client 
这里必须是client,不同于spark-submit的yarn-cluster, 因为spark-shell作为一个与用户交互的命令行,必须将Driver运行在本地,而不是yarn上, 其他的参数与submit一样.

以上参数就限制了总cpu核数为10, executor数目为10


但是, 每次执行都要写这么多参数显然很麻烦, 我们也可以通过修改spark-shell的方法将以上参数改成默认, 方法如下: 
spark-shell之前代码:

... ...
function main() {
...
else
    export SPARK_SUBMIT_OPTS
    "$FWDIR"/bin/spark-submit --class org.apache.spark.repl.Main "$@"
  fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

修改为:

... ...
function main() {
...
else
    export SPARK_SUBMIT_OPTS
    # CUN
    RESOURCE_OPTIONS="--executor-memory 1G --total-executor-cores 10 --executor-cores 1 "
    CMD_OPTIONS=$RESOURCE_OPTIONS$@
    echo "CMD_OPTIONS: " $CMD_OPTIONS
    "$FWDIR"/bin/spark-submit --class org.apache.spark.repl.Main --name "Spark shell" $CMD_OPTIONS
  fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

之后, 直接运行spark-shell即可

参考: http://www.2cto.com/kf/201511/450843.html

<think>好的,我现在需要解决Spark-shell运行时找不到MySQL驱动的问题,用户想知道如何添加驱动。首先,我应该回忆一下Spark的相关知识。记得Spark运行时需要依赖第三方jar包,比如数据库驱动。如果驱动不在classpath里,就会抛出ClassNotFoundException。 用户提到使用spark-shell,所以应该考虑如何在启动spark-shell时指定MySQL驱动的路径。常见的方法是通过--jars参数来添加jar包。比如spark-shell --jars /path/to/mysql-connector-java.jar。这样应该能正确加载驱动。 另外,还有可能用户的环境变量或者Spark配置中没有正确设置。比如,是否将驱动包放在Spark的jars目录下?或者是否在spark-defaults.conf中配置了spark.driver.extraClassPath和spark.executor.extraClassPath?这些也是需要考虑的选项。 还需要确认用户使用的MySQL驱动版本是否与MySQL服务器版本兼容。比如,用户引用中提到的MySQL8.0.23,这时候应该使用对应版本的MySQL Connector/J,比如8.0.x版本的驱动,否则可能会有兼容性问题。 还有可能用户在代码中没有正确指定驱动类名,比如在JDBC连接时应该用"com.mysql.cj.jdbc.Driver"而不是旧的"com.mysql.jdbc.Driver",特别是对于MySQL8以上的版本。 此外,用户提供的引用里提到Hadoop、Spark、Java等的版本对应关系很重要,需要确认驱动是否与这些版本兼容。比如Spark 2.4.5是否支持MySQL 8.0的驱动,可能需要检查官方文档或社区有没有已知的问题。 总结下来,解决办法可能包括: 1. 使用--jars参数直接指定驱动路径。 2. 将驱动jar包放入Spark的jars目录。 3. 配置spark-defaults.conf中的相关classpath设置。 4. 确保驱动版本与MySQL版本匹配。 5. 代码中正确使用驱动类名。 现在需要将这些步骤详细整理,并确保用户能一步步操作。同时要注意用户可能遇到的常见错误,比如路径错误、版本不匹配等,给出相应的提示。此外,引用用户提供的版本信息,确保建议的驱动版本与他们的环境一致,比如引用中提到的MySQL8.0.23,所以推荐使用8.0.x的驱动。</think>### 解决Spark-shell运行时找不到MySQL驱动的方法 当在Spark-shell中操作MySQL时,若出现`ClassNotFoundException`,通常是因为未正确加载MySQL驱动jar包。以下是逐步解决方法: --- #### **方法1:通过`--jars`参数指定驱动路径** 在启动`spark-shell`时,直接通过`--jars`参数添加MySQL驱动的本地路径。例如: ```bash spark-shell --jars /path/to/mysql-connector-java-8.0.23.jar ``` - **说明**:将`/path/to/`替换为实际驱动文件的路径,驱动版本需与MySQL服务器版本匹配(如MySQL 8.0.23对应`mysql-connector-java-8.0.23.jar`)[^1]。 --- #### **方法2:将驱动放入Spark的`jars`目录** 将MySQL驱动jar包复制到Spark安装目录的`jars/`子目录中: ```bash cp mysql-connector-java-8.0.23.jar $SPARK_HOME/jars/ ``` - **说明**:此方法对所有Spark任务生效,无需每次手动指定路径。 --- #### **方法3:修改Spark配置文件** 在`spark-defaults.conf`中添加以下配置: ```properties spark.driver.extraClassPath /path/to/mysql-connector-java-8.0.23.jar spark.executor.extraClassPath /path/to/mysql-connector-java-8.0.23.jar ``` - **说明**:需重启Spark服务使配置生效。 --- #### **验证是否生效** 在Spark-shell中执行以下代码测试驱动是否加载成功: ```scala Class.forName("com.mysql.cj.jdbc.Driver") // MySQL 8+驱动类名 ``` - 若无报错,则驱动加载成功。 - 若使用旧版本驱动(如MySQL 5.x),驱动类名为`com.mysql.jdbc.Driver`。 --- #### **注意事项** 1. **版本兼容性**:确保驱动版本与MySQL服务器版本一致。例如,MySQL 8.0.23需使用`mysql-connector-java-8.0.23.jar`。 2. **JDBC URL格式**:MySQL 8+需在连接URL中添加时区参数,例如: ```scala val url = "jdbc:mysql://localhost:3306/db?serverTimezone=UTC" ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值