泰涨知识 | 【编程操作详解】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")}}
相关推荐
yyuuuzz4 小时前
独立站的技术基础与常见运维问题
大数据·运维·服务器·网络·数据库·aws
微擎应用9 小时前
智能售货柜公众号管理系统平台
大数据·人工智能
计算机安禾10 小时前
【算法分析与设计】第26篇:参数化算法与固定参数可解性理论
大数据·人工智能·算法·机器学习·剪枝
liushangzaibeijing10 小时前
Superpower 使用大纲
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客11 小时前
每次操作一个 API 调用:Elastic Cloud Hosted 如何让大规模部署管理变得可行
大数据·运维·数据库·elasticsearch·搜索引擎·serverless
志栋智能14 小时前
超自动化安全:实现安全运营现代化的关键
大数据·运维·网络·安全·自动化
渣渣盟14 小时前
MySQL DDL操作全解析:从入门到精通,包含索引视图分区表等全操作解析
大数据·数据库·mysql
unclejet14 小时前
颠覆传统开发!AI根治软件工程技术债务顽疾
大数据·人工智能·软件工程
赴山海bi14 小时前
如何在不降低销量的情况下降低亚马逊ACOS
大数据
大大大大晴天️15 小时前
告别数据重复与丢失:Flink Exactly-Once 原理解析
大数据·flink