Windows操作系统下本地跑Spark常见问题总结

Windows操作系统下本地跑Spark常见问题总结

前言

Spark Structured Streaming+Kafka+Hbase Scala版教程,整体入口。

正文

在windows下会跑spark会有很多坑,这里把我主要遇到的一些问题进行总结,未来遇到新问题会持续更新。

1.winutils.exe

异常:
Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executablenull\bin\winutils.exe in the Hadoop binaries.
解决方式:
这个异常其实不用管,并不影响程序运行,我就没管。
不过网上都说下载winutils.exe放到windows/System32下还有说设置HADOOP_HOME环境变量的,反正网上说的我全试了,但是不好使。╮(╯▽╰)╭
不过这个问题其实我是解决了,具体解决办法看问题3就可以。
这里我给2个应该是正版的下载地址:
1.HADOOP环境下载地址:
http://archive.apache.org/dist/hadoop/core/
进去之后找自己对应的版本,我使用的集群HADOOP版本是3.1.1
所以我下的是就是3.1.1,地址如下
http://archive.apache.org/dist/hadoop/core/hadoop-3.1.1/hadoop-3.1.1.tar.gz
2.winutils.exe下载地址,这个不知道是不是官方的,但是真的很全
https://github.com/cdarlint/winutils
在这里插入图片描述
3.我把第2步winutils.exe的bin里所有文件,都拷贝到第一步下载的hadoop-3.1.1的bin里了,这样我这个本地环境应该是最全的了,当然winutils.exe和hadoop.dll我按网上说的往Windows/System32里也放了。

2.null chmod 0644

异常:
(null) entry in command string: null chmod 0644
解决方式:
下载hadoop.dll文件
并拷贝到c:\windows\system32目录中
问题1里的下载地址里就有,里边有hadoop.dll和winutils.exe
https://github.com/cdarlint/winutils

3.HADOOP_HOME

异常:
Caused by: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset.
解决方式:
这网上建议还是设置windows环境变量HADOOP_HOME,指向问题1在下的hadoop环境,但是我就从来没好使过,而且这个问题是我引入HBASE依赖之后才产生的。在pom.xml里没加如下配置前没这个问题

		<dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>2.2.3</version>
        </dependency>

没办法为了解决这个问题,我顺便把问题1的winutils.exe就我说不爱弄的那个问题也给弄好了。╮(╯▽╰)╭无奈
网上说的都不好使,这里是我总结的一个小技巧,就是按异常提示直接改,异常提示hadoop.home.dir没设置,那么我在代码第一行直接设置一下。

object CommonTaskLocal {
    
    
  def main(args: Array[String]): Unit = {
    
    
  //就这一行代码直接搞定,hadoop环境直接去问题1给的地址里下
    System.setProperty("hadoop.home.dir", "C://hadoop-3.1.1")

加这句话之前,异常效果
在这里插入图片描述

加完那句话之后,直接出结果,问题1的异常Could not locate executablenull\bin\winutils.exe也不提示了
在这里插入图片描述

4.log4j.properties

Structured Streaming 默认支持的不是logback.xml而是log4j.properties,为什么问题里会有这一项,因为我本地跑会打印一大堆我不想看见的问题,影响我看程序运行结构,所以要解决这个问题,下边是我的log4j.properties,编辑好后放到resources文件夹下就可以了

扫描二维码关注公众号,回复: 17054151 查看本文章
# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=ERROR, stdout, file, errorfile

#其他配置基本网上找就行,这里log4j.logger.后边换成自己的程序包路径我的程序是在com.lwb这个路径下
log4j.logger.com.lwb=DEBUG


# stdout appender is set to be a ConsoleAppender.
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=DEBUG
# for debug trace
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c{
    
    1} %x - %m%n
log4j.appender.stdout.layout.ConversionPattern=%d{
    
    HH:mm:ss,SSS} %-5p [%t] %c{
    
    1} %M %L %x - %m%n

猜你喜欢

转载自blog.csdn.net/lwb314/article/details/113941994
今日推荐