SparkSQL 读写_Hive_写入数据_编码和配置 | 学习笔记

简介: 快速学习 SparkSQL 读写_Hive_写入数据_编码和配置

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段SparkSQL 读写_Hive_写入数据_编码和配置】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/690/detail/12063


SparkSQL 读写_Hive_写入数据_编码和配置

 

内容介绍:

一、步骤一:读取数据

二、步骤二:将数据写入到 HDFS 的 Hive 中

三、课堂总结

 

一、步骤一:读取数据

要把数据插入到 HDFS 中,首先要先有数据,因此第一步是读取数据。

1、上传到 HDFS

读取数据是读 HDFS 上的文件,而不是读本地文件。因为 HiveAcess 程序会放在集群当中运行,无法保证这段程序里的 task 在同一 worker 里执行,无法保证他在哪一台机器里执行,要把文件上传到所有的机器中才能读取本地文件,而所有的机器都可以读取 HDFS 中的文件,它是外部系统,因此上传到 HDFS 当中就可以解决问题。

进入编辑窗口,进入/export/dataset,该目录下有一个叫做 studenttab10k 的文件,是从前面的章节当中上传进来的。

hdfs dfs -put studenttab10k /dataset/

回车上传,结果显示该文件已存在,即上传成功。

2、使用 DF 读取数据

打开 studenttab10k 文件,如下:

image.png

其为 csv 文件,即每个数据和下一个数据之间都使用逗号作为分隔,且以逗号分隔的文件可以改为以制表符分隔的文件。而该文件与 csv 文件十分相似,只不过该文件的分隔符是 tab。

DateFrame 需要结构信息的,那么使用 DateFrame reader 读文件时也要赋予其结构信息而该文件中不包含结构信息。其第一列是 Name,但没有列名,第二列是 age,但没有列名,第三列是平均分数,也没有列名,且也没有说明数据类型的数据,因此需要指定其 schema 信息。

综上所需,其实需要完成两项任务,即修改分格符和指定 schema 信息。

val schema = structType

//structType 导入为 structType(org.apache.spark.sql.types) structType.type 下的类

   List(

   Structfield("name",StringType),

   Structfield("age",IntegerType),

   Structfield("gpa",FloatType)

//编写构造方法,其中接收 List,即其所有的字段,整个

structType 是一个 schema,而这个 schema 里由几列构成,因

此要为每一个列创建字段,用字段标注,因此 List 中是每一列的信

息,叫做 Structfield,且包仍为 structType(org.apache.

spark.sql.types) structType.type 下的包。

val dateframe = spark.read

//读取数据,且读取完毕后生成一个 dateframe

.option("delimiter","\t")

//指定分隔符 delimiter 为\t

.schema(schema)

//传入结构信息,而 schema 接收的是 structType 类型

.csv("hdfs://node01/dataset/studenttab10k")

//其中 node01 可以忽略

val resultDF = dataframe.where('age > 50')

//直接生成 resultDF 获取 dataframe,且指查询大于 50 岁的,但此时系统报错。这是因为要使用这种形式来取列,则应提前输入 import spark.implicits._

导入 spark 对象中的 implicits 的所有隐式转换,即可生成 resultDF。

 

 

二、步骤二:将数据写入到 HDFS 的 Hive 中

1、写入数据

使用写入表的 API,叫做 saveAsTable,将 DateFrame 写入即可,且只需要指定一下表名即可,SparkSQL 会自动地读取 MetaStore 里的原信息。

resultDf.write.mode(SaveMode.OverWrite).saveAsTable("spark03.student")

//指定写入模式,将写入模式指定为 SaveMode.OverWrite.

//指定表名,我们需要是某一数据库里面的某一张表,则先要指定库名为 spark03 再上表名 student。

//此时数据写入成功。

2、运行程

该程序应放在集群里运行,而不能在本地运行,使用 Maven 的 package 打包,执行命令,最终运行结果显示 BUILD success,而打包的结果在 target 目录中。

打开代码编辑窗口,输入 cd 进入到用户的根目录,清除屏幕。选择 Upload to current folder 找到对应的 Original spark0.1.0.jar,

点击打开就会进行数据的上传。输入 ls 查看,即可查询到 Original spark0.1.0.jar。

3、提交程序

使用 submit 命令提交运行程序。如果想在任意目录使用命令,就需要配置 perfile。

spark submit  --master spark://node01:7077 --class cn.itcas

t.spark.sql.HiveAcess

//指定 master 为集群 node01:7077 master 节点。

//指定 Class,告知 Spark 运行的类。进入 idea 中复制类名,具体操作为点击最上面的类名,点击右键,选择 Copy Reference(复制依赖),然后返回代码编辑窗口粘贴,即可以指定包的位置 original spark。这里不配置特别复杂的参数,直接运行,运行结果显示 Persisting file based data source table 'spark03','student'…

hive>select * from spark03.student

//进入 Hive 查看数据,检查是不是只有 50 岁以上的,如果是,则没有问题。运行结果中发现确实没有低于 50 岁的数据,说明插入数据成功。

 

三、课堂总结

主要学习了 SparkSQL 如何将数据插入到 Hive 表中,包括两个步骤,即先进行配置,再编写代码。在编写代码时,先读取再处理,再编写。

在配置阶段,要 enable Hivesupport,再去指定 warehouse(该配置必须指定)。

相关文章
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
41 4
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
52 3
|
1月前
|
SQL 存储 分布式计算
Hadoop-16-Hive HiveServer2 HS2 允许客户端远程执行HiveHQL HCatalog 集群规划 实机配置运行
Hadoop-16-Hive HiveServer2 HS2 允许客户端远程执行HiveHQL HCatalog 集群规划 实机配置运行
41 3
|
1月前
|
SQL 存储 数据管理
Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测
Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测
58 2
|
1月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
35 2
|
1月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
35 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
86 0
|
3月前
|
SQL 关系型数据库 HIVE
实时计算 Flink版产品使用问题之如何将PostgreSQL数据实时入库Hive并实现断点续传
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
SQL 分布式计算 数据处理
实时计算 Flink版产品使用问题之怎么将数据从Hive表中读取并写入到另一个Hive表中
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。