Big Data đang được xem như một yếu tố mới quyết định đến việc phát triển cũng như mang lại lợi thế cạnh tranh cÿa các tổ chāc thông qua việc thu thập, phân tích và trích xuất các thông t
Trang 1Trường Đại Học Bách Khoa Tp Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính
MÔN HỌC Dþ LIÞU LàN _
Thiết Kế Hß Thßng Phân Tích & Đánh Giá
T hực Phẩm Bằng Hadoop và Hive
_
GVHD:
PGS.TS Thoại Nam
Nhóm 1:
Nguyễn Châu Kỳ – 1570215 Nguyễn Kim Lanh – 1570216 Đào Thị Thu Trang – 1570233
TP Hà CHÍ MINH, NGÀY 15 THÁNG 5 NĂM 2016
Trang 2Trường Đại Học Bách Khoa Tp Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính 2
Mục Lục
Lời cảm ơn 3
1 Giới Thiệu Chung 3
1.1 Tóm tắt nội dung 3
1.2 Vấn đề cần giải quyết 3
2 Cơ Sở Lý Thuyết 4
2.1 Kiến thāc về Hadoop 4
2.2 Kiến thāc về Hive 5
3 Phân tích và Thiết kế 6
3.1 Mô hình Client – Server 6
3.2 Kiến trúc Client 6
3.3 Kiến trúc Server 7
3.4 Cơ sở dữ liệu (Hive) 8
3.5 Tổng quan hệ thống 8
4 Hiện thực và Kết quả 9
4.1 Yêu cầu hệ thống 9
4.2 Hiện thực 9
4.3 Kết quả 10
5 Kết Luận 13
Tài Liệu Tham Khảo 13
Trang 3Trường Đại Học Bách Khoa Tp Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính 3
Lời cảm ơn
Với lòng biết ơn sâu sắc nhất, chúng em xin gửi đến Thầy Thoại Nam, người đã tận tình truyền đạt cho chúng em nhiều kiến thāc về môn Dữ Liệu Lớn (Big Data), giúp chúng em dễ dàng hơn trong việc tiếp cận với những tri thāc cÿa đề tài này Bài báo cáo thực hiện trong khoảng thời gian gần 5 tuần Do trình độ lý luận cũng như kinh nghiệm thực tiễn còn hạn chế, chúng em không tránh khỏi những sai sót, cho nên chúng em rất mong nhận được những ý kiến đóng góp, phê bình từ thầy Đó sẽ là những kinh nghiệm quý giá để giúp chúng em hoàn thiện những kiến thāc cÿa mình trong lĩnh vực này
Chúng em xin chân thành cảm ơn thầy!
1.1 Tóm tắt nßi dung
Ngày nay, cùng với tốc độ tăng trưởng chóng mặt cÿa lượng dữ liệu khổng lồ được phát sinh liên tục ở khắp nơi trên toàn thế giới, Big Data cũng trở thành một thuật ngữ phổ biến và là
xu hướng phát triển mới cÿa ngành công nghệ thông tin Big Data đang được xem như một yếu
tố mới quyết định đến việc phát triển cũng như mang lại lợi thế cạnh tranh cÿa các tổ chāc thông qua việc thu thập, phân tích và trích xuất các thông tin có giá trị từ khối dữ liệu khổng lồ này, ví
dụ như thu thập hành vi, sở thích, thói quen, xu hướng cÿa từng người tiêu dùng để đưa các chiến lược kinh doanh hiệu quả, tăng trải nghiệm mua sắm cho người tiêu dùng Trong bài tập này, nhóm chúng tôi tìm hiểu về kiến trúc và nguyên lý hoạt động cÿa Hadoop và Hive Sau đó
áp dụng nó để hiện thực thiết kế hệ thống phân tích và đánh giá thực phẩm trên Amazon
1.2 Vấn đề cần giải quyết
Hệ thống phân tích và đánh giá thực phẩm (Foody, Lozi …)
Lượng dữ liệu lớn thông tin đánh giá các thực phẩm tốt bao gồm: sản phẩm, thông tin người dùng, đánh giá xếp hạng …
Hàng ngàn/triệu người dùng đồng thời cùng submit đánh giá hay sản phẩm
Vấn đề lưu trữ dữ liệu làm sao để phân tính và tìm kiếm dữ liệu nhanh chóng:
Tính toán tổng số lượt review, điểm (ratings) trung bình cÿa 1 sản phẩm
Thống kê về người dùng
Trang 4Trường Đại Học Bách Khoa Tp Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính 4
2.1 Kiến thức về Hadoop
Hadoop Distributed File System (HDFS): HDFS là một nền tảng lưu trữ dữ liệu đáp āng cho một khối lượng dữ liệu lớn và chi phí rẻ, āng dụng kiến trúc cÿa Google File System (GFS) Nó
là một hệ thống tập tin phân tán cÿa Hadoop cung cấp khả năng tăng tuyến tính và lưu trữ dữ liệu đáng tin cậy, được thiết kế để lưu trữ các file rất lớn phân tán trên các cluster lớn sử dụng phần
cāng chi phí thấp (commodity hardware)
HDFS làm việc như thế nào?
Hình 1 Kiến trúc cÿa HDFS (source : http://hortonworks.com)
MapReduce: Hadoop MapReduce là một framework dùng để viết các āng dụng xử lý song song
một lượng lớn dữ liệu (terabytes or petabytes) lưu trên Hadoop
Hadoop MapReduce làm việc như thế nào?
Hình 2 Hoạt động cÿa Hadoop MapReduce
Trang 5Trường Đại Học Bách Khoa Tp Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính 5
2.2 Kiến thức về Hive
Hình 3 Kiến trúc cÿa Hive
Hoạt đßng của Hive
Mô hình dÿ lißu trong Hive
Downloaded by Hoc Vu (vuchinhhp7@gmail.com)
Trang 6Trường Đại Học Bách Khoa Tp Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính 6
3.1 Mô hình Client – Server
Phân tích: Một yêu cầu đầu tiên cÿa hệ thống là phải thu thập được các dữ liệu đang nằm phân
tán tại các máy trạm về server trung tâm để phục vụ nhu cầu phân tích Quá trình này phải được
thực hiện liên tục và gần như tāc thời để đảm bảo tính đúng đắn cÿa hệ thống Dữ liệu được thu thập ở đây là các dữ liệu có cấu trúc đã thông qua các bước tiền xử lý tại điểm nhận Do dữ liệu
nằm rời rạc ở nhiều vị trí khác nhau nên āng với mỗi nơi cần có một client đảm trách nhiệm vụ
đọc và gửi dữ liệu đến server
Thiết kế: Āng dụng cần có một server để giải quyết các vấn đề đã phân tích ở trên Hệ thống sẽ hoạt động theo mô hình client – server được minh họa như hình:
Như trên sơ đồ trên, hệ thống sẽ gồm 2 thành phần:
Client: đọc dữ diệu được lưu ở máy trạm và gửi về server thông qua TCP protocol
Server: nhận dữ liệu từ client, lưu trữ dữ liệu xuống hệ thống HDFS
3.2 Kiến trúc Client
Phân tích: Client phải có khả năng phân biệt dữ liệu đã gửi rồi và dữ liệu cần gửi tiếp theo để tránh dư thừa tại server
Thiết kế: Client sẽ được hiện thực thông qua kết nối Socket, đồng thời hiển thị ACK từ server
Sau khi gửi hết dữ liệu trong 1 file, client sẽ tiến thành thêm <read= vào cuối tên file để phân
biệt Hệ thống chỉ gửi dữ liệu trong những file không đuôi <read= Mô hình hoạt động cÿa client như hình vẽ
Downloaded by Hoc Vu (vuchinhhp7@gmail.com)
Trang 7Trường Đại Học Bách Khoa Tp Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính 7
Hình 4 Phương thāc kết nối Client-Server
3.3 Kiến trúc Server
Phân tích: Với những thông tin đã trình bày ở phần trước, có thể thấy rằng server đóng vai trò
tối quan trọng trong hoạt động cÿa toàn bộ āng dụng Ngoài việc lưu trữ lượng lớn dữ liệu, thực hiện các thao tác tính toán phāc tạp, server đồng thời phải đảm bảo được sự ổn định tối đa để có
thể đáp āng cho nhiều client cùng lúc Ngoài ra server còn phải giải quyết được các vấn đề sau:
Gửi tín hiệu ACK để client tiến hành gửi record tiếp theo
Bởi vì quá trình phân tích dữ liệu sẽ được thực hiện trên chính những file trên HDFS vào server đã ghi vào cho nên một vấn đề quan trọng là server phải giải quyết được việc đọc
và ghi đồng thời trên cùng 1 file có thể dẫn đến sự bất ổn cÿa hệ thống cũng như kết quả tính toán sau này
Thiết kế
Nền tảng: Như đã phân tích ở trên, hệ thống server sẽ được xây dựng trên nền tảng Hadoop để
hỗ trợ việc lưu trữ một lượng lớn dữ liệu
từ client, server sẽ tạo ra 1 Thread để nhận và ghi dữ liệu xuống HDFS Mỗi thread sẽ gồm 2
sub-module:
Socket Handler: quản lí kết nối và nhận dữ lệu từ Client đồng thời trả về ACK
HDFS Writer: ghi dữ liệu thu nhận được xuống file trên HDFS
Hình 5 Thiết Kế Server
Downloaded by Hoc Vu (vuchinhhp7@gmail.com)
Trang 8Trường Đại Học Bách Khoa Tp Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính 8
Để tránh việc ghi và đọc đồng thời trên 1 file, phải tách những file đang được ghi và những phải
đã hoàn thành Vì thế trong những file đã ghi xong sẽ được chuyển vào một thư mục khác Cụ thể, khi nhận được dữ liệu server sẽ tiến hành ghi xuống 1 file <.tmp= File này sẽ được chuyển vào thư mục <done= khi có một trong 2 trường hợp:
Kích thước file đạt đến một māc nhất định (có thể tùy chỉnh được)
Kết nối từ client bị đóng lại
Bằng cách như trên, server có thể tránh khỏi việc xung đột đọc và ghi đồng thời cũng đảm bảo được dữ liệu sẵn dùng (trong thư mục <done=) sẽ gần như realtime tùy thuộc vào kích thước file được cài đặt Cấu trúc file trên HDFS sẽ như hình bên dưới
Hình 6 Cấu trúc file trên HDFS
3.4 Cơ sở dÿ lißu (Hive)
Phân tích: Tùy thuộc vào dữ liệu đầu vào, ta có thể xây dựng những table trên Hive để đáp āng
nhu cầu cụ thể Trong demo này, chúng tôi sử dụng tập dữ liệu từ Stanford với hơn 568,454 records:
Đánh giá thực phẩm tốt từ amazon
Bao gồm thực phẩm và thông tin người dùng, điểm (ratings)
Thiết kế: Với tập dữ liệu như trên, thiết kế Hive Table với số cột tương thích Từ đây có thể thực
hiện các HQL tương tự như SQL thông thường
3.5 Tổng quan hß thßng
Downloaded by Hoc Vu (vuchinhhp7@gmail.com)
Trang 9Trường Đại Học Bách Khoa Tp Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính 9
4.1 Yêu cầu hß thßng
Server: Hadoop Cluster
Hệ điều hành: CentOS 7
Hadoop 2.7.0
Hive 1.2.1
Oracle JDK 1.7
Client:
OS: Windows, Linux, Mac, …
Oracle JDK 1.7 or later
Network: Client và Server có thể kết nối với nhau qua port chỉ định
4.2 Hißn thực
Hệ thống được hiện thực thành 3 module riêng biệt: client, server và hive module
Client module:
Client module được hiện thực bằng ngôn ngữ Java, sử dụng Socket API được cung cấp sẵn để thực hiện kết nối
Java hỗ trợ lập trình mạng thông qua các lớp trong gói java.net Một số lớp tiêu biểu được dùng cho lập trình Client-Server sử dụng socket làm phương tiện giao tiếp như:
InetAddress: Lớp này quản lý địa chỉ Internet bao gồm địa chỉ IP và tên máy tính
Socket: Hỗ trợ các phương thāc liên quan đến Socket cho chương trình Client ở chế độ
có nối kết
ServerSocket: Hỗ trợ các phương thāc liên quan đến Socket cho chương trình Server ở chế độ có nối kết
DatagramSocket: Hỗ trợ các phương thāc liên quan đến Socket ở chế độ không nối kết cho cả Client và Server
DatagramPacket: Lớp cài đặt gói tin dạng thư tín người dùng (Datagram Packet) trong giao tiếp giữa Client và Server ở chế độ không nối kết
Khi bắt đầu chạy, client sẽ khởi tạo 1 socket đến server thông qua IP và port chỉ định Client sẽ tiến hành duyệt qua tất cả các file không chāa đuôi <read=, dùng BufferReader để đọc, sau đó gửi từng dòng dữ liệu thông qua InputStream và nhận kết quả trả về thông qua OutputStream Kết thúc 1 file, sẽ tiến hành đổi tên file
Server module
Socket Handler: sử dụng Java socket để nhận kết nối Với mỗi kết nối sẽ tạo ra 1 Thread dựa trên Runable cÿa Java để xử lí
HDFS Writer: Sử dụng BufferReader phối hợp với Hadoop HDFS Java API để ghi dữ liệu xuống HDFS Các thao tác tạo file, di chuyển file cũng được thực hiện bằng FileSystem cÿa Hadoop
Hadoop HDFS Java API: Org.apache.hadoop.fs.FileSystem là một class cơ bản cÿa Hadoop dùng để truy cập cũng như quản lí file/thư mục trên môi trường phân tán
Downloaded by Hoc Vu (vuchinhhp7@gmail.com)
Trang 10Trường Đại Học Bách Khoa Tp Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính 10
Hive module
Sử dụng Hive Query Language để tạo table, thực hiện một số query mẫu để kiểm tra kết quả
User Define Funtion(UDF)
Thông thường, Hive hỗ trợ 1 tập hợp các functions để người dùng có thể thực hiện query như: count, concat, … Tuy nhiên, trong một số trường hợp, các functions có sẵn cÿa Hive không thể đáp āng được như cầu cụ thể cÿa người dùng Vì vậy, Hive cũng hỗ trợ API để chúng ta có thể làm việc này một cách dễ dàng
Với JAVA API, Hive cung cấp class adoop.hive.ql.exec.UDF, kế thước class này giúp chúng ta có thể linh hoạt xử lí input
Thông qua hàm evaluate (Text input), chúng ta có thể áp dụng các logic cần thiết với input này sau đó trả về kết quả bằng cách return new Text(output)
4.3 Kết quả
Tập dÿ lißu (Dùng Stanford)
Hình 7 Tập dữ Foods Review cÿa Stanford Gồm có 568,454 records được gửi tới server thông qua các clients
Client:
Client module sẽ đọc tất cả các file trong thư mục và gửi đến server Các file đã đọc xong được thêm đuôi <read= ở cuối để phân biệt Client sẽ không đọc dữ liệu trong các file có đuôi <read= vì những data nãy đã được gửi rồi
Hình 8 Dữ liệu đã và chưa được Client gửi đi Nhận ACK từ server trả về sau mỗi record gửi đi:
Downloaded by Hoc Vu (vuchinhhp7@gmail.com)
Trang 11Trường Đại Học Bách Khoa Tp Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính 11
Hình 9 Client gửi dữ liệu và nhận ACK chính là số thā tự record đã gửi
Server:
Bất cā lúc nào nhận được 1 connection từ client, server sẽ tạo ra 1 file tmp để lưu data tại đường dẫn chỉ định ftrong file server.properties File tmp sẽ được đóng lại và chuyển đến thư mục done khi có một trong 2 trường hợp xảy ra:
File đã đạt đến kích thước nhất định (được config) Quá trình này gọi là roll file Lúc này server cũng sẽ tạo ra file tmp mới để lưu trữ data sắp tới
Hình 10 Roll File vái dung lượng cấu hình là 1kb (1000byte)
Downloaded by Hoc Vu (vuchinhhp7@gmail.com)
Trang 12Trường Đại Học Bách Khoa Tp Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính 12
Nếu kết nối từ client bị đóng lại Trong trường hợp này dù file chưa đÿ kích thước vẫn sẽ tiến thành roll file
Hình 11 Roll File khi đóng kết nßi (filesize = 1kb) Hive module
Table
Table được tạo trên Hive theo đúng cấu trúc cho trước:
Hình 12 Cấu trúc table trên Hive Nhóm đã thành công thiết kế mßt sß câu Query mẫu để tìm kiếm thực phẩm tßt mßt cách nhanh chóng dựa trên các thußc tính của tập dÿ lißu
Downloaded by Hoc Vu (vuchinhhp7@gmail.com)
Trang 13Trường Đại Học Bách Khoa Tp Hồ Chí Minh
Khoa Khoa Học & Kỹ Thuật Máy Tính 13
Phần này tổng kết lại toàn bộ quá trình làm đề tài, những công việc đã hoàn thành, những vấn đề chưa giải quyết được, cũng như hướng phát triển cÿa đề tài trong tương lai
Kết quả đạt được
Sau quá trình thực hiện, đề tài đã đạt được nhiều kết quả khả quan, trong đó nổi bật nhất là:
Đề tài đã phát triển hệ thống hoàn chỉnh phía server và client, có thể vận hành tốt với đầy
đÿ các chāc năng đã định ra
Kiến trúc, nền tảng hệ thống phía server ổn định và vững chắc với mô hình 2 tầng, dễ dàng mở rộng ra trong tương lai
Quá trình thực hiện đề tài đã giúp bản thân sinh viên học hỏi thêm được nhiều công cụ mới hiện đại và hiệu quả (Hive, Hadoop, Mapreduce), cũng như kĩ năng nghiên cāu các thuật toán, phân tích, thiết kế hệ thống, so sánh và lựa chọn các phương án hiệu quả
Nhÿng vấn đề còn lại
Nhìn chung, dù đã rất cố gắng, nhưng với thời gian có hạn, đề tài vẫn còn một số vấn đề như sau:
Hiệu năng cÿa hệ thống chưa được kiểm tra và đánh giá toàn diện Với việc server cÿa hệ thống phải phục vụ cho nhiều client cùng lúc, cần có thời gian, cũng như công cụ để kiểm tra và đánh giá, từ đó tìm ra các vấn đề nếu có và nâng cao khả năng đáp āng cÿa hệ thống
Các chāc năng cÿa hệ thống hiện còn rất đơn giản, và chỉ góp phần định hướng phát triển cho đề tài trong tương lai
Chưa có các phương pháp bảo mật để đảm bảo an toàn thông tin cho hệ thống Trong tương lai, cần có các biện pháp bảo mật tốt hơn
Hưáng phát triển
Với những nền tảng đã xây dựng, đề tài có nhiều hướng đi để tiếp tục phát triển và hoàn thiện hơn, cụ thể:
Giải quyết toàn diện vấn đề hiệu năng và bảo mật Hiện tại, hệ thống chỉ mới đáp āng hai vấn đề này ở māc cơ bản Trong tương lai, khi mà āng dụng có nhiều người dùng hơn cần có các giải pháp toàn diện hơn: kết nối https, sử dụng các công cụ kiểm tra và đánh giá hiệu năng hệ thống
Tài Lißu Tham Khảo
[1] Elmasri, R & Navathe, S 2010 Fundamentals of Database Systems, 6th ed Pearson,
Messachusetts
[2] Programming Hive, Data Warehouse and Query Language for Hadoop, Dean Wampler,
Edward Capriolo, Jason Rutherglen, 2012
Downloaded by Hoc Vu (vuchinhhp7@gmail.com)