泰涨知识 | 【编程操作详解】Spark读写Hive

Spark读写Hive

一、 配置本地域名映射

(一) 查看集群配置

在Linux查看hosts文件:

复制代码
vi /etc/hosts

(二) 配置域名

将Linux中查看到的域名配置到Windows本地的hosts文件中:

复制代码
C:\Windows\System32\drivers\etc\hosts

**注意:**此文件有权限限制,不能直接修改。

**修改办法:**搜索记事本,使用管理员身份打开记事本,然后从记事本打开hosts文件,然后再修改。

二、 创建Hive表

(一) 启动Hadoop集群

要保证Hadoop集群是正常启动的。master和slave1节点上要能看到namenode守护进程。

(二)编写数据

1Linux本地编辑一个t_student.txt文件:

复制代码
vi ~/t_student.txt

2写入数据,保存并退出。

复制代码
1,zhangsan,male,182,lisi,female,20

(三)上传文件到HDFS根目录

复制代码
hdfs dfs -put ~/.t_student.txt /

(四)进入hive

复制代码
hive

(五)创建数据库

复制代码
--创建数据库create database sparktest;
--使用数据库use spark test;
--创建表create table student(id int, name string, gender string, age int) row format delimited fields terminated by "," stored as textfile ;--row format delimited fields terminated by "," 指定列分隔符为英文的逗号--stored as textfile 存储为文本文件
--加载数据load data inpath "/t_student.txt" overwrite into table student;--load data加载数据--inpath 指定路径--"/t_student.txt" 具体的HDFS的路径--overwrite into 覆盖写入--table 指定表--student 具体的表名

当执行完load data操作后,hdfs根目录下的t_student.txt文件会被移动到hive的数据目录下。

(六)查看数据

复制代码
select * from student;

三、 IDEA中编写Spark代码读取Hive数据

(一) 环境配置

将hive-site.xml(路径:HIVE_HOME/conf)、core-site.xml、hdfs-site.xml(路径:HADOOP_HOME/etc/hadoop)复制到IDEA项目的resource目录下。

(二) 编写代码

复制代码
import org.apache.spark.sql.SparkSession
/*** 使用DataFrame读取Hive表*/object spark_read_hive { def main(args: Array[String]): Unit = {
   //指定本地用户为root   System.setProperty("HADOOP_USER_NAME","root")
   //创建SparkSession,作用:连接Spark   val spark = SparkSession    .builder()    .master("local[*]") //指定运行的方式哦    .appName("spark_read_hive") //程序的名字    .enableHiveSupport() //开启Hive支持    .getOrCreate()
   //查询Hive表   //sparktest.student 数据库名.表名   val df = spark.sql("select * from student");   df.show()}}

四、 IDEA中编写Spark代码写入数据到Hiv

复制代码
import org.apache.spark.sql.{Row, SaveMode, SparkSession}import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}
/*** 使用DataFrame写入数据到Hive*/object spark_write_hive { def main(args: Array[String]): Unit = {
   //指定本地用户为root   System.setProperty("HADOOP_USER_NAME", "root")
   //创建SparkSession,作用:连接Spark   val spark = SparkSession    .builder()    .master("local[*]") //指定运行的方式    .appName("spark_write_hive") //程序的名字    .enableHiveSupport() //开启Hive支持    .config("hive.exec.dynamic.partition", "true")//允许动态分区    .config("hive.exec.dynamic.partition.mode", "nonstrict")//允许非严格动态分区    .getOrCreate()
   //创建DataFrame   //1. 创建schema   val schema = StructType(List(     StructField("id", IntegerType, true),     StructField("name", StringType, true),     StructField("gender", StringType, true),     StructField("age", IntegerType, true)  ))
   //2. 创建rows   //2.1 创建RDD   val dataRDD = spark.sparkContext.parallelize(Array(     Array(3, "zhangsan", "男", 18),     Array(4, "lisi", "女", 20)  ))   //2.2 创建rows   val rows = dataRDD.map(x => Row(x(0), x(1), x(2), x(3)))   //3. 合并   val df = spark.createDataFrame(rows, schema)
   //df.show()
   //写入Hive   //方法一:通过临时表使用SQL语句添加数据   //   df.createOrReplaceTempView("tmpTable")   //   spark.sql("insert into student select * from tmpTable")
   //方法二:通过DataFrame直接写入hive表   df.write.mode(SaveMode.Append)    .format("hive")//指定写入的表是Hive    .partitionBy("name")//指定分区为name字段    .saveAsTable("sparktest.student")}}
相关推荐
AI先驱体验官1 天前
智能体变现:从技术实现到产品化的实践路径
大数据·人工智能·深度学习·重构·aigc
TDengine (老段)1 天前
TDengine IDMP 工业数据建模 —— 属性
大数据·数据库·人工智能·时序数据库·tdengine·涛思数据
得物技术1 天前
Redis 自动化运维最佳实践|得物技术
大数据·redis
Elastic 中国社区官方博客1 天前
Elasticsearch:如何在 Elastic AI Builder 里使用 DSL 来查询 Elasticsearch
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
tian_jiangnan1 天前
flink大数据15天速成教程
大数据·flink
一休哥※1 天前
ClawTeam 完整使用教程:用 AI 多智能体团队自动完成复杂任务
大数据·人工智能·elasticsearch
yitian_hm1 天前
HBase 原理深度剖析:从数据模型到存储机制
大数据·数据库·hbase
鹧鸪云光伏1 天前
微电网设计系统及经济收益计算
大数据·人工智能·光伏·储能设计方案
国冶机电安装1 天前
其他弱电系统安装:从方案设计到落地施工的完整指南
大数据·运维·网络
蓝天守卫者联盟11 天前
玩具喷涂废气治理厂家:行业现状、技术路径与选型指南
大数据·运维·人工智能·python