113

Tôi biết cả hai được thực hiện trên một cột trong bảng nhưng mỗi thao tác khác nhau như thế nào.

|
222

Phân vùng dữ liệu thường được sử dụng để phân phối tải theo chiều ngang, điều này có lợi ích về hiệu suất và giúp tổ chức dữ liệu theo cách hợp lý. Ví dụ : nếu chúng ta đang xử lý một employeebảng lớn và thường chạy truy vấn với WHEREcác mệnh đề giới hạn kết quả ở một quốc gia hoặc bộ phận cụ thể. Đối với một câu trả lời truy vấn nhanh hơn Bảng Hive có thể PARTITIONED BY (country STRING, DEPT STRING). Các bảng phân vùng thay đổi cách Hive cấu trúc lưu trữ dữ liệu và Hive giờ đây sẽ tạo các thư mục con phản ánh cấu trúc phân vùng như

... / Nhân viên / quốc gia = ABC / DEPT = XYZ .

Nếu giới hạn truy vấn cho nhân viên từ country=ABC, nó sẽ chỉ quét nội dung của một thư mục country=ABC. Điều này có thể cải thiện đáng kể hiệu năng truy vấn, nhưng chỉ khi sơ đồ phân vùng phản ánh bộ lọc phổ biến. Tính năng phân vùng rất hữu ích trong Hive, tuy nhiên, một thiết kế tạo quá nhiều phân vùng có thể tối ưu hóa một số truy vấn, nhưng gây bất lợi cho các truy vấn quan trọng khác. Hạn chế khác là có quá nhiều phân vùng là số lượng lớn tệp và thư mục Hadoop được tạo không cần thiết và chi phí cho NameNode vì nó phải giữ tất cả siêu dữ liệu cho hệ thống tệp trong bộ nhớ.

Bucketing là một kỹ thuật khác để phân tách các tập dữ liệu thành các phần dễ quản lý hơn. Ví dụ: giả sử một bảng sử dụng datelàm phân vùng cấp cao nhất và employee_idlàm phân vùng cấp hai dẫn đến quá nhiều phân vùng nhỏ. Thay vào đó, nếu chúng ta xô bảng nhân viên và sử dụng employee_idlàm cột , giá trị của cột này sẽ được băm bởi một số do người dùng xác định thành các nhóm. Các bản ghi có cùng employee_id sẽ luôn được lưu trữ trong cùng một nhóm. Giả sử số lượng employee_idlớn hơn nhiều số xô, mỗi nhóm sẽ có nhiều employee_id. Trong khi tạo bảng, bạn có thể chỉ định nhưCLUSTERED BY (employee_id) INTO XX BUCKETS;Trong đó XX là số xô. Bucketing có một số lợi thế. Số lượng thùng được cố định để nó không dao động với dữ liệu. Nếu hai bảng được khóa bởi employee_id, Hive có thể tạo một mẫu chính xác về mặt logic. Bucketing cũng hỗ trợ trong việc thực hiện các phép nối bên bản đồ hiệu quả, v.v.

|
  • 1

    Cảm ơn Navneet. Tuy nhiên, bạn có thể giải thích cách bucketing xảy ra với phân vùng không? Giả sử nếu chúng ta chỉ định 32 nhóm trong mệnh đề CLUSED BY và câu lệnh CREATE TABLE cũng chứa mệnh đề Phân vùng, các phân vùng và nhóm sẽ được quản lý như thế nào? Có số lượng phân vùng sẽ được giới hạn đến 32? HOẶC cho mỗi phân vùng, 32 thùng sẽ được tạo ra? Có phải mỗi xô là một tệp HDFS?

    – Bùi Ðắc Trọng 01:08:19 02/02/2015
  • 1

    Một bảng tổ ong có thể có cả phân vùng và xô. Dựa trên mệnh đề phân vùng của bạn, cho mỗi phân vùng sẽ có 32 nhóm được tạo. Có tệp HDFS.

    – Dương Phi Hải 16:57:42 02/02/2015
  • 1

    @sgsi Phân vùng là một thư mục, xô là một tập tin.

    – Lý Hạnh Linh 20:36:49 01/07/2016
  • 1

    Đối với hồ sơ, câu trả lời này xuất phát từ văn bản của Lập trình Hive (O'Reilly, 2012).

    – Tạ Minh Vu 18:38:03 18/10/2016
  • 1

    Tôi thấy liên kết này hữu ích. Nó có thông tin sẽ tăng thêm giá trị cho câu trả lời này. linkedin.com/pulse/...

    – Hoàng Quang Ninh 08:00:09 25/05/2017
115

Có một vài chi tiết bị thiếu trong các giải thích trước đó. Để hiểu rõ hơn về cách phân vùng và khóa hoạt động, bạn nên xem cách dữ liệu được lưu trữ trong tổ ong. Giả sử bạn có một cái bàn

CREATE TABLE mytable ( 
         name string,
         city string,
         employee_id int ) 
PARTITIONED BY (year STRING, month STRING, day STRING) 
CLUSTERED BY (employee_id) INTO 256 BUCKETS

sau đó hive sẽ lưu trữ dữ liệu trong một hệ thống phân cấp thư mục như

/user/hive/warehouse/mytable/y=2015/m=12/d=02

Vì vậy, bạn phải cẩn thận khi phân vùng, bởi vì nếu bạn ví dụ phân vùng bởi worker_id và bạn có hàng triệu nhân viên, cuối cùng bạn sẽ có hàng triệu thư mục trong hệ thống tệp của mình. Thuật ngữ ' cardinality ' dùng để chỉ số lượng giá trị có thể có của một lĩnh vực. Ví dụ: nếu bạn có trường 'quốc gia', các quốc gia trên thế giới có khoảng 300, vì vậy số lượng thẻ sẽ là ~ 300. Đối với một trường như 'timestamp_ms', thay đổi mỗi mili giây, số lượng thẻ có thể là hàng tỷ. Nói chung, khi chọn một trường để phân vùng, nó không nên có số lượng thẻ cao, vì bạn sẽ kết thúc với quá nhiều thư mục trong hệ thống tệp của mình.

Mặt khác, cụm hay còn gọi là xô, sẽ dẫn đến một số lượng tệp cố định, vì bạn chỉ định số lượng nhóm. Những gì tổ ong sẽ làm là lấy trường, tính toán một hàm băm và gán một bản ghi cho nhóm đó. Nhưng điều gì xảy ra nếu bạn sử dụng giả sử 256 thùng và trường bạn đang sử dụng có số lượng thẻ thấp (ví dụ: đó là tiểu bang Hoa Kỳ, vì vậy chỉ có thể có 50 giá trị khác nhau)? Bạn sẽ có 50 thùng có dữ liệu và 206 thùng không có dữ liệu.

Ai đó đã đề cập đến cách phân vùng có thể cắt giảm đáng kể lượng dữ liệu bạn đang truy vấn. Vì vậy, trong bảng ví dụ của tôi, nếu bạn chỉ muốn truy vấn từ một ngày nhất định, việc phân vùng theo năm / tháng / ngày sẽ cắt giảm đáng kể lượng IO. Tôi nghĩ rằng ai đó cũng đã đề cập đến cách bucketing có thể tăng tốc độ tham gia với các bảng khác có cùng độ chính xác , vì vậy, trong ví dụ của tôi, nếu bạn tham gia hai bảng trên cùng một worker_id, hive có thể thực hiện xô nối bằng xô (thậm chí tốt hơn nếu chúng đã được sắp xếp bởi worker_id vì nó sẽ hợp nhất các phần đã được sắp xếp, hoạt động theo thời gian tuyến tính hay còn gọi là O (n)).

Vì vậy, xô hoạt động tốt khi trường có số lượng thẻ cao và dữ liệu được phân bổ đều giữa các nhóm. Phân vùng hoạt động tốt nhất khi mức độ chính xác của trường phân vùng không quá cao.

Ngoài ra, bạn có thể phân vùng trên nhiều trường , với một đơn hàng (năm / tháng / ngày là một ví dụ điển hình), trong khi bạn chỉ có thể xô vào một trường .

|
  • 1

    Bạn có thể vui lòng giải thích hành vi CLUSTERED-BY với SORTED-BY trong một ví dụ không? Theo ví dụ của tôi, tôi thấy SORTED-BY không làm gì cả. Tôi có thiếu thứ gì không

    – Huỳnh Thế Trung 05:55:56 13/06/2016
  • 1

    Clustered THEO x, y cũng giống như văn bản PHÂN PHỐI BỞI x, y Sắp xếp x, y (xem cwiki.apache.org/confluence/display/Hive/... ) để thêm Sắp xếp để Clustered DO không có tác dụng.

    – Hoàng Xuân An 23:43:06 13/06/2016
  • 1

    Thú vị, tôi đồng ý wrt việc sử dụng trong truy vấn chọn. Nhưng tự hỏi tại sao mọi người đang sử dụng cụm và sắp xếp theo nhau trong tuyên bố tạo bảng. Nếu không có ý nghĩa đối với SORTED BY trong DDL, thì tại sao từ khóa này lại có mặt? Không có được điều đó.

    – Tạ Hương Thu 04:12:24 14/06/2016
  • 1

    SORTED BY có nghĩa là được sử dụng với PHÂN PHỐI B BYNG. Chẳng hạn, bạn có thể muốn phân phối theo id người dùng và sắp xếp theo thời gian trong nhóm. CLUSTER BY chỉ là một phím tắt khi mệnh đề trên SORTED BY và DISTRIBUTED BY giống nhau. Điều duy nhất tôi có thể nghĩ là nếu bạn phân phối theo x, y và sắp xếp theo x, y và z

    – Đặng Lâm Uyên 20:42:09 14/06/2016
  • 1

    Tôi không chắc ý của bạn là gì bởi "bạn chỉ có thể xô trên một trường." Tôi nghĩ rằng có thể xô theo nhiều trường, hàm băm sẽ chỉ lấy tất cả các trường và kết hợp chúng.

    – Tạ Ngân Trúc 12:27:16 02/03/2018
18

Tôi nghĩ rằng tôi đến trễ khi trả lời câu hỏi này, nhưng nó cứ xuất hiện trong nguồn cấp dữ liệu của tôi.

Navneet đã cung cấp câu trả lời tuyệt vời. Thêm vào nó một cách trực quan.

Phân vùng giúp loại bỏ dữ liệu, nếu được sử dụng trong mệnh đề WHERE, trong đó việc phân nhóm giúp tổ chức dữ liệu trong mỗi phân vùng thành nhiều tệp, do đó, cùng một bộ dữ liệu luôn được ghi trong cùng một nhóm. Giúp rất nhiều trong việc tham gia các cột.

Giả sử, bạn có một bảng có năm cột, tên, server_date, some_col3, some_col4 và some_col5. Giả sử, bạn đã phân vùng bảng trên server_date và bị khóa trên cột tên trong 10 nhóm, cấu trúc tệp của bạn sẽ trông giống như bên dưới.

  1. server_date = xyz
    • 00000_0
    • 00001_0
    • 00002_0
    • ........
    • 00010_0

Ở đây server_date = xyz là phân vùng và 000 tệp là các nhóm trong mỗi phân vùng. Các nhóm được tính toán dựa trên một số hàm băm, vì vậy các hàng có tên = Sandy sẽ luôn đi trong cùng một nhóm.

|
  • 1

    Theo Roberto trong câu trả lời trên server_date sẽ là một ví dụ tồi để thực hiện phân vùng vì giá trị cardinality của nó thực sự cao. Và do đó, bạn sẽ có quá nhiều thư mục trong hdfs.

    – Đặng Gia Vinh 07:27:42 28/02/2018
  • 1

    server_date được đề cập như một ví dụ ở đây. Trong thế giới thực, phân vùng thường xảy ra như được mô tả bởi Roberto, bằng cách chia ngày thành năm / tháng / ngày. Đó là cách nó phải như vậy.

    – Hoàng Việt Long 09:27:42 28/02/2018
14

Phân vùng tổ ong:

Phân vùng chia số lượng lớn dữ liệu thành nhiều lát dựa trên giá trị của một cột trong bảng.

Giả sử rằng bạn đang lưu trữ thông tin của mọi người trên toàn thế giới trải rộng trên hơn 196 quốc gia trải rộng khoảng 500 lõi. Nếu bạn muốn truy vấn mọi người từ một quốc gia cụ thể (thành phố Vatican), nếu không có phân vùng, bạn phải quét tất cả 500 lõi mục thậm chí để lấy hàng nghìn mục của một quốc gia. Nếu bạn phân vùng bảng dựa trên quốc gia, bạn có thể tinh chỉnh quá trình truy vấn bằng cách chỉ kiểm tra dữ liệu cho một phân vùng quốc gia. Phân vùng Hive tạo một thư mục riêng cho giá trị (các) cột.

Ưu điểm:

  1. Phân phối tải thực thi theo chiều ngang
  2. Thực hiện nhanh hơn các truy vấn trong trường hợp phân vùng có khối lượng dữ liệu thấp. ví dụ: Lấy dân số từ " thành phố Vatican " trở lại rất nhanh thay vì tìm kiếm toàn bộ dân số thế giới.

Nhược điểm:

  1. Khả năng có quá nhiều sáng tạo phân vùng nhỏ - quá nhiều thư mục.
  2. Hiệu quả cho dữ liệu khối lượng thấp cho một phân vùng nhất định. Nhưng một số truy vấn như nhóm theo khối lượng dữ liệu lớn vẫn mất nhiều thời gian để thực hiện. ví dụ: Nhóm dân số của Trung Quốc sẽ mất nhiều thời gian so với việc phân nhóm dân số ở thành phố Vatican. Phân vùng không giải quyết vấn đề đáp ứng trong trường hợp dữ liệu lệch về một giá trị phân vùng cụ thể.

Hive Bucketing:

Bucketing phân hủy dữ liệu thành các phần dễ quản lý hơn hoặc bằng nhau.

Với phân vùng, có khả năng bạn có thể tạo nhiều phân vùng nhỏ dựa trên các giá trị cột. Nếu bạn đi xô, bạn đang giới hạn số lượng xô để lưu trữ dữ liệu. Số này được xác định trong các kịch bản tạo bảng.

Ưu

  1. Do khối lượng dữ liệu bằng nhau trong mỗi phân vùng, việc tham gia ở phía Bản đồ sẽ nhanh hơn.
  2. Phản hồi truy vấn nhanh hơn như phân vùng

Nhược điểm

  1. Bạn có thể xác định số lượng thùng trong quá trình tạo bảng nhưng việc tải khối lượng dữ liệu bằng nhau phải được lập trình viên thực hiện thủ công.
|
6

Sự khác biệt là chia các tệp theo Tên Cột và phân vùng chia các tệp trong Theo một giá trị cụ thể bên trong bảng

Hy vọng tôi xác định chính xác

|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.