2013-06-12 18 views
12

Trong một cụm có Hive được cài đặt, các metastore và namenode có những gì? tôi hiểu rằng Metastore có tất cả các lược đồ bảng và các chi tiết phân vùng và siêu dữ liệu. Siêu dữ liệu này là gì? thì nút tên có gì? và đâu là metastore hiện diện trong một cụm?Nút di chuyển và tên nút làm gì trong một cụm?

Trả lời

14

Dữ liệu Hive (không phải siêu dữ liệu) được trải rộng trên các máy chủ DataDode của Hadoop HDFS. Thông thường, mỗi khối dữ liệu được lưu trữ trên 3 DataNodes khác nhau. NameNode theo dõi các DataNodes nào có khối dữ liệu thực.

Đối với môi trường sản xuất Hive, dịch vụ metastore sẽ chạy trong một JVM bị cô lập. Các quy trình Hive có thể giao tiếp với dịch vụ metastore bằng cách sử dụng Tiết kiệm. Dữ liệu di động Hive được lưu giữ trong cơ sở dữ liệu ACID như Oracle DB hoặc MySQL. Bạn có thể sử dụng SQL để tìm hiểu những gì có trong metastore Hive:

Dưới đây là các bảng trong metastore Hive:

SQL> select table_name from user_tables; 

DBS 
DATABASE_PARAMS 
SEQUENCE_TABLE 
SERDES 
TBLS 
SDS 
CDS 
BUCKETING_COLS 
TABLE_PARAMS 
PARTITION_KEYS 
SORT_COLS 
SD_PARAMS 
COLUMNS_V2 
SERDE_PARAMS 

Bạn có thể mô tả cấu trúc của mỗi bảng:

SQL> describe partition_keys; 

TBL_ID      NUMBER 
PKEY_COMMENT     VARCHAR2(4000) 
PKEY_NAME     VARCHAR2(128) 
PKEY_TYPE     VARCHAR2(767) 
INTEGER_IDX     NUMBER(10) 

Và tìm nội dung của mỗi bảng:

SQL> select * from partition_keys; 

Vì vậy, nếu bạn sống "CREATE TABLE xxx (...) PARTITIO NED BY (...) "dữ liệu phân vùng Hive được lưu trữ vào cơ sở dữ liệu di động (Oracle, MySQL ...).

Ví dụ, trong Hive nếu bạn tạo một bảng như thế này:

hive> create table employee_table (id bigint, name string) partitioned by (region string); 

Bạn sẽ tìm thấy điều này trong metastore:

SQL> select tbl_id,pkey_name from partition_keys; 

TBL_ID PKEY_NAME 
------ --------- 
    8 region 

SQL> select tbl_name from tbls where tbl_id=8; 

TBL_NAME 
-------- 
employee_table 

Khi bạn chèn dữ liệu vào employee_table, dữ liệu sẽ được được lưu trữ trong HDFS trên Hadoop DataNodes và NameNode sẽ theo dõi các DataNodes nào có dữ liệu.

+0

Tôi xin lỗi ... Tôi vẫn chưa rõ .... Vì vậy, mỗi bảng chúng tôi tạo trong Hive, cấu trúc/lược đồ bảng của nó sẽ được lưu trong metastore? Vậy siêu dữ liệu này được lưu trữ trong siêu dữ liệu là gì .. Siêu dữ liệu về những gì có trong Metastore? – DrewRose

+1

@DrewRose, nếu tôi hiểu chính xác, Siêu dữ liệu (DDL = tạo/thả/đổi tên bảng, v.v.)) được lưu trữ trong metastore; dữ liệu được lưu trữ trong HDFS. Có, đó là siêu dữ liệu của dữ liệu. Nhưng siêu dữ liệu loại DDL này khác với siêu dữ liệu mà các cửa hàng tên miền lưu trữ. – RainDoctor

+0

Cảm ơn! Mặc dù tôi hiểu nó, HDFS chỉ là một trong nhiều nơi mà dữ liệu cơ bản có thể cư trú.Hast metastore hỗ trợ ba backend thực thi: Spark, Tez và MapReduce, và Spark chắc chắn có thể sử dụng nhiều hệ thống tập tin và nguồn dữ liệu, hoặc thậm chí làm việc chủ yếu hoặc hoàn toàn từ bộ nhớ thông qua sự trừu tượng mới tuyệt vời của Bộ dữ liệu phân tán (RDD) – nealmcb

25

NameNode giữ cây thư mục của tất cả các tệp trong hệ thống tệp và theo dõi nơi lưu trữ dữ liệu tệp trên toàn cụm. Nó cũng theo dõi tất cả các DataNode (Dead + Live) thông qua cơ chế nhịp tim. Nó cũng giúp khách hàng đọc/ghi bằng cách nhận yêu cầu của họ và chuyển hướng họ đến DataNode thích hợp.

Các siêu dữ liệu mà metastore cửa hàng chứa những thứ như:

ID của Cơ sở dữ liệu

ID của Bàn

ID của Index

Thời điểm tạo ra một Index

Các thời điểm tạo Bảng

ID của vai trò gán cho một người dùng cụ thể

InputFormat sử dụng cho một Bảng

OutputFormat sử dụng cho một bảng vv vv

Đây có phải là điều bạn muốn biết không?

Và không bắt buộc phải có metastore trong chính cụm đó. Bất kỳ máy nào (bên trong hoặc bên ngoài cụm) có một cơ sở dữ liệu tuân thủ JDBC có thể được sử dụng cho metastore.

HTH

Tái bút: Bạn có thể tìm ra E/R diagram của metastore hữu ích.

+2

về cơ bản .. Metastore sẽ không biết vị trí của dữ liệu mà anh ta có trong HDFS. nó sẽ sử dụng ID của bảng hoặc chỉ mục và tìm kiếm trong nút tên và nút tên sẽ cho biết khối nào có dữ liệu. Tôi có đúng không? – DrewRose

+0

Có. Bạn đúng rồi. – Tariq

+0

Lý do cho downvote ?? – Tariq

3

Metastore - Cơ sở dữ liệu lưu trữ siêu dữ liệu a.k.a tất cả chi tiết về các bảng bạn tạo trong HIVE. Theo mặc định, HIVE đi kèm và sử dụng cơ sở dữ liệu Derby. Nhưng bạn có thể sử dụng bất kỳ cơ sở dữ liệu nào khác như MySQL hoặc Oracle.

Sử dụng Metastore: Bất cứ khi nào bạn kích hoạt truy vấn từ Hive CLI, công cụ Execution tập hợp tất cả các chi tiết liên quan đến bảng và tạo kế hoạch thực hiện (công việc). Những chi tiết này đến từ Metastore. Cuối cùng, công cụ Execution gửi Job đến Hadoop. Từ đây, công cụ Hadoop Map Reduce Job phổ biến được thực hiện và kết quả sẽ được gửi trở lại Hive. Nút Name giao tiếp với Execution engine để thực thi thành công MR Job.

enter image description here

0

Sơ đồ trên là cách tuyệt vời để hiểu thông tin liên lạc Hive và hadoop.

Về Hive-Metastore (không hadoop - metastore):

  1. Nó không phải là cần thiết/bắt buộc phải có metastore trong môi trường hadoop của bạn vì nó chỉ là cần thiết nếu bạn đang sử dụng Hive trên HDFS của bạn cụm.

  2. Metastore là kho lưu trữ siêu dữ liệu chỉ HIVE và được sử dụng bởi HIVE để lưu trữ thông tin meta của đối tượng cơ sở dữ liệu đã tạo (không phải dữ liệu thực, đã có trong HDFS vì HIVE không lưu trữ dữ liệu.

  3. Việc triển khai Hive yêu cầu dịch vụ di chuyển bằng bất kỳ RDBMS nào.

Về Namenode (hadoop -namenode):

  1. lõi phần của Hadoop, mà cư xử như metastore cho cluster.

  2. Không phải là RDBMS. Lưu trữ thông tin meta hệ thống tệp chỉ trong Hệ thống tệp.

Các vấn đề liên quan