Spark---Spark on Hive

1、Spark On Hive的配置

1)、在Spark客户端配置Hive On Spark

在Spark客户端安装包下spark-2.3.1/conf中创建文件hive-site.xml:

配置hive的metastore路径

复制代码
<configuration>
   <property>
        <name>hive.metastore.uris</name>
        <value>thrift://mynode1:9083</value>
   </property>
</configuration>

2)、启动Hive的metastore服务

复制代码
hive --service metastore

3)、启动zookeeper集群,启动HDFS集群

4)、启动SparkShell读取Hive中的表总数,对比hive中查询同一表查询总数测试时间

复制代码
./spark-shell 
--master spark://node1:7077,node2:7077 
 --executor-cores 1 
--executor-memory 1g 
--total-executor-cores 1
import org.apache.spark.sql.hive.HiveContext
val hc = new HiveContext(sc)
hc.sql("show databases").show
hc.sql("user default").show
hc.sql("select count(*) from jizhan").show
  • 注意:

如果使用Spark on Hive 查询数据时,出现错误:

找不到HDFS集群路径,要在客户端机器conf/spark-env.sh中设置HDFS的路径:

2、读取Hive中的数据加载成DataFrame

  • 在Spark1.6版本中HiveContext是SQLContext的子类,连接Hive使用HiveContext。

在Spark2.0+版本中之后,建议使用SparkSession对象,读取Hive中的数据需要开启Hive支持。

  • 由于本地没有Hive环境,要提交到集群运行,提交命令:

    ./spark-submit
    --master spark://node1:7077,node2:7077
    --executor-cores 1
    --executor-memory 2G
    --total-executor-cores 1
    --class com.lw.sparksql.dataframe.CreateDFFromHive
    /root/test/HiveTest.jar

java:

复制代码
SparkConf conf = new SparkConf();
conf.setAppName("hive");
JavaSparkContext sc = new JavaSparkContext(conf);
//HiveContext是SQLContext的子类。
HiveContext hiveContext = new HiveContext(sc);
hiveContext.sql("USE spark");
hiveContext.sql("DROP TABLE IF EXISTS student_infos");
//在hive中创建student_infos表
hiveContext.sql("CREATE TABLE IF NOT EXISTS student_infos (name STRING,age INT) row format delimited fields terminated by '\t' ");
hiveContext.sql("load data local inpath '/root/test/student_infos' into table student_infos");

hiveContext.sql("DROP TABLE IF EXISTS student_scores"); 
hiveContext.sql("CREATE TABLE IF NOT EXISTS student_scores (name STRING, score INT) row format delimited fields terminated by '\t'");  
hiveContext.sql("LOAD DATA "
+ "LOCAL INPATH '/root/test/student_scores'"
+ "INTO TABLE student_scores");
/**
 * 查询表生成DataFrame
 */
DataFrame goodStudentsDF = hiveContext.sql("SELECT si.name, si.age, ss.score "
+ "FROM student_infos si "
+ "JOIN student_scores ss "
+ "ON si.name=ss.name "
+ "WHERE ss.score>=80");

hiveContext.sql("DROP TABLE IF EXISTS good_student_infos");

goodStudentsDF.registerTempTable("goodstudent");
DataFrame result = hiveContext.sql("select * from goodstudent");
result.show();

/**
 * 将结果保存到hive表 good_student_infos
 */
goodStudentsDF.write().mode(SaveMode.Overwrite).saveAsTable("good_student_infos");

Row[] goodStudentRows = hiveContext.table("good_student_infos").collect();  
for(Row goodStudentRow : goodStudentRows) {
	System.out.println(goodStudentRow);  
}
sc.stop();

scala:

复制代码
1.val spark = SparkSession.builder().appName("CreateDataFrameFromHive").enableHiveSupport().getOrCreate()
2.spark.sql("use spark")
3.spark.sql("drop table if exists student_infos")
4.spark.sql("create table if not exists student_infos (name string,age int) row format delimited fields terminated by '\t'")
5.spark.sql("load data local inpath '/root/test/student_infos' into table student_infos")
6.
7.spark.sql("drop table if exists student_scores")
8.spark.sql("create table if not exists student_scores (name string,score int) row format delimited fields terminated by '\t'")
9.spark.sql("load data local inpath '/root/test/student_scores' into table student_scores")
10.// val frame: DataFrame = spark.table("student_infos")
11.// frame.show(100)
12.
13.val df = spark.sql("select si.name,si.age,ss.score from student_infos si,student_scores ss where si.name = ss.name")
14.df.show(100)
15.spark.sql("drop table if exists good_student_infos")
16./**
17.* 将结果写入到hive表中
18.*/
19.df.write.mode(SaveMode.Overwrite).saveAsTable("good_student_infos")
相关推荐
Java 码思客15 分钟前
【ElasticSearch从入门到架构师】第5章:ES DSL 检索语法精讲(核心重点)
大数据·elasticsearch
lauo27 分钟前
ibbot青春版:当腾讯AI“换船”,一部手机如何成为你的Token“私矿”?
大数据·人工智能·chatgpt·智能手机·ai-native
老虾头36 分钟前
合规化背景下,本地私有 AI 成为行业主流发展方向
大数据·人工智能
行业研究员37 分钟前
腾讯会议同传功能实测与选型建议
大数据·人工智能·腾讯会议·腾讯会议会议同传
Sharewinfo_BJ1 小时前
当 BI 遇上 AI:到底是谁在帮谁?
大数据·人工智能·ai·数据分析·微软·powerbi
wb043072011 小时前
阿明的二次创业——从阿明用 AI 开第二家店,看 AI 原生创业的四阶段方法论
大数据·人工智能·架构
青岛前景互联信息技术有限公司1 小时前
前景互联·新一代智能接处警系统:AI+大模型+Agent智能接处警一体化解决方案
大数据·人工智能·物联网
terry6002 小时前
2026滑动拼图验证码选型指南:AI对抗下的厂商对比与落地实测
大数据·人工智能·web安全·信息与通信·数据库架构
仓储管理员20252 小时前
六款WMS仓储管理系统功能与部署方式介绍
大数据·精选
阿部多瑞 ABU2 小时前
数据循环悖论:AI检测模型的技术局限与生态灾难
大数据·人工智能·安全·机器学习·ai·自然语言处理