本地IDEA远程连接hive的问题解决

1:首先创建好一个maven项目,创建项目这一步我就不说了,如果不会的话请看我的另一篇博客,完成后在porm.xml中加入依赖,这里需要注意要有hadoop-client,且不使用默认的hhadoop-client版本。


    
    
        org.apache.spark
        spark-sql_2.11
        1.6.0
    
    
    
        org.apache.spark
        spark-core_2.11
        1.6.0
        
            
                
                org.apache.hadoop
                hadoop-client
            
        
    
    
        org.apache.hadoop
        hadoop-client
        2.6.0
    
    
    
        org.apache.spark
        spark-hive_2.11
        1.6.0
    

    
    
        mysql
        mysql-connector-java
        5.1.32
    

我这里是1.6.0版本的,有版本匹配的可以直接copy
2:第一小步完成,下面随便写一个demo,并把hive-site.xml放到你的项目
resources目录下:
本地IDEA远程连接hive的问题解决_第1张图片

    val conf = new SparkConf()
      .setMaster("local").setAppName("test")
    val sc = new SparkContext(conf)
    println("程序start!")
    val hiveContext = new HiveContext(sc)
    hiveContext.sql(
      """
        |show databases
      """.stripMargin).show()

右键执行,报错如下:

java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

本地IDEA远程连接hive的问题解决_第2张图片
本地IDEA远程连接hive的问题解决_第3张图片
这里报了两个错,第一个错误很多人都是遇到过的,没有安装本地local hadoop,在你的项目里没有涉及到与hadoop有关的内容时这个错误对程序本身没有任何影响,但是当涉及到需要连接hadoop时就必须安装本地local hadoop,第二个错误也是由于没有安装本地hadoop导致的,所以

2:安装本地hadoop
下载hadoop2.6.0(你自己对应的hadoop版本)的tar包,解压到本地的某个目录,这里由于是本地的windows hadoop,因此需要一些额外的插件,下载插件解压后把winutils.exe、hadoop.dll放到hadoop的bin目录下,(插件稀缺资源啊,找了大半天,所有的资源我都放最后面,这里是适用于hadoop2.4以上的,在github上有hadoop2.2的,适用于hadoop2-hadoop2.4以下的版本)
再执行上面的demo程序,这里要配置环境变量,或者用于测试的话先直接把环境path写死在程序中

    System.setProperty("hadoop.home.dir", "D:\\hadoopHome\\hadoop-2.6.0")
    val conf = new SparkConf()
      .setMaster("local").setAppName("test")
    val sc = new SparkContext(conf)
    println("程序start!")
    val hiveContext = new HiveContext(sc)
    hiveContext.sql(
      """
        |show databases
      """.stripMargin).show()
  }

然而又报错:

Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: The root 

scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rwx------

本地IDEA远程连接hive的问题解决_第4张图片
可以看到没有写的权限,那我们就给它权限:
hadoop bin目录下执行:winutils.exe chmod 777 \tmp\hive
再执行程序:
这次可以连接hive了,直接显示出了结果:
本地IDEA远程连接hive的问题解决_第5张图片
但是结尾会爆临时日志删除失败的error,但是并不影响程序,打包放到集群上运行没有任何错误,估计是spark的一个bug吧,所以放心大胆的去使用这种方法吧。
hadoop2.6.0下载地址
本地hadoop的插件百度网盘地址:
链接:https://pan.baidu.com/s/126nHNWLY28hefuzdG52Nog
提取码:iisf
复制这段内容后打开百度网盘手机App,操作更方便哦

你可能感兴趣的:(spark,spark本地连接hive)