关于spark的参数
Spark provides three locations to configure the system
=> 1. Spark properties control most application parameters and can be set by using a SparkConf object, or through Java system properties.
每一个spark程序都由 sparkConf 对象来构建的, 此 sparkConf 就是存储各种参数的map集合; 或者通过 Java 系统属性来设置
=> 2. Environment variables can be used to set per-machine settings, such as the IP address, through the conf/spark-env.sh script on each node.
环境变量 可用于在每个节点上通过 conf/spark-env.sh 脚本来设置每台机器设置
=> 3. Logging can be configured through log4j.properties.
Logging 可以通过 log4j.properties 来设置
如何构建 sparkConf 对象
sparkConf 对象可以从3个位置接收参数数据(优先级由低到高): spark-defaults.conf 文件, spark-submit 或 spark-shell 命令行上的参数设置, 代码中设置的参数;
=> 命令行设置: spark-submi --master local[4] --conf spark.eventLog.enabled=false
=> 代码中设置: new SparkConf().setMaster("local[2]").setAppName("CountingSheep")
查看 spark-submit --help
这个自己百度 :)
如何解决Spark程序第三方jar包依赖
=>第一种方式: 第三方jar包体积比较小,可以直接打包分发到各个节点上去;
注: 将第三方jar直接打包到最终形成的spark应用程序jar文件中, 最终生成的jar包大小最好别超过80M;
操作: 在maven的pom文件中, 将需要打包的jar设置为<scope>compile</scope>, 同时构建好builder;
=>第二种方式: 从集群中各节点本地加载jar包, 需要在spark-submit 命令行中设置--jars参数;
注: 此方式要求本地此路径下必须要有对应的jar包;
操作: bin/spark-shell --jars /directoryA/directoryB/mysql-connector-java-5.1.27-bin.jar
=>第三种方式: 通过本地maven仓库加载jar包;
注: 此方式会通过maven软件去加载jar包, 默认优先在本地仓库查找,如果没有可以联网获取
操作: bin/spark-shell --packages mysql:mysql-connector-java:5.1.27
注: maven中要定位jar包需要groupId,artifactId,version三个参数, 所以packages参数的写法是将这三个参数用 : 连接起来;
=>第四种方式: 修改SPARK_CLASSPATH环境变量
注: 此方式是第二种方式的增强版, 就是增加了spark程序加载jar包目录; 适用于依赖的jar包特别多,将所有的第三方引用的jar包统一存放到此目录下; 同时要保证每个节点都要如此设置spark参数, 并且每个节点要确实有此目录和jar文件;
操作: 修改Spark配置信息, vim conf/spark-env.sh, 修改内容:SPARK_CLASSPATH = $SPARK_CLASSPATH:externalClassPath
注: 推荐使用这种方式!!!