工作中遇到问题以及解决方法
Jdbc连接数据库表名称低级错误
- 先检查写入的数据类型与表中栏位类型是否一致
- 上面如果一致仍然还有报错的话,这时候检查的是代码中的sql语句
可以发现表名称的后面有小数点和“--”符号,这样子也会导致出现这样子的错误。
Azkaban的执行缺陷
由于Azkaban中的每个job都是一个进程,在Azkaban中判断job成功与否是根据这个进程是否成功执行完成,但是在MR 或者Spark Job执行的过程中,如果代码出错,运行在集群上的任务会停止,并不会有内容写入目标文件中,此时返回给Azkaban的进程是执行成功的,也就是job节点执行成功。这与任务执行的结果相悖。
例如:
在执行某个jar包的过程中时,出现了NullPointException,此时MR作业停止,但是最终Process 显示的为执行成功。并且节点最终执行的结果也为成功:
所以为了防止依赖的节点出现错误,其以下节点仍可运行的情况。需要换一个校验job是否正确执行的维度进行评判,比如检测MR 或者 Spark 任务的log文件是否正确执行等,或者检测集群中的任务是否执行成功。
总结:在执行结束后可以返回hdfs中查询是否有对应的文件生成,如果有则表示成功,没有则表示失败。
Spark 集群模式下全局变量使用情况:
刚开始定义了一个全局变量:
然后在main函数下面重新赋值全局变量的时候出现集群获取不到新赋值的变量。
集群打印日志显示的hbase值依然是 null
修改方法:在main函数中直接定义该常量,就可以接收到新赋值了。
Es创建index的时候:
Index长度问题。先前index = std_new_positiontypeAndposition然而一直创建失败不成功,然后就修改成上述就成功了。
读取hbase表中的数据时候遇到某些数据异常问题:
Hive外部表映射出来的数据看起来也是很正常的数据,但一部数据通过代码没有办法做处理,代码没有问题,最后发现hbase表中的数据异常,数据中存在某些特殊字符(例如:制表符或者空格)肉眼看不到。
关于相同汉字字符串在编码中比较是否相同的时候出现unicode转换数不一样的情况解决:
例如:作为 \u4f5c\u4e3a
\ufeff\u4f5c\u4e3a
相同的汉字“作为“但是unicode不一样导致编码比较出现差异。通过notepad打开源文件然后转换格式为utf-8无BOM的格式即可解决
Spark submit shell命令中的核数跟执行内存的调节:
一个原则,你能使用的资源有多大,就尽量去调节到最大的大小(executor内存;executor cpu core)
增加了内存量以后,对性能的提升,有三点:
1、如果需要对RDD进行cache,那么更多的内存,就可以缓存更多的数据,将更少的数据写入磁盘,
甚至不写入磁盘。减少了磁盘IO。
2、对于shuffle操作,reduce端,会需要内存来存放拉取的数据并进行聚合。如果内存不够,也会写入磁盘。如果给executor分配更多内存以后,就有更少的数据,需要写入磁盘,甚至不需要写入磁盘。减少了磁盘IO,提升了性能。
3、对于task的执行,可能会创建很多对象。如果内存比较小,可能会频繁导致JVM堆内存满了,
然后频繁GC,垃圾回收,minor GC和full GC。(速度很慢)。内存加大以后,带来更少的GC,垃圾回收,
避免了速度变慢,性能提升。
问题一:eclipse的maven工程在构建的时候报了source 7 或更高版本来支持diamon的运算符。
解决方法:在pom.xml中添加
Spark:java.net.BindException: Address already in use: Service 'SparkUI' failed after 16 retries!
错误原因:
每一个Spark任务都会占用一个SparkUI端口,默认为4040,如果被占用则依次递增端口重试。但是有个默认重试次数,为16次。16次重试都失败后,会放弃该任务的运行。
解决方法
初始化SparkConf时,添加conf.set(“spark.port.maxRetries”,“100”)语句
使用spark-submit提交任务时,在命令行中添加-Dspark.port.maxRetries=100
在spark-defaults.conf中添加spark.port.maxRetries 100
SparkStreaming读取Kakfa数据时发生OffsetOutOfRangeException异常
解决方案:Kafka consumer中设置fetch.message.max.bytes为大一点的内存
比如设置为50M:1024*1024*50
fetch.message.max.bytes=52428800
解决方法:
在程序中给Configuration做以下设置:
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem")
git提交的时候 this exceeds file size limit of 100.0 MB
Github只允许上传最大100MB的文件,如果超过,则会被server reject
则需:
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch target/lib/spark-assembly-1.6.1-cdh5.3.2-hadoop2.5.0-cdh5.3.2.jar" --prune-empty --tag-name-filter cat -- --all
git commit --amend -CHEAD
git push origin master
Maven build的java普通工程的jar包想在linux上面使用shell命令运行jar包的方法:
第一种方法:shell命令执行
例如:
Nohup java -cp /home/hadoop/azkaban/testjobforshenzhonghu/patternToRedis/pattern/lib/commons-pool2-2.4.2.jar:/home/hadoop/azkaban/testjobforshenzhonghu/patternToRedis/pattern/lib/junit-3.8.1.jar:/home/hadoop/azkaban/testjobforshenzhonghu/patternToRedis/pattern/lib/jedis-2.9.0.jar:/home/hadoop/azkaban/testjobforshenzhonghu/patternToRedis/pattern/lib/cn.com.cennavi-0.0.1-SNAPSHOT_beijing.jar cn.com.cennavi.java.WriteRedis_beijing >beijing.log &
Java -cp 依赖的jar1:依赖的jar2:.....:工程jar包 主函数名 linux系统用:分割,windows用;
第二种方法;修改pom.xml文件,使其build的时候可以把主函数告知到jar中
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifestEntries>
<Class-Path>spark-assembly-1.6.1-hadoop2.5.0-cdh5.3.2.jar scala-reflect-2.10.3.jar</Class-Path>
</manifestEntries>
<manifest>
<addClasspath>true</addClasspath>
<!--<classpathPrefix>lib</classpathPrefix>--> <!--前缀,例如配置lib,则MANIFEST中Class-Path: lib/scala-library-2.10.4.jar-->
<mainClass>cn.com.cennavi.java.WriteRedis_liuzhou</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
Job aborted due to stage failure: Task serialization failed: java.lang.StackOverflowError
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1506)
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1429)
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1175)
java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1375)
这种错误报出是代码当中内存溢出原因导致的,检查代码中使用内存的步骤,进行修改,当时报这个错误的原因是:
是这个原因,计算半个月的hdfs数据不报错,但是计算一个月的数据的时候这个union操作就会使用的内存超过自己的配置就出现了这个错误。当时解决方法就是控制每次计算半个月的数据或者更低的数据。
Exception in thread "Thread-0" java.lang.RuntimeException: Job HistoryCntfToLocal does not have cancel method cancel
24-10-2018 14:18:30 CST HistoryCntfToLocal ERROR - at azkaban.jobtype.JavaJobRunnerMain.cancelJob(JavaJobRunnerMain.java:249)
24-10-2018 14:18:30 CST HistoryCntfToLocal ERROR - at azkaban.jobtype.JavaJobRunnerMain$1.run(JavaJobRunnerMain.java:78)
解决方法:(1)缺少jar包,把与这个工程相类似的工程使用到的jar包全部导入到该工程下面进行引用。完美解决,但是还是不知道缺少了什么jar包。
- 检查读取的配置文件(比如 spark kafka 其他的配置文件)是否路径有错误
ERROR Failed to set setXIncludeAware(true) for parser
解决方法:jar包冲突
删除自己的xercesImpl.jar,用jdk自身的编译器,问题解决了
java.io.InvalidClassException: ** local class incompatible: stream classdesc serialVersionUID = -9117779196120965598, local class serialVersionUID = 2841008943488659566
解决方法:
1、spark运行的jar包的类和集群上的jars包不一致
在运行spark程序的时候,需要把运行的jar包上传到集群上,即通过sparkconf.setJars()将jar包里的类上传到集群,并分散到各个Worker节点,才能实现并行处理。
所以要保证命令行运行的jar(java -jar …或者spark-submit…)和集群上设置的sparkconf.setJars()要是同一个jar包。
- 编译运行的类的jdk版本和spark集群上的jdk版本不一致导致的。
修改jdk的编辑路径重新编译打包项目,完美解决
java.lang.OutOfMemoryError: Java heap space
什么都不要去改,无疑问的就是代码中出现一个很大的变量导致内存溢出了,比如说spark中的广播变量特别的大,消耗很大的内存,这时候直接就是修改jvm的参数:
比如我之前的参数:Xmx: 1024m Xms:512m
修改之后
完美解决
工作中遇到问题以及解决方法相关推荐
- git 版本控制器 初学习,工作中的问题及其解决方法
one day 1. 下载安装git控制器 >>>>>>(测试环境 window10)Git下载地址https://git-scm.com/downloads ...
- Linux下C/C++程序编译链接加载过程中的常见问题及解决方法
Linux下C/C++程序编译链接加载过程中的常见问题及解决方法 1 头文件包含的问题 报错信息 该错误通常发生在编译时,常见报错信息如下: run.cpp:2:10: fatal error: dl ...
- vac服务器未响应,csgo国服游戏停止工作、未响应的解决方法
CSGO是一款玩家非常喜爱的射击游戏,但玩家常常面临的停止工作的现象,有时会跳出.未响应,那么应该如何解决呢?下面小编带来了csgo国服游戏停止工作.未响应的解决方法,希望对大家有所帮助. 游戏停止工 ...
- 在vue中,Echarts雷达图中indicator的点击事件,不能改变data中的值的解决方法
在vue中,Echarts雷达图中indicator的点击事件,不能改变data中的值的解决方法 参考文章: (1)在vue中,Echarts雷达图中indicator的点击事件,不能改变data中的 ...
- CentOS7安装CDH 第三章:CDH中的问题和解决方法
CentOS7安装CDH 第三章:CDH中的问题和解决方法 参考文章: (1)CentOS7安装CDH 第三章:CDH中的问题和解决方法 (2)https://www.cnblogs.com/yang ...
- kafka集群中常见错误的解决方法:kafka.common.KafkaException: Should not set log end offset on partition
kafka集群中常见错误的解决方法:kafka.common.KafkaException: Should not set log end offset on partition 参考文章: (1)k ...
- Windows10家庭版的功能中没有Hyper-V的解决方法
Windows10家庭版的功能中没有Hyper-V的解决方法 参考文章: (1)Windows10家庭版的功能中没有Hyper-V的解决方法 (2)https://www.cnblogs.com/gu ...
- windows7 ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
windows7 ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法 参考文章: (1)windows7 ORA-12514 TNS 监听程序当前无法识别连接描述符中请求 ...
- mysql开发问题解决_开发过程中mysql常见问题的解决方法
本篇文章给大家带来的内容是关于开发过程中mysql常见问题的解决方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 记录开发过程中遇到mysql相关的问题以及解决方法,长期更新. 远 ...
最新文章
- Request.ServerVariables获取环境变量
- 从ReentrantLock的实现看AQS的原理及应用
- block的一些注意事项
- python abs()函数是什么意思?
- rsync推拉模型及结合inotify实现推模型自动同步
- 基于Mint UI和MUI开发VUE项目一之环境搭建和首页的实现
- 缓存击穿/穿透/雪崩
- MATLAB 图形着色
- knn算法python理解与预测_理解KNN算法
- 开源通用爬虫框架YayCrawler-页面的抽取规则定义
- MCollective架构篇1-MCollective架构的引入
- 主动訪问用户数据的背后是品牌战略
- Linux C编程与Shell编程在开发实用工具方面的相同点总结
- ArcGIS软件的基本使用
- Java调用soap协议的webservice
- 什么是PKI 体系(数字证书种类)
- 山东省第七届ACM大赛E题题解
- mongodb mapreduce分析
- 一本通 3.1 例 1」黑暗城堡
- 云桌面真的可以完全代替PC电脑吗?