Mô hình MapReduce là mô hình mà ứng dụng sẽ được chia nhỏ ra thànhnhiều phần khác nhau và các phần này sẽ được chạy song song trên nhiều node khácnhau, thêm vào đó hadoop cung cấp hệ thố
Trang 1BỘ CÔNG THƯƠNGTRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN
-ĐỀ TÀI TÌM HIỂU CÔNG NGHỆ HADOOP VÀ XÂY
DỰNG DEMO MINH HỌA
GVHD: Ngô Dương Hà Sinh viên thực hiện:
1 2033181007 – Nguyễn Bảo Đại
2 2033181014 – Huỳnh Thúy Duy TP.HỒ CHÍ MINH, ngày 1 tháng 7 năm 2021
Trang 4NHẬN XÉT CỦA GIÁO VIÊN
Trang 5CHƯƠNG I: TỔNG QUAN
1.1 Giới thiệu về Apache Hadoop
Apache hadoop là một framework giúp lưu trữ và xử lý BigData áp dụngMapReduce Mô hình MapReduce là mô hình mà ứng dụng sẽ được chia nhỏ ra thànhnhiều phần khác nhau và các phần này sẽ được chạy song song trên nhiều node khácnhau, thêm vào đó hadoop cung cấp hệ thống file phân tán (HDFS) đều được thiết kế saocho framework sẽ tự động quản lý được các lỗi, các hư hỏng về phần cứng của các node
Hadoop viết bằng Java Tuy nhiên, nhờ cơ chế streaming, Hadoop cho phép pháttriển các ứng dụng phân tán bằng cả java lẫn một số ngôn ngữ lập trình khác như C++,Python, Pearl
Kiến trúc Hadoop: Apache Hadoop dùng để quản lý và truy cập dữ liệu, và chỉ
bao gồm 2 thành phần là: MapReduce và Hadoop Distributed File System (HDFS) Theothời gian, nền tảng Hadoop mở rộng kết hợp với một loạt các dự án khác để thành mộtnền tảng hoàn chỉnh Nền tảng này chia thành 5 loại sau: data access, data management,
security, operations và governance
Hình 1.1 Kiến trúc Hadoop
Trang 6Hadoop MapReduce: Map-Reduce là một framework dùng để viết các ứng dụng
xử lý song song một lượng lớn dữ liệu có khả năng chịu lỗi cao xuyên suốt hàng ngàncluster(cụm) máy tính Map-Reduce thực hiện 2 chức năng chính đó làMap và Reduce
- Map: Sẽ thực hiện đầu tiên, có chức năng tải, phân tích dữ liệu đầu vào vàđược chuyển đổi thành tập dữ liệu theo cặp key/value
- Reduce: Sẽ nhận kết quả đầu ra từ tác vụ Map, kết hợp dữ liệu lại với nhauthành tập dữ liệu nhỏ hơn
- MapReduce execution framework
- Truyền thông liên tiến trình
Trang 7dụng, cho phép dữ liệu thường được ghi một lần mỗi HDFS, sau đó sẽ được đọc nhiềulần Do vậy việc sửa đổi dữ liệu sau khi ghi thường rất hạn chế Để lưu trữ dữ liệu phântán, dữ liệu sẽ được chia thành các block (64/128 MB) và được phân phối tới các node
xử lý Mỗi block đồn thời sẽ được sao chép đến các server khác trong cụm cluster đểđảm bảo tính toàn vẹn của dữ liệu
Hình 1.3 Mô hình Hadoop Distributed File System
Bên cạnh 2 thành phần cốt lõi Hadoop cũng có một số modules:
- Hadoop YARN: Đây là framework để quản lý tiến trình và tài nguyên của
các node YARN cung cấp daemons và APIs cần thiết cho việc phát triểnứng dụng phân tán, đồng thời xử lý, lập lịch sử dụng tài nguyên tính toán(CPU hay Memory) cũng như giám sát quá trình thực thi các ứng dụng đó
Trang 8YARN tổng quát hơn MapReduce thế hệ đầu tiên (gồm mô hìnhJobTracker / TaskTracker).Bên trong YARN, chúng ta có hai trình quản lýResourceManager và NodeManager.
- ResourceManager: Quản lý toàn bộ tài nguyên tính toán của cluster
- NodeManager: Giám sát việc sử dụng tài nguyên của container và báo cáovới ResourceManager Các tài nguyên ở đây là CPU, memory, disk,network,
- Ta có thể mở rộng YARN thông qua tính năng YARN Federation Tínhnăng này cho phép chúng ta buộc nhiều cụm YARN thành một cụm lớn.Điều này cho phép sử dụng các cụm độc lập, ghép lại với nhau cho một jobrất lớn
Hình 1.4 Mô hình Hadoop YARN
- Hadoop Common: Đây là các thư viện và tiện ích cần thiết của Java để
các module khác sử dụng Những thư viện này cung cấp hệ thống file và
Trang 91.2 Mục tiêu đề tài
Dựng hệ thống HDFS trên ubuntu
Cài đặt spark
Sử dụng thuật toán KNN(K-nearest neighbors) dựa trên Hadoop
1.3 Hướng giải quyết
Xử lý và làm việc khối lượng dữ liệu khổng lồ tính bằng Petabyte
Xử lý trong môi trường phân tán, dữ liệu lưu trữ ở nhiều phần cứng khác nhau,yêu cầu xử lý đồng bộ
Xử lý các lỗi xuất hiện thường xuyên
Băng thông giữa các phần cứng vật lý chứa dữ liệu phân tán có giới hạn
1.4 Khó khăn và thách thức
Truyền dữ liệu: Truyền tải dữ liệu là quan trọng trong các ứng dụng Big datanhưng việc truyền tải dữ liệu lớn thường khó khăn và chi phí rất cao Nâng cao hiệu quảtruyền tải dữ liệu lớn là một yếu tố quan trọng để nâng cao khả năng xử lý Big data
Tốc độ xử lý: Dữ liệu trong các hệ thống thông tin luôn luôn và không ngừng tănglên về mặt kích thước (khối lượng) gây ra một thách thức rất lớn đối với các ứng dụngthời gian thực, thì việc tìm ra các phương pháp hiệu quả trong suốt luồng dữ liệu là cầnthiết để đáp ứng yêu cầu về thời gian thực
Bảo mật dữ liệu và quyền riêng tư: Bảo mật dữ liệu là vấn đề rất quan trọng Một
số ví dụ trong thực tế cho thấy, không chỉ thông tin cá nhân, thông tin mật của các tổchức mà ngay cả các bí mật an ninh quốc gia cũng có thể bị xâm phạm Do vậy, giảiquyết các vấn đề an ninh dữ liệu bằng các công cụ kỹ thuật và các chính sách trở nên vôcùng cấp bách Các nền tảng Big data nên cân bằng tốt giữa việc truy cập dữ liệu và xử
lý dữ liệu
1.5 Đề xuất hướng giải quyết
Giải quyết bằng cách sử dụng Hadoop
Các điểm thuận lợi khi dùng Hadoop:
Trang 10- Có thể thêm node mới và thay đổi chúng khi cần.
- Không cần phần cứng đặc biệt để chạy Hadoop
- Hadoop được xây dựng với tiêu chí xử lý dữ liệu có cấu trúc và không cấutrúc
- Khi 1 node lỗi, nền tảng Hadoop tự động chuyển sang node khác
Trang 11CHƯƠNG II: PHƯƠNG PHÁP
Những công cụ - kỹ thuật áp dụng trong bài toán sẽ sử dụng là Apache Spark.Apache Spark, giống MapReduce, là một công cụ để xử lý data
Spark – có thể xử lý bộ nhớ trong nhanh hơn nhiều Sẽ hữu ích nếu data cần được
xử lý lặp đi lặp lại và trong thời gian thực MapReduce, phải đọc và ghi vào đĩa nhưng
có thể hoạt động với các tập dữ liệu lớn hơn nhiều so với Spark
Apache Spark có thể được coi là sự kế thừa của Hadoop khi nó khắc phục đượcnhững nhược điểm của Hadoop Apache Spark không giống như Hadoop hỗ trợ cả thờigian thực cũng như xử lý hàng loạt Nó là một hệ thống phân cụm mục đích chung
Apache Spark cũng hỗ trợ tính toán trong bộ nhớ, khiến nó nhanh hơn 100 lần sovới Hadoop Điều này được thực hiện bằng cách giảm số lượng thao tác đọc/ ghi vào đĩa
Nó cung cấp sự linh hoạt hơn so với Hadoop vì nó hoạt động với các kho dữ liệu khácnhau như HDFS, OpenStack và Apache Cassandra
Cung cấp các API cấp cao trong Java, Python, Scala và R Apache Spark cũngcung cấp một bộ công cụ cấp cao đáng kể bao gồm Spark SQL để xử lý dữ liệu có cấutrúc, MLlib cho Machine Learning, GraphX để xử lý tập dữ liệu đồ thị và SparkStreaming Nó cũng bao gồm 80 toán tử cấp cao để thực hiện truy vấn hiệu quả
Để khởi chạy ứng dụng với spark-submit: sau khi một ứng dụng được user đónggói có thể khởi chạy bằng cách sử dụng tập lệnh bin/spark-submit tập lệnh này xử lýviệc thiết lập các classpath với spark và các phụ thuộc liên quan và đồng thời có thể hỗtrợ các trình quản lý cụm(cluster) khác nhau, triển khai các chế độ mà spark hỗ trợ
Một số tùy chọn được sử dụng:
- class:Điểm đầu vào cho ứng dụng
(ví dụ: org.apache.spark.examples.SparkPi)
- master: master URL cho cụm (ví dụ: spark: //23.195.26.187: 7077)
- deploy-mode: cho dù có triển khai trình điều khiển ở nút làmviệc(cluster), hoặc máy khách cục bộ bên ngoài (client hoặc máy clientmặc định)
Trang 12- conf: cấu hình Spark tùy chỉnh ở định dạng key = value Đối với các giátrị chứa khoảng trắng, hãy đặt "key = value" trong dấu ngoặc kép như ví dụ(e.g conf <key>=<value> conf <key2>=<value2>)
- application-jar: đường dẫn đến jar được đóng gói bao gồm các ứng dụng
và các thành phần phụ thuộc, URL phải hiển thị toàn bộ bên trong cụm củabạn ví dụ hdfs:// path hoặc đường dẫn các tệp: // có trên tất cả các nút
- application-arguments: các đối số được đưa đến phương thức chính hoặcmain class(nếu có)
Đối với các ứng dụng Python, chỉ cần chuyển một tệp py vào vị trí của
<application-jar> và thêm các tệp Python zip, egg hoặc py vào đường dẫn tìm kiếm với py-files
Có một số tùy chọn có sẵn trình quản lý cụm đang được sử dụng: để liệt kê tất cảcác tùy chọn có sẵn để gửi spark, hãy chạy với lệnh help
Các tính năng của Apache Spark:
Trang 13CHƯƠNG III: XÂY DỰNG BÀI TOÁN
3.1 Tài nguyên hệ thống
Hadoop job client submit job (file jar, file thực thi) và các thiết lậpcho JobTracker Sau đó, master sẽ phân phối tác vụ đến các máy slave để theo dõi vàquản lý tiến trình các máy này, đồng thời cung cấp thông tin về tình trạng liên quan đếnjob-client
TaskTracker trên các node khác nhau thực thi tác vụ MapReduce và trả về kết quảoutput được lưu trong hệ thống file
Khi “chạy Hadoop” có nghĩa là chạy một tập các trình nền – daemon, hoặc cácchương trình thường trú, trên các máy chủ khác nhau trên mạng của bạn Những trình cóvai trò cụ thể, một số chỉ tồn tại trên một máy chủ, một số có thể tồn tại trên nhiều máychủ
Trang 14Hình 3.1 Mô hình Daemon
3.2 Mô hình triển khai hệ thống
Trang 153.3 Trình bày giải thuật sử dụng
Thuật toán KNN(K-nearest neighbors)
K-nearest neighbors là thuật toán học máy có giám sát, đơn giản và dễ triển khai.Thường được dùng trong các bài toán phân loại và hồi quy
Ý tưởng: Thuật toán KNN cho rằng những dữ liệu tương tự nhau sẽ tồn tại gầnnhau trong một không gian, từ đó công việc của chúng ta là sẽ tìm k điểm gần với dữliệu cần kiểm tra nhất KNN rất nhạy cảm với dữ liệu nhiễu, đặc biệt là khi ta chọn Knhỏ sẽ dẫn đến kết quả không tốt Việc tìm khoảng cách giữa 2 điểm cũng có nhiều côngthức có thể sử dụng, tùy trường hợp mà chúng ta lựa chọn cho phù hợp Đây là 3 cách cơbản để tính khoảng cách 2 điểm dữ liệu x, y có k thuộc tính:
Hình 3.3 Phép toán tính khoảng cách hai điểm dữ liệu
Mô tả thuật toán
- Xác định tham số K số làng giềng gần nhất
- Tính khoảng cách của đối tượng cần phân lớp tới tất cả các đối tượng cótrong tập train
Trang 16- Lấy top K cho giá trị nhỏ nhất (hoặc lớn nhất)
- Trong top K giá trị vừa lấy, ta thống kê số lượng của mỗi lớp, chọn phânlớp cho số lượng lớn nhất
Ứng dụng
KNN là một mô hình đơn giản và trực quan nhưng vẫn có hiệu quả cao vì nókhông tham số; mô hình không đưa ra giả định nào về việc phân phối dữ liệu Hơn nữa,
nó có thể được sử dụng trực tiếp để phân loại đa lớp
Thuật toán KNN có nhiều ứng dụng trong ngành đầu tư, bao gồm dự đoán phásản, dự đoán giá cổ phiếu, phân bổ xếp hạng tín dụng trái phiếu doanh nghiệp, tạo ra chỉ
số vốn và trái phiếu tùy chỉnh
Trong y tế: xác định bệnh lý của người bệnh mới dựa trên dữ liệu lịch sử của cácbệnh nhân có cùng bệnh lý có cùng các đặc điểm đã được chữa khỏi trước đây hay xácđịnh loại thuốc phù hợp giống ví dụ chúng tôi trình bày ở trên
Trong lĩnh vực ngân hàng: xác định khả năng khách hàng chậm trả các khoản vayhoặc rủi ro tín dụng do nợ xấu dựa trên phân tích Credit score; xác định xem liệu cácgiao dịch có hành vi phạm tội, lừa đảo hay không
Trong giáo dục: phân loại các học sinh theo hoàn cảnh, học lực để xem xem cần
hỗ trợ gì cho những học sinh ví dụ như hoàn cảnh sống khó khăn nhưng học lực lại tốt
Trong thương mại điện tử: phân loại khách hàng theo sở thích cụ thể để hỗ trợpersonalized marketing hay xây dựng hệ thống khuyến nghị, dựa trên dữ liệu website,social media
Trong kinh tế nói chung: giúp dự báo các sự kiện kinh tế trong tương lai, dự báotình hình thời tiết trong nông nghiệp, xác định xu hướng thị trường chứng khoán để lên
kế hoạch đầu tư thích hợp
Ví dụ minh họa
Bài toán đặt ra: Bạn có điểm của một môn học nhưng không biết thuộc loại nào
Trang 17Giả sử trong lớp 50 người, mình sẽ khảo sát 5 người có điểm gần điểm mình nhất và thuđược dữ liệu như sau:
Điểm của tôi: 7
Điểm của bạn tôi:
Trang 183.4 Cài đặt hadoop
Bước 1: Cài đặt ssh
$ sudo apt install ssh
Hình 3.4.1 Cài đặt ssh
Trang 19Bước 2: Cài đặt PDSH
$ sudo apt install pdsh
Hình 3.4.2 Cài đặt PDSH
Bước 3: Cấu hình file ~/.bashrc
$ echo "export PDSH_RCMD_TYPE=ssh" >> ~/.bashrc
$ source ~/.bashrc
Hình 3.4.3 Cấu hình file ~/.bashrc
Trang 20Bước 4: Tạo khóa cho ssh
$ ssh-keygen -t rsa -P ""
Hình 3.4.4 Tạo khóa cho ssh
Bước 5: Cho phép ssh truy cập tới máy cục bộ
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
Hình 3.4.5 Cho phép truy cập ssh tới máy cục bộ
Trang 21Bước 6: Xác minh cấu hình ssh bằng kết nối với localhost
$ ssh localhost
Hình 3.4.6 Xác minh cấu hình ssh
Trang 22Bước 7: Cài đặt java version 8
$ sudo apt install openjdk-8-jdk
Hình 3.4.7 Cài đặt java
Trang 23Bước 8: Kiểm tra phiên bản java
$ java -version
Hình 3.4.8 Kiểm tra phiên bản java
Trang 24Bước 9: Tải hadoop
$ sudo wget -P ~
Trang 25Bước 11: Cấu hình file hadoop-env.sh
$ vim ~/hadoop/etc/hadoop/hadoop-env.sh
Hình 3.4.11a Mở file hadoop-env.sh
$ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
Hình 3.4.11b Sửa mục JAVA_HOME
Bước 12: Di chuyển thư mục hadoop qua usr/local/hadoop
$ sudo mv hadoop /usr/local/hadoop
Hình 3.4.12 Di chuyển qua thư mục hadoop qua thư mục mới
Trang 26Bước 13: Mở file environment
$ sudo vim /etc/environment
Hình 3.4.13a Mở file environment
thêm cấu hình
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/hadoop/bin:/usr/local/hadoop/sbin"
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/jre"
Trang 27Bước 14: Thêm người dùng tên là hadoopuser
$ sudo adduser hadoopuser
Trang 28Bước 16: cấu hình hosts
$ sudo vim /etc/hosts
Hình 3.4.16a Mở hosts
Trang 29192.168.206.14 hadoop-master
192.168.206.15 hadoop-salve1
192.168.206.16 hadoop-salve2
Hình 3.4.16b Thêm ip các máy
Trang 30Bước 17: Tạo 2 máy salve từ máy master
Hình 3.4.17a Tạo máy salve1
Hình 3.4.17b Tạo máy salve2
Trang 31Bước 18: Cấu hình hostname
$ sudo vim /etc/hostname
Hình 3.4.18a Mở hostname
Trang 32thêm vào
máy master : hadoop-master
Hình 3.4.18b Sửa hostname
Trang 33máy salve1 : hadoop-salve1
Hình 3.4.18c Sửa hostname
Trang 34máy salve2 : hadoop-salve2
Hình 3.4.18d Sửa hostname
Bước 19: Cấu hình trên hadoop-master và hadoopuser
$ su - hadoopuser
Trang 35Bước 20: Tạo khóa ssh
Trang 36$ ssh-copy-id hadoopuser@hadoop-salve1
Hình 3.4.21b Sao chép khóa ssh cho user trên máy salve1
Trang 37$ ssh-copy-id hadoopuser@hadoop-salve2
Hình 3.4.21c Sao chép khóa ssh cho user trên máy salve2
Trang 38Bước 22: Cấu hình file trên hadoop-master
$ sudo vim /usr/local/hadoop/etc/hadoop/core-site.xml
Hình 3.4.22a Mở file core-site.xml
thêm vào cuối file
Trang 39Hình 3.4.22b Thêm vào cuối file core-site.xml
$ sudo vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
Trang 40<value>2</value>
</property>
</configuration>
Hình 3.4.22d Thêm vào cuối file hdfs-site.xml
$ sudo vim /usr/local/hadoop/etc/hadoop/workers
Trang 42Bước 23: Sao chép cấu hình máy master cho các máy salve
$ scp /usr/local/hadoop/etc/hadoop/* hadoop-salve1:/usr/local/hadoop/etc/hadoop/
Hình 3.4.23a Sao chép cấu hình máy master cho máy salve1
Trang 43$ scp /usr/local/hadoop/etc/hadoop/* hadoop-salve2:/usr/local/hadoop/etc/hadoop/
Hình 3.4.23b Sao chép cấu hình máy master cho máy salve2
Trang 44Bước 24: Định dạng lại file HDFS
$ source /etc/environment
$ hdfs namenode -format
Hình 3.4.24 Lưu sửa đổi file environment và định dạng lại file HDFS
Bước 25: chạy file HDFS
$ start-dfs.sh
Trang 45Bước 26: kiểm tra kết nối
Truy cập địa chỉ hadoop-master:9870
Hình 3.4.26 Kiểm tra kết nối của máy master với 2 máy salve
Trang 46Bước 27: Cấu hình YARN
Trang 47Bước 28: Mở file yarn-site.xml
$ sudo vim /usr/local/hadoop/etc/hadoop/yarn-site.xml
Máy master
Hình 3.4.28a Mở file yarn-site.xml trên máy master
Trang 48thêm vào cuối file yarn-site.xml
Trang 49Máy salve1
Hình 3.4.28c Mở file yarn-site.xml trên máy salve1
thêm vào cuối file
Trang 50Máy salve2
Hình 3.4.28e Mở file yarn-site.xml trên máy salve2