spark开发中遇到的一些问题及解决方法总结
在主线程中抛出的异常 java.lang.NoSuchMethodError: 在集合操作中缺少一个方法调用。解决方案:替代为升级到 Scala 2.10 版本
在本地运行SAPRK程序时会遇到如下错误:尝试定位Hadoop二进制路径中的winutils二进制时遇到了Java IO异常:无法找到null\bin\winutils.exe。
解决方法:
- 从可靠的来源下载包含winutils.exe的Hadoop包:
https://www.barik.net/archive/2015/01/19/172716/ - 按照指引完成解压操作
- 配置HADOOP_HOME环境变量:将以下路径配置为系统环境变量:
HADOOP_HOME=E:\1-work\hadoop-2.6.0 - 将系统Path变量添加到$HADOOP_HOME/bin,并将该目录包含在系统路径中。
- 重新启动计算机
在本地环境中设置Spark应用使用Log4J的日志级别
log4j.appender.file.disable=true
log4j.appender.file.setlayout(org.apache.log4j.PatternLayout)
log4j/appender/file/layout/conversionpattern=%d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: %m/n
#Ignore log entries below warning level from Jetty, as the log file is slightly verbose
log4j.logger.org.eclipse.jetty=ERROR
org.eclipse jetty.level=ERROR
spark 在 yarn 环境下的提交配置
提交任务使用Yarn集群进行配置
Yarn集群模式
通过spark-submit启动Yarn集群
指定类路径为com.fangdd.daas.hbase.Hdfs2HBaseTable
设置总执行器核心数为16
分配每个执行器内存为4GB
配置默认并行度为16
指定driver内存为2GB
jar文件路径为/root/hfile/hbase-data-service-2.0-SNAPSHOT-jar-with-dependencies.jar
启动参数包括:
debugFlag, renameFlag, hdfsPath, zkQuorum,
hbaseMaster, hbaseZnode, partitions,
writeBufferSize, tgtTableName, tmpTableName,
repartitionNum等关键配置项。
为了方便本地连接Hive库并实现跨库数据访问功能,在Spark环境中需要对hive-site.xml进行适当配置以完成连接操作。
具体来说
解决方案
示例
<resources>
<resource>
<directory>src/main/resources/${package.environment}</directory>
</resource>
<resource>
<directory>src/main/resources/</directory>
</resource>
</resources>
val spark = SparkSession.builder().configuration(rdd.sparkContext.getConfiguration).enableHiveSupport().create();
如果再不行,则在idea中用maven clean一下,能解决
6.idea spark本地连hive报如下问题
7. 在Spark开发过程中,在map等运算符中的print操作无法正常显示结果 由于Spark采用了延迟计算机制的特点,在执行完map运算后必须追加相应的action(如collect)以启动数据的计算与处理流程
本地Windows系统运行Spark JAR报错:'no filesystem for scheme hdfs'
<property>
<name>fs.hdfs.impl</name>
<value>org.apache.hadoop.hdfs.DistributedFileSystem</value>
<description>The FileSystem for hdfs: uris.</description>
</property>
刷新工程,重新运行程序,问题完美解决。
在本地Windows系统上运行Spark应用时使用JAR文件(Spark JARs)进行操作会遇到问题,在执行过程中报错于主线程(main thread),提示未能找到MySQL JDBC数据源配置错误:未发现所需的 JDBC 数据库连接信息。请参考以下链接获取所需JAR包:http://spark.apache.org/third-party-projects.html
pom文件添加
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
def getMysqlJdbcDF(spark: SparkSession, url: String, querySql: String, userName: String, passWord: String): DataFrame = {
var readConnProperties4 = Properties()
readConnProperties4.setProperty("driver", "com.mysql.jdbc.Driver")
readConnProperties4.setProperty("user", userName)
readConnProperties4.setProperty("password", passWord)
readConnProperties4.setProperty("fetchsize", "3")
spark.read.jdbc(
url,
s"($querySql) t",
readConnProperties4
)
}
