Apache Hadoop

**Apache Hadoop** hay **Hadoop** là một software framework hỗ trợ các ứng dụng phân tán dữ liệu chuyên sâu theo một giấy phép miễn phí. Nó cho phép các ứng dụng làm việc với hàng ngàn máy tính tính toán độc lập và petabyte dữ liệu. Hadoop được bắt nguồn từ các bài báo MapReduce của Google và Google File System (GFS).

Hadoop là một trong những dự án hàng đầu của Apache, được xây dựng và được sử dụng bởi một cộng đồng những người đóng góp toàn cầu, viết bằng ngôn ngữ lập trình Java. Yahoo! đã đóng góp lớn nhất cho dự án, và Hadoop được sử dụng rộng rãi trên khắp các doanh nghiệp.

## Lịch sử
Nguồn gốc của Hadoop đến từ các bài viết File System Google được xuất bản vào tháng 10 năm 2003. Bài viết này là một bài nghiên cứu được sản sinh ra từ Google - MapReduce: Xử lý dữ liệu đơn giản trên các cluster lớn Bắt đầu phát triển trên dự án Apache Nutch, nhưng đã được chuyển qua dự án con Hadoop mới trong tháng 1 năm 2006. Doug Cutting đã làm việc tại Yahoo! vào thời điểm đó, đặt tên Hadoop theo tên của con voi đồ chơi của con trai mình.

Hadoop 0.1.0 được phát hành vào tháng 4 năm 2006 và tiếp tục phát triển bởi nhiều người đóng góp đến dự án Apache Hadoop.

## Kiến trúc Hadoop
Hadoop framework gồm hai layer chính:
* Hadoop Distriduted file system (HDFS):
** **HDFS** được thiết kế và tối ưu hóa để lưu trữ các tập tin rất lớn và với một mô hình truy cập trực tuyến. Kể từ khi nó được dự kiến sẽ chạy trên phần cứng thương mại, nó được thiết kế để tính đến và xử lý sự cố trên máy cá nhân. HDFS thông thường không lưu trữ dữ liệu chính. Thay vào đó, trong một việc điển hình, dữ liệu được sao chép sang HDFS cho mục đích thực hiện MapReduce, và kết quả sau đó sẽ được sao chép sang HDFS. Từ khi HDFS được tối ưu hóa cho các luồng truy cập thông tin lớn, truy cập ngẫu nhiên vào các thành phần của các tập tin thì tốn kém hơn truy cập tuần tự rõ ràng, và nó cũng không hỗ trợ cập nhật các tập tin, chỉ có thể gắn thêm. Các kịch bản điển hình của các ứng dụng sử dụng HDFS sau mô hình truy cập ghi một lần đọc nhiều lần
** Các tập tin trong HDFS được chia thành một số khối lớn (thường là 64Mb) và được lưu trong Data Node. Một tập tin điển hình được phân phối trên một số DataNodes nhằm thúc đẩy băng thông cao và xử lý song song. Để nâng cao độ tin cậy, các khối dữ liệu trong HDFS (data blocks) được nhân bản và lưu trỡ trong 3 máy, với một trong những bản sao trong mỗi giá khác nhau để tăng sự sẵn có hơn nữa của dữ liệu. Việc duy trì các tập tin siêu dữ liệu được xử lý bởi một NameNode riêng biệt. Siêu dữ liệu này bao gồm ánh xạ từ tập tin vào khối và vị trí của khối (DataNode). NameNode theo định kì sẽ truyền đạt siêu dữ liệu của nó cho Secondary NameNode khi cần cấu hình lại để làm nhiệm của NameNode khi xảy ra trường hợp lỗi.
* Execution engine (MapReduce):
** Trong Hadoop, JobTracker (công việc theo dõi) là một điển truy cập cho clients. Nhiệm vụ của JobTracker là đảm báo kế hoạch và lập kế hoạch công việc sắp tới của MR, và giao nhiệm vụ cho các TaskTrackers mà nó có trách nhiệm thực hiện. Một TaskTracker có thể chạy một số của nhiệm vụ phụ thuộc trong các nguồn lực có sẵn (một ví dụ 2 nhiệm vụ Map và 2 nhiệm vụ reduce) và sẽ phân bố cho các nhiệm vụ mới bằng JogTracker khi nó sẵn sàng. Các kích thước tương đối nhỏ của từng công việc so với số lượng lớn các nhiệm vụ trong tổng số giúp đảm bảo cân bằng tải giữa các máy. Cần lưu ý rằng trong khi số lượng công việc Map được thực hiện dựa trên kích thước dầu vào của dữ liệu (số lượng phân chia) thì số lượng công việc REDUCE là do người dùng chỉ định.
** Trong một cụm lớn, việc các máy xảy ra sự cố là thường xuyên, và để xử lý vấn đề này, thông điệp này thường được gửi từ TaskTracker tới JobTracker định kì và từ công việc Map tới công việc REDUCE. Bằng cách này, lỗi có thể được phát hiện và JobTracker có thể sắp xếp lại những nhiệm vụ lỗi cho các TaskTracker khác. Hadoop theo một mô hình thực hiện suy đoán để xử lý sự cố. Thay vì cố định một nhiệm vụ thất bại hoặc chạy chậm, nó thực hiện một nhiệm vụ tương đương mới như sao lưu. Thất bại của JobTracker tự nó không thể được xử lý tự động, nhưng xác suất thất bại của một máy cụ thể là thấp để điều này không nên trình bày một vấn đề nói chung.
Nguyên tắc thiết kế của Hadoop:
* Cần xử lý dữ liệu lớn
* Cần tính toán song song trên hàng ngàn node
* Chịu lỗi và phục hồi tự động

## Tham khảo

## Liên kết ngoài
* Website chính thức
* Apache Hadoop popular APIs in GitHub
* Introducing Apache Hadoop: The Modern Data Operating System – a lecture given at Stanford University by Co-Founder and CTO of Cloudera, Amr Awadallah (video archive) (YouTube)
* Hadoop with Philip Zeyliger, Software Engineering Radio, IEEE Computer Society, ngày 8 tháng 3 năm 2010