Quản lý và khai phá dữ liệu trên lưới

Tài liệu Quản lý và khai phá dữ liệu trên lưới: QUẢN LÝ VÀ KHAI PHÁ DỮ LIỆU TRÊN LƯỚI Giới thiệu Ngày nay, các hệ thông thông tin ngày càng lưu trữ một khối lượng lớn dữ liệu về hoạt động hằng ngày của chúng. Từ khối dữ liệu này, các kĩ thuật trong khai phá dữ liệu và máy học có thể dùng để trích xuất những thông tin hữu ích mà chúng ta chưa biết. Các tri thức vừa học được có thể vận dụng để phân tích hoạt động và cải thiện hiện quả của hệ thống thông tin ban đầu. Tuy nhiên, việc áp dụng các giải thuật về khai phá dữ liệu trên khối lượng dữ liệu thực tế lớn sẽ đòi hỏi thời gian xử lý rất dài và không hiệu quả. Đã có một số nỗ lực song song và phân bố hóa các giải thuật để chạy trên các hệ thống tính toán mạnh. Tuy nhiên, nếu dữ liệu cần khai phá là rất lớn thì chúng vẫn đòi hỏi một lượng tài nguyên tính toán lớn và điều này gây ra rất nhiều khó khăn trong việc triển khai và áp dụng các ứng dụng khai phá dữ liệu trong thực tế. Trong khi đó, môi trường tính toán lưới hứa hẹn sẽ giải quyết rất tốt bài toán về tài nguyên tính toán vớ...

doc63 trang | Chia sẻ: hunglv | Lượt xem: 1264 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Quản lý và khai phá dữ liệu trên lưới, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
QUẢN LÝ VÀ KHAI PHÁ DỮ LIỆU TRÊN LƯỚI Giới thiệu Ngày nay, các hệ thông thông tin ngày càng lưu trữ một khối lượng lớn dữ liệu về hoạt động hằng ngày của chúng. Từ khối dữ liệu này, các kĩ thuật trong khai phá dữ liệu và máy học có thể dùng để trích xuất những thông tin hữu ích mà chúng ta chưa biết. Các tri thức vừa học được có thể vận dụng để phân tích hoạt động và cải thiện hiện quả của hệ thống thông tin ban đầu. Tuy nhiên, việc áp dụng các giải thuật về khai phá dữ liệu trên khối lượng dữ liệu thực tế lớn sẽ đòi hỏi thời gian xử lý rất dài và không hiệu quả. Đã có một số nỗ lực song song và phân bố hóa các giải thuật để chạy trên các hệ thống tính toán mạnh. Tuy nhiên, nếu dữ liệu cần khai phá là rất lớn thì chúng vẫn đòi hỏi một lượng tài nguyên tính toán lớn và điều này gây ra rất nhiều khó khăn trong việc triển khai và áp dụng các ứng dụng khai phá dữ liệu trong thực tế. Trong khi đó, môi trường tính toán lưới hứa hẹn sẽ giải quyết rất tốt bài toán về tài nguyên tính toán với chi phí thấp. Do đó, cách tiếp cận của chúng tôi là tìm hiểu chọn lọc, và đề xuất giải thuật khai phá dữ liệu có mô hình thích hợp với việc phát triển các phiên bản chạy trên nền tính toán phân bố. Để phù hợp với tính chất của môi trường tính toán lưới, các giải thuật này phải có khả năng thực hiện phân tán trên các nút tính toán không đồng nhất về khả năng tính toán và có kết nối lỏng lẻo. Để hiện thực ý tưởng này trên GRID, hệ thống về cơ bản sẽ cần có hai thành phần quan trọng cần phải nghiên cứu và hiện thực là: (1) Quản lý dữ liệu trên lưới; và (2) Khai phá dữ liệu trên lưới. Phần quản lý dữ liệu trên lưới Nội dung chính của phần này là xây dựng một hệ thống quản lý dữ liệu trên môi trường Grid (Grid Data Management System - GDM) có những chức năng sau: Phân bố, đồng bộ và tích hợp dữ liệu Trên môi trường Grid, dữ liệu được lưu trữ phân bố với nhiều định dạng khác nhau gây khó khăn cho việc truy xuất dữ liệu. Mục tiêu của thư viện là xây dựng các dịch vụ hỗ trợ việc quản lý dữ liệu trên Grid đồng thời cho phép người sử dụng thao tác trên dữ liệu dễ dàng, nhanh chóng và hiệu quả. Từ một khối lượng lớn dữ liệu, ta có thể sử dụng một số dịch vụ của thư viện để lưu trữ phân bố lượng dữ liệu đó dưới nhiều định dạng khác nhau. Ngược lại, khi cần thiết, ta có thể tổng hợp dữ liệu từ nhiều nơi với nhiều định dạng khác nhau để phục vụ cho một yêu cầu nào đó. Bên cạnh đó, giống như một cơ sở dữ liệu thông thường, thư viện cũng cung cấp những chức năng thao tác trên dữ liệu như truy vấn, cập nhật hay thực hiện một thủ tục cho trước. Ngoài ra, thư viện còn hỗ trợ các chức năng thay đổi định dạng và truyền nhận dữ liệu trên môi trường phân bố. Phân bố dữ liệu trên các node cần phải chú ý đến tính tin cậy và tính nhất quán dữ liệu. Tin cậy: nếu một trong các node bị hư thì vẫn đảm bảo được tính đúng đắn của chương trình, nghĩa là cần phải tạo các bản sao dữ liệu (không cần phải sao lưu tòan bộ dữ liệu). Khi đã tạo ra bản sao dữ liệu cần phải có cơ chế cập nhật bản sao để đảm bảo tính nhất quán dữ liệu. Bảo mật dữ liệu Có 2 vấn đề chính: (1) Quyền truy xuất dữ liệu: Ai là người có quyền truy xuất dữ liệu, quyền cập nhật dữ liệu. (2) Bảo mật dữ liệu khi truyền đi: có thể sử dụng những chức năng bảo mật dữ liệu do hạ tầng Grid cung cấp. Hệ thống đã đưa ra giải pháp sử dụng các tickets cho vấn đề (1) và đã hiện thực một prototype cho giải pháp đề nghị. Phân tích và theo dõi hiệu năng truy xuất dữ liệu Vì dữ liệu được lưu trữ phân bố do đó thư viện GDM cung cấp những chức năng giúp theo dõi tần suất sử dụng cũng như thời gian thao tác trên dữ liệu ở các nơi và dự đoán thời gian thao tác trên dữ liệu gắn với từng yêu cầu cụ thể. Từ những thông số đó, ta có thể điều chỉnh lại kế họach sử dụng dữ liệu cho phù hợp, tăng hiệu suất sử dụng và giảm thời gian hoàn thành một nhiệm vụ được giao. Tất cả các chức năng này đều được hiện thực như các dịch vụ trên lưới (grid service). Tính phí sử dụng dữ liệu Dựa trên những kết quả của việc phân tích và theo dõi hiệu năng truy xuất dữ liệu, ta có thể căn cứ vào khối lượng dữ liệu được truy xuất để tính phí sử dụng dữ liệu của ứng dụng. Phần khai phá dữ liệu trên lưới Trong kỹ thuật khai phá dữ liệu, có nhiều nhóm giải thuật và trong mỗi nhóm có hàng trăm giải thuật để phân tích và tìm kiếm các tri thức hữu ích. Chúng tôi tập trung tìm hiểu các giải thuật thuộc nhóm gom cụm (clustering) và đề nghị áp dụng giải thuật Phân nhóm 2 giai đoạn 2-Phase K-Mean vì giải thuật này phù hợp với môi trường tính toán lưới. Bước kế tiếp, chúng tôi hiện thực, triển khai và thử nghiệm giải thuật trên hạ tầng tính toán lưới đã được xây dựng bởi nhóm GDM bên trên. Ứng dụng khai phá dữ liệu sử dụng chức năng tìm kiếm tài nguyên của nhóm hệ thống phát triển hạ tầng tính toán lưới để tìm kiếm các tài nguyên tính toán phù hợp và nhờ môi trường lưới bên dưới để triển khai công việc lên trên tài nguyên tính toán đó. Ngoài ra, do đặc thù của bài toán phải thao tác trên một khối lượng dữ liệu lớn được lưu trữ phân tán ở nhiều định dạng khác nhau, ứng dụng khai phá dữ liệu sử dụng lớp quản lý dữ liệu trên lưới để phân bố dữ liệu lên các nút tính toán và thực hiện tổng hợp dữ liệu kết quả trả về từ các nút tính toán. Chi tiết hơn về hai thành phần trên đây của hệ thống sẽ được trình bày cụ thể trong các mục sau của chương này. Tóm lại, trong dự án này, phần quản lý và khai thác dữ liệu trên lưới đã nghiên cứu, phát triển/xây dựng thành công các sản phẩm/qui trình công nghệ cụ thể được tóm tắt lại như sau: STT Sản phẩm/qui trình công nghệ 1 Bản báo cáo kỹ thuật đặc tả các chức năng, kiến trúc của hệ thống và protocol truy xuất dữ liệu trên Grid cho các ứng dụng 2 Báo cáo kỹ thuật xác định đặc tả giao tiếp giữa các nhóm: ứng dụng khai phá dữ liệu trên lưới, quản lý dữ liệu trên lưới, và quản lý tài nguyên tính toán 3 Phần mềm thư viện dưới dạng grid services thực hiện gói cơ bản các chức năng gọi hàm truy xuất dữ liệu và giao tiếp với Grid để cung cấp cho nhóm ứng dụng khai phá dữ liệu (hoặc bất cứ một ứng dụng nào khác có nhu cầu) sử dụng. Chức năng chính của thư viện gồm: - Quản lý user - Quản lý thông tin về các tài nguyên dữ liệu của hệ thống - Quản lý, cấp phát và thực thi ticket - Cung cấp thông tin theo dõi trạng thái sử dụng dữ liệu của ứng dụng (có thể dùng để đánh giá hiệu xuất, tính chi phí, …) 4 Phần mềm kết nối, thực hiện phần gọi hàm truy xuất dữ liệu cơ bản và giao tiếp với computing grid (phần tài nguyên tính toán) 5 Phần mềm hiện thực trên Grid cho giải thuật 2-Phase K-Mean triển khai trên ProActive, GTK4 6 Phần mềm hiện thực một ứng dụng minh họa (bài toán phân loại đất rừng) cho hoạt động của hệ thống 7 Viết báo cáo kỹ thuật về hướng dẫn sử dụng và cài đặt hệ thống 8 Xuất bản 3 bài báo khoa học trong các hội nghị và tạp chí chuyên ngành trong và ngoài nước 9 Qui trình công nghệ cài đặt OGSA-DAI và GDM trên Grid 10 Qui trình công nghệ xây dựng một grid service 11 Qui trình công nghệ triển khai một ứng dụng khai pha dữ liệu trên lưới với sự hỗ trợ của GDM Kiến trúc hệ thống GDM Hình 1: Kiến trúc hệ thống quản lý dữ liệu trên Grid (GDM) Các thành phần của hệ thống Computing Resource Computing Resource đại diện cho các tài nguyên tính toán trên Grid, bao gồm tất cả các tài nguyên có thể được cấp phát (computing resource) để phục vụ cho việc tính toán trên môi trường Grid. Data Resource Data Resource đại diện cho các tài nguyên dữ liệu trên Grid. Mỗi data resource là một node chứa dữ liệu trên môi trường Grid. Grid Data Management (GDM) Đây là khối chức năng trung tâm trong kiến trúc của hệ thống, quản lý thông tin về các tài nguyên dữ liệu trên Grid. Mọi thao tác trên dữ liệu đều phải thông qua sự kiểm soát của GDM. GDM lưu trữ siêu dữ liệu (metadata) về các tài nguyên dữ liệu trên Grid: các node chứa dữ liệu, vị trí các bản sao dữ liệu, các quyền truy xuất trên dữ liệu, ... GDM đảm nhận các công việc sau: Quản lý thông tin (metadata) về các tài nguyên dữ liệu trên Grid. Cung cấp thông tin về các tài nguyên dữ liệu trên Grid: tên node chứa tài nguyên, một số thông tin về dữ liệu chứa trên node như định dạng dữ liệu, kích thước dữ liệu, vị trí khối dữ liệu này trong khối dữ liệu lớn ban đầu (trước khi nó được phân bổ xuống các node trên Grid), … Thẩm định và cấp phát các quyền khác nhau cho ứng dụng: quyền truy vấn thông tin về các tài nguyên dữ liệu trên Grid, quyền truy vấn và thao tác trên một tài nguyên dữ liệu cụ thể. Cấp phát và quản lý các ticket để một ứng dụng có thể truy vấn và thao tác dữ liệu trên môi trường phân bố. Ticket chứa những thông tin cần thiết như tên tài nguyên, quyền truy xuất, … Hỗ trợ việc truy vấn và thao tác dữ liệu ứng với các ticket đã cấp phát. Business Application Đại diện cho một ứng dụng cần sử dụng dữ liệu chứa trong những tài nguyên dữ liệu trên môi trường phân bố. Các ứng dụng truy vấn và thao tác với những dữ liệu này thông qua các dịch vụ mà GDM cung cấp. Data Store Data Store là nơi chứa toàn bộ dữ liệu ban đầu. Một phần hoặc toàn bộ dữ liệu ở Data Store sẽ được lưu trữ phân bố trên một số node dữ liệu (data resource) trên Grid để thuận tiện cho việc tính toán. Tập hợp các data resource chứa dữ liệu phân bố của cùng một data store được gọi là data source. Các vấn đề chính trong thiết kế hệ thống Quản lý thông tin về các user sử dụng hệ thống Mỗi ứng dụng chạy trên môi trường Grid đều có một định danh (credential) riêng biệt. Thông tin về các ứng dụng có nhu cầu truy xuất dữ liệu (thông tin này nhằm phục vụ cho dịch vụ tính tiền) được lưu trữ trong metadata sau: Application(credential, description, app_role) credential: định danh của ứng dụng description: miêu tả về ứng dụng app_role: các quyền của ứng dụng khi truy vấn metadata lưu trên GDM Một ứng dụng có thể truy vấn và thao tác dữ liệu trên nhiều Data source (xem định nghĩa của data source bên trên). Để truy xuất dữ liệu trên một Data source, ứng dụng phải được cấp một tài khoản (user name, password) với một quyền truy vấn và thao tác dữ liệu nhất định. Ta có thể xem xét việc gắn thông tin tài khoản truy xuất dữ liệu vào credential để giúp cho việc sử dụng dữ liệu của các ứng dụng chạy trên Grid trở nên đơn giản hơn nhưng vẫn đảm bảo tính an toàn và hiệu quả. Có nhiều cơ chế hỗ trợ hiệu quả vấn đề này. LDAP là một thí dụ. Thông tin về các tài khoản đăng ký với các Data source được lưu trữ trong metadata sau: User(user_name, credential, data_source_id, password, role) user_name, password: những thông tin cần thiết để truy xuất vào một Data source. credential: định danh của ứng dụng sử dụng tài khoản này. data_source_id: định danh của Data source mà tài khoản này có thể truy xuất dữ liệu. role: quyền truy vấn và thao tác dữ liệu của tài khoản. Phân bố dữ liệu từ Data Store xuống data resource Để có thể sử dụng được dữ liệu từ Data Store, trước tiên khối dữ liệu này cần được phân bổ vào các tài nguyên dữ liệu trên Grid. Hầu hết hoặc toàn bộ dữ liệu chứa trong Data Store sẽ chứa trên các data resource. Chiến lược phân bố dữ liệu xuống các data resource chỉ hợp lý và có hiệu quả trên cơ sở xem xét đầy đủ các yếu tố sau: Yêu cầu cụ thể của từng bài toán Số lượng các data resource trên Grid Khả năng về dụng lượng và tốc độ của từng data resource Tần suất trao đổi dữ liệu trên các data resource Hiệu năng truy xuất hiện tại của hệ thống Cách phân bố dữ liệu chúng tôi áp dụng ở giai đoạn này là phân bố đều dữ liệu xuống các data resource sẵn có. Khối dữ liệu ban đầu trên Data Store sẽ được phân bố xuống các node dữ liệu (Data resource) khác nhau và mỗi node được xác định thông qua định danh Data_resource_id. Tập hợp các data resource chứa dữ liệu phân bố của cùng một data store được gọi là data source. Những thông tin chính về việc phân bổ dữ liệu trên Grid được GDM lưu trữ trong metadata sau: Data_Source(data_source_id, data_source_name, description) data_source_id: định danh của khối dữ liệu ban đầu trước khi được phân bố xuống các data resource. data_source_name: tên của data source. description: một số đặc tả khác về data source. Data_Resource(data_resource_id, data_source_id) data_resource_id: định danh của mỗi phân mảnh dữ liệu của Data_source. data_source_id: định danh của Data source. Data_Item(data_item_name, data_resource_id) data_item_name: tên của một bảng dữ liệu trên một node dữ liệu data_resource_id: định danh của node dữ liệu. GDM sẽ theo dõi tình hình phân bố dữ liệu trên grid và cập nhật thông tin liên tục. Sau khi quá trình phân bố dữ liệu hoàn tất, mọi thao tác trên dữ liệu (truy vấn, cập nhật…) sẽ tiến hành trên dữ liệu chứa trong các data resource. Các thao tác này cần có sự giám sát và thông tin phải được lưu trữ vào GDM để quản lý về sau. Lấy thông tin về các Data Resource Thông tin về các Data Source, cách phân bố xuống các Data Resource, …đều được GDM quản lý. Khi có một yêu cầu lấy thông tin về các Data Resource từ phía ứng dụng như định danh của các Data Resource, kích thước dữ liệu, index, schema của dữ liệu..., GDM sẽ kiểm tra tính tương thích giữa yêu cầu đưa ra và quyền thực tế của ứng dụng trước khi thực thi yêu cầu. GDM chỉ cần dựa vào thông tin về các user sử dụng hệ thống mà nó quản lý cũng như các thông tin về phân bố dữ liệu trên Grid là có thể thực thi các yêu cầu này một cách dễ dàng. Để có thể tăng tốc độ đáp ứng của hệ thống, GDM có thể lưu giữ trên vùng nhớ tạm một số thông tin chính thường hay được truy xuất của các Data Resource thay vì lúc nào cũng phải truy xuất xuống cơ sở dữ liệu bên dưới. Tuy nhiên cách làm này đòi hỏi phải có sự cập nhật thông tin trên vùng nhớ tạm khi dữ liệu bên dưới bị thay đổi. Cấp phát, quản lý, và thực thi ticket Dưới đây là sơ đồ kiến trúc chi tiết mô tả hoạt động của hệ thống quản lý dữ liệu trên Grid: Hình 2: Minh họa các bước hoạt động của hệ thống GDM Hệ thống quản lý dữ liệu trên Grid (GDM) gồm các khối chức năng ứng với các dịch vụ chính lien quan đến việc quản lý và thực thi ticket như sau: Metadata management service: quản lý các siêu dữ liệu về các data source và data resource. Ticket management service: quản lý và cấp phát các ticket cho bussiness application. Data resource management service: giao tiếp với các data resource thông qua Data accessor service để đưa ra các yêu cầu truy vấn và thao tác dữ liệu. Data accessor service: truy vấn và thao tác dữ liệu trên data resource và gửi kết quả cho computing resource thông qua Client service. Client service: nhận kết quả trả về từ Data accessor service và gửi ack về cho Data resource management service. Quản lý ticket Ticket đại diện cho một yêu cầu cụ thể từ phía ứng dụng, đó có thể là yêu cầu truy xuất dữ liệu trên một bảng dữ liệu của một Data Resource, hay là một yêu cầu cập nhật dữ liệu ( tạo bảng, chèn dữ liệu, xóa dữ liệu, xóa bảng), … Mỗi ticket chứa những thông tin cần thiết để một ứng dụng có thể làm việc (truy xuất, cập nhật…) với Data Resource tương ứng và gồm những thông tin chính như sau: Ticket (ticket_id, ticket_type, valid_time, credential, times_of_use) ticket_id: định danh của ticket valid_time: thời gian ticket có hiệu lực sử dụng ticket_type: quy định loại của ticket credential: định danh của người xin cấp phát ticket times_of_use: số lần ticket còn có thể được sử dụng Tùy vào mục đích sử dụng, có thể phân ticket thành nhiều loại sau đây: Lưu trữ thông tin về các ticket dùng cho việc lấy dữ liệu: Ticket_Data(ticket_id, data_item_name, data_resource_id, startIndex, stopIndex) data_item_name: tên của bảng chứa dữ liệu cần truy xuất data_resource_id: định danh của data resource chứa bảng dữ liệu cần truy xuất. startIndex, stopIndex: khoảng dữ liệu cần truy xuất. Lưu trữ thông tin về các ticket dùng cho việc chèn dữ liệu vào bảng: Ticket_Insert_Record(ticket_id, data_item_name, data_resource_id, column_names) data_item_name: tên của bảng chứa dữ liệu cần tạo. data_resource_id: định danh của data resource chứa bảng dữ liệu cần tạo. column_names :các cột cần chèn dữ liệu vào. Lưu trữ thông tin về các ticket dùng cho việc tạo mới một bảng dữ liệu: Ticket_Create_Table(ticket_id, data_item_name, data_resource_id, schema) data_item_name: tên của bảng chứa dữ liệu cần tạo. data_resource_id: định danh của data resource chứa bảng dữ liệu cần tạo. schema: thông tin về cấu trúc của bảng. Lưu trữ thông tin về các ticket dùng cho việc xóa một bảng dữ liệu: Ticket_Drop_Table(ticket_id, data_item_name, data_resource_id) data_item_name: tên của bảng dữ liệu cần xóa. data_resource_id: định danh của data resource chứa bảng dữ liệu cần xóa. Cấp phát ticket để ứng dụng có thể làm việc với các Data Resource Khi nhận được yêu cầu xin ticket, GDM sẽ kiểm tra tính tương thích giữa yêu cầu đưa ra và quyền của ứng dụng trước khi cấp phát ticket. Nếu hợp lệ, GDM sẽ sinh ra một ticket tương ứng và trả về cho ứng dụng định danh (ticket_id) của ticket này. GDM sẽ lưu trữ thông tin về ticket để phục vụ cho việc thực thi ticket cũng như tính phí sau này. Ứng dụng sẽ sử dụng ticket_id cho việc tương tác với các Data Resource. Ứng dụng xin ticket và ứng dụng xin thực thi ticket có thể khác nhau vì ứng dụng xin ticket có thể sẽ cung cấp cho ứng dụng xin thực thi ticket một thẻ bài (token) chứa các thông tin cần thiết để thực thi ticket. Token sẽ bao gồm ticket_id và định danh của người được cấp token (người sẽ sử dụng ticket) đã được mã hóa bằng khóa bí mật của ứng dụng xin ticket. Nếu như ứng dụng xin ticket cũng là ứng dụng thực thi ticket thì nó cũng vẫn phải tự tạo ra một token cho riêng nó. Thực thi ticket Để thực thi một ticket, thông tin ứng dụng cần gởi đến cho GDM gồm có định danh của ứng dụng và token tương ứng. Khi nhận được thông tin thực thi ticket, dựa vào ticket_id chứa trong token, GDM sẽ lấy được các thông tin về ticket này. Trước hết GDM sẽ kiểm tra hạn sử dụng (valid_time…) của ticket này. Nếu hợp lệ, GDM sẽ kiểm tra quyền hợp pháp của ứng dụng. GDM dùng public key của người đã xin cấp phát ticket giải mã để tìm ra định danh của người được cấp token. Nếu định danh này và định danh do ứng dụng cung cấp trùng nhau thì đây là một yêu cầu hợp lệ. Ticket được thực thi. GDM căn cứ vào nội dung của ticket để yêu cầu Data Resource tương ứng thực thi. Kết quả sẽ được Data Resource gởi thẳng tới ứng dụng. GDM sẽ cập nhật thông tin về ticket để cho biết ticket đã được thực thi. Một số vấn đề liên quan đến việc xin ticket và thực thi ticket: Ticket là vấn đề chính yếu nhất của hệ thống nên có nhiều vấn đề cần xem xét trong thiết kế. Sau đây là một số vấn đề đã được nhận dạng và giải quyết trong GDM. Vấn đề DoS( Denial of Service): Xin ticket không bị tính phí, do đó ứng dụng có thể tấn công hệ thống bằng cách gởi yêu cầu hàng loạt để xin các ticket giống nhau. Vấn đề này có thể được giải quyết theo một số hướng đề nghị sau: Quy định số lần xin ticket tối đa trong một session giao tiếp giữa ứng dụng và hệ thống. Có thể cho phép một ticket được sử dụng nhiều lần. Dựa vào lịch sử sử dụng các ticket của ứng dụng. Quy định ngưỡng tối đa số lượng các ticket ứng dụng đã xin nhưng chưa được sử dụng, nếu vượt quá giới hạn này thì không cấp ticket mới cho ứng dụng nữa. Vấn đề mất ticket: Ứng dụng xin ticket có thể báo với hệ thống về việc làm mất ticket. Nếu như ticket đó đã được thực thi thì hệ thống không chấp nhận yêu cầu từ phía ứng dụng, ngược lại hệ thống sẽ đánh dấu hủy ticket này nhưng vẫn tính một mức phí theo quy định. Vấn đề hủy bỏ ticket: Ta có thể phân ticket làm nhiều lọai: ticket có thể hủy hoặc không. Ticket không thể hủy sẽ được tính mức giá thấp hơn so với loại còn lại. Khi có yêu cầu hủy bỏ ticket từ phía ứng dụng, nếu đó là ticket có thể hủy, GDM sẽ đánh dấu hủy ticket này nhưng vẫn tính một mức phí theo quy định; ngược lại yêu cầu hủy bỏ sẽ không được chấp nhận. Kiểm tra tính hợp lệ của ứng dụng thực thi ticket: Theo cách miêu tả ở trên người xin ticket sẽ cấp token cho người thực thi ticket, trong đó có vấn đề mã hóa định danh của người được cấp token bằng khóa bí mật của người xin ticket. Mỗi lần ticket tương ứng xin được thực thi, GDM phải làm công việc giải mã để kiểm tra tính hợp lệ của ứng dụng. Hệ thống có thể xem xét các giải pháp khác để có thể giảm chi phí kiểm tra. Vấn đề chống thoái thác từ phía ứng dụng: Làm thế nào để biết ticket đã thực sự được thực thi (ứng dụng thực thi ticket nhận được kết quả trả về từ phía hệ thống). Nếu ứng dụng luôn gởi trả ACK về cho hệ thống sau khi nhận được kết quả thì vấn đề này đương nhiên được giải quyết. Tuy nhiên trong thực tế không phải như vậy. Vấn đề này có thể giải quyết bằng cách xây dựng một client, và ứng dụng sẽ dùng client này để truy xuất với hệ thống. Như vậy hệ thống có thể quyết định được cách đáp ứng của ứng dụng thông qua việc thiết lập các hành vi phù hợp cho client. Ticket không được thực thi (quá hạn): Để tránh trường hợp ứng dụng xin ticket nhưng không thực thi, đối với những ticket quá hạn ta sẽ tính vào cho ứng dụng xin ticket một khoản phí nhất định. Tính phí sử dụng Phí sử dụng của ứng dụng được tính từ những thành phần sau: Phí cho ticket truy vấn và thao tác dữ liệu: được tính dựa vào số lượng ticket được thực thi và lượng dữ liệu mà ứng dụng đã truy xuất trên mỗi ticket Phí cho những ticket bị hủy bỏ, bị mất, bị quá hạn. Đối với các ticket được thực thi, hệ thống cần xem xét phí sẽ được tính cho ticket ngay sau khi ticket được thực thi ở góc nhìn hệ thống hay khi ứng dụng đã thực sự nhận được kết quả từ hệ thống. Giải pháp đưa ra sẽ dựa trên hiệu quả của giải pháp cho việc chống thoái thác từ phía ứng dụng. Chú ý rằng: bài toán tính chi phí tổng quát là một bài toán có nhiều tham số đầu vào và dựa trên lượng dữ liệu trong một số trường hợp có thể chỉ đóng vai trò một tham số. Protocol giao tiếp giữa ứng dụng và hệ thống Hình 3: Sơ đồ trình tự cho giao tiếp giữa ứng dụng và hệ thống Business Application lấy thông tin về các Data Resource từ GDM Business application sẽ liên lạc với Metadata Management Service để lấy thông tin về các Data Resource chứa dữ liệu mà nó mong muốn. Tùy theo quyền của user đại diện cho ứng dụng ở trên mà Metadata Management Service sẽ trả về các thông tin phù hợp: định danh của các Data Resource, kích thước dữ liệu, index, schema của dữ liệu, ... Business Application liên lạc với Grid Infrastructure để xin cấp phát các tài nguyên tính toán phù hợp với các Data Resource đã biết Dựa trên những thông tin về Data Resource mà business application cung cấp, Grid Infrastructure sẽ cấp phát cho ứng dụng những tài nguyên tính toán phù hợp để đảm bảo tính hiệu quả của ứng dụng, cân đối giữa chi phí cho việc di chuyển dữ liệu từ các tài nguyên dữ liệu sang tài nguyên tính toán và hiệu quả tính toán khi lựa chọn những tài nguyên tính toán mạnh nhưng ở xa tài nguyên dữ liệu. Business Application liên lạc với GDM xin cấp phát các ticket để truy xuất đến Data Resource Business application gửi một yêu cầu truy xuất dữ liệu đến GDM thông qua Ticket Management Service. GDM sẽ kiểm tra tính hợp lệ của yêu cầu trước khi cấp phát ticket cho ứng dụng. Nếu thành công, Ticket Management Service sẽ trả về cho ứng dụng định danh (ticket_id) của ticket này. Ứng dụng sẽ sử dụng ticket_id để tạo ra một thẻ bài (token) dùng cho việc tương tác với các Data Resource. Tài nguyên tính toán nào cần tài nguyên dữ liệu thì sẽ được ứng dụng đưa cho token chứa ticket_id tương ứng mà nó vừa xin được từ GDM. Computing Resource tương tác với Data Resource Computing Resource không thể làm việc trực tiếp với Data Resource mà phải thông qua Client Service. Computing Resource sẽ gởi các yêu cầu thực thi ticket tới Client Service. Client Service sẽ chuyển yêu cầu này lên Data Resource Management Service. Data Resource Management Service sẽ kiểm tra tính hợp lệ của ứng dụng và ticket. Nếu hợp lệ, Data Resource Management Service sẽ căn cứ vào thông tin trong Ticket ứng với ticket_id để gởi yêu cầu tới Data Accessor Service. Data Accessor Service sẽ thực thi yêu cầu và gửi kết quả về Client Service. Data Accessor Service cũng gởi một thông điệp ack về cho Data Resource Management Service để báo cho hệ thống biết là đã gửi kết quả về phía Client. Sau khi nhận kết quả từ Data Accessor Service gửi về, Client Service sẽ chuyển giao kết quả này cho Computing Resource, đồng thời Client Service cũng gửi một thông điệp ack cho Data Resource Management Service để báo cho hệ thống về việc computing resource đã nhận được kết quả. Interface giao tiếp Dưới đây là một số API cơ bản nhất để giao tiếp với GDM. Chi tiết về các API này cũng như các chi tiết mức kỹ thuật khác có thể tham khảo trong phần phụ lục của báo cáo này. getDataSources (out string[] dataSources):boolean Lấy danh sách các data source mà GDM hỗ trợ truy xuất. connect (in string dataSource, in string username, in string password):boolean sign in vào data source ứng với username,password tương ứng Query Information getTables (out string[] tables): boolean Lấy danh sách các table trong một data source mà một user có thể thấy được getTableSchema (in string tableID, out Schema schema):boolean Lấy thông tin về cấu trúc của một table Schema là một đối tượng chứa các thông tin về schema của bảng: class Schema { int nColumn; ColumnInfo[] columns; int[] keyIndex; // chỉ số của các cột là key } Class ColumnInfo { String name; int type; int length; boolean isNull; } getNumberOfRow(string tableID, out numRow):boolean trả về số hàng trong một table Get/Update data sendCredential (in Credential):boolean Ứng dụng gửi định danh của mình đến GDM. lockTable (in string tableID, out Parition [] partitions): boolean Thực hiện khóa table. Khi một bảng bị khóa, dữ liệu của nó không thể bị thay đổi và các Partition của dữ liệu cũng không thể di chuyển. Khi khóa bảng, GDM sẽ tiến hành đánh chỉ số cho các partition. Việc đánh chỉ số trên các partition là độc lập và bắt đầu từ 0. class Partition{ string partitionID; long nRecord; string hostName; } unlockTable (in string tableID): boolean getTicketData (in string tableID, in string partitionID, in int startIndex, in int stopIndex, out int ticketID):boolean Xin ticket truy xuất dữ liệu. getData (in Token token, out string[] result):boolean Thực thi ticket truy xuất dữ liệu. class Token{ int ticketID string SA(certificate) } ticketID: định danh ticket SA(certificate): mã hóa định danh của ứng dụng được cấp quyền thực thi ticke getTicketCreateTable (in String tableID, in Schema schema, out int ticketID):boolean Xin ticket tạo ra một bảng tableID mới trong data source dựa trên schema cho trước. createTable (in Token token):boolean Thực thi ticket tạo bảng dữ liệu. getTicketInsertRecords(in string tableID, in String[] column_names, out int ticketID):boolean Xin ticket chèn dữ liệu. insertRecords(in Token token, in string[] data_insert):boolean Thực thi ticket chèn dữ liệu. Data_insert là dữ liệu cần chèn vào bảng, có định dạng là một mảng các string, mỗi string là một record, các column trong record cách nhau dấu phẩy. getTicketDropTable(in String tableID, out int ticketID):boolean Xin ticket xóa bảng dropTable(in Token token):boolean Thực thi ticket xóa bảng Khai phá dữ liệu trên lưới Như đã giới thiệu trong các mục trước, để có thể rút trích được thông tin từ một khối lượng lớn dữ liệu, chúng ta cần phải có nhiều tài nguyên tính toán và môi trường tính toán lưới đáp ứng tốt cho chúng ta yêu cầu này. Mục tiêu chính của chúng ta ở đây là xây dựng ứng dụng khai phá dữ liệu trên cơ sở hạ tầng tính toán lưới được xây dựng bởi nhóm hạ tầng trong dự án này. Hiện tại có nhiều nhóm giải thuật khai phá dữ liệu với rất nhiều giải thuật khác nhau. Trong dự án này, chúng tôi tập trung vào giải thuật gom cụm (clustering) thực thi trên một khối lượng lớn dữ liêu rất lớn. Ngoài ra, để có thể áp dụng kết quả của giải thuật gom cụm vào bài toán thực tế, chúng tôi đã hiện thực một bộ phân loại (classifier) dựa trên kết quả gom cụm. Giải thuật liên quan Giải thuật gom cụm (Clustering) Bài toán gom cụm (clustering) dữ liệu Giải thuật gom cụm là giải thuật có nhiệm vụ phân loại các mẫu (samples) thành một tập các nhóm dựa trên một hàm đo khoảng cách nào đó (measurement of association) sao cho các phần tử trong cùng một nhóm sẽ giống nhau, các phần tử trong khác nhóm sẽ khác nhau [1]. Dữ liệu đầu vào của giải thuật gom cụm là tập hợp các mẫu dữ liệu và hàm đo khoảng cách. Đầu ra của giải thuật là một một cấu trúc phân vùng của tập dữ liệu mẫu. Hàm đó khoảng cách cho biết sự tương đồng giữa 2 mẫu. Có nhiều hàm đó khoảng cách khác nhau như khoảng cách euclide, city block, Minkowski, cosine-correlation, neighbor distance (tham khảo thêm [1]). Trong hiện thực, chúng tôi sử dụng hàm đo khoảng cách rất thông dụng là hàm đo khoảng cách Euclide. (với xi, xj là hai phần tử dữ liệu; xik, xjk là thuộc tính thứ k trong hai phần tử dữ liệu này) Giải thuật KMean gốc (Simple KMean) Nhìn chung, giải thuật gom cụm có 2 loại: agglomerative & partitional [1]. Trong nhóm giải thuật partitional, một giải thuật đơn giản và được sử dụng khá rộng rãi là giải thuật KMean (để phân biệt với các giải thuật khác, chúng tôi gọi nó là Simple KMean). Các bước cơ bản của giải thuật k-mean: Chọn ngẫu nhiên k tâm của các cluster. Gán các phần tử dữ liệu vào các cluster mà khoảng cách tới tâm của cluster đó là gần nhất. Tính lại tâm của các cluster. Lặp lại bước (2) và bước (3) cho tới khi điều kiện square-error được thõa mãn hoặc các tâm không thay đổi vị trí nữa. Điểm mạnh của giải thuật: Độ phức tạp của giải thuật là O(NKL) trong đó K là số cluster, L là số lần lặp của giải thuật để giải thuật hội tụ. Thông thường thì K cố định và L thay đổi không nhiều nên độ phức tạp giải thuật có thể xem như tuyến tính theo kích thước của tập dữ liệu. Điểm yếu của giải thuật: Việc khởi tạo ngẫu nhiên các tâm là một điểm yếu của giải thuật. Nếu chúng ta khởi tạo tốt các tâm thì giải thuật sẽ có số lần lặp nhỏ và hiệu quả hơn. Ngược lại giải thuật có thể cho hiệu quả rất thấp. Số nhóm K là hằng số và phải được xác định trước khi chạy giải thuật. Tập dữ liệu sẽ được scan xử lý nhiều lặp lại lần. Do đó, chúng bắt buộc phải được tải tất cả vào bộ nhớ. Nếu ta lưu trữ trên đĩa thì quá trình scan này sẽ tốn nhiều thời gian. Chính vì vậy, giải thuật Simple KMean chỉ có thể xử lý được tập dữ liệu nhỏ, có khả năng lưu trữ được trong bộ nhớ máy tính. Giải thuật Incremental KMean (IKMean) Giải thuật Simple KMean bị ảnh hưởng nhiều bởi việc khởi tạo các tâm. Giải thuật Incremental KMean (được đề nghị bởi D.C.Nguyen trong [2]) cố gắng khắc phục nhược điểm này. Hình 4: Giải thuật Incremental KMean Khác với giải thuật Simple KMean khởi tạo ngẫu nhiên ngay từ đầu K tâm, giải thuật IKMean bắt đầu với một tâm duy nhất. Sau đó, số lượng tâm sẽ tăng dần lên cho đến khi bằng K tâm. Mỗi lần tăng, tâm mới sẽ được thêm vào tại vị trí nhóm có distortion lớn nhất. Sau đó, giải thuật sẽ thực thi quá trình gán lại các phần tử vào các tâm, cập nhật lại tâm. Quá trình này lặp lại nhiều lần đến khi các tâm không di chuyển nữa thì một tâm mới sẽ tiếp tục được thêm vào tại nhóm có distortion lớn nhất. Các kết quả thử nghiệm trong [2] (trang 128-131) cho thấy tuy giải thuật IKMean có thời gian chạy lớn hơn nhiều so với Simple KMean (số tâm càng lớn thì thời gian thực thi của IKMean càng lớn hơn so với Simple KMean). Tuy nhiên, chất lượng của lời giải của IKMean tốt hơn so với Simple KMean. Giải thuật Two-Phase Phase KMean (2PKMean) Giải thuật Two-Phase KMean (tham khảo chi tiết giải thuật trong [2] trang 134, 135,136) là sự mở rộng của giải thuật Simple KMean nhằm gom cụm một khối lượng rất lớn dữ liệu. Giải thuật gồm 2 giai đoạn (Phase) được mô tả như trong Hình 5: Hình 5: Giải thuật 2PKMean Giả sử tập dữ liệu ban đầu có N phần tử. Trong giai đoạn 1, dữ liệu sẽ được chia thành P phân đoạn dữ liệu có kính thước S=N/P. Mỗi phân đoạn dữ liệu sau đó sẽ được nén lại với hệ số a bằng cách thực thi giải thuật gom cụm dữ liệu KMean với số tâm K1 = a x N. Các tâm của các phân đoạn dữ liệu được gom lại tạo thành tập nén (compression set). Trong giai đoạn 2, giải thuật K-Means sẽ được thực thi một lần nữa trên tập nén có để thu được K tâm mong muốn. Do ưu điểm của IKMean nên giải thuật trong Hình 1 sử dụng IKMean trong cả hai giai đoạn 1 và 2 của giải thuật. Tuy nhiên, do thời gian thực thi của IKMean lớn hơn nhiều lần so với giải thuật Simple KMean nên ở giai đoạn 1, IKMean chỉ được áp dụng cho phân đoạn dữ liệu đầu tiên để tìm ra ví trí của K1 tâm. Các phân đoạn dữ liệu còn lại sẽ được áp dụng Simple KMean với các tâm được khởi tạo tại vị trí của các tâm tìm được trong phân đoạn đầu tiên. Điều này có thể lý giải là do các phân đoạn dữ liệu được lấy ngẫu nhiên nên có nhiều khả năng là phân bố dữ liệu trên các phân đoạn dữ liệu là giống nhau. Do đó, có nhiều khả năng là vị trí các tâm của các phân đoạn dữ liệu sau sẽ giống ít nhiều với vị trí các tâm của phân đoạn dữ liệu đầu tiên. Song song hóa giải thuật Two-Phase KMean (Giải thuật PKMean) Giải thuật 2PKMean gốc trình bày trong [2] là giải thuật tuần tự. Tuy nhiên, chúng ta thấy giai đoạn 1 của giải thuật này có khả năng song song hóa rất dễ dàng. Trừ phân đoạn đầu tiên, việc nén một phân đoạn dữ liệu là hoàn toàn độc lập với quá trình nén của các phân đoạn dữ liệu khác. Do đó, chúng hoàn toàn có thể thực hiện song song. Thông thường, số phân đoạn dữ liệu sẽ nhiều hơn số lượng nút tính toán mà chúng ta có. Lúc này, chúng ta sẽ xử dụng cơ chế round-robin. Các phân đoạn được sắp xếp thành một hàng đợi. Các nút tính toán lần lượt lấy các phân đoạn từ hàng đợi ra và xử lý. Nút tính toán nào mạnh, tải ít, xử lý nhanh thì sẽ xử lý được nhiều phân đoạn hơn các nút có khả năng tính toán yếu hoặc có nhiều tải. Như vậy, cơ chế này cũng giúp chúng ta cân bằng tải tốt cho các tài nguyên tính toán. Giải thuật xây dựng bộ phân loại dựa trên mạng nơron (ANN) Artificial Neural Network (ANN) hay gọi tắt là mạng neuron NN (Neural Network) là hệ thống xử lí thông tin, mô phỏng chức năng, cách thức hoạt động và sự nối kết giữa các neuron sinh học nên hầu hết các khái niệm trong ANN đều dựa trên các khái niệm sinh học. ANN thực hiện các hoạt động như học, suy diễn, và lưu trữ các thông tin trong quá trình xử lí. Mạng neuron là tập hợp có tổ chức các phần tử xử lý đơn giản (hay được gọi là các neuron hoặc các node). Các neuron này được kết nối với nhau và thông qua đó có thể trao đổi thông tin. Một neuron có thể thực hiện một hoặc nhiều công việc như nhận thông tin từ những neuron khác hoặc từ môi trường bên ngoài, hay thực hiện xử lí tính toán và đưa thông tin đến các neuron khác [3]. Ứng dụng mạng neuron vào bài toán phân loại trong EDAGrid (các bước cần thực hiện khi áp dụng mạng neuron cho bài toán phân loại): Xác định tính chất của tập dữ liệu để xây dựng cấu trúc mạng cho phù hợp. Tại bước này chúng ta đánh giá xem có bao nhiêu thông số được sử dụng để phân loại dữ liệu và dữ liệu thuộc bao nhiêu lớp. Từ đó xác định được mạng có bao nhiêu ngõ nhập (tương ứng số lượng thông số) và bao nhiêu ngỏ xuất (tương ứng số lớp). Bỏ qua bước tiền xử lý dữ liệu vì dữ liệu đã được chuẩn hóa (là dữ liệu xuất của bài toán clustering). Xây dựng kiến trúc mạng cho phù hợp gồm bao nhiêu tầng ẩn, mỗi tầng có bao nhiêu node, … Xác định các tham số sử dụng trong quá trình điều khiển học mạng. Tiến hành học mạng trên tập dữ liệu xuất của bài toán clustering (90% dữ liệu học). Kiểm tra tính chính xác của mạng (10%) dữ liệu còn lại. Tiến hành phân loại trên mạng đã được học. Xây dựng mạng Xác định thông số học Học mạng Kiểm tra mạng Phân loại Kết hợp giải thuật PKMean và ANN. Thời gian huấn luyện mạng nơron của giải thuật ANN sẽ rất lâu nếu kích thước của tập dữ liệu huấn luyện lớn. Một biện pháp có thể sử dụng là huấn luyện mạng nơron trên tập dữ liệu lấy mẫu ngẫu nhiên từ tập dữ liệu huấn luyện ban đầu. Tuy nhiên, trong một số trường hợp, tập mẫu sẽ không đại diện đúng tập huấn luyện ban đầu do phân bố dữ liệu khác với phân bố dữ liệu trong tập huấn luyện ban đầu. Chúng tôi khắc phục vấn đề này bằng cách không lấy mẫu ngẫu nhiên mà lấy tập mẫu là tập nén của tập dữ liệu huấn luyện. Giải thuật PKMean sẽ được áp dụng trên tập huấn luyện rất lớn ban đầu để thu được K tâm. Các tâm này sẽ trở thành các mẫu sử dụng để huấn luyện mạng nơron. Trong phần sau, chúng tôi sẽ gọi đây là giải thuật PKMean-ANN. Ứng dụng xây dựng bộ phân loại cho tập dữ liệu lớn. Mô tả ứng dụng Ứng dụng có nhiệm vụ xây dựng một bộ phân loại (classifier) dựa trên mạng nơron. Bộ phân loại này được xây dựng dựa trên một tập huấn luyện rất lớn. Bộ phân loại sẽ được xây dựng dựa trên giải thuật PKMean-ANN với hoạt động có thể được mô tả như trong ví dụ sau (Hình 6): Giả sử tập huấn luyện T gồm 10 phần tử. Mỗi phần tử có 2 giá trị thuộc tính A1, A2 và thuộc một loại nào đó (cột Class). Ứng dụng chúng ta có nhiệm vụ học từ tập huấn luyện này để đưa ra một bộ phân loại có khả năng dự đoán phân loại của một phần tử mới dựa trên 2 giá trị thuộc tính A1 và A2 của nó. Trước hết, ta tách dữ liệu trong tập huấn luyện ra thành 2 tập dữ liệu con T1 và T2 ứng với 2 phân loại C1 và C2. Sau đó, giải thuật PKMean sẽ được thực thi trên T1 và T2 để nén các tập này thành các tâm. Tập hợp các tâm này sẽ được nhập lại tạo lại để tạo thành tập mẫu dùng huấn luyện cho mạng nơron trong giải thuật ANN. Tập huấn luyện T Tập T1 Tập T2 Hình 3. Tập huấn luyện Tập mẫu PKMean ANN PKMean Hình 6: Mô tả giải thuật Kiến trúc hệ thống Kiến trúc hệ thống được gổm 3 lớp như trong hình 7 bên dưới. Hình 7: Ứng dụng khai phá dữ liệu với GDM trên GRID Trên cùng là lớp Data Mining với 2 module giải thuật cơ bản là PKMean và ANN. Trong đó, module PKMean sẽ thực thi trên nhiều nút tính toán trong môi trường lưới, module ANN sẽ thực thi trên máy cục bộ. Lớp thứ 2 là lớp dịch vụ với 3 module cơ bản GDM, Resource Lookup và ProActive. GDM (Grid Data Management): Dữ liệu của tập huấn luyện cũng như các dữ liệu trung gian sẽ được lưu trữ phân tán trên môi trường lưới. Module GDM cung cấp các dịch vụ quản lý và truy xuất các dữ liệu trên môi trường lưới. (Đặc tả các hàm API của GDM tham khảo trong phần phụ lục). Khi cần truy xuất dữ liệu, module PKMean và ANN sẽ gọi các dịch vụ của GDM. Resource Lookup có nhiệm vụ tìm kiếm các tài nguyên tính toán thỏa một số ràng buộc nào đó (Đặc tả các module tham khảo trong phần phụ lục). Module PKMean cần nhiều tài nguyên tính toán để thực thi song song giải thuật. Do đó, nó sẽ nhờ module Resource Lookup để tìm các tài nguyên tính toán phù hợp với nhu cầu sử dụng của mình. ProActive: là một middleware hỗ trợ lập trình song song theo hướng đối tượng rất mạnh được phát triển bởi Inria [4]. Nó hỗ trợ cho nhiều môi trường lập trình khác nhau như Multi-core processors, Distributed Local Area Network (LAN), Clusters and Data Center Servers và GRIDs. Module PKMean sau khi dùng Resource Lookup để tìm ra tài nguyên phù hợp sẽ sử dụng ProActive để đẩy các công việc lên các tài nguyên tình toán đó thực thi. Lớp dưới cùng là lớp Grid Infrastructure là hạ tầng tính toán lưới kết nối nhiều tài nguyên tính toán với nhau. Ta lưu ý rằng các tài nguyên tính toán này là không đồng nhất và sự kết nối giữa chúng là lỏng lẻo. Bài toán phân loại đất rừng Bài toán: Xây dựng mô hình để nhận dạng loại rừng dựa trên các thông tin địa lý của đất. Dữ liệu dùng để training là Forest Cover Type mô tả bên dưới. Môtả dữ liệu: Dữ liệu được lấy từ UCI KDD Archive website [5]. Website này cung cấp nhiều datasets lớn, thực tế, thuộc nhiều lĩnh vực. Các dữ liệu này được chia sẻ phục vụ cho việc thử nghiệm trong các nghiên cứu về Knowledge Dicovery & Data Mining. Tập dữ liệu chọn sử dụng là dữ liệu: Forest Cover Type [5]. Tập dữ liệu chứa thông tin về loại rừng (forest cover type) của từng ô đất (cell). Mỗi ô có kích thước (30mx30m). Đối với mỗi ô đất, dữ liệu còn cung cấp kèm theo các thông về điều kiện tính chất & vị trí địa lý (cartographic) của cell đó. Nguồn gốc dữ liệu: Thông tin về loại rừng các cell được được lấy từ US Forest Service (USFS) Region 2 Resource Information System (RIS) data. Thông tin về địa lý của cell được lấy từ nguồn US Geological Survey (USGS) and USFS data. Tính chất dữ liệu: Kích thước dữ liệu: 71MB Số hàng dữ liệu: 581012 Số cột thuộc tính: 12 thuộc tính địa lý (10 cột thuộc tính quantitative, 2 cột qualitative) và 1 cột thuộc tính phân loại. Tổng quan giải thuật: Giải thuật chia làm 2 giai đoạn Giai đoạn 1: dùng giải thuật cluster để tìm nén dữ liệu của từng loại rừng thành một số ít các tâm. Giải thuật song song 2Phase-KMean chạy trên Grid Giai đoạn 2: dùng ANN để xây dựng bộ phân loại rừng dựa trên kết quả nén dữ liệu thu được ở giai đoạn 1. Giải thuật này chạy tuần tự trên máy cục bộ Ý nghĩa các cột thuộc tính dữ liệu: Hình 8: Các cột thuộc tính dữ liệu rừng Để minh họa cho ý nghĩa của GDM và hệ thống hạ tầng GRID được xây dựng, bài toán này đã được hiện thực và chạy thử nghiệm thành công trên hệ thống GDM và GRID trong dự án EDAGRID. Xem phần phụ lục để có thông tin chi tiết về cách cài đặt và vận hành hệ thống thử nghiệm. Ngoài ra, với những kết quả khả quan ban đầu, đã có một số công ty đặt vấn đề chuyển giao công nghệ kết quả của dự án này để xử lý các các tập dữ liệu kinh doanh của họ. Tổng kết Nhóm nghiên cứu phần “quản lý và khai phá dữ liệu trên lưới” đã hoàn thành các nhiệm vụ nghiên cứu của dự án ươm tạo công nghệ theo như bản thuyết minh đã đăng ký. Tổng kết tóm tắt các kết quả chính đã đạt được như sau: Tim hiểu, nghiên cứu và đề xuất giải thuật gom cụm dữ liệu phù hợp với tính chất của môi trường lưới: giải thuật phân bố 2-Phase K-Mean. Đặc biệt, giải thuật 2-Phase K-Mean có tính co dãn (scalability) tốt kết hợp với nguồn tài nguyên lớn được cung cấp từ môi trường lưới có khả năng khai phá được một khối lượng dữ liệu lớn trong thực tế nên có tính áp dụng cao. Hiện thực và triển khai giải thuật 2-Phase K-Mean triển khai trên ProActive và Globus Toolkit. Tích hợp ứng dụng khai phá dữ liệu trên Grid với hạ tầng Grid được xây dựng bởi một nhóm nghiên cứu khác trong dự án này tại ĐHBK-ĐHQG Tp. HCM Phát triển hệ thống GDM dựa trên các grid services với các chức năng như đã trình bày trong phần nhiệm vụ bên trên. Đây là một hệ thống quản lý dữ liệu trên lưới rất mạnh, có khả năng hỗ trợ nhiều ứng dụng về CSDL trên lưới. Phát triển một ứng dụng thực tế: “bài toán phân loại đất rừng” để minh họa cho hoạt động ổn định và các công nghệ đã được lựa chọn của hệ thống. Viết và đăng 3 bài báo khoa học: Đã báo cáo 2 bài báo tại hội nghị quốc tế ACOMP07, 1 bài đã đăng trong tại tạp chí khoa học và công nghệ, ĐHQG Tp. HCM (xem phần phụ lục để có thêm thông tin chi tiết) Ngoài ra, có rất nhiều công ty quan tâm đến kết quả nghiên cứu của đề tài và đã có 3 công ty ký thỏa thuận sẽ hợp tác để đầu tư vào quá trình chuyển giao công nghệ liên quan đến kết quả của đề tài (phần quản lý và khai phá dữ liệu). Tài liệu tham khảo [1] Jiawei Han, Micheline Kamber: “Data Mining-Concepts and Techniques”, Morgan Kaufmann, first edition, 2000 [2] Nguyễn Đức Cường: “Flexible information management strategies in Machinel learning and Data mining”, PhD Thesis, Cardiff University, UK, 2004. [3] Dương Ngọc Hiếu: “Báo cáo nghiệm thu đề tài NCKH cấp trường 2007: Thư viện cho các ứng dụng Dâtmining”, 2007 [4] Proactive: [5] UCI: [6] DANG Tran Khanh, PHAN Thi Thanh Huyen, VO Hoang Tam: A Comprehensive Framework for Grid Data Management. In Proceedings of International Workshop on Advanced Computing and Applications, Ho Chi Minh City, March 14-16, 2007 [7] DANG Tran Khanh, PHAN Thi Thanh Huyen, VO Hoang Tam: A Comprehensive Framework for Grid Data Management. Special Issue of Science & Technology Journal, Vietnam National University-Ho Chi Minh City, ISSN 1859-0128, Vol. 10, No. 13, Dec 2007, pp. 97-108 [8] The Globus Toolkit: www.globus.org/toolkit, 2006 [9] The OGSA-DAI project: www.ogsadai.org.uk, 2006 [10] Anil L. Pereira, Vineela Muppavarapu, and Soon M. Chung, “Role-Based Access Control for Grid Database Services Using the Community Authorization Service”, IEEE Transactions on Dependable and Secure Computing, Vol. 3, No. 2, pp. 156-166, 2006 [11] IBM OGSA-DAI Data Replication website: www.aiai.ed.ac.uk/~ychen/ibm_ogsadai/ibm-ogsadai-index.html, 2006 [12] Philip A. Bernstein, “Middleware: A Model for Distributed System Services”, Communication of ACM, Vol. 39, No. 2, pp. 86-98, 1996 [13] Michael Di Stefano, “Distributed Data Management for Grid Computing”, John Wiley & Sons, Inc., 2005 [14] Borja Sotomayor, Lisa Childers, “Globus Toolkit 4: Programming Java Services”, Morgan Kaufmann Publishers, 2006 [15] LY Hoang Hai, DUONG Ngoc Hieu, DANG Tran Khanh, NGUYEN Duc Cuong, TRAN Van Hoai, THOAI Nam: Parallelizing Data Mining Algorithms on the Grid. In Proceedings of International Workshop on Advanced Computing and Applications, Ho Chi Minh City, March 14-16, 2007 [16] A Min Tjoa, Ivan Janciak, Alexander Woehrer and Peter Brezany. “Providing an Integrated Framework for Knowledge Discovery on Computational Grids”, 5th International Conference on Knowledge Management, Graz, 2005 [17] SIMDAT website: www.simdat.org, 2006 [18] The EU Provenance project: www.gridprovenance.org, 2006. [19] Secure Data Grid website: www.cs.wright.edu/%7Eschung/SDG/sdg.htm, 2006. Luis Ferreira, et al, “Introduction to Grid Computing with Globus”, IBM Corp, 2002. [20] Ian Foster, “Globus Toolkit Version 4: Software for Service-Oriented Systems”, IFIP International Federation for Information Processing, pp. 2-13, 2005. [21] Phan Nhat Hai, Nguyen Hoang Anh, Tran Minh Quang, Ly Hoang Hai, Dang Tran Khanh: Towards an Extensible Library System for Data Mining. In Proceedings of International Workshop on Advanced Computing and Applications, Ho Chi Minh City, March 12-14, 2008, pp. 121-131 [22] Jaideep Vaidya, Chris Clifton, Michael Zhu: Privacy Preserving Data Mining, Springer Verlag, 2006 [23] R. Elmasri, S.B. Navathe: Fundamentals of Database Systems, 5th Edition, Pearson Addison-Wesley, 2007 [24] S. Castano, M. Fugini, G. Martella, and P. Samarati: Database Security, ACM Press & A-W, 1995 [25] W. Mao: Modern Cryptography - Theory and Practice, 3rd Ed., Prentice Hall, 2003 [26] R.B. Natan: Implementing Database Security and Auditing, Elsevier Digital Press, 2005 [27] Bing Liu: Web Data mining, Springer Verlag, 2007 Phụ lục A: GDM-API Các chức năng mà GDM hỗ trợ được phân loại thành 2 nhóm chính: Các chức năng cung cấp cho client giao tiếp với GDM Các chức năng cung cấp cho administrator để quản lý GDM Các chức năng này đều có đưa ra các ngoại lệ (exception) do GDM sinh ra trong trường hợp thao tác xử lý bị lỗi. Người sử dụng (client hoặc administrator) nên bắt các ngoại lệ này để biết lý do tại sao thao tác xử lý không thành công. Các chức năng hỗ trợ cho client Lấy danh sách các data source mà GDM hỗ trợ truy xuất: public String[] getDataSources() throws Exception; Bất kì client nào cũng có thể gọi chức năng này để lấy danh sách các data source mà hiện tại GDM đang hỗ trợ truy xuất. Kết nối vào một data source quản lý bởi GDM thông qua username và password: public boolean connect(String dataSource, String user, String password) throws Exception; Client sử dụng chức năng này để kết nối vào một data source với một user name và password cụ thể để có thể truy xuất dữ liệu. Nếu cả 3 thông tin đều hợp lệ thì phương thức trả ra giá trị True, ngược lại phương thức trả ra giá trị False. Chỉ khi nào client kết nối thành công thì mới có thể thực thi các chức năng bên dưới. Lấy danh sách các bảng dữ liệu trong một data source public String[] getTables() throws Exception; Sau khi đã kết nối thành công vào data source, user mới có thể lấy danh sách các bảng dữ liệu trong data source. Lấy cấu trúc của một bảng dữ liệu public Schema getTableSchema(String table_name) throws Exception; Client sử dụng chức năng này để lấy cấu trúc của một bảng dữ liệu, kết quả trả về là một đối tượng thuộc lớp Schema. Nếu giá trị thông số table_name không phù hợp thì phương thức trả ra trị Null. Với: public class Schema { public ColumnInfo[] columns; public Schema() { } } public class ColumnInfo { public String name; public String sql_type; public ColumnInfo(String name, String sql_type) { this.name = name; this.sql_type = sql_type; } public ColumnInfo() { this.name = " "; this.sql_type = " "; } } Lấy số hàng dữ liệu (số lượng record) của một bảng dữ liệu public int getNumberOfRow(String table_name) throws Exception; Phương thức này trả ra số lượng record của một bảng trong data source mà client đang kết nối vào (bằng tổng số record của các bảng con ở các partition). Client gửi định danh credential của mình để có thể truy xuất dữ liệu public boolean sendCredential(String credential) throws Exception; Sau khi kết nối thành công và lấy các thông tin meta data của data source, client phải gửi định danh của mình để thực hiện truy xuất dữ liệu. Định danh này dùng để tính phí cho các thao tác truy xuất sau này. Lock một bảng và lấy thông tin về các partition của bảng đó public Partition[] lockTable(String table_name) throws Exception; Client đăng kí xin lock một bảng và lấy thông tin về các partition của bảng đó để có thể chủ động truy xuất dữ liệu trên mỗi partition. Với: public class Partition { public String partition_id= null; public String host_name = null; public long n_record=0; public Partition(){ } } Unlock một bảng public boolean unlockTable(String table_name) throws Exception; Client sử dụng chức năng này để unlock một bảng đã lock trước đó. Xin một ticket data để lấy dữ liệu trên một partition nào đó của bảng public String getTicketData(String table_name, String partition, int start_index, int stop_index, String check_sum) throws Exception; Client sử dụng chức năng này để xin một ticket để truy xuất dữ liệu của một bảng trên một partition, chỉ số record từ start_index đến stop_index. Nếu các thông số đều hợp lệ, GDM sẽ trả về cho client một ticket_id. Client có thể tự sử dụng ticket_id này để truy xuất dữ liệu, hoặc có thể chuyển ticket_id cho người khác sử dụng. Tham số check_sum dùng để xác thực người có quyền hợp pháp để thực thi ticket. Xin một ticket data để lấy dữ liệu toàn bộ bảng public String getTicketData(String table_name, String check_sum) throws Exception; Client sử dụng chức năng này để xin một ticket truy xuất dữ liệu của toàn bộ bảng trong data source, không quan tâm đến các partition cụ thể bên dưới. Truy xuất dữ liệu ứng với một ticket data public Vector[] getData(Token token) throws Exception; Một client nào đó thực thi ticket getdata để truy xuất dữ liệu. Token gồm ticket_id và check_sum để xác thực người có quyền hợp pháp để thực thi ticket. Với: public class Token { public String ticket_id; public String check_sum; public Token(String ticket_id, String check_sum) { this.ticket_id = ticket_id; this.check_sum = check_sum; } } Xin một ticket insert để thêm dữ liệu vào bảng public String getTicketInsertRecords(String table_name, String[] column_names, String check_sum) throws Exception; Client sử dụng chức năng này để xin một ticket insert dữ liệu vào bảng. Nếu muốn thêm dữ liệu vào đầy đủ các cột của bảng thì để thông số column_names có trị null. Insert dữ liệu vào bảng public boolean insertRecords(Token token, Vector[] record_set) throws Exception; Client sử dụng chức năng này để thực thi ticket insert dữ liệu. Thông số record_set là các record muốn insert. Mỗi record là một vector, trị ứng với mỗi cột được lưu trữ trong vector đó. Chuỗi và ngày tháng bao bởi dấu nháy đơn ‘ ’, số không có dấu nháy. Xin một ticket create table để tạo bảng public String getTicketCreateTable(String table_name, Schema schema, String check_sum) throws Exception; Client sử dụng chức năng này để xin một ticket tạo bảng trong data source đang kết nối với cấu trúc của bảng được miêu tả trong đối tượng schema. Thực thi tạo bảng public boolean createTable(Token token) throws Exception; Client sử dụng chức năng này để thực thi ticket tạo bảng. Load dữ liệu vào data source public boolean loadData(String table_name, Vector[] record_set) throws Exception; Client sử dụng chức năng này để load dữ liệu vào bảng table_name. Client không cần quan tâm đến sự phân bố của các partition bên dưới. Thông số record_set là các record muốn load vào bảng. Mỗi record là một vector, trị ứng với mỗi cột được lưu trữ trong vector đó. Chuỗi và ngày tháng bao bởi dấu nháy đơn ‘ ’, số không có dấu nháy. Client sau khi kết nối thành công vào data source và đã gửi định danh credential thì có thể load dữ liệu vào bảng, không cần phải thông qua quá trình xin ticket và thực thi ticket. Tuy nhiên, khi tính phí thì GDM xem mỗi lần client load data cũng như là một lần thực thi ticket, và cũng được liệt kê trong chi tiết tính phí. Xin một ticket drop table để xóa bảng public String getTicketDropTable(String table_name, String check_sum) throws Exception; Client sử dụng chức năng này để xin một ticket xóa bảng trong data source. Thực thi xóa bảng public boolean dropTable(Token token) throws Exception; Client sử dụng chức năng này để thực thi ticket xóa bảng. Các chức năng hỗ trợ cho GDM administrator Thêm một data source public boolean addDataSource(String datasource_id, String datasource_name, String desc) throws Exception; Aministrator sử dụng chức năng này để thêm vào một data source với các thông tin: mã số data source, tên data source, và mô tả về data source. Thêm một data resource public boolean addDataResource(String data_resource_id, String data_source_id, String handle, String host_name, String data_service_resource) throws Exception; Aministrator sử dụng chức năng này để thêm một data resource cho một data source. Thêm một ứng dụng sẽ sử dụng các data source quản lý bởi GDM public boolean addApplication(String app_name, String app_desc) throws Exception ; Aministrator sử dụng chức năng này để đăng kí một ứng dụng mới muốn truy xuất các dữ liệu do GDM quản lý. Thêm một user đăng kí sử dụng GDM public String addUser(String user_name, String app_name, String role, String data_source_id) throws Exception; Aministrator sử dụng chức năng này để thêm mới một user cho một ứng dụng có tên là app_name, user này có thể truy xuất dữ liệu trong data source có mã là data_source_id, chi phí của các hành động truy xuất dữ liệu này sẽ được tính cho ứng dụng app_name. Phương thức này trả ra password ban đầu mà hệ thống sinh ngẫu nhiên cho user. Xóa một user đã đăng kí sử dụng GDM public boolean deleteUser(String user_name, String app_name) throws Exception; Aministrator sử dụng chức năng này để xóa một user của ứng dụng app_name. Tính phí cho một ứng dụng public double computeFee(String app_name, String from_date, String to_date) throws Exception; Aministrator sử dụng chức năng này để tính phí cho ứng dụng app_name. Thời gian tính phí từ ngày from_date đến ngày to_date. Định dạng ngày tháng được sử dụng là “yyyy-mm-dd”. Lấy chi tiết tính phí cho một ứng dụng public Vector[] getFeeDetails(String app_name, String from_date, String to_date) throws Exception; Aministrator sử dụng chức năng này để lấy các thông tin chi tiết khi tính phí cho ứng dụng app_name từ ngày from_date đến ngày to_date. Thông tin chi tiết gồm các ticket được tính phí, số record tiket truy xuất, phí thu ứng với ticket này. Thiết lập lại giá cho một loại ticket public boolean setTicketPrice(String ticket_type, double unit_price) throws Exception; Aministrator sử dụng chức năng này để điều chỉnh lại mức phí đơn vị cho một loại ticket_type. Đặc tả các lớp hiện thực hệ thống GDM Client Tên lớp Chức năng Token Chứa ticket_id và check_sum ColumnInfo Chứa thông tin một cột trong table: name và sql_type Schema Chứa schema của một table Partition Chứa thông tin về một partition: partition_id, host_name, n_record Utility Chuyển đổi qua lại giữa string và các lớp trên IGDMClient Định nghĩa interface để client và admin làm việc với GDM. GDM_Client Hiện thực interface IGDMClient. Lớp này có sử dụng Utility để chuyển đổi qua lại giữa string và các kết quả trả về cho client. Lớp này sẽ gọi các hàm của lớp GDM_Interface bên dưới. TestClient Các ví dụ về cách sử dụng interface cung cấp cho client. TestAdmin Các ví dụ về cách sử dụng interface cung cấp cho Admin. Lớp Token Các field dữ liệu public String ticket_id: định danh của ticket. public String check_sum: để kiểm tra tính hợp lệ của ticket, ví dụ thông tin về người thực thi ticket. public String executer: người được cấp quyền thực thi ticket này, khi nào executer và check_sum phù hợp nhau thì mới cho phép thực thi ticket. Các phương thức public Token(String ticket_id, String check_sum, String executer): hàm khởi tạo Lớp ColumnInfo Các field dữ liệu public String name: tên cột. public String sql_type: kiểu dữ liệu của cột. Các phương thức public ColumnInfo(String name, String sql_type): hàm khởi tạo. Lớp Schema Các field dữ liệu public ColumnInfo[] columns: danh sách thông tin của các cột trong một bảng. Các phương thức không có Lớp Partition Các field dữ liệu public String partition_id: định danh của partition. public String host_name: địa chỉ IP của máy chứa partition. public long n_record: số lượng record trong partition. Các phương thức không có Lớp Utility Các field dữ liệu không có Các phương thức public static String[] getDataSources(String sql_result): trả ra danh sách các data_source từ kết quả dạng string của câu truy vấn. public static String[] getTables(String sql_result): trả ra danh sách các bảng trong data_source từ kết quả dạng string của câu truy vấn. public static Partition[] lockTable(String sql_result): trả ra danh sách các đối tượng thuộc lớp Partition từ kết quả dạng string của câu truy vấn. public static Vector[] getData(String sql_result): trả ra vector hàng và cột từ kết quả dạng string của câu truy vấn. public static String prepare_columns_insert(String[] column_names): chuyển danh sách các cột cần insert dữ liệu thành một string. public static String prepare_data_insert(Vector[] record_set): chuyển dữ liệu cần insert ở dạng Vector sang dạng string. public static Schema getTableSchema(String sql_result): trả ra đối tượng lớp Schema từ kết quả dạng string câu truy vấn. public static String getTableStructure(Schema schema): chuyển đối tượng Schema thành dạng String. public static String getTokenString(Token token): chuyển một token thành một chuỗi. Lớp GDM_Client Các field dữ liệu GDM_Interface gdm: đối tượng GDM cung cấp interface cho client. Các phương thức Các phương thức trong interface đã trình bày trong mục 1.(Interface giao tiếp của hệ thống) GDM Core Tên lớp Chức năng GDM_Core Cung cấp các chức năng cơ bản của GDM GDM_Interface Đóng gói các chức năng public của lớp GDM_Core DaiBasicActivity Cung cấp các hàm làm việc với OGSA_DAI GDM_Exception Hiện thực các exception để GDM sinh ra trong trường hợp thao tác xử lý bị lỗi MyDate Hiện thực lớp MyDate để biểu diễn lớp các đối tượng chứa ngày, tháng, năm Constants Định nghĩa các hằng số được sử dụng trong hiện thực GDM Client và GDM Core Lớp DaiBasicActivity Các field dữ liệu private static String column_seperator: dùng để ngăn cách các cột của một hàng trong dữ liệu trả về bởi câu truy vấn. private static String record_seperator: dùng để ngăn cách các hàng trong dữ liệu trả về bởi câu truy vấn. Các phương thức public static DataService connectResource(String handle, String id): kết nối vào một service của OGSA-DAI để có thể truy xuất dữ liệu bên dưới. public static Object executeSelectQuery(DataService service, String sql, int output_type): thực thi một câu select sql lên database quản lý bởi một service của OGSA-DAI. public static int executeUpdateQuery(DataService service, String sql): thực thi một câu update sql lên database quản lý bởi một service của OGSA-DAI. public static Object getDatabaseSchema(DataService service, int output_type): lấy thông tin về schema của database quản lý bởi một service của OGSA-DAI. private static Vector translateSchemaToVector(DatabaseSchemaMetaData schema): chuyển database schema từ dữ liệu lớp DatabaseSchemaMetaData thành dữ liệu kiểu vector. private static String translateVectorSchemaToString(Vector vector_schema): chuyển database schema từ dữ liệu kiểu vector thành dữ liệu kiểu string. Lớp GDM_Exception Các field dữ liệu Không có Các phương thức public GDM_Exception(String message): hàm khởi tạo để tạo ra một đối tượng Exception với thông tin là message. public String toString(): trả ra chuỗi thông tin cần thông báo cho người sử dụng khi có exception xảy ra. Lớp GDM_Core Các field dữ liệu private static final DataService gdmDataService: service dùng để tương tác với OGSA-DAI nhằm truy xuất và cập nhật metadata của GDM. private boolean connected: client đã connect vào GDM hay chưa. private String data_source: chứa data_source mà client đang connect vào. private String data_resource_ids: những data_resource trong data_source đang connect. private String database_schema: schema của data_source mà client đang connect. private boolean credential_sent: client đã sent credential hay chưa. private String credential: credential của client. private String user_role: role của client đang connect vào. private String user_name: user name của client đang connect vào. Các phương thức public String getDataSources(): trả ra các data_source mà GDM đang quản lý. public boolean connect(String dataSource, String user, String password): một client xin kết nối với GDM. public void disconnect(): client ngưng kết nối với hệ thống. public String getTables(): trả ra danh sách các table có trong data_source. private String getDataResourceId(int index): trả ra định danh của data_resource có chỉ số index trong các data_resource của data_source mà client dang connect. private int getNumberResourceId(): trả ra số lượng data_resource trong data_source hiện client đang connect. private String executeSelectQuery(DataService service, String sql): thực thi một câu cập nhật select sql thông qua một service của OGSA-DAI. private int executeUpdateQuery(DataService service, String sql): thực thi một câu truy vấn update sql thông qua một service của OGSA-DAI. private String generateTicketId(): sinh ra một ticket_id mới để cấp cho client, đảm bảo ticket_id không bị trùng lắp với các id cũ đã sinh trước đó. private String getDatabaseSchema(DataService service): trả ra schema của data_source, gồm những bảng nào, cấu trúc mỗi bảng. private String[] getHandleAndResourceId(String data_resource_id): trả ra handle và resource id dùng để liên kết vói OGSA-DAI. private String doGetTableSchema(String table_name): lấy thông tin từ metadata để trả ra schema của một table. public String getTableSchema(String table_name): trả ra cho client thông tin về schema của một table. public int getNumberOfRow(String table_name): trả ra số lượng hàng của một bảng trên tất cả các data_source. public boolean sendCredential(String credential): client gửi credential cho GDM. public String lockTable(String table_name): client xin lock một table, trả ra thông tin về các partition của table đó trên các data_resource. public boolean unlockTable(String table_name): client xin unlock một table. public String getTicketInsertRecords(String table_name, String column_names, String check_sum): client xin một ticket insert record. private String getDataResoureWithSmallestData(String table_name): trả ra partition trên data_resource nào chứa số hàng ít nhất trong các partition của một table. public boolean insertRecords(String token_string, String data_insert): client thực thi ticket insert record. public boolean loadData(String table_name, String data_insert): client load dữ liệu vào bảng. public String getTicketData(String table_name, String partition, int start_index, int stop_index, String check_sum): client xin ticket lấy dữ liệu trên một partition. public String getTicketData(String table_name,String check_sum): client xin ticket lấy dữ liệu toàn bộ bảng. public String getData(String token_string): client lấy data ứng với ticket_id trong token. private String getTransactimeString(): trả ra thời gian của hệ thống khi một ticket vừa được thực thi. public String getTicketDropTable(String table_name, String check_sum): client xin ticket xóa một bảng. public boolean dropTable(String token_string): client thực thi xóa một bảng. public String getTicketCreateTable(String table_name, String schema, String check_sum): client xin ticket tạo bảng. public boolean createTable(String token_string): client thực thi tạo bảng. private String generateUserPass(): sinh ra password ban đầu khi tạo mới một user. public boolean addDataSource(String datasource_id, String datasource_name, String desc): admin thêm một data_source. public boolean addDataResource(String data_resource_id, String data_source_id, String handle, String host_name, String data_service_resource): admin thêm một data_resource. public String addUser(String user_name, String app_name, String role, String data_source_id): admin thêm một user của một ứng dụng có đăng kí sử dụng dữ liệu cung cấp bởi GDM. public boolean deleteUser(String user_name, String app_name): admin xóa một user của một ứng dụng có đăng kí sử dụng dữ liệu cung cấp bởi GDM. public boolean addApplication(String app_name, String app_desc): admin thêm vào metadata thông tin về ứng dụng mà GDM sẽ hỗ trợ việc truy xuất dữ liệu. public double computeFee(String app_name, String start_date, String end_date): tính phí cho một ứng dụng trong một khoảng thời gian giữa 2 thời điểm. public String getFeeDetails(String app_name, String start_date, String end_date): trả ra chi tiết tính phí cho một ứng dụng trong một khoảng thời gian giữa 2 thời điểm. public boolean setTicketPrice(String ticket_type, double unit_price): thiết lập giá đơn vị khi tính phí cho một loại ticket. Siêu dữ liệu của hệ thống Tạo bảng chứa thông tin về các data source: create table Data_Source (data_source_id varchar(20) not null, data_source_name varchar(50) not null, description varchar(200), primary key(data_source_id)); Tên column Kiểu dữ liệu Ý nghĩa data_source_id varchar(20) Mã số của data source data_source_name varchar(50) Tên của data source description varchar(200) Mô tả về data source Tạo bảng chứa thông tin về các data resource của các datasource: create table Data_Resource(data_resource_id varchar(20) not null, data_source_id varchar(20) not null, handle varchar(200) not null, host_name varchar(50) not null, data_service_resource_id varchar(50) not null, primary key(data_resource_id), foreign key (data_source_id) references Data_Source(data_source_id)); Tên column Kiểu dữ liệu Ý nghĩa data_resource_id varchar(20) Mã số của data resource data_source_id varchar(20) Mã số của data source chứa data resource handle varchar(200) Handle dùng để truy xuất đến data resource khi dùng Ogsa-dai host_name varchar(50) Địa chỉ IP của node mà data resource được lưu trữ data_service_resource_id varchar(50) Service resource id dùng để truy xuất đến data resource khi dùng Ogsa-dai Tạo bảng chứa thông tin về các bảng trong các data resource: create table Data_Item (data_item_name varchar(20) not null, data_resource_id varchar(20) not null, primary key(data_item_name, data_resource_id), foreign key (data_resource_id) references Data_Resource(data_resource_id)); Tên column Kiểu dữ liệu Ý nghĩa data_item_name varchar(20) Tên của bảng dữ liệu data_resource_id varchar(20) Mã số của data resource chứa bảng dữ liệu Tạo bảng chứa thông tin về các ứng dụng đăng kí sử dụng GDM: create table Application(credential varchar(50) not null, description varchar(200), primary key(credential)); Tên column Kiểu dữ liệu Ý nghĩa credential varchar(50) Tên của ứng dụng description varchar(200) Mô tả về ứng dụng Tạo bảng chứa thông tin về các user: create table User (user_name varchar(50) not null, password varchar(20) not null, credential varchar(50) not null, role varchar(50) not null, data_source_id varchar(20) not null, primary key(User_name,credential), foreign key(credential)references Application(credential), foreign key (data_source_id) references Data_Source(data_source_id)); Tên column Kiểu dữ liệu Ý nghĩa user_name varchar(50) Tên user password varchar(20) password credential varchar(50) Tên ứng dụng role varchar(50) Các quyền của user data_source_id varchar(20) Mã số của data source mà user có thể truy xuất Tạo bảng chứa thông tin về các ticket: create table Ticket (ticket_id varchar(20) not null, ticket_type varchar(20)not null, valid_time datetime not null, credential varchar(50) not null, check_sum varchar(30) not null, executed varchar(1) not null default 'n', date_completed datetime default '0000-00-00 00:00:00', num_row int default 0, num_col int default 0, primary key(ticket_id)); Tên column Kiểu dữ liệu Ý nghĩa ticket_id varchar(20) Mã số của ticket ticket_type varchar(20) Loại ticket valid_time datetime Thời gian ticket còn hiệu lực credential varchar(50) Tên của ứng dụng xin ticket check_sum varchar(30) Thông tin để xác thực người có quyền hợp pháp khi thực thi ticket executed varchar(1) Có 2 trị ‘y’ hoặc ‘n’, cho biết ticket đã được thực thi hay chưa date_completed datetime Ngày ticket được thực thi num_row int Số lượng record mà ticket truy xuất đến num_col int Số lượng column mà ticket truy xuất đến Tạo bảng chứa thông tin về giá đơn vị của các loại ticket: create table Ticket_Price(ticket_type varchar(20)not null, unit_price double not null default 0, primary key(ticket_type)); Tên column Kiểu dữ liệu Ý nghĩa ticket_type varchar(20) Loại ticket unit_price double Giá đơn vị của loại ticket Tạo bảng chứa thông tin về các ticket data: create table Ticket_Data(ticket_id varchar(20) not null, data_item_name varchar(20) not null, data_resource_id varchar(20) not null, startIndex integer not null, stopIndex integer not null, primary key (ticket_id), foreign key (data_item_name) references Data_Item(data_item_name), foreign key (data_resource_id) references Data_Resource(data_resource_id)); Tên column Kiểu dữ liệu Ý nghĩa ticket_id varchar(20) Mã số ticket data_item_name varchar(20) Tên bảng mà ticket truy xuất đến data_resource_id varchar(20) Mã số data resource mà ticket truy xuất đến, nếu thông tin này là null thì ticket truy xuất đến mọi data resource có chứa bảng có tên ở trên startIndex integer Chỉ số của record bắt đầu truy xuất stopIndex integer Chỉ số của record cuối khi truy xuất, các record được truy xuất có chỉ số từ startIndex đến stopIndex. Tạo bảng chứa thông tin về các ticket create table: create table Ticket_Create_Table(ticket_id varchar(20) not null, data_item_name varchar(20) not null, data_resource_id varchar(20), table_structure varchar(500) not null,primary key (ticket_id), foreign key (data_item_name) references Data_Item(data_item_name), foreign key (data_resource_id) references Data_Resource(data_resource_id) ); Tên column Kiểu dữ liệu Ý nghĩa ticket_id varchar(20) Mã số ticket data_item_name varchar(20) Tên bảng mà ticket sẽ tạo data_resource_id varchar(20) Mã số data resource nơi mà ticket sẽ tạo bảng, nếu thông tin này là null thì ticket sẽ tạo bảng trên mọi data resource của data source mà user đang kết nối table_structure varchar(500) Cấu trúc của bảng sẽ được tạo Tạo bảng chứa thông tin về các ticket insert record: create table Ticket_Insert_Record(ticket_id varchar(20) not null, data_item_name varchar(20) not null, data_resource_id varchar(20), column_names varchar(300) not null, primary key (ticket_id), foreign key (data_item_name) references Data_Item(data_item_name), foreign key (data_resource_id) references Data_Resource(data_resource_id) ); Tên column Kiểu dữ liệu Ý nghĩa ticket_id varchar(20) Mã số ticket data_item_name varchar(20) Tên bảng mà ticket sẽ insert dữ liệu vào data_resource_id varchar(20) Mã số data resource mà ticket sẽ insert dữ liệu vào, nếu thông tin này là null thì ticket sẽ insert dữ liệu vào data resource đang có số lượng record ít nhất column_names varchar(300) Các cột dữ liệu sẽ được insert dữ liệu Tạo bảng chứa thông tin về các ticket drop table: create table Ticket_Drop_Table(ticket_id varchar(20) not null, data_item_name varchar(20) not null, data_resource_id varchar(20), primary key (ticket_id), foreign key (data_item_name) references Data_Item(data_item_name), foreign key (data_resource_id) references Data_Resource(data_resource_id) ); Tên column Kiểu dữ liệu Ý nghĩa ticket_id varchar(20) Mã số ticket data_item_name varchar(20) Tên bảng mà ticket sẽ bị hủy bỏ data_resource_id varchar(20) Mã số data resource nơi mà ticket xóa bảng, nếu thông tin này là null thì ticket sẽ xóa bảng trên mọi data resource của data source mà user đang kết nối Tạo bảng chứa thông tin về các bảng đang bị lock: create table Locked_Table (data_source_id varchar(20) not null, table_name varchar(20) not null); Tên column Kiểu dữ liệu Ý nghĩa data_source_id varchar(20) Mã số data source có bảng đang bị lock table_name varchar(20) Tên của bảng đang bị lock Phụ lục B: Hướng dẫn cài đặt GDM trên môi trường GRID Môi trường làm việc export GLOBUS_LOCATION=/usr/local/globus-4.0.1 source $GLOBUS_LOCATION/etc/globus-user-env.sh (đặt tất cả các thư viện của Globus vào trong CLASS-PATH) export ANT_HOME=/usr/local/apache-ant-1.6.5/ export JAVA_HOME=/usr/java/j2sdk1.4.2_11/ export PATH=$ANT_HOME/bin:$JAVA_HOME/bin:$PATH Cài đặt Mysql rpm -i MySQL-server-standard-5.0.20a-0.rhel3.i386.rpm (cài đặt mysql server) rpm -i MySQL-client-standard-5.0.20a-0.rhel3.i386.rpm (cài đặt mysql client) Cài đặt OGSA-DAI /ogsadai-wsrf-2.1/doc/wsrf/install.html Cài đặt OGSA-DAI Trước tiên chúng ta cần có: Phần mềm cài đặt OGSA-DAI WSRF Jakarta ANT 1.5 or 1.6 Một hệ quản trị cơ sở dữ liệu, ở đây MySql được sử dụng (database driver tương ứng là mysql-connector-java-3.1.8-bin.jar) Bên cạnh đó cần thêm một số tập tin sau: jakarta-oro-2.0.8.jar Một trong các tập tin: xmldb.jar, xmldb-api.jar, xmldb-api-20030701.jar lucene-1.4.3.jar Ta sẽ tiến hành cài đặt OGSA-DAI trên GT4: Đặt tất cả các tập tin .jar vào thư mục lib nằm bên trong OGSA-DAI WSRF $ export GLOBUS_LOCATION=/path/to/Globus/directory Tắt GT4 Container Tiến hành cài đặt OGSA-DAI WSRF: Chạy dòng lệnh sau từ vị trí thư mục OGSA-DAI binary distribution: $ ant deployGT4 Cách remove OGSA-DAI khỏi GT4: $ export GLOBUS_LOCATION=/path/to/Globus/directory Chạy dòng lệnh sau từ vị trí thư mục OGSA-DAI binary distribution: $ ant undeployGT4 Cài đặt Data Service và Data Service Resource Xem mục Exposing Data Resource using OGSA-DAI WSRF Đầu tiên ta sẽ cài đặt một Data Service, người sử dụng sẽ tương tác với Data Service khi muốn truy xuất những Data Resource bên dưới. Ban đầu Data Service này sẽ chưa cung cấp một Data Service Resource nào cả. Cài đặt một Data Service Resource. Data Service Resource sẽ chứa thông tin về một Data Resource cụ thể, ở đây là MySql Khai báo Data Service Resource này với Data Service. Từ đây Data Service này sẽ quản lý Data Service Resource. Ví dụ: - Tạo Database daitest và một user tương ứng (daitest-daitest) - Login vào Mysql bằng root root$mysql mysql>create database daitest mysql>create user daitest mysql> GRANT ALL PRIVILEGES ON *.* TO 'daitest'@'localhost' -> IDENTIFIED BY 'daitest' WITH GRANT OPTION; mysql> GRANT ALL PRIVILEGES ON *.* TO 'daitest'@'%' -> IDENTIFIED BY 'daitest' WITH GRANT OPTION; mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost'; mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost'; mysql>exit root>mysql --user daitest --password enterpassword? daitest mysql>use daitest mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), -> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE); mysql> INSERT INTO pet -> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL); name owner species sex birth death Fluffy Harold cat f 1993-02-04 Claws Gwen cat m 1994-03-17 Buffy Harold dog f 1989-05-13 Fang Benny dog m 1990-08-27 Bowser Diane dog m 1979-08-31 1995-07-29 Chirpy Gwen bird f 1998-09-11 Whistler Gwen bird 1997-12-09 Slim Benny snake m 1996-04-29 mysql>exit - Deploy một data service (/ogsadai-wsrf-2.1/doc/wsrf/deploy/DeployDataService.html) $ ant deployDataServiceGT4 -Dgt.dir=/path/to/GT4/directory -Ddai.service.path=service/path dai.service.path specifies the local URL of the service. For example -Ddai.service.path=ogsadai/DataService specifies a data service whose URL will be Ví dụ deploy một data service có tên là DataService root$ ant deployDataServiceGT4 -Dgt.dir=/usr/local/globus -Ddai.service.path=ogsadai/DataService To check that a service has been deployed under GT4: Start the GT4 container: $ cd $GLOBUS_LOCATION $ ./bin/globus-start-container -nosec Eventually a list of service URLs will be displayed. You should see one corresponding to your service. For example: [22]: - Deploy Data Service Resource (/ogsadai-wsrf-2.1/doc/wsrf/deploy/DeployDataServiceResource.html) +Tắt Web services container +Tạo file miêu tả các thuộc tính của data service resource Trong thư mục đặt OGSA-DAI WSRF có để sẵn một file ví dụ sẵn có tên là data.service.resource.properties, nếu chúng ta muốn tạo file miêu tả nào mới chỉ việc copy file này và sửa lại cho phù hợp, cũng đặt vào trong thư mục OGSA-DAI WSRF. Ví dụ tạo file DaiTestResource.config miêu tả thuộc tính của một Data Service Resource có tên là DaiTestResource, DaiTestResource sẽ map vào cơ sở dữ liệu daitest chứa trong MySql Những nội dung chính cần sửa đổi trong file là: dai.resource.id= DaiTestResource dai.data.resource.type=Relational dai.product.name=MySQL dai.product.vendor=MySQL dai.product.version=1.0 dai.data.resource.uri= jdbc:mysql://violet.dit.hcmut.edu.vn:3306/daitest dai.driver.class=org.gjt.mm.mysql.Driver dai.user.name=daitest dai.password=daitest - Deploy a data service resource $ ant deployResourceGT4 -Dgt.dir=/path/to/GT4/directory -Ddai.service.resource.file=DAI-SERVICE-RESOURCE-FILE Ví dụ ở đây: [root@violet ogsadai-wsrf-2.1]# ant deployResourceGT4 -Dgt.dir=/usr/local/globus-4.0.1 -Ddai.service.resource.file=DaiTestResource.config dai.service.resource.file specifies the location of a data service resource properties file. If no argument is given then a default location of data.service.resource.properties (within the OGSA-DAI WSRF distribution directory) is assumed. - Add data service resource vao trong Data Service sẵn có $ ant addResourceGT4 -Ddai.service.path=service/path -Ddai.resource.id=ResourceID -Dgt.dir=/path/to/GT4/directory dai.service.path specifies the local URL of the service. For example -Ddai.service.path=ogsadai/DataService specifies a data service whose URL will be -Ddai.resource.id= is the ID of the data service resource that the data service is to expose. This must be the name of a data service resource which you have already deployed as described on the previous page. For example -Ddai.resource.id=MySQLResource. Ví dụ add DaiTestResource vào trong DataService [root@violet ogsadai-wsrf-2.1]# ant addResourceGT4 -Ddai.service.path= ogsadai/DataService -Ddai.resource.id=DaiTestResource -Dgt.dir=/usr/local/globus-4.0.1 (hailh: service.path: chỉ tên service. Chỉ khi nào là url, uri thì mới ghi full đường dẫn. Lưu ý: url thay đổi tùy theo chạy container với –nosec hay không) Sử dụng OGSA-DAI WSRF Clients OGSA-DAI và GT4 cung cấp rất nhiều chương trình client giúp chúng ta có thể tương tác với OGSA-DAI WSRF services một cách dễ dàng ListResources Client Liệt kê những Data Service Resource được cung cấp bởi một OGSA-DAI WSRF Data Service. Ví dụ: ant listResourcesClient -Ddai.url= (Lưu ý: dai.url là hay https://... Tùy theo start-globus-container có sử dụng –nosec hay không). Tất cả các thiết lập trình bày trong tài liệu này đều chạy container không có security. GetProperty Client Lấy thuộc tính của một Data Service Resource được cung cấp bởi một OGSA-DAI WSRF Data Service chẳng hạn activityTypes( những thao tác mà một Data Service Resource có thể thực hiện trên Data Resource mà nó quản lý), performDocumentSchema (XML schema đặc tả cấu trúc hợp pháp của một Perform Document mà Data Service Resource có thể xử lý) … Ví dụ: Lấy database schema của một data resource ant getPropertyClient -Ddai.url= -Ddai.resource.id=DaiTestResource -Ddai.property={}databaseSchema End-To-End Client Cho phép: Tương tác với một Data Service và liệt kê những Data Service Resource mà nó cung cấp Gởi một Perform Document tới Data Service và in ra kết quả của Response Document (là kết quả trả về để đáp ứng những yêu cầu nêu trong Perform Document) Databrowser Một GUI cho phép chúng ta tương tác với cơ sở dữ liệu quan hệ và XML Các thao tác thường sử dụng khi xây dựng một ứng dụng sử dụng OGSA-DAI Lấy siêu dữ liệu của dịch vụ và các Data Resource bên dưới Phiên bản của các dịch vụ đang chạy trên OGSA-DAI server Liệt kê các Data Resource cung cấp bởi một Data Service Các Activity hỗ trợ bởi Data Resource và siêu dữ liệu của mỗi Activity Thông tin sản phẩm của Data Resource như tên, nhà cung cấp, phiên bản… Lấy các thuộc tính của Data Service Định vị Data Service Xác định Data Service nào chịu trách nhiệm quản lý Data Resource mà ta muốn sử dụng. Lấy danh sách các Data Resource được cung cấp bởi một Data Service và chọn ra Data Resource mình muốn làm việc Thực hiện truy vấn trên Data Resource. Các dạng truy vấn thường gặp: Một câu truy vấn Sql đơn giản Một chuỗi các câu truy vấn Câu truy vấn được tham số hóa cho phép làm việc trên các phần dữ liệu khác nhau của cùng một Data Resource qua các lần lặp khác nhau. Một câu truy vấn XPath khi thao tác trên cơ sở dữ liệu XML Điều khiển dòng chảy Khi gởi một Perform Document chứa nhiều activity ta cần xác định trật tự các activity được xử lý bởi dịch vụ. Xử lý kết quả Ứng với mỗi Perform Document (chứa các yêu cầu thể hiện dưới dạng các activity) sẽ có một Response Document trả về. Response Document gồm nhiều bản báo cáo về các activity, mỗi bản báo cáo về một activity sẽ chứa trạng thái của activity đó và có thể cả dữ liệu kết quả. Ta có thể lấy dữ liệu trả về này và xử lý tiếp như ghi kết quả vào bảng, chuyển nó sang dạng HTML, hoặc chuyển sang một cơ sở dữ liệu khác… Cập nhật và tải dữ liệu Cập nhật cơ sở dữ liệu quan hệ, cơ sở dữ liệu XML và tải một phần dữ liệu từ bảng này sang bảng khác Biến đổi dữ liệu Biến đổi dạng văn bản XML sang dạng văn bản text hoặc các định dạng khác, như HTML… Nén dữ liệu bằng thao tác zipArchive và gzipCompression Tích hợp dữ liệu Kết nối dữ liệu giữa các lọai cơ sở dữ liệu khác nhau, chẳng hạn giữa cơ sở dữ liệu XML và cơ sở dữ liệu quan hệ Phân phối dữ liệu Chuyển dữ liệu tới một địa chỉ URL, GridFTP, một tập tin Chuyển dữ liệu giữa các Data Service Resource Cài đặt GDM database MySQLResource: chứa meta data. Tên MySQLResource được code cứng. MySQLResource, DaiTestResource là 2 resource chứa data. Tên cấu hình được, chứa trong MySQLResource. 2 data resource này chứa các dữ liệu partition 1 & partition 2 của dữ liệu. Phai tao data resource & add vào data service: MySQLResource, DaiTestResource, MySqlResource. Các resource trong DataService: Data service resource MySql database Usage MySQLResource ogsadai GDM meta data DaiTestResource daitest Partition 1 MySqlResource mytest Partition 2 Tạo Database (Lưu ý: MySQL phân biệt chữ hoa & chữ thường) Create user daitest User daitest sẽ là user mà 3 data serive resource dùng để truy xuất vào 3 database tương ứng. (trong ví dụ về tạo dataservice resource ở trên, ta đã tạo & cấp quyền rồi. Do đó, nếu đã làm ở trên thì không cần làm lại đoạn script bên dưới) mysql>create user daitest mysql> GRANT ALL PRIVILEGES ON *.* TO 'daitest'@'localhost' IDENTIFIED BY 'daitest' WITH GRANT OPTION; mysql> GRANT ALL PRIVILEGES ON *.* TO 'daitest'@'%' IDENTIFIED BY 'daitest' WITH GRANT OPTION; mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost'; mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost'; mysql>exit Cài đặt các Data service resource Data service resource MySQLResource Deploy Data service resource MySQLResource +Tắt Web services container +Tạo file miêu tả các thuộc tính của data service resource (Copy file data.service.resource.properties thành MySQLResource.config (đã có sẵn trong file source ogsa_dai) Những nội dung chính cần sửa đổi trong file là: dai.resource.id= MySQLResource dai.data.resource.type=Relational dai.product.name=MySQL dai.product.vendor=MySQL dai.product.version=1.0 dai.data.resource.uri= jdbc:mysql://172.28.10.75:3306/ogsadai dai.driver.class=org.gjt.mm.mysql.Driver dai.user.name=daitest dai.password=daitest + Deploy a data service resource $ ant deployResourceGT4 -Dgt.dir=/usr/local/globus -Ddai.service.resource.file=MySQLResource.config +Add data service resource vao trong Data Service sẵn có $ ant addResourceGT4 -Ddai.service.path=ogsadai/DataService -Ddai.resource.id=MySQLResource -Dgt.dir=/usr/local/globus Data service resource DaiTestResource (đã làm trong ví dụ ở trên) $ ant deployResourceGT4 -Dgt.dir=/usr/local/globus -Ddai.service.resource.file=DaiTestResource.config $ ant addResourceGT4 -Ddai.service.path=ogsadai/DataService -Ddai.resource.id=DaiTestResource -Dgt.dir=/usr/local/globus Data service resource MySqlResource Deploy Data service resource MySqlResource +Tắt Web services container +Tạo file miêu tả các thuộc tính của data service resource (Copy file data.service.resource.properties thành MySqlResource.config (đã có sẵn trong file source ogsa_dai) Những nội dung chính cần sửa đổi trong file là: dai.resource.id= MySqlResource dai.data.resource.type=Relational dai.product.name=MySQL dai.product.vendor=MySQL dai.product.version=1.0 dai.data.resource.uri= jdbc:mysql://172.28.10.75:3306/mytest dai.driver.class=org.gjt.mm.mysql.Driver dai.user.name=daitest dai.password=daitest + Deploy a data service resource $ ant deployResourceGT4 -Dgt.dir=/usr/local/globus -Ddai.service.resource.file=MySqlResource.config +Add data service resource vao trong Data Service sẵn có $ ant addResourceGT4 -Ddai.service.path=ogsadai/DataService -Ddai.resource.id=MySqlResource -Dgt.dir=/usr/local/globus Tạo database Database daitest mysql>create database daitest root>mysql --user daitest --password enterpassword? daitest mysql>use daitest Thực hiện các câu lệnh tạo table & insert dữ liệu như bên dưới Database ogsadai mysql>create database ogsadai root>mysql --user daitest --password enterpassword? daitest mysql>use ogsadai Thực hiện các câu lệnh tạo table & insert dữ liệu như bên dưới Database mytest mysql>create database mytest root>mysql --user daitest --password enterpassword? daitest mysql>use mytest Thực hiện các câu lệnh tạo table & insert dữ liệu như bên dưới //////// use ogsadai; //Set up GDM database drop table Data_Source; drop table Data_Resource; drop table Data_Item; drop table Application; drop table User; drop table Ticket_Price; drop table Ticket; drop table Ticket_Data; drop table Ticket_Create_Table; drop table Ticket_Insert_Record; drop table Ticket_Drop_Table; drop table Locked_Table; create table Data_Source (data_source_id varchar(20) not null, data_source_name varchar(50) not null, description varchar(200), primary key(data_source_id)); create table Data_Resource(data_resource_id varchar(20) not null, data_source_id varchar(20) not null, handle varchar(200) not null, host_name varchar(50) not null, data_service_resource_id varchar(50) not null, primary key(data_resource_id), foreign key (data_source_id) references Data_Source(data_source_id)); create table Data_Item (data_item_name varchar(20) not null, data_resource_id varchar(20) not null, primary key(data_item_name, data_resource_id), foreign key (data_resource_id) references Data_Resource(data_resource_id)); create table Application(credential varchar(50) not null, description varchar(200), primary key(credential)); create table User (user_name varchar(50) not null, password varchar(20) not null, credential varchar(50) not null, role varchar(50) not null, data_source_id varchar(20) not null, primary key(User_name,credential), foreign key(credential)references Application(credential), foreign key (data_source_id) references Data_Source(data_source_id)); create table Ticket (ticket_id varchar(20) not null, ticket_type varchar(20)not null, valid_time datetime not null, credential varchar(50) not null, check_sum varchar(30) not null, executed varchar(1) not null default 'n', date_completed datetime default '0000-00-00 00:00:00', num_row int default 0, num_col int default 0, primary key(ticket_id)); create table Ticket_Price(ticket_type varchar(20)not null, unit_price double not null default 0, primary key(ticket_type)); create table Ticket_Data(ticket_id varchar(20) not null, data_item_name varchar(20) not null, data_resource_id varchar(20) not null, startIndex integer not null, stopIndex integer not null, primary key (ticket_id), foreign key (data_item_name) references Data_Item(data_item_name), foreign key (data_resource_id) references Data_Resource(data_resource_id)); create table Ticket_Create_Table(ticket_id varchar(20) not null, data_item_name varchar(20) not null, data_resource_id varchar(20), table_structure varchar(500) not null,primary key (ticket_id), foreign key (data_item_name) references Data_Item(data_item_name), foreign key (data_resource_id) references Data_Resource(data_resource_id) ); create table Ticket_Insert_Record(ticket_id varchar(20) not null, data_item_name varchar(20) not null, data_resource_id varchar(20), column_names varchar(300) not null, primary key (ticket_id), foreign key (data_item_name) references Data_Item(data_item_name), foreign key (data_resource_id) references Data_Resource(data_resource_id) ); create table Ticket_Drop_Table(ticket_id varchar(20) not null, data_item_name varchar(20) not null, data_resource_id varchar(20), primary key (ticket_id), foreign key (data_item_name) references Data_Item(data_item_name), foreign key (data_resource_id) references Data_Resource(data_resource_id) ); create table Locked_Table (data_source_id varchar(20) not null, table_name varchar(20) not null); insert into Data_Source values ('GdmDataSource','GdmDataSource','Virtual data source for gdm admin'); insert into Data_Source values ('TestDataSource','TestDataSource','We are the luck'); insert into Data_Source values ('AnotherDataSource','AnotherDataSource','We are the luck'); insert into Data_Resource values ('Partition1','TestDataSource',' insert into Data_Resource values ('Partition2','TestDataSource',' insert into Data_Item values ('Student','Partition1'); insert into Data_Item values ('Teacher','Partition1'); insert into Data_Item values ('Student','Partition2'); insert into Data_Item values ('Teacher','Partition2'); insert into Application values ('DataMining','Mining things in parrallel'); insert into Application values ('GdmApp','Virtual application for gdm admin'); insert into User values ('tam','tam','DataMining','read-write','TestDataSource'); insert into User values ('gdmadmin','gdmadmin','GdmApp','gdmadmin','GdmDataSource'); insert into Ticket_Price values ('GetData',1); insert into Ticket_Price values ('DropTable',0); insert into Ticket_Price values ('CreateTable',0); insert into Ticket_Price values ('Insert',1); insert into Ticket_Price values ('LoadData',1); ////////////////////////////////////////////////////////////////////////////////////////////// //Set up partition 1 for test: use DaiTestResource; drop table Student; drop table Teacher; create table Student (student_id varchar(10), student_name varchar(30)); insert into Student values ('50001900','huyen'); insert into Student values ('50001901','tam'); insert into Student values ('50001902','khanh'); create table Teacher (teacher_id varchar(10), teacher_name varchar(30)); ////////////////////////////////////////////////////////////////////////////////////////////// //Set up Partition 2: //use mytest; drop table Student; drop table Teacher; create table Student (student_id varchar(10), student_name varchar(30)); insert into Student values ('50001903','minh'); insert into Student values ('50001904','hai'); insert into Student values ('50001905','hieu'); Cài đặt GridDataManagementService cd /usr/local/workspace/ (di chuyển tới vị trí của file .gar) globus-deploy-gar ./GridDataManagement/GridDataManagement.gar (deploy service) globus-undeploy-gar GridDataManagement (undeploy service) //Lưu ý: globus-undeploy-gar GridDataManagement (không có đuôi .gar) Chạy GridDataManagementService Start service o non-security cd $GLOBUS_LOCATION source /usr/local/globus-4.0.1/etc/globus-user-env.sh ./bin/globus-start-container -nosec Chạy client cd /usr/local/workspace/GridDataManagementClient/ (di chuyển tới vị trí đặt file Client.class) source /usr/local/globus-4.0.1/etc/globus-devel-env.sh java -classpath /usr/local/workspace/GridDataManagement/GridDataManagementService/build/stubs/classes/:$CLASSPATH vn.edu.hcmut.cse.edagrid.client.Client (/usr/local/workspace/GridDataManagement/GridDataManagementService/build/stubs/classes/ đây là nơi đặt các compiled stub classes được sinh ra bởi GridDataManagement service nhưng cũng có thể đặt chúng ở một vị trí khác tuỳ thích) Phụ lục C: Hướng dẫn cài đặt và chạy ứng dụng Data mining Cài đặt và cấu hình GDM (xem tài liệu kĩ thuật GDM trong phụ lục trên) Cài đặt Resource Discovery Dịch vụ này do nhóm 1 cài. Lưu ý: trên máy client chạy chạy giao diện của ứng dụng DM vẫn phải cài phần client của RD (tham khảo tài liệu của nhóm phát triển hạ tầng GRID) Ta thực thi các lệnh sau để kiểm tra hoạt động của dịch vụ tìm kiếm tài nguyên edagrid$ grid-proxy-init edagrid$ cd /home/edagrid/hailh/resource-lookup edagrid$ source /usr/grid/edagrid/etc/edagrid-user-env.sh edagrid$ source /usr/grid/edagrid/etc/edagrid-devel-env.sh edagrid$ java Main https://edagrid.hcmut.edu.vn:8443/wsrf/services/hcmut/grid/VOResDiscoveryService jsdl.xml Nếu không có lỗi, kết quả sẽ hiển thị: ….. RESULT: danh sách các tài nguyên Cài đặt ứng dụng khai phá dữ liệu DM Đăng kí hostname với DNS. Bung file Hand-over\Deployment\DM\dm_install.zip vào thư mục bất kì (td: ~edagrid/hailh/dm) edagrid$ cd ~/hailh/dm edagrid$ unzip dm_install.zip Cài đặt và cấu hình trên các tài nguyên tính toán Trên mỗi tài nguyên tính toán (có thể trả về từ dịch vụ resource discovery), ta phải thực hiện các cài đặt và cấu hình sau: Bung file Hand-over\Deployment\usr_local_datamining.zip vào thư mục /usr/local/datamining/ Kết quả sẽ tạo ra các thư mục: /usr/local/datamining/deploy/proactive /usr/local/datamining/deploy/gdm /usr/local/datamining/deploy/globus Đặt full quyền read,write,execute cho các thư mục trên và các thư mục con của chúng. chmod –R 777 deploy Nếu java không được cài vào thự mục /usr/local/java thì phải tạo link để /usr/local/java chỉ đến thư mục chứa Java. Cấu hình tên host cho máy bằng cách chỉnh sử file /etc/hosts root$ vi /etc/hosts (Td: trên máy ảo ta thêm hàng 172.28.10.219 vmlinux.edu.vn vmlinux) Cấu hình gate-keeper Thêm dòng sau vào file /etc/services gsigatekeeper 2119/tcp # Globus Gatekeeper Tạo file /etc/xinetd.d/globus-gatekeeper với nội dung như sau: service gsigatekeeper { socket_type = stream protocol = tcp wait = no user = root env = LD_LIBRARY_PATH=/usr/grid/globus/lib server = /usr/grid/globus/sbin/globus-gatekeeper server_args = -conf /usr/grid/globus/etc/globus-gatekeeper.conf disable = no } (Lưu ý: thay đổi đường dẫn globus cho phù hợp) Nếu máy cài linux Debian thì thêm vào cuối file /etc/inetd.conf dòng gsigatekeeper stream tcp nowait root /usr/bin/env env GLOBUS_LOCATION=/usr/grid/globus LD_LIBRARY_PATH=/usr/grid/globus/lib /usr/grid/globus/sbin/globus-gatekeeper -conf /usr/grid/globus/etc/globus-gatekeeper.conf Kich hoat dich vụ với lệnh /sbin/service xinetd restart. Sau đó, thực thi lệnh netstat -ap | grep gsigatekeeper để kiểm tra gsigatekeeper có chạy chưa Kiểm tra khả năng thực thi lệnh của globus edagrid$ source $GLOBUS_LOCATION/etc/globus-user-env.sh edagrid$ source $GLOBUS_LOCATION/etc/globus-devel-env.sh edagrid$ grid-proxy-init edagrid$ globusrun-ws -submit -streaming -stdout-file stdout.log -stderr-file stderr.log -c /bin/ls -l /etc. Hướng dẫn sử dụng ứng dụng Bước 1: Khởi động RD & GDM Chạy dịch vụ tìm kiếm tài nguyên (nhóm 1 thực hiện). Lưu ý: kiểm tra tất cả các tài nguyên tính toán trả về từ dịch vụ tìm kiếm tài nguyên đều phải được cấu hình ProActive như trong phần hướng dẫn cài đặt. Khởi động máy ảo (chứa trong thư mục Hand-over\Deployment\Virtual machine) Thực thi file: Red Hat Enterprise Linux 4.vmx trong thư mục chứa máy ảo. Click Start this Virtual machine. Máy ảo sẽ boot vào giao diện console của hệ điều hành linux. Login với username/password: edagrid/ed@grid Vào giao diện đồ họa của Linux edagrid$ startx Bấm nút phải trên màn hình desktop chọn Konsole để chạy Console. Chạy dịch vụ GDM Trong cửa sổ console thực thi cách lệnh để start globus, GDM sẽ tự động start theo. edagrid$ su root password: vmware root$source $GLOBUS_LOCATION/etc/globus-user-env.sh root$globus-start-container –nosec Globus sẽ start không có lỗi trong đó có dịch vụ GridDataManagement (service 47,48 trong hình trên). Bấm vào icon bên góc trái dưới để thêm vào Console một tab mới. Bước 2: Chạy ứng dụng Trong cửa sổ console vừa mới tạo ra, thực hiện các lệnh sau để thực thi ứng dụng DM. edagrid$ source $GLOBUS_LOCATION/etc/globus-user-env.sh edagrid$ source $GLOBUS_LOCATION/etc/globus-devel-env.sh edagrid$ source /usr/grid/edagrid/etc/edagrid-user-env.sh edagrid$ source /usr/grid/edagrid/etc/edagrid-devel-env.sh edagrid$ grid-proxy-init edagrid$ cd ~edagrid/hailh/dm edagrid$ java –classpath $CLASSPATH:dm.jar DM Cửa sổ giao diện chính của ứng dụng sẽ hiện ra như sau: Buớc 3: Cấu hình data source Nhấn Config Datasource trong cửa sổ giao diện chính. Màn hình sẽ hiện ra cửa sổ cấu hình datasoure Ứng dụng hỗ trợ truy xuất dữ liệu từ CSDL MySQL và Grid Data Management (GDM). Nhấn chuột vào GDM để chọn CSDL GDM. Các thông tin còn lại sẽ được tự động điền vào FactoryURI là URL của GDM service; Datasource,username,password: thông tin về data source dùng để lưu trữ dữ liệu. Click Connect để kết nối cơ sở dữ liệu. Nhấn Connect để kết nối vào cơ sở dữ liệu. Nếu kết nối thành công, cửa sổ sẽ đóng lại và quay về cửa sổ giao diện chính. Một số trường thông tin sẽ được điền vào các ô nhập liệu trong cửa sổ chính. Chọn Training Set Table là table chứa dữ liệu dùng huấn luyện (td: table training chứa dữ liệu về rừng). Chọn Predict Table là table chứa dữ liệu dùng để dự đoán. (td: table predict). Bước 4: Cấu hình thông số giải thuật PKMean. Trong cửa sổ giao diện chính, click chuột vào nút Config PKMean. Khung phần trên chứa các thông số của giải thuật phân nhóm Segment Size: kích thước mỗi phân đoạn dữ liệu Alpha: Hệ số nén của mỗi phân đoạn dữ liệu Phase 2 - Intial Cluster Number – số cluster khởi động trong phase2 Phase 2 – Target Cluster Number – số cluster mong muốn trong phase 2 Termination Condition : giải thuật sẽ dừng nếu thỏa 1 trong 2 điều kiện sau: MaxStep: Số lần lặp tối đa của giải thuật (nó cũng chính là số lần (tối đa) tính lại vị trí của các tâm). Giải thuật sẽ dừng sau MaxStep lần lặp. Delta Distortion: Sau mỗi lần lặp, nếu sự thay đổi của độ nhiễu nhỏ hơn Delta Distortion Khung bên dưới mô tả các thông số liên quan đến tài nguyên dùng để chạy giải thuật Resource Descriptor: file cấu hình thông số tài nguyên RD Service: địa chỉ của dịch vụ tìm kiếm tài nguyên JSDL: file mô tả tính chất tài nguyên cần tìm kiếm

Các file đính kèm theo tài liệu này:

  • docEDAGrid-GDMDM.doc