spark连接hive(spark-shell和eclipse两种方式)

转载请务必注明原创地址为:http://dongkelun.com/2018/03/25/sparkHive/

1、在服务器(虚拟机)spark-shell连接hive

1.1 将hive-site.xml拷贝到spark/conf里

cp /opt/apache-hive-2.3.2-bin/conf/hive-site.xml /opt/spark-2.2.1-bin-hadoop2.7/conf/

1.2 将mysql驱动拷贝到spark/jar里

cp /opt/apache-hive-2.3.2-bin/bin/mysql-connector-java-5.1.46-bin.jar /opt/spark-2.2.1-bin-hadoop2.7/jars/

1.3 启动spark-shell,输入代码测试

spark-shell
import org.apache.spark.sql.hive.HiveContext
val hiveContext = new HiveContext(sc)
hiveContext.sql("select * from test").show()

<!-- more -->

1.4 异常及解决

在执行hiveContext.sql("select * from test").show() 报了一个异常:

The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rwxr-xr-x;

解决办法:

1.4.1 更改HDFS目录/tmp/hive的权限:

hadoop fs -chmod 777 /tmp/hive

1.4.2 同时删HDFS与本地的目录/tmp/hive:

hadoop fs -rm -r /tmp/hive 
rm -rf /tmp/hive

这次错误采用的是第二种解决办法,有的情况下用第一种方法,比如一次在启动hive时候报这种错误~。

错误截图:

参考:http://www.cnblogs.com/czm1032851561/p/5751722.html

2、win10+eclipse上连接hive

2.1 将hive-site.xml拷贝到项目中的resources文件夹下

2.2 在sbt里添加对应版本的mysql依赖

"mysql" % "mysql-connector-java" % "5.1.46"

2.3 代码

2.3.1 旧版api(1.6以上)

package com.dkl.leanring.spark.sql

import org.apache.spark.SparkConf
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.SparkContext

/**
 * 旧版本spark-hive测试
 */
object OldSparkHiveDemo {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("OldSparkHiveDemo").setMaster("local")
    val sc = new SparkContext(conf)
    val sqlContext = new SQLContext(sc)
    import sqlContext.implicits._
    val hiveCtx = new HiveContext(sc)

    hiveCtx.sql("select * from test").show()
    val data = Array((3, "name3"), (4, "name4"), (5, "name5"))
    val df = sc.parallelize(data).toDF("id", "name")
    df.createOrReplaceTempView("user")
    hiveCtx.sql("insert into test select id,name from user")
    hiveCtx.sql("select * from test").show()
  }

}

(注:其中df.createOrReplaceTempView("user")改为df.registerTempTable("user"),因为createOrReplaceTempView方法是2.0.0才有的,registerTempTable是旧版的方法,1.6.0就有了,嫌麻烦就不改代码重新贴图了)

2.3.2 新版api

package com.dkl.leanring.spark.sql

import org.apache.spark.sql.SparkSession

/**
 * 新版本spark-hive测试
 */
object NewSparkHiveDemo {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession
      .builder()
      .appName("Spark Hive Example")
      .master("local")
      .config("spark.sql.warehouse.dir", "/user/hive/warehouse/")
      .enableHiveSupport()
      .getOrCreate()

    import spark.implicits._
    import spark.sql
    sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)")
    val data = Array((1, "val1"), (2, "val2"), (3, "val3"))
    var df = spark.createDataFrame(data).toDF("key", "value")
    df.createOrReplaceTempView("temp_src")
    sql("insert into src select key,value from temp_src")
    sql("SELECT * FROM src").show()
  }
}

2.4 异常及解决方法

在执行insert语句时会出现如下异常信息:

org.apache.hadoop.security.AccessControlException: Permission denied: user=dongkelun, access=EXECUTE, inode="/user/hive/warehouse":root...

原因是:启动 Spark 应用程序的win用户对spark.sql.warehouse.dir没有写权限

解决办法:

hadoop fs -chmod 777 /user/hive/warehouse/

附异常信息截图:

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏hotqin888的专栏

engineercms利用pdf.js制作连续看图功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

1691
来自专栏yukong的小专栏

【SpringBoot2.0系列05】SpringBoot之整合Mybatis前言实现

【SpringBoot2.0系列02】SpringBoot之使用Thymeleaf视图模板

2312
来自专栏haifeiWu与他朋友们的专栏

I-team 博客全文检索 Elasticsearch 实战

一直觉得博客缺点东西,最近还是发现了,当博客慢慢多起来的时候想要找一篇之前写的博客很是麻烦,于是作为后端开发的楼主觉得自己动手丰衣足食,也就有了这次博客全文检索...

2711
来自专栏Hadoop实操

如何通过Livy的RESTful API接口向Kerberos环境的CDH集群提交作业

在前面的文章Fayson介绍了《Livy,基于Apache Spark的开源REST服务,加入Cloudera Labs》、《如何编译Livy并在非Kerber...

1.5K11
来自专栏ChaMd5安全团队

HCTF2018 WriteUp

不断fuzz,发现\u0075nion在json_decode后,会变成union,从而达到bypass的目的。 脚本:

2424
来自专栏牛肉圆粉不加葱

Spark SQL,DataFrame以及 Datasets 编程指南 - For 2.0

Spark SQL 是 Spark 用来处理结构化数据的一个模块。与基础的 Spark RDD API 不同,Spark SQL 提供了更多数据与要执行的计算的...

2752
来自专栏Spark学习技巧

Spark源码系列之spark2.2的StructuredStreaming使用及源码介绍

一,概述 Structured Streaming是一个可扩展和容错的流处理引擎,并且是构建于sparksql引擎之上。你可以用处理静态数据的方式去处理你的流计...

1.2K7
来自专栏祝威廉

Effective PySpark(PySpark 常见问题)

首先确保安装了python 2.7 ,强烈建议你使用Virtualenv方便python环境的管理。之后通过pip 安装pyspark

1343
来自专栏AILearning

Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets Guide | ApacheCN

Spark SQL, DataFrames and Datasets Guide Overview SQL Datasets and DataFram...

1.5K8
来自专栏Java帮帮-微信公众号-技术文章全总结

struts2+spring+hibernate整合步骤(1)

struts2、hibernate、spring所需jar包 struts-core-2.x.x.jar ----struts核心包 xwork-cor...

3464

扫码关注云+社区

领取腾讯云代金券