前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hadoop Hive入门及与spring boot整合实现增删改查

Hadoop Hive入门及与spring boot整合实现增删改查

作者头像
用户7353950
发布2024-06-18 12:17:21
2730
发布2024-06-18 12:17:21
举报
文章被收录于专栏:IT技术订阅IT技术订阅

Hadoop Hive 介绍

Apache Hive 是一个构建在 Apache Hadoop 之上的数据仓库系统,旨在简化大规模数据集的查询和分析过程。它提供了一种 SQL-like 查询语言(HiveQL 或 Hive Query Language),使得熟悉 SQL 的用户能够以声明式的方式操作存储在 Hadoop 分布式文件系统(HDFS)或其他兼容存储系统(如 Amazon S3)上的数据. 下面说说Hive 的关键特性与优势:

1. SQL-like 查询接口:HiveQL 允许用户使用类似于 SQL 的语法来编写查询,包括 SELECT、JOIN、GROUP BY、ORDER BY、AGGREGATE 函数等,降低了大数据处理的技术门槛。

2. 数据抽象与映射:Hive 将存储在 HDFS 上的原始数据文件(如 CSV、JSON、Parquet 等)映射为结构化的表,并支持定义表模式(schema)、分区、桶(bucketing)等特性,增强了数据的组织性和查询效率。

3. 编译与优化:Hive 将用户提交的 HiveQL 查询编译成一系列 MapReduce、Tez 或 Spark 作业,根据查询特征进行优化,如谓词下推、动态分区选择等,以提高执行性能。

4. 元数据管理:Hive 使用一个独立的元数据存储(通常为关系型数据库如 MySQL 或 Derby)来保存表结构、分区信息、列属性等元数据,方便查询规划和数据发现。

5. 批处理与 OLAP:Hive 主要适用于批量数据处理和在线分析处理(OLAP)场景,对于实时查询或高并发请求响应可能不如专门的实时数据库系统快,但适合大规模历史数据的深度分析。

6. 扩展性与兼容性:Hive 能够无缝集成 Hadoop 生态系统中的其他组件,如 Apache Pig、Apache Spark、Apache HBase 等,并支持多种数据源和输出格式,提供了良好的扩展性和数据集成能力。

Hive 入门代码示例

以下是一组简化的 Hive 入门代码示例,涵盖了创建数据库、表、加载数据、查询数据等基本操作。假设已经配置好 Hive 环境,并通过 `hive` 命令行工具连接到 Hive 服务器。

创建数据库

sql

CREATE DATABASE IF NOT EXISTS my_database;

USE my_database;

创建表

假设有一个名为 `sales_data.csv` 的 CSV 文件,其内容如下:

order_id,product_id,quantity,price,order_date

1001,PRD001,2,10.5,2023-0½-01

1002,PRD002,1,15.2,2023-01-02

...

创建对应的 Hive 表:

sql

CREATE TABLE sales (

order_id INT,

product_id STRING,

quantity INT,

price DECIMAL(10, 2),

order_date DATE

)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ','

STORED AS TEXTFILE;

LOAD DATA LOCAL INPATH 'path/to/sales_data.csv' INTO TABLE sales;

查询示例

基本查询

sql

SELECT * FROM sales LIMIT 10; -- 查看前10条记录

SELECT COUNT(*) FROM sales; -- 统计总行数

SELECT product_id, SUM(quantity) AS total_quantity, AVG(price) AS avg_price

FROM sales

GROUP BY product_id; -- 按产品ID分组,计算各产品的销售总量和平均价格

SELECT order_date, COUNT(order_id) AS daily_orders

FROM sales

GROUP BY order_date

ORDER BY order_date DESC; -- 按订单日期统计每日订单数量,并按日期降序排列

分区查询

如果 `sales` 表被设计为分区表(例如按年份和月份分区),可以这样查询:

CREATE TABLE sales_partitioned (

...

) PARTITIONED BY (year INT, month INT);

ALTER TABLE sales_partitioned ADD PARTITION (year=2023, month=1); -- 添加分区

SELECT * FROM sales_partitioned WHERE year = 2023 AND month = 1; -- 查询特定分区数据

以上示例展示了 Hive 的基本使用方法,包括数据库和表的管理、数据加载以及利用 HiveQL 进行数据分析查询。实际应用中,Hive 还支持更复杂的查询、窗口函数、UDF(用户自定义函数)等高级特性,以满足各种数据分析需求。

Spring Boot 应用中整合 Apache Hive 并实现增删改查

1. 添加依赖:首先,在您的 Spring Boot 项目的 `pom.xml` 或 `build.gradle` 文件中添加 Hive JDBC 驱动的依赖。这里以 Maven 为例:

xml

<dependencies>

<!-- ... -->

<dependency>

<groupId>org.apache.hive</groupId>

<artifactId>hive-jdbc</artifactId>

<version>3.1.2</version>

</dependency>

</dependencies>

2.配置数据:在 `application.properties` 或 `application.yml` 中配置 Hive 数据源。包括 Hive 服务器地址、端口、数据库名、用户名和密码(如果启用了身份验证)。

properties

spring.datasource.url=jdbc:hive2://localhost:10000/default

spring.datasource.username=hive

spring.datasource.password=password

spring.datasource.driver-class-name=org.apache.hive.jdbc.HiveDriver

3. 创建 DAO 层:创建一个 Hive 数据访问对象(DAO)类,使用 `JdbcTemplate` 或 `NamedParameterJdbcTemplate` 来执行 Hive SQL 查询。以下是一个简单的示例:

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.stereotype.Repository;

@Repository

public class HiveDao {

private final JdbcTemplate jdbcTemplate;

@Autowired

public HiveDao(JdbcTemplate jdbcTemplate) {

this.jdbcTemplate = jdbcTemplate;

}

public void createTable(String tableName, String columnsDefinition) {

String sql = "CREATE TABLE IF NOT EXISTS " + tableName + " (" + columnsDefinition + ")";

jdbcTemplate.execute(sql);

}

public void insertData(String tableName, Object[] rowData) {

String placeholders = String.join(",", Collections.nCopies(rowData.length, "?"));

String sql = "INSERT INTO " + tableName + " VALUES (" + placeholders + ")";

jdbcTemplate.update(sql, rowData);

}

public List<Map<String, Object>> queryData(String tableName, String selectClause, String whereClause) {

String sql = "SELECT " + selectClause + " FROM " + tableName + (whereClause != null ? " WHERE " + whereClause : "");

return jdbcTemplate.queryForList(sql);

}

// Add other CRUD methods as needed

}

```

4. 使用 DAO 实现增删改查:在服务层或控制器中注入 `HiveDao`,并调用其方法实现具体业务逻辑。例如:

java

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class HiveController {

private final HiveDao hiveDao;

@Autowired

public HiveController(HiveDao hiveDao) {

this.hiveDao = hiveDao;

}

@GetMapping("/create-table")

public String createTable() {

String tableName = "my_table";

String columnsDefinition = "id INT, name STRING, age INT";

hiveDao.createTable(tableName, columnsDefinition);

return "Table " + tableName + " created successfully.";

}

@GetMapping("/insert-data")

public String insertData() {

String tableName = "my_table";

Object[] rowData = new Object[]{1, "John Doe", 30};

hiveDao.insertData(tableName, rowData);

return "Data inserted into table " + tableName + " successfully.";

}

@GetMapping("/query-data")

public List<Map<String, Object>> queryData() {

String tableName = "my_table";

String selectClause = "*";

String whereClause = "age > 25";

return hiveDao.queryData(tableName, selectClause, whereClause);

}

// Add other methods for update and delete operations

}

请注意,实际应用中应考虑错误处理、事务管理、查询性能优化等因素。同时,由于 Hive 主要面向批处理和数据分析场景,对于频繁的实时更新和查询,可能需要结合其他更适合 OLTP 场景的数据库技术。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT技术订阅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据集成
数据集成(DataInLong)源于腾讯开源并孵化成功的 ASF 顶级项目 Apache InLong(应龙),依托 InLong 百万亿级别的数据接入和处理能力支持数据采集、汇聚、存储、分拣数据处理全流程,在跨云跨网环境下提供可靠、安全、敏捷的全场景异构数据源集成能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档