1.java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
报错信息描述: 出现这个问题并不妨碍程序继续运行。
原因: HiveContext的创建依赖于本地的hadoop库。
Exception具体问题 问题行
解决:
这边的null其实是环境变量HADOOP_HOME,也就是依赖于HADOOP_HOME/bin/winutils.exe
这个文件。
可以参考: https://blog.csdn.net/love666666shen/article/details/78812622
2.Task is not serializable.
任务不可序列化。
原因: 一般是随意使用Function外的变量,例如JavaSparkContext等。因为完整main的代码在Driver中执行,而计算分片代码在Spark的worker节点执行,因此最好只保证算子数据的传递只有RDD或者DStream.
3.HiveContext报空指针
在Windows本地调试,用HiveContext报空指针。
这个问题就需要本地的一个测试工具winutils.exe。
因此 问题3 == 问题1.具体问题可以参照问题1解决。
参考: https://blog.csdn.net/u011817217/article/details/86593706
如果出现按以上方法依然无法解决或者还存在其他问题,可以直接把hive-site.xml扔到resources目录,访问虚拟机中的hive.
如上图解决方法 注意窗口操作在SPARK<=1.6时,只支持HiveContext,不支持SQLContext
4.ROW_NUMBER() OVER ( PARTITION BY ... ORDER BY ... )
select province,aid,clickCount from (select
date,province,aid,clickCount,ROW_NUMBER() OVER (
PARTITION BY province ORDER BY click_count DESC) as rank
from tmp_date_city_aid_clickCount ) as twhere rank <= 10
异常的语法错误
问题操作
原因:
https://www.e-learn.cn/content/wangluowenzhang/422390
Spark >= 2.0 时,HiveContext/SQLContext都支持窗口操作。
Spark <= 1.6 时,只有HiveContext 支持窗口操作。
解决:
我使用的版本为1.6,SQLContext,因此导致了这个问题。因此必须使用HiveContext方能够解决。
5.SQLContext注册临时表的目录无法删除
ERROR ShutdownHookManager: Exception while deleting Spark temp dir
这是个BUG: [SPAKR-8333] HiveContext创建的临时目录无法删除。可见任何软件都有一定的问题和缺陷,需要我们不断完善,为世界代码业做贡献。
https://issues.apache.org/jira/browse/SPARK-8333?attachmentSortBy=dateTime
6.HiveContext : java.lang.RuntimeException: java.lang.RuntimeException: The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: ---------
当指定hive-site.xml时,会使用线上的HDFS集群存储本临时文件,因此需要在resource下放入hdfs的配置文件,还需要将hadoop上/tmp/hive/目录创建并赋好权限。
image.png7.部署问题 Exception in thread "main" java.lang.SecurityException: class "javax.servlet.FilterRegistration"'s signer information does not match signer information of other classes in the same package
image.png原因: javax.servlet.FilterRegistration 在多个包中重复产生,导致冲突。
一般为这个依赖所致:
<!-- hadoop相关 -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.4.1</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
解决就是加上如上的:
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
8.HiveContext连接元数据库mysql时连接数过多的问题,我测试了一下,发现在DStream的Function中使用DataFrame进行sql查询时候,不断产生于hive元数据所在的mysql的连接。导致抛出“too many connections"异常。
连接数上限为150.png看来默认的mysql的最大连接数max_connections=150,我修改/etc/my.cnf中max_connections为1000.观察这种连接上涨是否有上限。
image.png
重启mysqld:
image.png
网友评论