Hive

1. Giới thiệu

Hive

Hive Apache Hive là hệ thống lưu trữ dữ liệu được xây dựng trên nền tảng của Hadoop, hỗ trợ phân tích các tập dữ liệu lớn được lưu trữ trong hệ thống tệp phân tán Hadoop (HDFS) hoặc S3 bằng cách sử dụng các truy vấn giống như SQL.
Nó lưu trữ siêu dữ liệu của schema trong cơ sở dữ liệu (như Postgres) và xử lý dữ liệu từ lưu trữ kết nối (như HDFS hoặc S3).
Nó cung cấp ngôn ngữ truy vấn giống như SQL, HiveQL.

Hệ thống lưu trữ Hive

Hệ thống lưu trữ Hive ghi lại tất cả thông tin cấu trúc (metadata) của một bảng hive và các phân vùng của nó trong kho dữ liệu:
– Thông tin cột và định nghĩa kiểu dữ liệu
– Các bộ chuyển đổi cần thiết để đọc và ghi dữ liệu
– Vị trí của dữ liệu liên quan trong HDFS hoặc S3
Metadata trong hệ thống lưu trữ Hive được lưu trữ trong một RDBMS mã nguồn mở là Apache Derby (cũng có thể sử dụng MySQL/ Postgres/ MariaDB) Hệ thống lưu trữ
Hive có thể có nhiều cơ sở dữ liệu, và mỗi cơ sở dữ liệu có thể chứa nhiều bảng Hive. Dưới đây là mã pyspark để liệt kê tất cả cơ sở dữ liệu có sẵn trong hệ thống lưu trữ Hive và các bảng Hive trong mỗi cơ sở dữ liệu

# Tùy chọn 1: Sử dụng phiên Spark để liệt kê cơ sở dữ liệu và bảng Hive có sẵn trong hệ thống lưu trữ Hive
# Liệt kê tất cả cơ sở dữ liệu
databases = spark.catalog.listDatabases()
print("List of Hive Databases:")
for db in databases:
print(db.name)

# Liệt kê tất cả các bảng trong mỗi cơ sở dữ liệu
for db in databases:
print(f"\nTables in database: {db.name}")
tables = spark.catalog.listTables(db.name)
for table in tables:
print(f"\t{table.name}")
# Lựa chọn 2: sử dụng spark.sql để liệt kê cơ sở dữ liệu & bảng hive có sẵn trong Hive metastore
# Liệt kê tất cả các cơ sở dữ liệu
databases_df = spark.sql("SHOW DATABASES")
databases = databases_df.select("databaseName").rdd.flatMap(lambda x: x).collect() # flatten the databases to a list

# Duyệt qua từng cơ sở dữ liệu và liệt kê các bảng của nó
for database in databases:
spark.sql(f"USE {database}")
tables_df = spark.sql("SHOW TABLES")
tables = tables_df.select("tableName").rdd.flatMap(lambda x: x).collect()
print(f"Database: {database}")
print("Tables:")
for table in tables:
print(f" {table}")

Bảng Hive

Hive hỗ trợ hai loại bảng: Bảng Quản lý (Bảng Nội bộ) & Bảng Ngoại vi
Bảng Quản lý – Managed Tables (Bảng Nội bộ)
Còn được gọi là bảng nội bộ, các bảng này quản lý cả dữ liệu và siêu dữ liệu trong thư mục kho mặc định của Hive (được chỉ định bởi hive.metastore.warehouse.dir).
Bảng Ngoại vi
Các bảng này tham chiếu đến các tệp dữ liệu được lưu trữ bên ngoài Hive, thường là trong HDFS hoặc S3.
– Vì các tệp dữ liệu không được Hive quản lý, nên việc thay đổi hoặc xóa một bảng ngoại vi của Hive không xóa dữ liệu cơ bản. Bạn có thể phải xóa dữ liệu qua vị trí HDFS hoặc S3 cơ bản.

Bước 1: tạo SparkSession với cấu hình Hive
spark.sql.warehouse.dir là thuộc tính cấu hình chỉ định vị trí mặc định nơi Spark SQL sẽ lưu trữ các bảng quản lý trong thư mục kho của Hive. Các bảng quản lý là những bảng mà dữ liệu và siêu dữ liệu được Spark quản lý, và các bảng này được tạo bằng lệnh CREATE TABLE SQL Nếu bạn không thiết lập cấu hình này rõ ràng, Spark sẽ sử dụng vị trí kho mặc định của Hive, thường được đặt là /user/hive/warehouse