Hive Là gì vậy?

on

Hive chính Là gì vậy?

1. Tổng quan về Hive

Apache Hive chính là 1 kho dữ liệu ( data warehouse ) tương hỗ người dùng có thể dễ dàng hơn trong việc quản lý , truy vấn so với các tập tài liệu lớn được tàng trữ ở trên các hệ thống tàng trữ phân tán (distributed storage). Hive đã được xây dựng dựa trên cơ sở của Apache Hadoop, nó cung cấp các tính năng chinh sau:

Bạn đang đọc: Hive Là gì vậy?

Công cụ cho phép dễ dàng thực hiện tác vụ như trích xuất, luân chuyển , và lưu trữ tài liệu .Cơ chế để xử lý cho nhiều định dạng tài liệu khác nhau.Truy cập tới tài liệu dạng files đã được tàng trữ trực tiếp ở trong Apache HDFS hoặc so với nhiều mạng lưới hệ thống tàng trữ tài liệu khác như Apache HBase.Thực hiện query thông qua MapReduce.

Hive định nghĩa ra một ngôn ngữ truy vấn đơn thuần có cú pháp gần giống với SQL (SQL-like query language) được gọi là HiveQL, nó cho phép người dùng đã quen thuộc với các truy vấn SQL triển khai việc truy vấn tài liệu. Ngoài ra ngôn ngữ này còn cho phép các lập trình viên người đã quen thuộc với MapReduce framework có thể nhúng các mappers , và reducers cho chính họ viết ra để thực thi nhiều hơn nữa các phân tích phức tập mà không đã được tương hỗ bởi các hàm đã có sẵn trong ngôn ngữ HiveQL. HiveQL cung có thể được lan rộng ra với các custom scalar functions (UDF’s), aggregations (UDAF’s) , và các table funtions (UDTF’s)

Hive không yêu cầu tài liệu phải đã được đọc , ghi dưới một định dạng của riêng Hive (Hive format). Hive hoạt động tốt trên Thrift , các định dạng tài liệu riêng của người dùng .

Hive không được phong cách thiết kế để cho các giao dịch trực tuyến ( OLTP workloads ) , và chưa nên dùng cho các real-time queries và các cập nhật ở trên từng dòng trong 1 table (row-level). Hive hoạt động tốt số 1 cho các batch jobs ở trên các tập tài liệu lớn, mà ở đó dữ liệu đã được thêm vào liên tục ( append-only data ) ví dụ như web logs . Hive có nguy cơ lan rộng ra theo chiều ngang tốt ( thực thi tốt ở trên 1 hadoop cluster có số tượng máy biến đổi ), có khả năng tích hợp với MapReduce framework , UDF, UDAF, UDTF; có khả năng chống chịu lỗi và mềm dẻo so với các dữ liệu đầu vào của chính nó.

Các thành phần cấu hình Hive bao gồm HCatalog , WebHCat. HCatalog chính là một thành phần của Hive. Đây là lớp quản lý lưu trữ cho Hadoop (table and management layer), nó cho phép người dùng với các dụng cụ xử lý dữ liệu khác nhau bao gồm cả Pig , và MapReduce thực thi hoạt động giải trí đọc, ghi một cách dễ dàng hơn. WebHCat cung cấp một dịch vụ cho phép bạn có thể thực thi Hadoop MapReduce ( hoặc YARN ), Pig, Hive .

2.Kiến trúc của Hive

Hive có các thành phần chính là :

Hive UI: cung cấp giao diện cho phép người dùng tương tác với mạng lưới hệ thống Hive. Hive phân phối nhiều phương thức khác nhau cho phép người dùng tương tác với Hive : CLI: giao diện dạng shell cho phép người dùng tương tác trực tiếp qua command line .Hive Web Interface: giao diện Web cho phép người dùng triển khai các truy vấn thông qua giao diện Web .Hive Thrift Server: cho phép các client đến từ nhiều ngôn ngữ lập trình khác nhau có thể triển khai tương tác với Hive .Hive Driver: thành phần nhậncác truy vấn và chuyển các truy vấn này thành các MapReduce Jobs để tiến hành xử lý yêu cầu của người dùng . Driver: nhận các truy vấn, thành phần này làm việc quản lý các sessions , và cung ứng các API để thực thi , lấy tài liệu ở trên JDBC/ODBC interfaces.Compiler: thành phần hiện việc phân tích ngữ nghĩa đối với các query, lấy các thông tin metadata cần thiết về table , partion đến từ metastoređể sinh ra các excution plan.Execute engine: thành phần thực thi các execution plan đã được tạo bởi compiler (submit các job tới MapReduce ). Ngoài ra thành phần execution enginen này làm việc quản lý các dependencies của các bước trong mỗi execution plan, thực thi từng bước này.Hive Metastore: thành phần lưu trữ các metadata của Hive : table, partion, buckets bao gồm cả thông tin về các column trong mỗi table, các serializers , và desrializers cần thiếtđể thực thi việcđọc và ghi dữ liệu. Metastore dùng một cơ sở tài liệu quan hệđể lưu trữ tài liệu của chính mình.

1

Hình 2.1. Kiến trúc của Hive

3. Hoạtđộng của Hive

2

Hình 3.1. Mô hình hoạtđộng của Hive

Quy trình hoạtđộng của Hive có thểđược mô tả theo các bước sau :

Các truy vấn tới từ User Interface ( CLI, Hive Web Interface, Thirft Server )được gửi tới thành phần Driver(Bước 1 hình 3.1)Driver gây ra mới 1 session cho truy vấn này và gửi query tới compilerđể nhận lấy Execution Plan (Bước 2 hình 3.1)Compilter nhận các metadata cần thiết từ Metastore ( Bước 3 và 4 hình 3.1). Những metadata này sẽđược dùngđể kiểm tra các biểu thức bên trong query mà Compiler nhậnđược .Plan đã được sinh ra bởi Compiler (thông tin về các job (map-reduce) cần thiếtđể thực thi query sẽđược gửi lại tới thành phần thực thi ( Bước 5hình 3.1)Execution engine nhận yêu cầu thực thi , và lấy các metadata cần thiết , yêu cầu mapreduce thực thicông việc ( Bước 6.1, 6.2, 6.3 hình 3.1)Khi output được sinh ra, nó sẽđược ghi dưới dạng 1 temporary file, temorary file này sẽ phân phối các thông tin cần thiếtcho các stages khác của plan. Nội dung của các temporary file này được execution đọc trực tiếp từ HDFS như là 1 phần củacác lời gọi từ Driver ( bước 7, 8, 9 hình 3.1)

4. Mô hình dữ liệu trong Hive

3Hình 4.1. Hive Data Model

Dữ liệu trong Hiveđược tổ chức triển khai thành các kiểu sau :

Databases: chính là namespace cho các tables, dùng để nhóm , quản lý các nhóm tables khác nhau.Tables: tương tự như table trong các hệ cơ sở tài liệu quan hệ. Trong Hive table có thể triển khai các phép toán filter, join , union… Mặcđịnh thì dữ liệu của Hive sẽđược lưu bên trong thư mục warehouse trên HDFS. Tuy nhiên Hive cũng cung cấp kiểu external table cho phép ta tạo ra , và quản lý các table mà dữ liệu của nó đã tồn tại đến từ trước khi ta gây nên table này hoặc nó được lưu trữ ở 1 thư mục khác bên trong hệ thống HDFS. Tổ chức row và column bên trong Hive có nhiềuđiểm tương đồng với tổ chức triển khai Row , Column trong các hệ cơ sở tài liệu quan hệ . Hive có 2 kiểu tableđó là: Managed Table và External tables.Partions: Mỗi table có thể có 1 hoặc nhiều các khóa mà từđó xác định tài liệu sẽđược lưu trữ ởđâu. Ví dụ table web_log có thể phân chia dữ liệu của mình theo từng ngày chính là lưu dữ liệu của mỗi ngày trong 1 thư mục khác nhau bên dướiđường dẫn warehouse. Ví dụ : / warehouse / web_log / date = ” 01-01-2014 ″Buckets: Dữ liệu trong mỗi partion có thểđược phân chia thành nhiều buckets khác nhau dựa trên 1 hash của 1 colume bên trong table. Mỗi bucket lưu trữ tài liệu của nó bên dưới 1 thư mục riêng. Việc phân chia các partion thành các bucket giúp cho việc thực thi các query dễ dàng hơn.

4.1. Managed Tables and External Tables

Managed Tables :

Khi bạn tạo mới 1 tables thì Hive sẽ chuyển các d

ữ liệu n

ày tới tới kho tài liệu của nó (warehouse directory). Tuy vậy bạn vẫn có thể tạo ra các external table, với khai báo thì nàythì Hive biết rằng tài liệu tài liệu này đã tồn tại ở trên 1 location khác bên ngoài warehouse directory.

Sự khác biệt của chúng sẽ xảy ra ở 2 quá trình LOAD , DROP. Ta bắt đầu với việc tìm hiểu managed table trước tiên:

Khi bạn triển khai việc load dữ liệu vào bên trong managed table, nó sẽ thực thi việc chuyển tài liệu tới bên trong warehouse directory. Ví dụ :

CREATE TABLE managed_table(dummy STRING);

LOAD DATA INPATH `/user/hadoop/data.txt`INTO table managed_table;

ẽ thực thi việc vận động , và di chuyển file hdfs : / / user / tom / data.txt tớiợc tàng trữ tại đường dẫn : hdfs : / / user / hive / warehouse / managed_tableVới khai báo này thì Hive sHive’s warehouse cho managed_table đư

Nếu table bị xóa đi với câu lệnh :

DROP TABLE managed_table; 

thì table bao gồm cả metadata , và dữ liệu chứa bên trong table đó sẽ bị xóa đi, trong trường hợp này câu lện DROP cũng sẽ thực thi việc xóa dữ liệu , dữ liệu bên trong table ở trên cũng sẽ chưa còn tồn tại nữa .

External tables :

External tables lại có cách đối xử khác biệt. các bạn sẽ quản lý việc tạo mới , xóa đi đối với tài liệu. Địa chỉ của external data sẽ đã được khai báo khi tạo mới bảng :

CREATE EXTERNAL TABLE external_table (dummy STRING)

LOCATION `/user/hadoop/external_table`;

LOAD DATA INPATH `/user/hadoop/data.txt`INTO TABLE external_table;

Với từ khóa EXTERNAL, Hive hiểu rằng nó chưa trực tiếp quản lý các dữ liệu này bởi vậy nó sẽ không làm việc chuyển dời chúng tới Hive’s data warehouse. Trên thực tế chính là Hive không làm việc kiểm tra xem tài liệu trên External localtion có tồn tại hay không. Đây là 1 tiệních khác hữu dụng, nó cho phép ta có thể triển khai việc khởi tạo tài liệu khi tạo 1 table trên Hive. Và khi dữ liệu việc drop 1 external table thì Hive chỉ thực thi việc xóa đi các metadata của nó.

4.2. Partions and Buckets

Hive tổ chứng dữ liệu của nó thành các partions, là 1 cách để phân chia dữ liệu thành các khối khác nhau dựa trên giá trị của partion columns thí dụ như date. Dùng partions có thể khiến cho quy trình query trở nên nhan hơn/

Table hoặc partions cũng có thể thường xuyên phân chia thành các buckes, để giúp dữ liệu được tổ chức triển khai để dùng cho nhiều efficient query. Ví dụ, bucketing bởi userID có nghĩa là mọi người cho thể triển khai việc tính toán nhanh hơn ở trên mỗi query của người dùng thay vì làm nó ở trên 1 tập tài liệu được sắp xếp 1 cách ngẫu nhiên.

Partions:

Một table trong Hive có thể đã được partioned theo nhiều chiều khác nhau. Ví dụ như logs file có thể đã được partions bởi ngày nó được gây nên và country để cho phép thực hiện các query theo location 1 cách dễ dàng hơn.

CREATE TABLE logs (ts BIGINT, line STRING)

PARTITIONED BY (dt STRING, country STRING);

Khi ta chuyển tài liệu tới một partion talbe, thông tin về partion phải được xác lập :

LOAD DATA LOCAL INPATH `input/hive/partions/file1`

INTO TABLE logs

PARTITION (dt=`2001-01-01`, country=`GB`);

Đối với mức filesystem thì các partion đơn giản là đã được tàng trữ lồng bên trong nhau trong thư mục tàng trữ tài liệu cả table đó.

/user/hive/warehouse/logs/dt=2010-01-01/country=GB/file1

/file2

/country=US/file3

/dt=2010-01-02/country=GB/file4

/country=US/file5

/file6

Table logs có 2 partions đã được chia theo trường date, 2010-01-01 , 2010-01-02, chúng đã được lưu trữ tương ứng trong các đường dẫn có tên dt=2010-01-01 , và dt=2010-01-02 , và 2 subpartions GB , US đã được lưu trữ bên trong các date partions, chúng có tên: country=GB , country=US:

Chúng ta có thể kiểm tra các partions trong Hive bằng câu lệnh :

hive> SHOW PARTITIONS logs;

dt=2001-01-01/country=GB

dt=2001-01-01/country=US

dt=2001-01-02/country=GB

dt=2001-01-02/country=US

Buckets

Có 2 lý do tại sao bạn nên tổ chức tài liệu bên trong table (partions) thành các buckets. Điều đầu tiên chính là nó cho phép làm các query 1 cách hiệu quả hơn. Bucketing tác động tới extra structure ở trên table. nó giúp cho Hive làm các query 1 cách thuận lợi hơn. Ví dụ việc join giữa 2 table được bucked ở trên cùng 1 column – đã làm việc join columns – có thể hiệu suất cao tương tự như như map-side join .

Partion vs bucket :

Partion thực hiện phân chia dữ liệu trong 1 table theo value của column key, mỗi partion key sẽ có 1 chưa gian lưu trữ của riêng nó.Bucketing: thực hiện việc phân phối các key tới từng bucket khác nhau , và mỗi partion lại chỉ có 1 key duy nhất .

4.3. Các kiểu tài liệu trong Hive

Kiểu tài liệu nguyên thủy :

Mỗi columns có 1 kiểu tài liệu cốđịnh. Những kiểu tài liệu nguyên thủy sau sẽđược tương hỗđối với Hive :

Integers: TINYINT – 1 byte integerSMALLINT – 2 byte integerINT – 4 byte integerBIGINT – 8 byte integerBoolean type BOOLEAN – TRUE/FALSEFloating point numbers FLOAT – single precisionDOUBLE – Double precisionString type STRING – sequence of characters in a specified character set

Các kiểu tài liệu khác:

Structs: chính là kiểu tài liệu mà mỗi thành phần bên trong đó có thểđược truy vấn thông qua việc dùng ký hiệu (. ) .Ví dụ ,với kiểu tài liệu STRUCT a INT ; b INT ví dụ trường a của nó có thể truy vấn thông quac. aMaps (key-value tuples): chính là kiểu tài liệu mà các phần tử sẽđược truy vấn thông qua ký hiệu [ ‘ element name ’ ] .Đối với map M thực thi việc map dữ liệuđối với khóa ‘group’ -> thì dữ liệu sẽđược dùng bởi trường M [ ‘ group ’ ]Arrays (indexable lists): Kiểu mảng .

5.Metastore

The metastore là trung tâm lưu trữ của metadata của Hive. Metastore đã được thi thành 2 thành phần : a services , backing store dùng để tàng trữ tài liệu. Mặc định thì metastore service chạy trong cùng 1 jvm với Hive services , bao gồm luôn cả 1 Derby database instances đã được tàng trữ trên local disk. Mô hình này được gọi là embedded metastore configuration.

Dùng embedded metastore chính là cách đơn giản nhất để khởi đầu với Hive, mặc dù 1 embedded Derby database chỉ cho phép truy cập vào files trên disk 1 lần ở cùng 1 thời điểm, điều đó có nghĩa chính là bạn chỉ có thể có 1 session duy nhất có thể dùng tài liệu trong metastore. Nếu ta thử khởi động session số 2 thì cũng sẽ gặp được thông báo lỗi

Hình 5.1. Hive Metastore

Giải pháp để tương hỗ dùng nhiều session cùng 1 lúc chính là dùng standalone database. Cấu hình này còn đã được gọi tên chính là local mestastore, với nó thì metastore services vẫn thường xuyên chạy trong cùng 1 JVM với Hive services nhưng nó làm kế t nối tới database thông qua 1 process khác, database này có thể nằm trên local machine hoặc trên remote machine. Bất kỳ JDBC-compliant database có thể được dùng chỉ bằng việc thiết lập thuộc tính javax.jdo.option.*.

ựa chọn phổ cập cho việc tàng trữ standalone metastore. Trong trường hợp này javax.jdo.option.ConnectionURL cũng sẽ đã được thiết lập là:ợc thiết lập thành com.mysql.jdbc.Driver. JDBC driver jar file cho MySQL phải được Open trong Hive’c classpath .MySQL chính là lày javax.jdo.option. ConnectionURL sà : jdbc : mysql : / / dbname ? createDatabaseIfNotExist = true và javax.jdo.option. ConnectionDriverName đưành com.mysql.jdbc. Driver. JDBC driver jar file cho MySQL ph

Còn một kiểu mô hình nữa là remote-metastore, trong đó 1 hay nhiều metastore server được chạy trên các process riêng biệt. Nó mang tới nguy cơ tốt hơn trong việc quản lý và đảm bảo tính an ninh.

5

Hình 5.2. Các thông số kỹ thuật cho metastore

6. Một thí dụ về dùng Hive

Sau những phần trên, ta đã có cái nhìn khá tổng quát về Hive. Phần này cũng sẽ triển khai việc điều tra , và phân tích tài liệu trong HDFS với Hive. Kịch bản dùng đã được đưa ra chính là ta sẽ dùng Hive để điều tra , và phân tích tài liệu thu đã được từ những apache webserver đã được tàng trữ ở trên HDFS. Các file log này cũng sẽ được tích lũy đến từ những webserver bên trong mạng lưới hệ thống, và đến từ đó ta hoàn toàn có thể thực thi việc thống kê quy trình dùng trong mạng lưới hệ thống. Nội dung của 1 file Log sẽ có định dạng như sau :

64.242.88.10 – – [07/Mar/2004:16:05:49 -0800] “GET /twiki/bin/edit/Main/Double_bounce_sender?topicparent=Main.ConfigurationVariables HTTP/1.1″401 12846

64.242.88.10 – – [07/Mar/2004:16:06:51 -0800] “GET /twiki/bin/rdiff/TWiki/NewUserTemplate?rev1=1.3&rev2=1.2 HTTP/1.1″200 4523

64.242.88.10 – – [07/Mar/2004:16:10:02 -0800] “GET /mailman/listinfo/hsdivision HTTP/1.1″200 6291

64.242.88.10 – – [07/Mar/2004:16:11:58 -0800] “GET /twiki/bin/view/TWiki/WikiSyntax HTTP/1.1″200 7352

64.242.88.10 – – [07/Mar/2004:16:20:55 -0800] “GET /twiki/bin/view/Main/DCCAndPostFix HTTP/1.1″200 5253

64.242.88.10 – – [07/Mar/2004:16:23:12 -0800] “GET /twiki/bin/oops/TWiki/AppendixFileSystem?template=oopsmore¶m1=1.12¶m2=1.12 HTTP/1.1″200 11382

64.242.88.10 – – [07/Mar/2004:16:24:16 -0800] “GET /twiki/bin/view/Main/PeterThoeny HTTP/1.1″200 4924

64.242.88.10 – – [07/Mar/2004:16:29:16 -0800] “GET /twiki/bin/edit/Main/Header_checks?topicparent=Main.ConfigurationVariables HTTP/1.1″401 12851

64.242.88.10 – – [07/Mar/2004:16:30:29 -0800] “GET /twiki/bin/attach/Main/OfficeLocations HTTP/1.1″401 12851

64.242.88.10 – – [07/Mar/2004:16:31:48 -0800] “GET /twiki/bin/view/TWiki/WebTopicEditTemplate HTTP/1.1″200 3732

64.242.88.10 – – [07/Mar/2004:16:32:50 -0800] “GET /twiki/bin/view/Main/WebChanges HTTP/1.1″200 40520

64.242.88.10 – – [07/Mar/2004:16:33:53 -0800] “GET /twiki/bin/edit/Main/Smtpd_etrn_restrictions?topicparent=Main.ConfigurationVariables HTTP/1.1″401 12851

64.242.88.10 – – [07/Mar/2004:16:35:19 -0800] “GET /mailman/listinfo/business HTTP/1.1″200 6379

64.242.88.10 – – [07/Mar/2004:16:36:22 -0800] “GET /twiki/bin/rdiff/Main/WebIndex?rev1=1.2&rev2=1.1 HTTP/1.1″200 46373

64.242.88.10 – – [07/Mar/2004:16:37:27 -0800] “GET /twiki/bin/view/TWiki/DontNotify HTTP/1.1″200 4140

64.242.88.10 – – [07/Mar/2004:16:39:24 -0800] “GET /twiki/bin/view/Main/TokyoOffice HTTP/1.1″200 3853

64.242.88.10 – – [07/Mar/2004:16:43:54 -0800] “GET /twiki/bin/view/Main/MikeMannix HTTP/1.1″200 3686

64.242.88.10 – – [07/Mar/2004:16:45:56 -0800] “GET /twiki/bin/attach/Main/PostfixCommands HTTP/1.1″401 12846

Ta thực thi tàng trữ file này dưới đường dẫn / user / logs / access.log . Ta thực thi việc tạo 1 Hive table để map với những tài liệu này .

CREATE EXTERNAL TABLE request(address STRING, info STRING) ROW FORMAT

DELIMITED FIELDS TERMINATED BY `- -`

LINES TERMINATED BY `\n`

STORED AS TEXTFILE

LOCATION `/user/logs/access.log`;

Trong đó :

Dữ liệu trong access.log sẽ được map tới table “request”Table request gồm có 2 column là adress và info tất cả đều có kiểu là STRING.Các column đã được phân tách bằng nhóm ký hiệu “- -“, mỗi 1 line được đánh dấu kết thúc chỉ bằng ký hiệu “\n”Nơi chứa dữ liệu mà table request map tới chính là ” /user/logs/access.log”

Nếu chưa có exception nào đã được đưa ra thì ta hoàn toàn có thể mở màn thực thi việc truy vấn tài liệu bên trong Hive table. Một số truy vấn mẫu : Liệt kê tổng thể thông tin thu đã được từ trong những table :

SELECT * FROM request;

Liệt kê những IP đã triển khai truy vấn tới :

SELECT DISTINCT address FROM request;

Liệt kê số lượng request theo từng IP :

SELECT address, count(1) FROM request

GROUP BY address ORDER BY address DESC;

Tài liệu tham khảo

1. Hadoop : The Definitive Guilde 2.0, Tom White, 2011 2. https://cwiki.apache.org/confluence/display/Hive/Home

3*** Ánh sáng Là gì vậy? Ánh sáng đơn sắc Là gì vậy?

SHARE THIS

Giới thiệu: Quang Sơn

Quang Sơn là giám đốc hocdauthau.com - Kênh thông tin học đấu thầu, kiến thức tổng hợp, công nghệ, đời sống.

0 Shares
Share
Tweet
Pin