工作中遇到问题以及解决方法

问题一: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操作就会使用的内存超过自己的配置就出现了这个错误。当时解决方法就是控制每次计算半个月的数据或者更低的数据。

猜你喜欢

转载自blog.csdn.net/qq_34649040/article/details/79191292