Hive là gì?

Chào mừng bạn tới với website Blogchiaseaz, Hôm nay blogchiaseaz.com sẽ giới thiệu tới bạn về bài viết Hive là gì?, Hãy cùng chúng tôi tìm hiểu rõ hơn về bài viết Hive là gì? bên dưới

on

Bạn đang đọc:

1. Tổng quan về Hive

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

  • Dụng cụ cho phép tiện lợi 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ích trữ trực tiếp ở trong Apache HDFS hoặc so với nhiều mạng lưới hệ thống tích trữ tài liệu khác như Apache HBase.
  • Thực hiện query thông qua MapReduce.

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

Hive ko yêu cầu tài liệu phải được đọc và ghi dưới một định dạng của riêng Hive (Hive format). Hive hoạt động tốt trên Thrift và những định dạng tài liệu riêng của người sử dụng .

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

Những thành phần cấu hình Hive bao gồm HCatalog và WebHCat. HCatalog 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 tiêu dùng với những phương tiện xử lý dữ liệu khác nhau bao gồm cả Pig và MapReduce thực thi hoạt động tiêu khiển đọc, ghi một cách tiện lợi hơn. WebHCat phân phối một nhà sản xuất cho phép bạn với thể thực thi Hadoop MapReduce ( hoặc YARN ), Pig, Hive .

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

Hive với những thành phần chính là :

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

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

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

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

Thứ tự hoạtđộng của Hive với thểđược mô tả theo những bước sau :

  1. Những 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)
  2. Driver tạo 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)
  3. Compilter nhận những metadata cần thiết từ Metastore ( Bước 3 , 4 hình 3.1). Những metadata này sẽđược sử dụngđể rà soát những biểu thức bên trong query mà Compiler nhậnđược .
  4. Plan được sinh ra bởi Compiler (thông tin về những 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)
  5. Execution engine nhận yêu cầu thực thi và lấy những metadata cần thiết và yêu cầu mapreduce thực thicông việc ( Bước 6.1, 6.2, 6.3 hình 3.1)
  6. Lúc output được sinh ra, nó sẽđược ghi dưới dạng 1 temporary file, temorary file này sẽ phân phối những thông tin cần thiếtcho những stages khác của plan. Nội dung của những 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ô phỏng dữ liệu trong Hive

Hình 4.1. Hive Data Model

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

  • Databases: là namespace cho những tables, tiêu dùng để nhóm và quản lý những nhóm tables khác nhau.
  • Tables: tương tự như table trong những hệ cơ sở vật chất tài liệu quan hệ. Trong Hive table với thể triển khai những phép toán filter, join và 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 phân phối kiểu external table cho phép ta tạo ra và quản lý những table mà dữ liệu của nó đã tồn tại từ trước lúc ta tạo ra 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 với nhiềuđiểm tương đồng với tổ chức triển khai Row và Column trong những hệ cơ sở vật chất tài liệu quan hệ . Hive với 2 kiểu tableđó là: Managed Table và External tables.
  • Partions: Mỗi table với thể với 1 hoặc nhiều những khóa mà từđó xác định tài liệu sẽđược lưu trữ ởđâu. Ví dụ table web_log với thể phân chia dữ liệu của mình theo từng ngày 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 với 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 những partion thành những bucket giúp việc thực thi những query tiện lợi hơn.

4.1. Managed Tables and External Tables

Managed Tables :

Lúc bạn tạo mới 1 tables thì Hive  sẽ chuyển những d

ữ liệu n

Xem thêm:

ày tới tới kho tài liệu của nó (warehouse directory). Tuy nhiên bạn vẫn với thể tạo ra những 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 và DROP. Ta khởi đầu với việc tìm hiểu managed table trước tiên:

Lúc bạn thực thi việc load dữ liệu vào bên trong managed table, nó sẽ triển khai 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ích 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 sẽ triển khai việc xóa dữ liệu và dữ liệu bên trong table trên sẽ ko còn tồn tại nữa .

External tables :

External tables lại với cách đối xử khác biệt. Bạn sẽ quản lý việc tạo mới và xóa đi đối với tài liệu. Liên hệ của external data sẽ được khai báo lúc 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ó ko trực tiếp quản lý những dữ liệu này bởi vậy nó sẽ ko thực hiện việc vận động và di chuyển chúng tới Hive’s data warehouse. Trên thực tế là Hive ko thực hiện việc rà soát xem tài liệu trên External localtion với tồn tại hay ko. Đây là 1 tiệních khác hữu dụng, nó cho phép ta với thể thực thi việc khởi tạo tài liệu lúc tạo 1 table trên  Hive. Và lúc dữ liệu việc drop 1 external table thì Hive chỉ triển khai việc xóa đi những metadata của nó.

4.2. Partions and Buckets

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

Table hoặc partions cũng với thể liên tục phân chia thành những buckes, để giúp dữ liệu được tổ chức triển khai để sử dụng cho nhiều efficient query. Ví dụ, bucketing bởi userID với tức là chúng ta cho thể thực thi việc tính toán nhanh hơn trên mỗi query của người sử dụng thay vì thực hiện 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 với thể được partioned theo nhiều chiều khác nhau. Ví dụ như logs file với thể được partions bởi ngày nó được tạo ra và country  để cho phép thực hiện những query theo location 1 cách tiện lợi hơn.

CREATE TABLE logs (ts BIGINT, line STRING)

PARTITIONED BY (dt STRING, country STRING);

Lúc 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ì những partion thuần tuý là được tích trữ lồng bên trong nhau trong thư mục tích 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 với 2 partions được chia theo trường date, 2010-01-01 và 2010-01-02, chúng được lưu trữ tương ứng trong những đường dẫn với tên dt=2010-01-01 và dt=2010-01-02 và 2 subpartions GB và US được lưu trữ bên trong những date partions, chúng với tên: country=GB và country=US:

Chúng ta với thể rà soát những 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

Mang 2 lý do vì sao bạn nên tổ chức tài liệu bên trong table (partions) thành những buckets. Điều trước tiên là nó cho phép thực hiện những query 1 cách hiệu quả hơn. Bucketing tác động tới extra structure trên table. nó giúp Hive thực hiện những 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 –  đã thực hiện việc join columns – với thể hiệu suất cao tựa 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ẽ với 1 ko gian lưu trữ của riêng nó.
  • Bucketing: thực hiện việc phân phối những key tới từng bucket khác nhau và mỗi partion lại chỉ với 1 key duy nhất .

4.3. Những kiểu tài liệu trong Hive

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

Mỗi columns với 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 integer
    • SMALLINT – 2 byte integer
    • INT – 4 byte integer
    • BIGINT – 8 byte integer
  • Boolean type
    • BOOLEAN – TRUE/FALSE
  • Floating point numbers
    • FLOAT – single precision
    • DOUBLE – Double precision
  • String type
    • STRING – sequence of characters in a specified character set

Những kiểu tài liệu khác:

  • Structs: là kiểu tài liệu mà mỗi thành phần bên trong đó với thểđược truy vấn thông qua việc sử 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ó với thể truy vấn thông quac. a
  • Maps (key-value tuples): là kiểu tài liệu mà những phần tử sẽđược truy vấn thông qua ký hiệu [ ‘ element name ’ ] .Đối với map M triển khai việc map dữ liệuđối với khóa ‘group’ -> thì dữ liệu sẽđược sử 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 và backing store tiêu dùng để tích trữ tài liệu. Mặc định thì metastore service chạy trong cùng 1 jvm với Hive services và bao gồm luôn cả 1 Derby database instances được tích trữ trên local disk. Mô phỏng này được gọi là embedded metastore configuration.

Sử dụng embedded metastore  là cách thuần tuý 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 khắc, điều đó với tức là bạn chỉ với thể với 1 session duy nhất với thể sử dụng tài liệu trong metastore. Nếu ta thử phát động session số 2 thì sẽ gặp được thông tin lỗi

Hình 5.1. Hive Metastore

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

ựa chọn phổ cập cho việc tích trữ standalone metastore. Trong trường hợp này javax.jdo.option.ConnectionURL 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 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ô phỏng nữa là remote-metastore, trong đó 1 hay nhiều metastore server được chạy trên những process riêng biệt. Nó mang tới khả năng tốt hơn trong việc quản lý và đảm bảo tính an ninh.

Hình 5.2. Những thông số kỹ thuật cho metastore

6. Một ví dụ về sử dụng Hive

Sau những phần trên, ta đã với dòng nhìn khá tổng quát về Hive. Phần này sẽ thực thi việc nghiên cứu và phân tích tài liệu trong HDFS với Hive. Kịch bản sử dụng được đưa ra là ta sẽ sử dụng Hive để nghiên cứu và phân tích tài liệu thu được từ những apache webserver được tích trữ trên HDFS. Những file log này sẽ được tích lũy từ những webserver bên trong mạng lưới hệ thống, và từ đó ta hoàn toàn với thể triển khai việc thống kê thứ tự sử dụng trong mạng lưới hệ thống. Nội dung của 1 file Log sẽ với đị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 triển khai tích 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 với 2 column là adress và info tất cả đều với kiểu là STRING.
  • Những 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 bằng ký hiệu “n”
  • Nơi chứa dữ liệu mà table request map tới là ”
    /user/logs/access.log"

Nếu ko với exception nào được đưa ra thì ta hoàn toàn với 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ê toàn bộ 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

Xem thêm:

SHARE THIS

Source:
Category:

on

Bạn đang đọc:

1. Tổng quan về Hive

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

  • Dụng cụ cho phép tiện lợi 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ích trữ trực tiếp ở trong Apache HDFS hoặc so với nhiều mạng lưới hệ thống tích trữ tài liệu khác như Apache HBase.
  • Thực hiện query thông qua MapReduce.

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

Hive ko yêu cầu tài liệu phải được đọc và ghi dưới một định dạng của riêng Hive (Hive format). Hive hoạt động tốt trên Thrift và những định dạng tài liệu riêng của người sử dụng .

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

Những thành phần cấu hình Hive bao gồm HCatalog và WebHCat. HCatalog 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 tiêu dùng với những phương tiện xử lý dữ liệu khác nhau bao gồm cả Pig và MapReduce thực thi hoạt động tiêu khiển đọc, ghi một cách tiện lợi hơn. WebHCat phân phối một nhà sản xuất cho phép bạn với thể thực thi Hadoop MapReduce ( hoặc YARN ), Pig, Hive .

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

Hive với những thành phần chính là :

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

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

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

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

Thứ tự hoạtđộng của Hive với thểđược mô tả theo những bước sau :

  1. Những 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)
  2. Driver tạo 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)
  3. Compilter nhận những metadata cần thiết từ Metastore ( Bước 3 , 4 hình 3.1). Những metadata này sẽđược sử dụngđể rà soát những biểu thức bên trong query mà Compiler nhậnđược .
  4. Plan được sinh ra bởi Compiler (thông tin về những 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)
  5. Execution engine nhận yêu cầu thực thi và lấy những metadata cần thiết và yêu cầu mapreduce thực thicông việc ( Bước 6.1, 6.2, 6.3 hình 3.1)
  6. Lúc output được sinh ra, nó sẽđược ghi dưới dạng 1 temporary file, temorary file này sẽ phân phối những thông tin cần thiếtcho những stages khác của plan. Nội dung của những 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ô phỏng dữ liệu trong Hive

Hình 4.1. Hive Data Model

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

  • Databases: là namespace cho những tables, tiêu dùng để nhóm và quản lý những nhóm tables khác nhau.
  • Tables: tương tự như table trong những hệ cơ sở vật chất tài liệu quan hệ. Trong Hive table với thể triển khai những phép toán filter, join và 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 phân phối kiểu external table cho phép ta tạo ra và quản lý những table mà dữ liệu của nó đã tồn tại từ trước lúc ta tạo ra 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 với nhiềuđiểm tương đồng với tổ chức triển khai Row và Column trong những hệ cơ sở vật chất tài liệu quan hệ . Hive với 2 kiểu tableđó là: Managed Table và External tables.
  • Partions: Mỗi table với thể với 1 hoặc nhiều những khóa mà từđó xác định tài liệu sẽđược lưu trữ ởđâu. Ví dụ table web_log với thể phân chia dữ liệu của mình theo từng ngày 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 với 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 những partion thành những bucket giúp việc thực thi những query tiện lợi hơn.

4.1. Managed Tables and External Tables

Managed Tables :

Lúc bạn tạo mới 1 tables thì Hive  sẽ chuyển những d

ữ liệu n

Xem thêm:

ày tới tới kho tài liệu của nó (warehouse directory). Tuy nhiên bạn vẫn với thể tạo ra những 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 và DROP. Ta khởi đầu với việc tìm hiểu managed table trước tiên:

Lúc bạn thực thi việc load dữ liệu vào bên trong managed table, nó sẽ triển khai 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ích 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 sẽ triển khai việc xóa dữ liệu và dữ liệu bên trong table trên sẽ ko còn tồn tại nữa .

External tables :

External tables lại với cách đối xử khác biệt. Bạn sẽ quản lý việc tạo mới và xóa đi đối với tài liệu. Liên hệ của external data sẽ được khai báo lúc 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ó ko trực tiếp quản lý những dữ liệu này bởi vậy nó sẽ ko thực hiện việc vận động và di chuyển chúng tới Hive’s data warehouse. Trên thực tế là Hive ko thực hiện việc rà soát xem tài liệu trên External localtion với tồn tại hay ko. Đây là 1 tiệních khác hữu dụng, nó cho phép ta với thể thực thi việc khởi tạo tài liệu lúc tạo 1 table trên  Hive. Và lúc dữ liệu việc drop 1 external table thì Hive chỉ triển khai việc xóa đi những metadata của nó.

4.2. Partions and Buckets

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

Table hoặc partions cũng với thể liên tục phân chia thành những buckes, để giúp dữ liệu được tổ chức triển khai để sử dụng cho nhiều efficient query. Ví dụ, bucketing bởi userID với tức là chúng ta cho thể thực thi việc tính toán nhanh hơn trên mỗi query của người sử dụng thay vì thực hiện 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 với thể được partioned theo nhiều chiều khác nhau. Ví dụ như logs file với thể được partions bởi ngày nó được tạo ra và country  để cho phép thực hiện những query theo location 1 cách tiện lợi hơn.

CREATE TABLE logs (ts BIGINT, line STRING)

PARTITIONED BY (dt STRING, country STRING);

Lúc 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ì những partion thuần tuý là được tích trữ lồng bên trong nhau trong thư mục tích 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 với 2 partions được chia theo trường date, 2010-01-01 và 2010-01-02, chúng được lưu trữ tương ứng trong những đường dẫn với tên dt=2010-01-01 và dt=2010-01-02 và 2 subpartions GB và US được lưu trữ bên trong những date partions, chúng với tên: country=GB và country=US:

Chúng ta với thể rà soát những 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

Mang 2 lý do vì sao bạn nên tổ chức tài liệu bên trong table (partions) thành những buckets. Điều trước tiên là nó cho phép thực hiện những query 1 cách hiệu quả hơn. Bucketing tác động tới extra structure trên table. nó giúp Hive thực hiện những 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 –  đã thực hiện việc join columns – với thể hiệu suất cao tựa 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ẽ với 1 ko gian lưu trữ của riêng nó.
  • Bucketing: thực hiện việc phân phối những key tới từng bucket khác nhau và mỗi partion lại chỉ với 1 key duy nhất .

4.3. Những kiểu tài liệu trong Hive

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

Mỗi columns với 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 integer
    • SMALLINT – 2 byte integer
    • INT – 4 byte integer
    • BIGINT – 8 byte integer
  • Boolean type
    • BOOLEAN – TRUE/FALSE
  • Floating point numbers
    • FLOAT – single precision
    • DOUBLE – Double precision
  • String type
    • STRING – sequence of characters in a specified character set

Những kiểu tài liệu khác:

  • Structs: là kiểu tài liệu mà mỗi thành phần bên trong đó với thểđược truy vấn thông qua việc sử 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ó với thể truy vấn thông quac. a
  • Maps (key-value tuples): là kiểu tài liệu mà những phần tử sẽđược truy vấn thông qua ký hiệu [ ‘ element name ’ ] .Đối với map M triển khai việc map dữ liệuđối với khóa ‘group’ -> thì dữ liệu sẽđược sử 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 và backing store tiêu dùng để tích trữ tài liệu. Mặc định thì metastore service chạy trong cùng 1 jvm với Hive services và bao gồm luôn cả 1 Derby database instances được tích trữ trên local disk. Mô phỏng này được gọi là embedded metastore configuration.

Sử dụng embedded metastore  là cách thuần tuý 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 khắc, điều đó với tức là bạn chỉ với thể với 1 session duy nhất với thể sử dụng tài liệu trong metastore. Nếu ta thử phát động session số 2 thì sẽ gặp được thông tin lỗi

Hình 5.1. Hive Metastore

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

ựa chọn phổ cập cho việc tích trữ standalone metastore. Trong trường hợp này javax.jdo.option.ConnectionURL 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 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ô phỏng nữa là remote-metastore, trong đó 1 hay nhiều metastore server được chạy trên những process riêng biệt. Nó mang tới khả năng tốt hơn trong việc quản lý và đảm bảo tính an ninh.

Hình 5.2. Những thông số kỹ thuật cho metastore

6. Một ví dụ về sử dụng Hive

Sau những phần trên, ta đã với dòng nhìn khá tổng quát về Hive. Phần này sẽ thực thi việc nghiên cứu và phân tích tài liệu trong HDFS với Hive. Kịch bản sử dụng được đưa ra là ta sẽ sử dụng Hive để nghiên cứu và phân tích tài liệu thu được từ những apache webserver được tích trữ trên HDFS. Những file log này sẽ được tích lũy từ những webserver bên trong mạng lưới hệ thống, và từ đó ta hoàn toàn với thể triển khai việc thống kê thứ tự sử dụng trong mạng lưới hệ thống. Nội dung của 1 file Log sẽ với đị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 triển khai tích 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 với 2 column là adress và info tất cả đều với kiểu là STRING.
  • Những 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 bằng ký hiệu “n”
  • Nơi chứa dữ liệu mà table request map tới là ”
    /user/logs/access.log"

Nếu ko với exception nào được đưa ra thì ta hoàn toàn với 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ê toàn bộ 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

Xem thêm:

SHARE THIS

Source:
Category:

Tham khảo thêm: Hive là gì?

Related Posts