Xây dựng một kho dữ liệu với Hive

Kho dữ liệu đã thực sự là một trận chiến đang diễn ra giữa các tổ chức trong nhiều năm. Làm thế nào để bạn xây dựng nó? Những dữ liệu của bạn có thể tích hợp không? Bạn có nên sử dụng Kimball hoặc Inmon, nhà máy doanh nghiệp thông tin (CIF), hoặc siêu thị dữ liệu? Danh sách có thể kéo dài thêm theo ngày, thậm chí nhiều thập kỷ. Với dữ liệu lớn, các câu hỏi trở thành phức tạp hơn, chẳng hạn như là một kho dữ liệu đã đủ hay chưa?

pdf17 trang | Chia sẻ: lylyngoc | Lượt xem: 1593 | Lượt tải: 2download
Bạn đang xem nội dung tài liệu Xây dựng một kho dữ liệu với Hive, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Xây dựng một kho dữ liệu với Hive Xây dựng kho dữ liệu dựa vào ngân sách Kho dữ liệu đã thực sự là một trận chiến đang diễn ra giữa các tổ chức trong nhiều năm. Làm thế nào để bạn xây dựng nó? Những dữ liệu của bạn có thể tích hợp không? Bạn có nên sử dụng Kimball hoặc Inmon, nhà máy doanh nghiệp thông tin (CIF), hoặc siêu thị dữ liệu? Danh sách có thể kéo dài thêm theo ngày, thậm chí nhiều thập kỷ. Với dữ liệu lớn, các câu hỏi trở thành phức tạp hơn, chẳng hạn như là một kho dữ liệu đã đủ hay chưa? Câu trả lời nằm ở các doanh nghiệp. Người ta cho rằng Hive là kho dữ liệu Hadoop. Dù trên một mức độ nào đó là đúng, đôi khi nó cũng là một cái gì đó của một nhận định sai. Tuy nhiên, đôi khi bạn phải sử dụng các công cụ có sẵn, và vì thế, Hive có thể được coi là một kho dữ liệu. Ba đối tượng để tiếp cận một doanh nghiệp. Đối tượng đầu tiên — kho dữ liệu (data warehouse) — là rất lớn: nó mang đến lịch sử và kinh nghiệm, đồng thời là một trải nghiệm tốt. Nhưng nó cũng cồng kềnh và tốn kém theo rất nhiều cách khác nhau, và người ta đang mệt mỏi với các chi phí để cho các kết quả khác nhau. Apache Hadoop sa vào lối cũ và rút lại tuyên bố muốn tiếp quản thị trường. Nó rao giảng về dữ liệu lớn, vận tốc, khối lượng, đa dạng, và một loạt thứ v khác mà không có nhiều ý nghĩa nào khác ngoài một kế hoạch tiếp thị. Nó đưa ra các phân tích, dự đoán, và nhiều hơn nữa. Và nó rẻ. Mọi người dừng lại và lắng nghe. Apache Hive ra đời, nhưng không phải để cố gắng đánh bại các đối tượng khác. Nó muốn làm việc với Hadoop, nhưng không giống như Hadoop, nó không muốn gạt các kho dữ liệu đi sang một phía. Hive không những có khả năng kho dữ liệu, mà còn có khả năng phân tích kinh doanh thông minh (BI) và hạn chế phân tích. Nó không những có khả năng cơ sở dữ liệu, mà còn có hệ quản trị cơ sở dữ liệu (RDBMS) và ngôn ngữ truy vấn cấu trúc (SQL) hạn chế. Nó mở và thân thiện. Nó liên quan đến các kho dữ liệu. Nó liên quan đến các RDBMS. Nhưng nó không bao giờ xuất hiện và tuyên bố rằng nó nhiều hơn những gì trông thấy. Hadoop ngắt và tuyên bố nó là kho dữ liệu cho thế giới Hadoop. Hadoop dường như đã đưa ra đại diện tiếp thị hay nhất của mình, và những gì rút ra từ một cuộc trò chuyện đơn giản trở thành Hive và Hadoop cứu rỗi cả thế giới. Điều đó thật hấp dẫn, thú vị. Nhưng có thật hay không? Hãy tạm coi là như vậy. Kho dữ liệu Xây dựng một kho dữ liệu thực sự có thể là một dự án lớn. Có các thiết bị khác nhau, phương pháp và lý thuyết. Giá trị thông thường thấp nhất là bao nhiêu? Thực tế như thế nào, và những gì các đối tượng liên quan ngược trở lại các sự kiện đó? Và làm thế nào để bạn kết hợp, làm cho phù hợp, hợp nhất, và tích hợp các hệ thống mà có thể đã có từ nhiều thập kỷ trước với các hệ thống chỉ mới thành hiện thực cách đây vài tháng? Đây là trước dữ liệu lớn và Hadoop. Thêm phi cấu trúc, dữ liệu, NoSQL và Hadoop vào hỗn hợp, và đột nhiên bạn có một Dự án tích hợp dữ liệu lớn trong tay bạn. Cách đơn giản nhất để mô tả một kho dữ liệu là chuyển nó thành các lược đồ sao, sự kiện, và kích thước. Làm thế nào để bạn tạo ra những yếu tố thực sự là tùy thuộc vào bạn — cho dù đó là thông qua cơ sở dữ liệu dàn dựng; chiết xuất, chuyển đổi, quá trình tải, hoặc tích hợp chỉ số phụ ngay lập tức. Chắc chắn, bạn có thể xây dựng một kho dữ liệu với các lược đồ sao, sự kiện, và kích thước, sử dụng Hive như công nghệ cốt lõi, nhưng nó sẽ không được dễ dàng. Bên ngoài thế giới Hadoop, nó trở thành một thách thức lớn hơn. Hive, hiểu rộng ra là sự tích hợp, chuyển đổi, công cụ tra cứu nhanh chóng so với một kho dữ liệu hợp lệ. Giản đồ có thể nói kho dữ liệu, nhưng tính hữu dụng thậm chí không nói RDBMS. Vậy thì tại sao lại đi sử dụng nó? Thế nào là một giản đồ hình sao Hãy tưởng tượng một ngôi sao — một trung tâm và vài bàn tay chỉ về những hướng khác nhau. Trung tâm đó như là nhịp tim, hay còn gọi là fact table (bảng thực tế). Tất cả bàn tay chỉ về những kích thước khác nhau. Nhiều kho chứa dữ liệu cũng có một bảng thực tế và có rất nhiều hướng. Một bảng thực tế bao gồm bất kì một loại dữ liệu nào bạn có thể cân hoặc đếm. Ví dụ, bạn có một bảng thống kê về bóng chày như điểm số, số cú đánh quyết định, kết quả trận đấu, v.v.... Bạn có thể tính toán, cộng, trừ hoặc nhân các cột với nhau. Chiều (Dimensions) phụ thuộc nhiều vào mẫu. Ví dụ, bạn có chiều thông tin của người chơi, chiều thời gian và ngày, v.v.... Bạn không cần phải tính toán hay cân các cột trong các chiều đó. Trong ví dụ này, chìa khóa kết nối các bảng có kích thước khác nhau để thành một bảng thực tế là playerID. Đơn giản chỉ cần đặt, đôi khi, bạn phải sử dụng những công cụ đặt trước mặt bạn. Bất kì người nào hoạt động trong lĩnh vực IT ở bất kì khoảng thời gian nào có thể nói rằng công cụ phù hợp cho một công việc không phải lúc nào cũng sẵn có. Hay các công cụ phù hợp lúc nào cũng sẵn có, nhưng trước hết chúng ta phải cân nhắc đến yếu tố chi phí. Đôi khi yếu tố chính trị của một công ty cũng đóng vai trò rất lớn. Dù bất kì lí do nào, hầu hết chúng ta đều đang đang băn khoăn nơi nào cần phải xây dựng, thiết kế và phát triển cách sử dụng công cụ để đạt hiệu quả nhất với công việc. Tôi đã tham gia một số lượng lớn các dự án, chúng tôi phải sử dụng Hive như một cơ sở dữ liệu, như một kho chứa dữ liệu và như một hệ thống thay đổi từ từ. Đó là một thử thách, đôi khi gây rất nhiều phiền nhiễu. Thỉnh thoảng, bạn phải động não và trăn trở câu hỏi tại sao. Nhưng đến cuối ngày, bạn vẫn cần làm cho hoạt động. Và nếu một kho chứa dữ liệu được xây dựng và sử dụng trong Hive, bạn cần thay đổi từ từ về kích thước và cập nhật cũng như hòa giải những dữ liệu cũ, đó là điều cần thiết phải thực hiện. Nó không phải luôn là công cụ tốt nhất nhưng tạo ra công cụ cho bạn làm việc tốt nhất. Hive Hive mở ra một khối lượng lớn dữ liệu từ hệ sinh thái Hadoop tới phi chương trình vì SQL của nó – giống như khả năng và cơ sở dữ liệu hay đó là chức năng. Nó thường được miêu tả như một kho chứa dữ liệu mà cơ sử hạ tầng được xây dựng trên đỉnh của Hadoop. Đó là một câu tóm tắt không hoàn chỉnh — đó là khi bạn có thể chuyển đổi nguồn dữ liệu sang một giản đồ hình sao — nhưng nó thiên về thiết kế hơn là công nghệ khi bạn tạo một bảng thực tế và một bảng kích thước. Hive không hẳn là một kho chứa dữ liệu. Nó cũng không hẵn là một cơ sở dữ liệu. Bạn có thể xây dựng và thiết kế một kho chứa dữ liệu với Hive. Và bạn có thể xây dựng và thiết kế bảng cơ sở dữ liệu với Hive, nhưng có những hạn chế còn tồn tại đòi hỏi nhiều cách giải quyết và sẽ đặt ra nhiều thách thức. Ví dụ, hạn chế của Hive là lập chỉ mục. Bạn giải quyết vấn đề này như thế nào? Bạn có thể tạo ra một chỉ mục bằng cách sử dụng chức năng org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler. Hive và việc thay đổi chiều một cách chậm chạp có thể không chính xác. Nhưng nếu bạn xây dựng một bảng theo dõi và sử dụng chính xác một lượng (và bạn lên kế hoạch để thêm nó vào một bảng mới, vứt bỏ bảng cũ và chỉ giữ những cái gần nhất, cập nhật bảng để đối chiếu), thì nó có khả năng thực hiện được. Báo cáo bên ngoài và sự phân tích hệ thống kết nối với Hive đã phát hiện được một vấn đề to lớn. Thậm chí với kế nối JDBC, bạn bị giới hạn chỉ khi kết nối với cơ sở dữ liệu mặc định. Đã có một sự thúc đẩy hơn và nâng cấp siêu dữ liệu, công cụ như Apache HCatalog đang giúp kết nối các dịch vụ khác nhau tới siêu kho chứa của Hive. Trong tương lai, điều này có thể là một bổ sung tuyệt vời nếu sử dụng đúng cách. Vì vậy, mặc dù Hive không phải là kho chứa dữ liệu hay cơ sở dữ liệu cố định, cách tồn tại mà bạn có thể sử dụng Hive là kho chứa dữ liệu hoặc cơ sở dữ liệu. Chỉ có nỗ lực và một vài các giải quyết để tạo nên hệ thống Hive. Tại sao bạn không nhìn lại tất cả một lần nữa? Bởi vì bạn phải sử dụng những công cụ sẵn có và làm cho nó hoạt động. Ví dụ: Xây dựng kho dữ liệu thông tin bóng chày Ấn bản InfoSphere BigInsights Quick Start Ấn bản InfoSphere BigInsights Quick Start Edition là miễn phí, ấn bản cho phép tải về của InfoSphere BigInsights, dựa trên cơ sở Hadoop của IBM. Sử dụng ấn bản Quick Start, bạn có thể thử những tính năng mà IBM đã xây dựng để mở rộng giá trị của mã nguồn mở Hadoop, tương tự Big SQL, phân tích văn bản, và BigSheets. Các bài hướng dẫn sẽ giúp bạn dễ dàng trải nghiệm sản phẩm, bao gồm các hướng dẫn từng bước và video để giúp bạn bắt đầu ứng dụng Hadoop vào công việc của mình. Với việc không giới hạn thời gian và dữ liệu, bạn có thể thử nghiệm cho riêng mình với những lượng lớn về dữ liệu. Xem videos hướng dẫn, xem các bài hướng dẫn (PDF) , và tải về ấn bản BigInsights Quick Start. Thí dụ dữ liệu môn bóng chày sau đây cho thấy làm thế nào để thiết kế và xây dựng một kho dữ liệu trong Hive, sử dụng dữ liệu môn bóng chày từ trang web của Sean Lahman. Tôi thích sự thách thức của quá trình chuẩn hóa lại và quá trình xây dựng một kho dữ liệu từ dữ liệu kia. Trong bài "Xây dựng một thư viện dữ liệu với Hive," tôi đã tạo ra một máy ảo IBM InfoSphere® BigInsights™ sử dụng VMware Fusion trên chiếc Apple Macbook. Đó là một thử nghiệm đơn giản, thế là máy ảo của tôi đã có 1GB về RAM và 20GB về không gian dự trữ đĩa bán dẫn. Hệ thống hoạt động là bản CentOS 6.4 64-bit distro của Linux®. Để bắt đầu với ví dụ này, bạn hãy tải về ấn bản IBM InfoSphere BigInsights Basic (xem phần Tài nguyên). Bạn sẽ cần có một tài khoản IBM Universal hoặc là đăng ký để có một tài khoản trước đó để có thể tải xuống ấn bản này. Nhập dữ liệu Hãy bắt đầu bằng cách tải về tệp CSV chứa các thống kê về môn bóng bầu dục và các cầu thủ (xem phần Tải về). Từ bên trong Linux, tạo ra một thư mục, sau đó chạy dòng lệnh: $ Sudo mkdir /user/baseball. sudo wget Trong ví dụ có bốn bảng chính, mỗi bảng ứng với một cột duy nhất — Master table, Batting, Pitching, và Fielding — và một vài bảng phụ. Thiết kế kho dữ liệu Dữ liệu này được cấu trúc cho một thư viện dữ liệu, nhưng thay cho một kho dữ liệu, bạn phải tưởng tượng ra mặt thực tế và nhiều chiều. Việc thiết kế kho dữ liệu là đơn giản: bạn chuẩn hóa lại cơ sở dữ liệu này và tạo ra một cơ sở bảng thực tế trên thống kê cầu thủ. Sau đó bạn tạo ra chiều dựa trên cơ sở của khu vực chủ đề nhất định liên quan tới những thống kê kia. Hive là không tốt thực sự khi nó tới để tham gia, và MapReduce không tốt hơn nhiều, vì vậy có một lược đồ sao chuẩn hóa lại hỗ trợ với những truy vấn chắc chắn. Việc thiết kế bao gồm một bảng thực tế gọi là fact_Player_Stats, cái đó bao gồm mỗi cột thống kê thành lập trong các tệp CSV khác nhau và các bảng. Bạn cần dữ liệu từ những bảng cốt lõi (Batting, Pitching, và Fielding), cũng như từ những bảng phụ, cũng chứa đựng những thống kê. Bởi vậy, bạn nên thêm những cột thống kê theo những bảng sau:  AllStarFull  hall of Fame  BattingPost  PitchingPost  FieldingOF  Salaries  AwardsPlayers  AwardsSharePlayers  Appearances  SchoolsPlayers Một số bảng có duy nhất một vài cột thống kê. Ví dụ như, từ bảng FieldingOF, bạn cần thêm hạn chế nhiều cột, Glf, Gcf, và Grf tới bảng thực tế fact_Player_Stats. Đối với bảng SchoolsPlayers, lấy duy nhất cột yearMin và yearMax. Làm các bước tiếp theo tương tự với các bảng khác. Duy chỉ có cột thống kê là cần trong bảng thực tế. Lưu ý: bạn sẽ không sử dụng bất cứ dữ liệu nào từ các bảng Managers, Teams, TeamsHalf, SeriesPost, v.v.... Bảng thực tế fact_Player_Stats bao gồm duy nhất các khóa playerID, FranchID, yearID, và SchoolID. Đối với những bảng chiều (dimension), bạn phải lấy ra các thống kê (nếu có tồn tại) và giữ lại các cột liên quan đến chủ đề:  Bảng chiều dim_Players lấy những dữ liệu (tên cầu thủ, ngày sinh, thông tin tiểu sử, v.v....) từ bảng chính. Khóa chính là playerID.  Bảng chiều dim_TeamFanchise lấy tất các dữ liệu từ bảng TeamFranchise. Khóa chính là FranchID.  Bảng chiều dim_Schools lấy các dữ liệu từ bảng Schools.  Dim_Year là bảng theo chiều thời gian dựa trên cơ sở các tháng và các năm (1871- 2012). Sử dụng thư viện dữ liệu thay cho kho dữ liệu Nếu bạn chưa tạo thư viện dữ liệu bóng chày, tôi gợi ý nên làm ngay bây giờ, sau đó bắt đầu với kho dữ liệu từ các bảng cơ sở kia. Bạn có viết những bản thảo phức tạp để tóm lấy những cột chắc chắn từ tệp tin phẳng, và tái sự dụng đối với các tệp tin phẳng tương tự, nhưng thay cho đề mục này, bạn chọn để sử dụng thư viện được tạo ra trước đây trong bài "Xây dựng thư viện dữ liệu với Hive." Xây dựng kho dữ liệu với Hive Với sự phân tích dữ liệu và hoàn thành thiết kế, đó là lúc để xây dựng kho dữ liệu trên cơ sở của bản phác thảo lược đồ sao của bạn. Trong vỏ Hive, tạo cơ sở dữ liệu baseball_stats, tạo các bảng, tải các bảng, và xác minh các bảng là đúng. (quá trình này được đề cập trong bài "Xây dựng thư viện dữ liệu với Hive.") Tiếp theo, tạo bảng thực tế kho dữ liệu. Liệt kê 1 hiển thị đoạn mã. Liệt kê 1. Tạo bảng thực tế trong kho dữ liệu $ Hive Create Database baseball_stats; Create table baseball_stats.fact_player_stats as ( SELECT a.playerID, FranchID, yearID, SchoolID, stint int, g int, g_batting int, ab int, r int, h int, 2b int, 3b int, hr int, rbi int, sb int, cs int, bb int, so int, ibb int, hbp int, sh int, sf int, gidp int, w int, l int, g int, gs int, cg int, sho int, sv int, ipouts int, ph int, er int, phr int, pbb int, pso int, baopp int, era int,pibb int, wp int, phbp int, bk int, bfp int,gf int, pr int, p sh int, psf int, p gidp int, fg int, fgs int, innouts int, po int, a int, e int, dp int, pb int, wp int, fsb int, fcs int, zr int, gamenum int, allstargp int, ballots int, needed int,votes int, playoff_g int,playoff_ab int, playoff_r int, playoff_h int, playoff_2b int, playoff_3b int, playoff_hr int, playoff_rbi int, playoff_sb int, playoff_cs int, playoff_bb int, playoff_so int, playoff_ibb int, playoff_hbp int, playoff_sh int, playoff_sh, playoff_sf int, playoff_gidp int, pitchplayoff_w int, pitchplayoff_l int, pitchplayoff_g int, pitchplayoff_gs int, pitchplayoff_ cg int, pitchplayoff_sho int, pitchplayoff_sv int, pitchplayoff_ipouts int, pitchplayoff_h int,pitchplayoff_er int, pitchplayoff_hr int, pitchplayoff_bb int, pitchplayoff_so int, pitchplayoff_baopp int, pitchplayoff_era int, pitchplayoff_ibb int, pitchplayoff_wp int,pitchplayoff_hbp int, pitchplayoff_bk int, pitchplayoff_BFP int, pitchplayoff_gf int, pitchplayoff_r int, pitchplayoff_sh int, pitchplayoff_sf int, pitchplayoff_gidp int, glf int, grf int, gcf int, salary double, award int, fieldplayoffs_g int, fieldplayoffs_gs int, fieldplayoffs_innouts int, fieldplayoffs_po int, fieldplayoffs_a int, fieldplayoffs_e int, fieldplayoffs_dp int, fieldplayoffs_dp int,fieldplayoffs_tp int, fieldplayoffs_pb int, fieldplayoffs_sb int, fieldplayoffs_cs int, appearances_g_all int, appearances_gs int, appearances_g_batting int, appearances_defense int, appearances_g_p int, appearances_g_c int, appearances_g_1b int, appearances_g_2b int, appearances_g_3b int, appearances_g_ss int, appearances_g_ss int, appearances_g_lf int, appearances_g_cf int, appearances_g_rf int, appearances_dh int, appearances_ph int, appearances_pr int, yearMin double, yearMax double from baseball.Batting B JOIN Pitching P ON B.playerid = P.playerID JOIN fielding F ON B.playerID = F.playerID JOIN Team T ON b.teamid = t.teamid JOIN TeamFranchises TF ON t.franchid = tf.franchid ...); Bây giờ, tạo bảng theo chiều trong kho dữ liệu. Liệt kê 2 hiển thị đoạn mã. Liệt kê 2. Tạo bảng theo chiều trong kho dữ liệu $ Hive Create table baseball_stats.dim_Players AS ( SELECT lahmanID int, playerID int, managerID int, hofID int, birthyear INT, birthMonth INT, birthDay INT, birthCountry STRING, birthState STRING, birthCity STRING, deathYear INT, deathMonth INT,deathDay INT, deathCountry STRING, deathState STRING, deathCity STRING, nameFirst STRING, nameLast STRING, nameNote STRING, nameGive STRING, nameNick STRING, weight decimal, height decimal, bats STRING, throws STRING, debut INT, finalGame INT, college STRING, lahman40ID INT, lahman45ID INT, retroID INT, holtzID INT, hbrefID INT FROM baseball.master .... ); Chạy câu truy vấn Nào chúng ta cùng chạy một số truy vấn để chắc chắn rằng dữ liệu thể hiện một cách chính xác. Đầu tiên, hãy lựa chọn tất cả các dữ liệu từ bảng thực tế (giới hạn đầu tiên khoảng 10 dòng). Bạn có thể chạy một cặp truy vấn khác để bảo đảm rằng kích thước bảng của chúng cũng đúng, khi đó thì chúng có thể kết nối được với bảng thực tế v.v.. Bạn cũng có thể chạy 1 số lượng dữ liệu nào đó trong bảng thực tế để đảm bảo tổng các dòng xếp thành hàng. Tất nhiên, bạn sẽ phải tương quan đồng nhất với các bảng cơ sở dữ liệu ban đầu rồi mới thêm chúng. Liệt kê 3 hiển thị đoạn mã để kiểm tra khi dữ liệu có tồn tại và chính xác hay không và kích thước của chúng có kết nối được với bảng thực tế hay không. Liệt kê 3. Kiểm tra để xem dữ liệu có tồn tại và chính xác chiều kết nối với bảng thực tế không $ HIVE Use baseball_stats; Select * from fact_player_stats limit 10; Select A.PlayerID, A.name, B.teamID, B.AB, B.R, B.H, B.2B, B.3B, B.HR, B.RBI FROM dim_players A JOIN fact_player_stats B ON a.playerid = b.playerid; Select count(*) from fact_player_stats; Select count(*) from dim_players. Select max(r) from fact_player_stats where playerid=1234; Nếu bạn muốn xác nhận một cách kỹ lưỡng hơn về các dữ liệu trong kho dữ liệu Hive. Bạn có thể sử dụng giá trị nhỏ nhất, giá trị lớn nhất hay giá trị trung bình trong những cột chắc chắn hay thậm chí tất cả các cột và so sánh kết quả của chúng so với bảng cơ sở dữ liệu ban đầu. Bạn sẽ tìm thấy được sự kết nối chính xác. Kết luận Nhiều công việc thiết kế hứa hẹn sẽ đi vào việc tạo ra một giản đồ sao đơn giản, giả dụ bạn có thể trở lại và tạo ra một bảng thực tế dựa trên nhóm của mình. Lợi ích của giản đồ kho dữ liệu là bạn sẽ không phải tham gia vào nhiều bảng. Có rất ít thông tin cập nhật bên cạnh những số liệu đã cho hằng năm, trong trường hợp này, thì việc ghi đè lên các bảng chứa kho dữ liệu hoặc thêm một năm rồi tính toán lại không phải là một vấn đề. Hive chắc chắn cũng có những hạn chế, nhưng nếu bạn đang làm việc trên một ngân sách hoặc các công cụ đã được giao nhiệm vụ từ trên cao, với một chút công việc, Hive có thể cung cấp cho bạn các kho dữ liệu bạn cần.