ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ
TRẦN XUÂN HIẾU
ỨNG DỤNG CƠ SỞ DỮ LIỆU SONG SONG TRONG XỬ LÝ DỮ LIỆU
CUỘC GỌI
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
Hà Nội - 2016
2
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ
TRẦN XUÂN HIẾU
ỨNG DỤNG SƠ DỞ DỮ LIỆU SONG SONG TRONG XỬ LÝ DỮ LIỆU
CUỘC GỌI
Ngành:
Công nghệ thông tin
Chuyên ngành:
Hệ thống thơng tin
Mã số:
60 48 01 04
LUẬN VĂN THẠC SĨ CƠNG NGHỆ THÔNG TIN
NGƢỜI HƢỚNG DẪN KHOA HỌC: PGS. TS. NGUYỄN HẢI CHÂU
NHẬN XÉT CỦA CÁN BỘ HƯỚNG DẪN
Hà Nội – 2016
2
3
Lời cám ơn
Trước hết em xin được bày tỏ sự kính trọng, lịng biết ơn sâu sắc đến giảng viên
hướng dẫn PGS. TS. Nguyễn Hải Châu đã tận tình hướng dẫn, chỉ bảo cho em về
chuyên môn, truyền đạt kinh nghiệm quý báu trong suốt thời gian nghiên cứu luận văn
này.
Đồng thời em xin chân thành cám ơn sự giúp đỡ nhiệt tình của các Thầy Cơ giáo
Khoa sau Đại học – Đại học Công nghệ - Đại học Quốc Gia Hà Nội đã tạo điều kiện
thuận lợi cho em hoàn thành luận văn này.
Cuối cùng em xin dành sự biết ơn đến những người thân trong gia đình, bạn bè,
đồng nghiệp đã động viên, khích lệ, giúp đỡ em trong suốt thời gian vừa qua.
Hà Nội, ngày 21 tháng 01 năm 2016
Tác giả luận văn
Trần Xuân Hiếu
3
4
Cam kết
Tôi xin cam kết rằng nội dung của bản luận văn này chưa được nộp cho bất kỳ một
chương trình cập bằng cao học nào cũng như bất kỳ một chương trình đào tạo cấp bằng
nào khác.
Tơi cũng xin cam kết thêm rằng bản luận văn này là nỗ lực cá nhân tơi. Các kết
quả, phân tích, kết luận trong luận văn này (ngồi các phần được trích dẫn) đều là kết quả
làm việc của cá nhân tôi.
Hà Nội, ngày 21 tháng 01 năm 2016
Tác giả luận văn
Trần Xuân Hiếu
4
5
Mục lục
Chƣơng 1: Giới thiệu đề tài........................................................................................................................ 6
1.1
Giới thiệu ..................................................................................................................................... 6
1.2
Ngữ cảnh và lý do thực hiện đề tài ............................................................................................ 6
1.3
Nội dung luận văn ....................................................................................................................... 7
Chƣơng 2: Nền tảng tính toán phân tán kết hợp giữa Oracle và Hadoop ............................................. 8
2.1
Kiến trúc của Hadoop ................................................................................................................. 8
2.1.1
HDFS .................................................................................................................................. 11
2.1.2
Mơ hình MapReduce ........................................................................................................ 18
2.2
Oracle big data connector ........................................................................................................ 21
2.2.1 Oracle Loader for Hadoop ...................................................................................................... 24
2.2.2 Oracle SQL Connector for Hadoop Distributed File System .............................................. 25
2.3
Oracle Table Function .............................................................................................................. 25
Chƣơng 3: Thực nghiệm và kết quả ........................................................................................................ 26
3.1
Giới thiệu ................................................................................................................................... 26
3.2
Phƣơng pháp hồi quy tuyến tính ............................................................................................. 27
3.3
Mẫu dữ liệu ................................................................................................................................ 27
3.4
Mơ hình triển khai .................................................................................................................... 31
3.5
Phƣơng pháp thực hiện ............................................................................................................ 33
3.6
Đánh giá ..................................................................................................................................... 33
3.7
Kết luận ...................................................................................................................................... 37
3.7.1
Các kết quả đạt đƣợc ............................................................................................................ 37
3.7.2
Hƣớng phát triển ................................................................................................................... 37
5
6
Chƣơng 1: Giới thiệu đề tài
1.1 Giới thiệu
Tên đề tài luận văn: “Ứng dụng cơ sở dữ liệu song song trong xử lý số liệu cuộc gọi.”
Sơ lược: Trong đề tài này, tơi sẽ thực hiện tìm hiểu về nền tảng phát triển các ứng dụng
MapReduce trên framework Hadoop để phát triển các ứng dụng phân tán. Sau đó, tiến
hành tích hợp với Oracle, là một ứng dụng quản trị cơ sở dữ liệu, để đánh giá được tác
dụng của việc ứng dụng MapReduce vào trong các truy vấn thực tế.
Với đặc thù của dữ liệu cuộc gọi là số lượng rất nhiều bản ghi dẫn đến việc thực hiện các
câu truy vấn đọc dữ liệu trên một tập dữ liệu lớn sẽ mất nhiều thời gian. Trong khi đó kết
quả của q trình phân tích đánh giá rất cần thiết trong thời gian thực. Trong cơ sở dữ
liệu nói chung đã có một số biện pháp cho phép đẩy nhanh quá trình đọc dữ liệu như
đánh index, khoa ngoại…Nhưng trên một tập dữ liệu lớn các biện pháp trên không khả
thi. Các câu truy vấn đọc dữ liệu cần được chia thành nhiều câu truy vấn nhỏ và thực hiện
trên nhiều máy khác nhau. Do đó cần có sự kết hợp giữa mơ hình MapReduce với một hệ
quản trị cơ sở dữ liệu, trong trường hợp này tôi sử dụng Oracle.
1.2 Ngữ cảnh và lý do thực hiện đề tài
Với sự tiện lợi và đa dạng của loại hình dịch vụ OTT trong thời gian gần đây, đã kích
thích được người sử dụng chuyển sang thoại qua sóng 3G hoặc Wifi. Đây cũng là một bài
toán lớn đặt ra với các nhà mạng ở Việt Nam. Người dùng sử dụng dịch vụ nhiều dẫn đến
phát sinh nhiều dữ liệu của cuộc gọi phục vụ cho mục đích tính cước và đối soát cước.
Khi khối lượng dữ liệu của hệ thống gia tăng tới một mức độ nhất định (khoảng hàng
ngàn Terabyte chẳng hạn), thì việc hệ thống sẽ phải đối mặt với thách thức làm sao để
lưu trữ và phân tích dữ liệu.
Chúng ta khơng thể lưu một khối dữ liệu rất lớn lên chỉ duy nhất một đĩa cứng vì hai lý
do đơn giản. Thứ nhất, đó là sự giới hạn về khả năng lưu trữ của ổ cứng. Thứ hai, cho dù
vượt qua được giới hạn về dung lượng, thì việc truy xuất một khối lượng dữ liệu đồ sộ
như vậy một cách tuần tự (vì trên một đĩa đơn) sẽ rất mất thời gian vì giới hạn về tốc độ
đọc đĩa. Do vậy, bắt buộc chúng ta phải lưu trữ dữ liệu lên trên nhiều đĩa cứng thay vì chỉ
một. Điều này giúp cái thiện tốc độ truy xuất dữ liệu vì ta có thể tiến hành đọc/ghi một
cách song song lên các đĩa.
Việc lưu trữ dữ liệu phân tán lên nhiều đĩa cứng mang lại lợi thế về khả năng lưu trữ và
tốc độ truy xuất dữ liệu. Tuy nhiên, việc duy trì một hệ thống phân tán với nhiều đĩa cứng
đã dẫn đến một số vấn đề cần được giải quyết. Đầu tiên, là vấn đề hỏng hóc phần cứng.
Do dữ liệu được lưu trên nhiều phần cứng khác nhau, nên khả năng một (hay nhiều) phần
cứng xảy ra hỏng hóc cũng tăng lên đáng kể. Một cách giải quyết vấn đề này mà ta có thể
thấy ngay, đó là lưu trữ trùng lắp các mẫu dữ liệu lên nhiều đĩa cứng khác nhau. Vấn đề
6
7
thứ hai là việc phân tích dữ liệu đơi khi cần truy đọc dữ liệu từ nhiều đĩa cứng khác nhau.
Tức là dữ liệu được đọc từ một đĩa có thể cần được kết hợp với dữ liệu từ bất kỳ đĩa nào
khác trên hệ thống. Các hệ thống phân tán thường cho phép kết hợp dữ liệu từ nhiều
nguồn khác nhau, tuy nhiên làm được điều này một cách chính xác là khơng dễ chút nào.
Sự bùng nổ về dữ liệu đã đặt ra cho chúng ta những thách thức, thách thức về việc làm
thế nào lưu trữ và xử lý tất cả dữ liệu đó. Tuy nhiên, ở một mặt khác nó lại mang đến các
cơ hội, cơ hội chiếm lĩnh một nguồn thông tin khổng lồ nếu chúng ta có đủ khả năng
phân tích và xử lý nguồn dữ liệu đó, biến những dữ liệu thơ thành những thơng tin hữu
ích với một mức chi phí hợp lý.
1.3 Nội dung luận văn
Luận văn gồm có 4 chương chính:
Chương 1: Giới thiệu. Giới thiệu đề tài thực hiện.
Chương 2: Giới thiệu nền tảng tính tốn phân tán với Hadoop. Trong chương này,
sẽ giới thiệu sơ lược về dự án Hadoop của Apache Software Foundation. Sau đó đi sâu
vào hai phần trọng tâm là HDFS và MapReduce Engine. Giới thiệu kiến trúc, sức mạnh,
và cách tích hợp Oracle với Hadoop để xử lý dữ liệu theo mơ hình phân tán.
Chương 3: Báo cáo kết quả thực nghiệm. Trong chương này sẽ trình bày các thực
nghiệm và kết quả thực nghiệm. Thêm vào đó là các đánh giá và kết luận về kết quả này.
Chương 4: Tổng kết. Chương này sẽ nêu lên các kết quả đạt được của đề tài và
hướng phát triển.
7
8
Chƣơng 2: Nền tảng tính tốn phân tán kết hợp giữa Oracle và
Hadoop
2.1 Kiến trúc của Hadoop
Hadoop có hai thành phần chính sau:
HDFS (Hadoop Distributed File System): Hệ thống file phân tán, cung cấp khả
năng lưu trữ dữ liệu khổng lồ và tính năng tối ưu hóa việc sử dụng băng thơng
giữa các node. HDFS có thể được sử dụng để chạy trên một cluster với hàng
chục nghìn node.
MapReduce: một framework giúp phát triển các ứng dụng theo mơ hình
MapReduce một cách dễ dàng và mạnh mẽ, ứng dụng phân tán MapReduce có
thể chạy trên một cluster với nhiều node.
Ngoài hai thành phần cơ bản như trên, một dự án Hadoop có thể có các thành phần
khác như trong hình vẽ:
Hình 2.1: Các thành phần của dự án Hadoop
8
9
Apache Hbase: Là một cơ sở dữ liệu dạng cột. HBase sử dụng HDFS làm hạ
tầng cho việc lưu trữ dữ liệu bên dưới và cung cấp khả năng tính tốn song
song dữ trên MapReduce.
Apache Pig: Pig là một nền tảng cho việc phân tích dữ liệu lớn bao gồm một
ngôn ngữ mức cao để thể hiện các chương trình phân tích dữ liệu, cùng với cơ
sở hạ tầng để đánh giá các chương trình này. Đặc tính nổi bật của Pig là thực
thi chương trình tính tốn song song, cho phép xử lý một lượng dữ liệu lớn.
Apache hive: Hive là một hệ thống data warehouse cho Hadoop để nó có thể
dễ dàng tổng kết dữ liệu, truy vấn ad-hoc, và phân tích các bộ dữ liệu lớn được
lưu trữ trong HDFS. Hive hỗ trợ các truy vấn được thể hiện theo một ngôn ngữ
khai báo giống như SQL, đó là HiveQL (Hive Query Language). Các truy vấn
này tự động biên dịch thành các công việc MapReduce được thực hiện bằng
cách sử dụng Hadoop.
Chukwa: Một hệ thống tập hợp và phân tích dữ liệu. Chukwa chạy các
collector (các chương trình tập hợp dữ liệu), các collector này lưu trữ dữ liệu
trên HDFS và sử dụng MapReduce để phát sinh các báo cáo.
Apache Zookeeper: Là một dịch vụ tập trung để duy trì thơng tin cấu hình, đặt
tên,cho phép đồng bộ phân tán và cung cấp các nhóm dịch vụ rất hữu ích cho
các hệ thống phân tán. Hbase không thể hoạt động mà không có Zookeeper.
Kiến trúc của Hadoop là kiến trúc master-slave, cả hai thành phần HDFS và
MapReduce đều tuân theo kiến trúc master-slave này. Kiến trúc của một Hadoop
cluster được thể hiện như hình vẽ dưới đây:
9
10
Hình 2.2: Kiến trúc của một Hadoop cluster
Trên một Hadoop cluster có duy nhật một node chạy NameNode, một node chạy
JobTracker (NameNode và JobTracker có thể nằm cùng trên một máy vật lý, tuy
nhiên trên các cluster thật sự với hàng trăm nghìn node thì thường phải tách riêng
NameNode và JobTracker ra các máy vật lý khác nhau). Hadoop cluster có nhiều
slave, mỗi slave thường đóng hai vai trị: DataNode và TaskTracker.
NameNode: đóng vai trị là master của hệ thống HDFS, quản lý các metadata
của hệ thống HDFS như file system space, danh sách các file hệ thống và các
block id tương ứng của từng file, quản lý danh sách slave và tình trạng hoạt
động của các DataNode, điều hướng quá trình đọc/ghi dữ liệu từ client lên các
DataNode.
DataNode: chứa các block dữ liệu thực sự của các file trên HDFS, chịu trách
nhiệm đáp ứng các yêu cầu đọc/ ghi dữ liệu từ client, đáp ứng các yêu cầu tạo/
xóa các block dữ liệu từ NameNode.
SecondaryNameNode: duy trì một bản sao của metadata trên NameNode và
bản sao này sẽ được dừng để phục hồi lại NameNode nếu NameNode bị hư
hỏng.
10
11
JobTracker : tiếp nhận các yêu cầu thựcthi MapReduce job, phân chia job này
thành các task và phân công cho các TaskTracker thực hiện, quản lý tình trạng
thực hiện các task của TaskTracker và phân công lại nếu cần.
TaskTracker: nhận các task từ JobTracker và thực hiện task. TaskTracker có
nhiệm vụ là liên tục liên lạc với JobTracker
2.1.1 HDFS
HDFS (The Hadoop Distributed File System) là một hệ thống file phân tán được thiết
kế để chạy trên các phần cứng thơng thường. Nó có nhiều điểm tương đồng với các hệ
thống file phân tán hiện hành. Tuy nhiên, HDFS vẫn có sự khác biệt tương đối lớn so
với các hệ thống file phân tán khác. HDFS có khả năng chịu lỗi cao và được thiết kế
để triển khai trên các phần cứng giá rẻ. HDFS cung cấp thông lượng truy cập ứng
dụng cao để phù hợp với với các ứng dụng có tập dữ liệu lớn. HDFS ban đầu được
xây dựng như một cơ sở hạ tầng cho dự án máy tìm kiếm web với Apache Nutch.
Hiện tại, nó là một dự án con trong Apache Hadoop.
11
12
2.1.1.1Kiến trúc HDFS
Hình 2.3: Kiến trúc của HDFS
HDFS có kiến trúc master/slave. Một HDFS cluster bao gồm một NameNode và nhiều
DataNode.
NameNode là một master quản lý các metadata và quyền truy cập tới file bởi các client.
Các metadata mà NameNode lưu trữ gồm có:
File system namespace: là hình ảnh cây thư mục hệ thống file tại một thời điểm
nào đó. File system namespace thể hiện tất cả các file, các thư mục có trên hệ
thống file và quan hệ giữa chúng.
Thông tin ánh xạ từ tên file thành các block: mỗi file sẽ có một danh sách thứ tự
các block của file, mỗi block được đại diện bởi block id.
Nơi lưu trữ các block: mỗi block được đại diện bởi một block id. Mỗi block sẽ có
một danh sách các DataNode lưu trữ bản sao của các block đó.
DataNode là một slave được sử dụng để lưu trữ dữ liệu. Cụ thể, một file được chia thành
các blocks. Mỗi block sẽ được lưu trữ trên nhiều DataNode.
12
13
NameNode xử lý việc mở đóng, đổi tên file, thư mục, biết được block nào trên DataNode
nào để chỉ cho client đọc và lấy dữ liệu đúng chỗ (có nghĩa là truy xuất dữ liệu thực sự
không hề thông qua NamNode). Các DataNode cũng phụ trách việc tạo, xóa và sao các
block theo lệnh của NameNode. NameNode và DataNode được chạy trên các máy
GNU/Linux thông thường. HDFS được viết bằng java nên chạy được trên nhiều loại máy.
Thông thường mỗi máy trong một cluster sẽ chạy một DataNode.
NameNode dùng Editlog lưu những thay đổi của metadata và lưu toàn bộ File System
Namespace vào file FsImage (các metadata là dạng compact, chiếm ít dung lượng nên
NameNode chỉ cần 4GB là đủ). Khi khởi động, NameNode đọc ra FsImage và Editlog,
dựa vào Editlog để sửa FsImage trong bộ nhớ, sau đó lưu FsImage mới lại và xóa Edilog
cũ, q trình này được gọi là checkpoint. HDFS cịn có SecondaryNameNode làm nhiệm
vụ copy định kì FsImage và Editlog từ NameNode, kết hợp lại tạo thành FsImage mới trả
về cho NameNode, NameNode sẽ cập nhật lại FsImage và xóa Editlog cũ đi
2.1.1.2Q trình tƣơng tác giữa HDFS và client
Quá trình đọc file:
Hình 2.4: Quá trình đọc file trong HDFS
Các bước đọc file sẽ diễn ra theo trình tự sau:
1. Client sẽ mở file cần đọc bằng cách yêu cầu mở HDFS (với thể hiện là đối tượng
DistributedFileSystem.
13
14
2. DistributedFileSystem sẽ sử dụng RPC để gọi NameNode nhằm xác định vị trí của
các blocks. Đối với mỗi block, NameNode sẽ trả lại địa chỉ của các DataNode có
chứa bản sao của block đó. Hơn nữa, các DataNode được sắp xếp theo độ lân cận
của nó so với client. Sau đó, DistributedFileSystem sẽ trả về một
FSDataInputStream (một input stream hỗ trợ việc tìm kiếm file) cho client để có
thể đọc dữ liệu từ đó.
3. Client gửi yêu cầu đọc file đến FSDataInputStream, nơi lưu trữ các địa chỉ của
DataNode chứa các block trong file.
4. FSDataInputStreamkết nối tới DataNode đâu tiên (gần nhất) chứa block đầu trong
file, dữ liệu sẽ được gửi cho client.
5. Sau khi đọc xong block đầu tiên, FSDataInputStream sẽ đóng kết nối tới
DataNode và tìm đến Datanode tốt nhất cho block tiếp theo. Quá trình này lặp đi
lặp lại cho đến khi block cuối cùng được đọc xong.
6. Client đóng kết nối tới FSDataInputStream.
Q trình client đọc dữ liệu từ HDFS là trong suốt (transparent) với người dùng hoặc
chương trình ứng dụng client, người dùng sẽ dùng một tập API của Hadoop để tương
tác với HDFS, các API này che giấu đi sự liên lạc với NameNode và kết nối các
DataNode để nhận dữ liệu.
Quá trình ghi file
14
15
Hình 2.5: Quá trình ghi file trong HDFS
Các bước đọc file sẽ diễn ra theo trình tự sau:
1. Client tạo file bằng cách gọi hàm tạo trên DistributedFileSystem.
2. DistributedFileSystemtạo một RPC để gọi NameNode tạo ra một file mới trong
không gian hệ thống file. NameNode sẽ thực hiện việc kiểm tra khác nhau để đảm
bảo rằng file đó khơng tồn tại và client có quyền tạo file. Nếu kiểm tra thành công,
NameNode sẽ tạo một bản ghi cho file mới, ngược lại, việc tạo file là thất bại.
DistributedFileSystem trả lại FSDataOutputStream cho client để bắt đầu ghi dữ
liệu.
3. Client gửi yêu cầu viết file tới DFSOutputStream. DFSOutputStream chia nhỏ dữ
liệu thành các packet và tạo thành một hàng đợi, được gọi là hàng đợi dữ liệu.
Hàng đợi dữ liệu này sẽ được sử dụng bởi Data Streamer (Data Streamer có trách
nhiệm yêu cầu NameNode gửi danh sách các DataNode sẽ lưu trữ các block của
file cần ghi)
4. DFSOutputStream gửi packet cho DataNode thứ nhất. Sau khi nhận được packet,
DataNode này sẽ tiến hành lưu lại bản sao thứ nhất của block. Tiếp theo,
DataNode thứ nhất này sẽ gửi packet này cho DataNode thứ hai để lưu ra bản sao
thứ hai của block. Tương tự, DataNode thứ hai gửi cho DataNode thứ 3. Cứ như
15
16
5.
6.
7.
8.
vậy, các DataNode cũng lưu các bản sao của một block sẽ hình thành một đường
ống dữ liệu data pile.
Sau khi DataNode cuối cùng nhận được packet, nó sẽ gửi lại cho DataNode thứ
hai một gói xác nhận rằng đã lưu thành cơng. Và gói thứ hai lại gửi gói xác nhận
tình trạng thành cơng của hai DataNode về DataNode thứ nhất.
DFSOutputStream sẽ nhận được báo cáo xác nhận từ DataNode thứ nhất cho tình
trạng thành cơng của tất cả các DataNode trên data pile. Nếu có bất kì một
DataNode bị lỗi trong quá trình ghi dữ liệu, DFSOutputStream sẽ tiến hành xác
nhận lại các DataNode đã lưu thành công bản sao của block và thực hiện việc ghi
lại block trên các DataNode bị lỗi.
Sau khi tất cả các block của file được ghi lên các DataNode, client sẽ đóng kết nối
tới DFSOutputStream.
DistributedFileSystem thông báo cho NameNode cập nhập lại danh sách các block
của file vừa tạo. Thông tin ánh xạ từ các block id sang sanh sách các DataNode
lưu trữ sẽ được NameNode tự động cập nhật bằng cách định kỳ các DataNode gửi
báo cáo block cho NameNode danh sách block mà nó quản lý.
1.1.1.3 Cơ chế đảm bảo độ tin cậy trong Hadoop
Sao lưu dữ liệu
Các file được lưu trữ thành các block (các block có cùng độ lớn, trừ block cuối) trên
các máy khác nhau. Việc sao lưu này là để đảm bảo tính chịu lỗi. Độ lớn của block và
số bản sao đều có thể thiết lập được.Các DataNode sẽ gửi heartbeat (nhịp tim) và
blockreport (báo cáo block chứa danh sách tất cả các block trên DataNode đó) về cho
NameNode theo định kì. Heartbeat sẽ cho NameNode biết được tình trạng hoạt động
của DataNode, Blockreport sẽ giúp cho NameNode ra quyết định truy xuất dữ liệu
hoặc sao thêm nếu có block khơng đủ bản sao.
Để tăng độ tin cậy, tính sẵn sàng và tối ưu hóa đường truyền, HDFS lưu các bản sao
của các block theo kiểu rack-aware. Cụ thể nếu số bản sao là 3 thì có 2 bản sao lưu
trên 2 nodes thuộc cùng 1 rack, bản sao còn lại lưu trên node thuộc rack khác.
NameNode sẽ xác định DataNode nào thuộc rack nào.
Chế độ safemode
Khi khởi động NameNode sẽ vào trạng thái safemode, dựa trên Heartbeat và
Blockreport mà các DataNode gởi về. Block nào được sao đủ số lượng thì xem là an
tồn. Nếu có đủ một tỉ lệ nhất định (thiết lập được) các block an tồn, NameNode sẽ
thốt khỏi safemode sau 30s. Sau đó, những block nào chưa được sao ra đủ sẽ được
sao thêm.
16
17
Kiểm tra Heartbeats
Nếu NameNode không nhận được Heartbeat gửi định kì về thì xem như DataNode đó
đã chết, sẽ khơng cho tham gia các I/O, tất cả dữ liệu trên DataNode đó sẽ vơ hiệu.
Node chết có thể làm một số block không đủ bản sao, NameNode luôn kiểm tra điều
này và sao thêm khi cần.
Toàn vẹn dữ liệu
Do nhiều nguyên nhân, dữ liệu lấy ra từ DataNode có thể bị hư hỏng, phần mềm
client HDFS sẽ tiến hành checksum nội dung của file. Khi tạo file, HDFS sẽ tính ra
checksum của từng block và lưu thành file ẩn riêng biệt. Checksum của dữ liệu lấy từ
DataNode sẽ được so sánh với file ẩn này, nếu khơng giống thì xem như dữ liệu đã
hư, cần phải lấy từ DataNode khác.
Xóa dữ liệu
Khi file bị xóa, thực chất sẽ được di chuyển vào thư mục /trash, sau một thời gian
nhất định (mặc định 6 tiếng, có thể thiết lập) thì mới bị xóa hồn tồn. /trash chỉ lưu
bản sao cuối cùng và có thể khơi phục nhanh chóng khi lệnh xóa bị hủy.
Đĩa lưu metadata bị lỗi
FsImage và Editlog là cấu trúc dữ liệu trung tâm, nếu xảy ra lỗi có thể dẫn đến HDFS
ngừng hoạt động. Có thể thiết lập NameNode để lưu các cấu trúc này thành nhiều bản
sao, sửa bản chính phải đảm bảo đồng thời sửa bản sao.
Nâng cao tính năng
Chọn bản sao gần chương trình nhất để giảm lưu lượng truyền và thời gian. Nếu
không gian trống trên 1 DataNode giảm xuống mức độ nhất định, dữ liệu trên
DataNode đó sẽ được di chuyển sang các node khác. File có nhiều yêu cầu truy xuất
sẽ được sao ra thêm trên các node phù hợp. Tạm thời các tính năng này chưa có.
Khi client u cầu tạo file, HDFS client sẽ lưu tạm đến khi độ lớn vượt qua 1 block
thì mới liên lạc với NameNode. NameNode thêm tên file vào file system, cấp cho 1
block rồi đem node id với block id thông báo client, client tự đem file lưu vào block
đã chỉ định.
17
18
Khi viết dữ liệu vào HDFS, client gửi block đã lưu tạm sang DataNode đầu tiên (trong
danh sách được NameNode chỉ định) theo từng khối nhỏ 4KB, DataNode này vừa lưu
dữ liệu vừa đem dữ liệu gởi sang DataNode thứ 2, và cứ như thế đến node cuối cùng.
2.1.2 Mô hình MapReduce
MapReduce là mơ hình lập trình được đưa ra bởi google nhằm phục vụ cho việc tính
tốn phân tán để giúp các ứng dụng có thể xử lý nhanh một dữ liệu lớn (có thể là dữ
liệu có cấu trúc hoặc phi cấu trúc). Các dữ liệu này được đặt trên các máy tính phân
tán. Các máy tính này sẽ hoạt động song song độc lập với nhau. Điều này sẽ làm rút
gọn thời gian xử lý toàn bộ dữ liệu.
2.1.2.1Ngun tắc hoạt động
Hình dưới đây mơ tả rõ hơn về ngun tắc hoạt động của mơ hình MapReduce
Hình 2.6: Nguyên tắc hoạt động của MapReduce
MapReduce được áp dụng trên một hệ thống các máy tính được kết nối với nhau và
cài đặt chương trình MapReduce và thường kèm theo nó là hệ thống chia sẻ file phân
tán. Với mơ hình MapReduce, từ một cơng việc sẽ được chia nhỏ thành các công việc
con giống nhau và dữ liệu đầu vào cũng được chia nhỏ thành các mảnh nhỏ hơn.
MapReduce sử dụng hai thao tác chính cho việc thự thi công việc ban đầu từ người
dùng là hàm map và hàm reduce để thực hiện các thao tác xử lý một cách song song
và đồng thời. Theo một cách đơn giản, hàm map tiếp nhận mảnh dữ liệu input và
18
19
thực hiện xử lý nào đó (đơn giản như là lọc dữ liệu, hoặc trích dữ liệu) để chuẩn bị dữ
liệu làm đầu vào cho hàm reduce, hàm reduce thực hiện xử lý riêng của nó và trả ra
cho người dùng một phần nhỏ kết quả cuối cùng của công việc, sau khi tất cả hàm
reduce thực hiện người dùng sẽ có được tồn bộ kết quả của cơng việc. Tiếp theo
phần xử lý, với số lượng công việc con và số lượng mảnh dữ liệu trên, đầu tiên, hệ
thống MapReduce sẽ gửi từng công việc và từng mảnh dữ liệu đến các máy tính trong
hệ thống để thực hiện, bản chất là thực hiện hàm map một cách song song. Sau khi
thực hiện xong hết các công việc con thơng qua việc thực hiện hàm map thì hệ thống
sẽ bắt đầu thực hiện các hàm reduce để trả ra các kết quả cuối cùng cho người dùng.
MapReduce quản lý q trình thực thi cơng việc bằng việc định nghĩa một máy trong
hệ thống đóng vai trị là master và các máy cịn lại đóng vai trị của một worker (dựa
trên kiến trúc master-slave). Master chịu trách nhiệm quản lý tồn bộ q trình thực
thi cơng việc trên hệ thống như:tiếp nhận công việc, phân rã công việc thành công
việc con, và phân công các công việc con cho các worker. Cịn worker chỉ làm nhiệm
vụ thực hiện cơng việc con được giao (thực hiện hàm map hoặc hàm reduce).
2.1.2.2Hàm Map
Dữ liệu được đưa vào hàm Map là dữ liệu đã được phân nhỏ thành các phần. Đầu vào
của hàm Map là các cặp <k1, v1>. Sau khi xử lý toàn bộ dữ liệu đầu vào (gồm nhiều
phần sau khi được phân nhỏ) kết quả thu được là tập hợp gồm các cặp <k2, v2>. Các
dữ liệu này được gọi là dữ liệu trung gian. Các dữ liệu trung gian này có thể được
ghép lại với nhau theo danh sách các khóa để thuận tiện cho q trình reduce sau này.
2.1.2.3Hàm Reduce
Từ dữ liệu đầu ra của hàm Map (gồm danh sách các cặp <k2, v2>) của các máy tính
phân tán, hàm Reduce thực hiện việc tổng hợp các giá trị này lại. Kết quả đầu ra là
các cặp <k3, v3> đã được xử lý.
19
20
2.1.2.4MapReduce trong Hadoop
Hình 2.7: MapReduce trong Hadoop
Hadoop MapReduce gồm 4 thành phần chính riêng biệt:
Client program: Chương trình HadoopMapReduce mà client đang sử dụng và tiến
hành một MapReduce Job.
TaskTracker: Tiếp nhận MapReduce job và điều phối job này. Nó chia nhỏ job
thành các task và phân cơng các task này (map task và reduce task) này đến các
TaskTracker để thực hiện. Kèm theo vai trị của mình, JobTracker cũng có cấu
trúc dữ liệu riêng của mình để sử dụng cho mục đích lưu trữ, ví dụ như nó sẽ lưu
lại tiến độ tổng thể của từng job, lưu lại trang thái của các TaskTracker để thuận
tiện cho thao tác lên lịch phân công task, lưu lại địa chỉ lưu trữ của các output của
các TaskTracker thực hiện maptask trả về.
TaskTracker: Tiếp nhận task (maptask hay reducetask) từ JobTracker để thực hiện.
Và để giữ liên lạc với JobTracker, Hadoop Mapreduce cung cấp cơ chế gửi
heartbeat từ TaskTracker đến JobTracker cho các nhu cầu như thông báo tiến độ
của task do TaskTracker đó thực hiện, thơng báo trạng thái hiện hành của nó.
20
21
HDFS: là hệ thống file phân tán được dùng cho việc chia sẻ các file dùng trong cả
quá trình xử lý một job giữa các thành phần trên với nhau.
2.2 Oracle big data connector
Oracle Big Data Connectors là một bộ phần mềm tích hợp xử lý Apache Hadoop với các
hoạt động trong cơ sở dữ liệu Oracle. Tối ưu hóa cho Hadoop và cơ sở dữ liệu Oracle,
cho phép sử dụng khối lượng lớn dữ liệu phi cấu trúc và có cấu trúc để khám phá những
tri thức kinh doanh quan trọng. Connectors Oracle Big Data cho phép cực kỳ nhanh
chóng tải dữ liệu từ Hadoop vào cơ sở dữ liệu Oracle, cung cấp quyền truy cập vào dữ
liệu từ cơ sở dữ liệu Oracle HDFS, và hỗ trợ R và XML xử lý trong Hadoop với các công
cụ quen thuộc. Dễ dàng sử dụng với bộ kỹ năng hiện có, đơn giản hóa các giải pháp phát
triển của Big Data. Oracle Big Data Connectors cung cấp một bộ tính năng phong phú,
kết nối tốc độ cao, hiệu suất nhanh chóng, và an ninh cho các ứng dụng Big Data.
Các doanh nghiệp đang phát triển các giải pháp Big Data để xử lý khối lượng lớn các dữ
liệu thô để vượt qua các đối thủ cạnh tranh, có được cái nhìn sâu vào khách hàng cá nhân,
khai thác và phân tích mới. Những giải pháp này sử dụng Hadoop cho q trình xử lý dữ
liệu quy mơ lớn, chuyển đổi dữ liệu, và phân tích thăm dị của dữ liệu thơ, tích hợp các
kết quả với dữ liệu kinh doanh quan trọng trong cơ sở dữ liệu Oracle cho các truy vấn
thời gian thực, phân tích tiên tiến, và quản lý dữ liệu phức tạp. Oracle Big Data
Connectors kết nối Hadoop với cơ sở dữ liệu Oracle, cung cấp một cơ sở hạ tầng thiết
yếu cho các giải pháp Big Data. Giải pháp bao gồm tốc độ tải nhanh, sử dụng Oracle
SQL để truy cập dữ liệu trong HDFS, phân tích R và XML trong Hadoop, và tích hợp dữ
liệu, cho phép phát hiện các thơng tin, phân tích sâu sắc, và hội nhập nhanh chóng của tất
cả các dữ liệu trong các doanh nghiệp.
Oracle Big Data connector bao gồm các thành phần như trong bảng sau:
No
1
Tên chức năng
Oracle Loader for Hadoop
Mô tả
Xử lý song song, cho phép load dữ liệu
tốc độ cao từ Hadoop vào trong cơ sở dữ
liệu Oracle.
Oracle SQL Connector for HDFS
Xử lý song song, cho phép query dữ liệu
trong Hadoop từ cơ sở dữ liệu Oracle với
câu lệnh SQL.
Oracle R Advanced Analytics for
Hadoop
Hiệu năng cao, cho phép mở rộng và xử
lý song song khi thực thi mã code R trong
2
3
21
22
Hadoop.
4
Hiệu năng cao, khả năng mở rộng, xử lý
song song dữ liệu XML với XQuery
trong Hadoop.
Oracle XQuery for Hadoop
5
Cho phép khai báo, hiệu suất cao chuyển
dữ liệu và chuyển đổi trong Hadoop
Oracle Data Integrator Enterprise
Edition*
Bảng 2.1: mô tả chức năng của Oracle Big Data connector
Mơ hình mơ tả Oracle kết hợp với Hadoop
22
23
23
24
Hình 2.8: Cơ chế tải dữ liệu trong External Table
2.2.1 Oracle Loader for Hadoop
Oracle Loader cho Hadoop là một công cụ tải hiệu suất cao cho phép di chuyển nhanh dữ
liệu từ Hadoop đến cơ sở dữ liệu Oracle. Oracle Loader cho Hadoop đưa ra tiện lợi sử
dụng Hadoop để tính tốn sắp xếp các tài ngun, phân vùng, và chuyển đổi dữ liệu trên
Hadoop về loại dữ liệu Oracle trước khi nạp vào cơ sở dữ liệu. Chuyển dữ liệu về định
dạng của Oracle làm giảm thiểu sử dụng CPU trong quá trình tải của cơ sở dữ liệu, tối
giản tác động trên các ứng dụng cơ sở dữ liệu. Công cụ làm giảm bớt sự cạnh tranh đối
với các nguồn tài nguyên, một vấn đề phổ biến khi phải xử lý khối lượng dữ liệu lớn.
Tính năng này làm cho kết nối giữa Oracle và Hadoop đặc biệt hữu ích đối với các tải
liên tục và thường xuyên.
Oracle Loader cho Hadoop sử dụng một kỹ thuật lấy mẫu sáng tạo thông minh phân phối
dữ liệu qua các nút Hadoop trong khi tải dữ liệu song song. Điều này giảm thiểu những
ảnh hưởng của lệch dữ liệu, một mối quan tâm phổ biến trong các ứng dụng song song.
Oracle Loader cho Hadoop tải vào bảng với bất kỳ cơ sở dữ liệu nén: nén Bảng cơ bản,
nén nâng cao theo hàng, và nén pha trọn giữa các cột.
Oracle Loader cho Hadoop có thể tải một loạt các định dạng đầu vào. Nguyên bản nó có
thể tải dữ liệu từ các tập tin văn bản, bảng Hive, log file (phân tích và tải), Oracle NoSQL
Database, và nhiều hơn nữa. Thơng qua Hive nó cũng có thể được tải từ các định dạng
đầu vào (ví dụ như: Parquet, các tập tin JSON) và các nguồn đầu vào (ví dụ như: HBase)
có khả năng truy xuất to Hive. Ngoài ra, Oracle Loader cho Hadoop có thể đọc các định
dạng dữ liệu độc quyền thông qua định dạng đầu vào hiện thực tùy chỉnh được cung cấp
bởi người sử dụng.
Chức năng:
Offload data type conversion to Hadoop
Giảm thiểu tương tác giữa cơ sở dữ liệu và
CPU.
Parallel load
Tăng tốc độ xử lý song song giữa các
nodes trong hệ thống Hadoop.
Tự động cân bằng tải để giải quyết bài
toán mất cân bằng dữ liệu.
Xác thực truy xuất thông qua Kerberos.
Load balancing
Security
Input formats
Hỗ trợ nhiều định dạng file đầu vào như:
text, Hive, Parquet, JSON, chuỗi files, file
nén, file logs …
Partition-aware load
Cho phép chỉ tải dữ liệu từ phan vùng
chứa dữ liệu của Hive.
Bảng 2.2: Chức năng của Oracle Loader for Hadoop
24
25
2.2.2 Oracle SQL Connector for Hadoop Distributed File System
Oracle SQL Connector cho HDFS cho phép bạn truy vấn dữ liệu lưu trữ trên Hadoop từ
cơ sở dữ liệu bằng cách sử dụng câu truy vấn Oracle SQL. Các dữ liệu được truy cập
thơng qua bảng bên ngồi và có thể được truy vấn như bất kỳ bảng khác trong cơ sở dữ
liệu. Dữ liệu cũng có thể được nạp bằng cách chọn dữ liệu từ bảng bên ngoài và chèn nó
vào một bảng trong cơ sở dữ liệu. Tốc độ tải từ Oracle Big Data Appliance cho Oracle
Exadata là 15 TB / giờ.
Oracle SQL Connector cho HDFS có thể truy vấn hoặc tải dữ liệu trong tập tin văn bản
hoặc bảng Hive qua các tập tin văn bản. Khi truy vấn từ một bảng phân vùng Hive,
Oracle SQL Connector cho HDFS thể được hạn chế để truy cập vào một tập hợp con của
các phân vùng Hive, giảm thiểu các dữ liệu truy cập cho hiệu suất nhanh hơn. Oracle
SQL Connector cho HDFS cũng có thể truy vấn các tập tin ở định dạng Oracle Data
Pump, chẳng hạn như các file dữ liệu được tạo ra bởi Oracle Loader cho Hadoop để tải
dữ liệu offline và các tập tin sao chép từ các cơ sở dữ liệu để Hadoop lưu trữ.
Chức năng:
Oracle SQL access to data in Hadoop
Cho phép truy vấn trực tiếp dữ liệu từ
bảng của Hive và file dữ liệu trong phan
vùng HDFS.
Partition-aware access of Hive
Tải hoặc truy vấn dữ liệu chỉ trên phan
partitioned tables
vùng của Hive.
Parallel query and load
Tăng tốc độ truy vấn song song và tải dữ
liệu vào trong cơ sở dữ liệu Oracle.
Security
Xác thực truy cập thông qua Kerberos.
Flexible and easy to use
Công cụ cho phép tạo external tables.
Access Oracle Data Pump files in HDFS
Lưu trữ dữ liệu trong cơ sở dữ liệu như
with Oracle SQL
các dump files trong Hadoop và cho phép
truy vấn từ cơ sở dữ liệu Oracle.
Bảng 2.3: chức năng của Oracle SQL Connector for HDFS
2.3 Oracle Table Function
Table Function là chức năng mà tạo ra một bộ sưu tập của các hàng (hoặc một bảng lồng
nhau hoặc một varray) mà có thể được truy vấn giống như một bảng cơ sở dữ liệu vật lý.
Bạn sử dụng một Table function như tên của một bảng cơ sở dữ liệu, trong mệnh đề
FROM của một truy vấn.
Một Table Function có thể có một bộ sưu tập các hàng như là đầu vào. Một tập các tham
số đầu có thể là một tập các kiểu hoặc một CURSOR REF.
25