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()

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/hiverm -rf /tmp/hive

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

错误截图:

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.sqlimportorg.apache.spark.SparkConfimportorg.apache.spark.sql.SQLContextimportorg.apache.spark.sql.hive.HiveContextimportorg.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)importsqlContext.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.sqlimportorg.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()importspark.implicits._importspark.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语句时会出现如下异常信息:

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

解决办法:

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

附异常信息截图:

spark代码连接hive_Spark SQL入门到实战之(7)spark连接hive(spark-shell和eclipse两种方式)...相关推荐

  1. server2008 sql 账号只读权限_SQL Server 2008数据库创建用户只读权限的两种方式(转载)...

    最优秀的解决方案: https://www.cnblogs.com/hao-1234-1234/p/12699185.html 其它相关文章: 一.命令行方式创建 新建查询窗口,然后输入以下命令然后执 ...

  2. Flink 最锋利的武器:Flink SQL 入门和实战

    学习路径:<2021年最新从零到大数据专家学习路径指南> 面      试:<2021年最新版大数据面试题全面开启更新> [注意]:Flink1.9版本后的Flink SQL使 ...

  3. Spark提交代码的两种方式

    基于spark1.6测试(虽然很多公司都已经在用2.X了,但是1.6我认为是最经典的版本,CDH最新版本至今默认的spark版本依然是1.6,不过2.X提交方式是基本没有变的) Standalone ...

  4. php mysql 连接方法 对比_Mysql实例php连接MySQL的两种方式对比

    <Mysql实例php连接MySQL的两种方式对比>要点: 本文介绍了Mysql实例php连接MySQL的两种方式对比,希望对您有用.如果有疑问,可以联系我们. MYSQL数据库记录一下P ...

  5. Java Spark之创建RDD的两种方式和操作RDD

    首先看看思维导图,我的spark是1.6.1版本,jdk是1.7版本 spark是什么?  Spark是基于内存计算的大数据并行计算框架.Spark基于内存计算,提高了在大数据环境下数据处理的实时性, ...

  6. spark消费kafka产生数据堆积怎么处理_SparkStreaming读取Kafka的两种方式

    本文主要从以下几个方面介绍SparkStreaming读取Kafka的两种方式: 一.SparkStreaming简介 二.Kafka简介 三.Redis简介(可用于保存历史数据或偏移量数据) 四.S ...

  7. Spark读取Hive数据的两种方式与保存数据到HDFS

    Spark读取Hive数据的两种方式与保存数据到HDFS Spark读取Hive数据的方式主要有两种 1. 通过访问hive metastore的方式,这种方式通过访问hive的metastore元数 ...

  8. 根据官网文档看Spark Streaming对接Kafka的两种方式, 以及如何实现Exactly Once语义

    注: 本文算是本人的学习记录, 中间可能有些知识点并不成熟, 不能保证正确性. 只能算是对官网文档作了个翻译和解读, 随时有可能回来更新和纠错 上一篇文章讨论了Spark Streaming的WAL( ...

  9. 简单介绍python连接telnet和ssh的两种方式

    本文主要介绍了python连接telnet和ssh的两种方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Telnet 连接方式 #!/usr/bin/env p ...

最新文章

  1. 每日一题题目29:五个数字能组成多少互不重复的四位数
  2. Web API之基于H5客户端分段上传大文件
  3. 网络波动服务器维护中,官方回应《王者荣耀》游戏无法登录:网络波动导致,已修复...
  4. 使用OpenFlashChart 2.0结合asp.net的问题(解疑)
  5. 初学者可能不知道的 vue.js技巧
  6. nginx+keepalived互为主主高可用配置
  7. javaEE的开发模式
  8. lseek、stat、access、chmod、strtol、truncate、unlink
  9. 目标2020:'鼠'你最棒!
  10. 内部类 java 1614957119
  11. 零基础快速入门web学习路线(含视频教程)
  12. 把一个人的特点写具体作文_五年级下册语文习作把一个人的特点写具体教学视频+教案课件+范文...
  13. Python模块——xml
  14. C4D阿诺德Arnold渲染器介绍
  15. 第十七章 - 垃圾回收器
  16. Filter中获取传递参数(解决post请求参数问题)
  17. matlab如何进行图像读取,matlab如何读取图像
  18. ICML2022论文解读『Sparse Double Descent: Where Network Pruning Aggravates Overfitting』
  19. 查询名字重复但不是相同的人的记录
  20. 跨国面板数据(1960-2020)十三:GDP、人均GDP、国民收入、储蓄(excel、stata版)

热门文章

  1. 安装 Flex2packagebeta_1.994
  2. css之align 与 valign 的用法比较
  3. Spring PropertyPlaceholderConfigurer Usage
  4. 市值十亿美金公司的五个特点
  5. 【推荐】用这些 App 提高你的睡眠质量
  6. 周鸿祎告诫员工:勿盲目把360看成巨头 不四处出击!
  7. 【grunt整合版】30分钟学会使用grunt打包前端代码
  8. 感知机预测NBA总冠军
  9. shell脚本的执行方式
  10. 【iOS-Cocos2d游戏开发】系列(总结了多篇文章,可以好好学习