Hadoop 1.1 Hadoop gì? 1.2 Tại chọn Hadoop? 1.3 Các thành phần cốt lỗi 1.3.1 Map reduce ( Mơ hình xử lý data) 1.3.2 HDFS (Hệ thống toán lưu trữ HDFS) 1.3.3 YARN (Trình quản lý tài nguyên) 1.4 Hệ sinh thái Hadoop 1.5 Cài đặt cụm Hadoop Node Ubuntu Server 2 Maven 20 2.1 Maven ? 20 2.2 Mục tiêu Maven 20 2.3 Các tính Maven 20 2.4 Cách tạo project Maven 21 Spark 26 3.1 Tổng quan Apache Spark 26 3.2 Spark xây dựng Hadoop 26 3.3 Thành phần 27 3.4 Resilient Distributed Datasets (RDD) 28 3.5 Vì RDD lại nhanh hiệu MapReduce 28 3.6 Quản lý nhớ Spark 29 3.7 PySpark 30 3.7 Cài đặt Spark 31 3.7.1 Cài đặt Spark Ubuntu 31 3.7.2 Cài đặt Spark Window 33 MongoDB 38 4.1 MongoDB ? 38 4.2 Các thuật ngữ hay gặp MongoDB 38 4.3 Hoạt Động MongoDB 39 4.4 Ưu điểm nhược điểm 39 4.5 Cài đặt MongoDB Compass 40 4.6 Các thao tác MongoDB Compass 43 4.7 Các Thao tác Command Line 46 4.8 Kết nối MongoDB với Java 48 Hadoop 1.1 Hadoop gì? -Apache Hadoop framework cho phép sử dụng lượng lớn data thông qua việc chia cho cac cluster máy tính thương mại với hệ thống đơn giản - Nó cơng nghệ quản lý mã nguồn mở, quản lý data phân tán 1.2 Tại chọn Hadoop? - Lưu theo cấu trúc, bán cấu trúc - Phần cứng thương mại, tiện lợi - Khả mở rộng tuyến tính -Giảm chi phí, đường truyền tặng, khơng lo quyền 1.3 Các thành phần cốt lỗi 1.3.1 Map reduce ( Mơ hình xử lý data) - Thực thi task song song - Cơ chế hoạt động: Map chia thành khối nhỏ dựa từ khóa data cần xử lý VD: Bán hàng-> tập trung vào doanh thu, mặt hàng, giá bán 1.3.2 HDFS (Hệ thống toán lưu trữ HDFS) - Là hệ thống lưu trữ file phân bố, phân tán, uyển chuyển - Được viết JAVA - Chạy cụm máy thương mại - Dùng để lưu trữ data lớn - Gồm phần: 1) Namenode: + Là thành phần trung tâm HDFS +Lưu meta data +Chịu trách nhiệm giám sát Slave node giao nhiệm vụ tới Data node 2) Datanode: +Lưu data vào Slave +Báo sức khỏe định kỳ cho master nhịp tim => Nếu Slave chết master có nhiệm vụ thay Slave 3) Secondary namenode: +Như đệm cho namenode +Chưa cập nhật cluster hệ thống +Hỗ trợ namenode hoạt động 1.3.3 YARN (Trình quản lý tài nguyên) - Là trình quản lý tài ngun (có từ Hadoop 2.0) - Chịu trách nhiệm quản lý tài nguyên công việc - Bao gồm thành phần: +Resource Manager: Quản lý tài nguyên, gọi Master +Node Maanager: Slave, phục vụ Resource Maanager, quản lý tình trạn container App Manager 1.4 Hệ sinh thái Hadoop - Hệ sinh thái Hadoop bao gồm: HDFS (Hệ thống tệp phân tán Hadoop)
Hadoop
Hadoop là gì?
Apache Hadoop là một framework mạnh mẽ cho phép xử lý khối lượng lớn dữ liệu bằng cách phân phối chúng đồng đều qua các cluster của máy tính thương mại, tất cả trong một hệ thống đơn giản và hiệu quả.
- Nó là 1 công nghệ quản lý mã nguồn mở, quản lý data phân tán.
Tại sao chọn Hadoop?
- Lưu theo cấu trúc, bán cấu trúc cũng được
- Phần cứng thương mại, tiện lợi hơn
- Khả năng mở rộng tuyến tính
-Giảm chi phí, đường truyền tặng, không lo bản quyền.
Các thành phần cốt lỗi
1.3.1 Map reduce ( Mô hình xử lý data)
- Thực thi các task song song
Cơ chế hoạt động của bản đồ được chia thành các khối nhỏ dựa trên từ khóa và dữ liệu cần xử lý, ví dụ như trong lĩnh vực bán hàng, các khối sẽ tập trung vào các yếu tố quan trọng như doanh thu, mặt hàng và giá bán.
1.3.2 HDFS (Hệ thống thanh toán lưu trữ của HDFS)
- Là 1 hệ thống lưu trữ file phân bố, phân tán, uyển chuyển
- Chạy trên các cụm máy thương mại
- Dùng để lưu trữ data lớn
+ Là thành phần trung tâm của HDFS
+Chịu trách nhiệm giám sát Slave node và giao nhiệm vụ tới Data node
+Báo sức khỏe định kỳ về cho master như nhịp tim
=> Nếu 1 Slave chết thì master có nhiệm vụ thay Slave mới
+Như 1 bộ đệm cho namenode
+Chưa cập nhật cluster của hệ thống
+Hỗ trợ namenode hoạt động
1.3.3 YARN (Trình quản lý tài nguyên)
- Là 1 trình quản lý tài nguyên (có từ bản Hadoop 2.0)
- Chịu trách nhiệm quản lý tài nguyên và công việc
+Resource Manager: Quản lý tài nguyên, gọi là Master
+Node Maanager: Slave, phục vụ Resource Maanager, quản lý tình trạn container và App Manager.
Hệ sinh thái Hadoop
- Hệ sinh thái Hadoop bao gồm:
HDFS (Hệ thống tệp phân tán Hadoop) đóng vai trò quan trọng trong khung Hadoop bằng cách phân phối và lưu trữ dữ liệu trên các nút trong cụm Quá trình này giúp giảm thiểu thời gian lưu trữ dữ liệu vào đĩa.
MapReduce (Đọc / ghi dữ liệu lớn vào / từ Hadoop bằng MR) : Hadoop
MapReduce là thành phần quan trọng trong hệ thống xử lý dữ liệu lớn, cho phép xử lý song song dữ liệu lưu trữ trong HDFS Nó giúp giảm chi phí xử lý nhờ khả năng mở rộng hiệu quả trong cụm.
Apache Pig là một công cụ ETL trong hệ sinh thái Hadoop, cho phép viết các chương trình phân tích dữ liệu cho các tập dữ liệu lớn Với ngôn ngữ kịch bản cao cấp gọi là Pig Latin, các nhà phát triển có thể dễ dàng thực hiện các truy vấn để phân tích dữ liệu Ngoài Pig Latin, trình biên dịch cũng là một phần quan trọng của Apache Pig.
Apache HBase là một cơ sở dữ liệu hướng cột hỗ trợ HDFS, hoạt động trong thời gian thực và được thiết kế để xử lý các bảng dữ liệu lớn với hàng triệu hàng và cột Một trong những ứng dụng quan trọng của HBase là tối ưu hóa việc quản lý các máy chủ khu vực thông qua việc sử dụng hiệu quả các nút chính.
Apache Hive là một công cụ SQL trên nền tảng Hadoop, cho phép người dùng truy vấn và phân tích dữ liệu từ HDFS thông qua giao diện tương tự như SQL Ngôn ngữ SQL trong Hive được gọi là HiveQL, giúp đơn giản hóa việc xử lý dữ liệu lớn.
Apache Sqoop là một ứng dụng mạnh mẽ cho phép nhập và xuất dữ liệu giữa Hadoop và các hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS) như SQL Nó có khả năng chuyển tải một lượng lớn dữ liệu, giúp tối ưu hóa quy trình xử lý dữ liệu Sqoop sử dụng kiến trúc trình kết nối với các plugin, tạo điều kiện thuận lợi cho việc thiết lập kết nối với các hệ thống bên ngoài.
Apache Flume là một ứng dụng mạnh mẽ cho phép thu thập và lưu trữ dữ liệu truyền phát từ các nguồn không cấu trúc như mạng xã hội vào cụm Hadoop Một trong những ứng dụng điển hình của Flume là việc ghi dữ liệu từ các tệp nhật ký, giúp quản lý và phân tích dữ liệu hiệu quả hơn trong môi trường Hadoop.
Apache Zookeeper là công cụ phối hợp quan trọng trong môi trường cụm, có vai trò quản lý sự phối hợp giữa các ứng dụng để đảm bảo hoạt động hiệu quả trong hệ sinh thái Hadoop.
Cài đặt cụm Hadoop một Node trên Ubuntu Server
- Login với vai trò root (pass: root) để thực hiện những công việc sau
Thiết lập IP tĩnh cho masternet
Kiểm tra các thiết bị mạng
- In trạng thái của từng địa chỉ IP trên hệ thống
Nhấn phím q ể thoát thông báo
# vim /etc/netplan/00-installer-config.yaml
- Thêm vào các nội dung sau
- Lưu file và chạy lệnh sau để lưu cấu hình mới
- Hệ thống đã được cấu hình theo IP mới, để kiểm tra chạy 1 trong 2 lệnh sau
# add-apt-repository ppa:linuxuprising/java
Lưu ý: Nhấn phím Enter để đồng ý cài đặt
# apt install default-jdk up Nhấn OK để chấp nhận liscence
- Quản lý phiên bản Java (chọn phiên bản Oracle Manual Mode)
# vim /etc/ssh/sshd_config
- Tìm đoạn # PubkeyAuthentication yes Bỏ dấu # phía trước thành
- Tìm đoạn PasswordAuthentication no đổi thành
- Sau khi sửa thì nhấn phím ESC, nhập :wq để lưu và thoát khỏi vim
Kiểm tra ip của các máy master, slave
- Nhấn phím i để chuyển sang chế độ insert, bổ sung thêm 2 host master và slave như sau:
Cài đặt hostname cho master (thực hiện trên máy master)
- Trong file này sẽ xuất hiện hostname mặc định của máy, xóa đi và đổi thành khiem_master
Cài đặt hostname cho slave (thực hiện trên máy slave)
- Trong file này sẽ xuất hiện hostname mặc định của máy, xóa đi và đổi thành slave
- Tạo user hadoopuser để quản lý các permission cho đơn giản
- Chuyển qua thư mục /home/hadoopuser để download file:
# wget https://downloads.apache.org/hadoop/common/hadoop-3.3.1/hadoop-
# tar -xzf hadoop-3.3.1.tar.gz
- Đổi tên thư mục giải nén thành hadoop cho dễ quản lý
Cấu hình các thông số cho Hadoop
To configure your Hadoop environment, add the following lines to the end of your bashrc file: `export HADOOP_HOME=/home/hadoopuser/hadoop`, `export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64`, and update the PATH variables with `export PATH=$PATH:$HADOOP_HOME/bin` and `export PATH=$PATH:$HADOOP_HOME/sbin` Additionally, set the Hadoop-related environment variables: `export HADOOP_MAPRED_HOME=$HADOOP_HOME`, `export HADOOP_COMMON_HOME=$HADOOP_HOME`, `export HADOOP_HDFS_HOME=$HADOOP_HOME`, `export YARN_HOME=$HADOOP_HOME`, `export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native`, and finally configure Hadoop options with `export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"`.
- Nhấn Esc, nhập :wq để lưu và thoát file
# vim ~/hadoop/etc/hadoop/hadoop-env.sh
- Tìm đoạn export JAVA_HOME= sửa thành như sau:
# export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
# vim ~/hadoop/etc/hadoop/core-site.xml
- Cấu hình lại thông tin như sau:
hadoop.tmp.dir
/home/hadoopuser/tmp
hdfs://khiem-master:54310
Use HDFS as file storage engine
File mapred-site (chỉ cấu hình ở master)
- Chỉnh sửa lại thông tin như sau:
mapreduce.jobtracker.address
The host and port that the MapReduce job tracker runs at If
“local”, then jobs are run in-process as a single map and reduce task
mapreduce.framework.name
The framework for running mapreduce jobs
yarn.app.mapreduce.am.env
HADOOP_MAPRED_HOME=/home/hadoopuser/hadoop
mapreduce.map.env
HADOOP_MAPRED_HOME=/home/hadoopuser/hadoop
mapreduce.reduce.env
HADOOP_MAPRED_HOME=/home/hadoopuser/hadoop
# vim ~/hadoop/etc/hadoop/hdfs-site.xml
- Chỉnh sửa lại thông tin cấu hình như sau:
Default block replication The actual number of replications can be specified when the file is created The default is used if replication is not specified in create time
dfs.namenode.name.dir
The DFS name node's storage location for the name table (fsimage) on the local filesystem is specified by the path /home/hadoopuser/hadoop/hadoop_data/hdfs/namenode If multiple directories are provided in a comma-delimited format, the name table is replicated across all specified directories to ensure redundancy.
dfs.datanode.data.dir
/home/hadoopuser/hadoop/hadoop_data/hdfs/datanode
The DFS data node determines the storage location of its blocks on the local filesystem When specified as a comma-delimited list of directories, data will be distributed across all listed directories, often utilizing different devices Any directories that do not exist will be disregarded in the storage process.
- Chuyển đến thư mục ~/hadoop/hadoop-yarn-project/hadoop-yarn/conf
# cd vim ~/hadoop/etc/hadoop/yarn-site.xml
Chỉnh sửa lại thông tin cấu hình như sau:
yarn.nodemanager.aux-services
yarn.resourcemanager.scheduler.address
yarn.resourcemanager.address
yarn.resourcemanager.webapp.address
yarn.resourcemanager.resource-tracker.address
yarn.resourcemanager.admin.address
Chỉ ra các máy slaves (chỉ cấu hình ở master)
# vim ~/hadoop/etc/hadoop/workers
Thêm hostname của các máy slave: mỗi máy salve đặt trên 1 dòng
- Copy master ra, đổi tên thành slave
- Mở máy slave, chỉnh lại IP tĩnh và các thông số cho phù hợp: hosts, hostname…
- Lưu ý: o Một số lệnh cần phải có quyền root mới thực hiện được
Cài đặt ssh key giữa các node
Thao tác này chỉ thực hiện trên master
- Nhấn Enter để chấp nhận giá trị mặc định
# cat /home/hadoopuser/.ssh/id_rsa.pub >> /home/hadoopuser/.ssh/authorized_keys
# chmod 600 /home/hadoopuser/.ssh/authorized_keys
- Share ssh key giữa master - master
# ssh-copy-id -i ~/.ssh/id_rsa.pub khiem-master
- Share ssh key giữa master - slave
# ssh-copy-id -i ~/.ssh/id_rsa.pub khiem-slave
- Test kết nối tới master
- Test kết nối tới slave
- Thao tác này chỉ thực hiện trên master và chỉ làm 1 lần
- Cập nhật lại các thông tin cấu hình của master
Kiểm tra xem mọi thứ đã ổn
- Trên master chúng ta chạy lệnh sau để khởi động các thành phần có trong
- Kiểm tra các thành phần có chạy đủ bằng lệnh sau
- Nếu xuất hiện output dạng như sau thì có nghĩa là các thành phần đã chạy đủ
- Kiểm tra các máy slave còn hoạt động hay không
- Nếu báo lỗi “Unable to load native-hadoop library for your platform” thì chạy lệnh sau export HADOOP_OPTS="$HADOOP_OPTS -
Djava.library.path=$HADOOP_HOME/lib/native"
If you encounter the following output, it indicates that the slave machine is still operational: "20/02/18 12:28:56 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable."
Missing blocks (with replication factor 1): 0
- Ra thư mục gốc, tạo file test
- Tạo nội dung như sau
# test the hadoop cluster by running wordcount
# create input files mkdir input echo "Hello World" >input/file2.txt echo "Hello Hadoop" >input/file1.txt
# create input directory on HDFS
# put input files to HDFS hdfs dfs -put /input/* input
# run wordcount hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/sources/hadoop- mapreduce-examples-3.3.1-sources.jar org.apache.hadoop.examples.WordCount input output
# print the input files echo -e "\ninput file1.txt:" hdfs dfs -cat input/file1.txt echo -e "\ninput file2.txt:" hdfs dfs -cat input/file2.txt
# print the output of wordcount echo -e "\nwordcount output:" hdfs dfs -cat output/part-r-00000
Giải thích: Test trên sẽ tạo ra 2 file file2.txt và file1.txt có nội dung lần lượt là
Hai tệp tin Hello World và Hello Hadoop được tải lên HDFS, sau đó một job sẽ được thực hiện để đếm số lần xuất hiện của từng từ trong file1.txt và file2.txt.
- Nếu báo lỗi Permission denied thì thực hiện lệnh
- Chạy xong mà nhận được kết quả dạng như bên dưới là mọi thứ OK
- Trong trường hợp bạn muốn test lại thì phải xóa kết quả cũ bằng lệnh sau
# hadoop fs -rm -r output rồi chạy lại lệnh
Maven
Maven là gì ?
Apache Maven is a project management tool that enables developers to manage project versions, dependencies (libraries used in the project), and build processes It also automates the downloading of Javadoc and source files, streamlining development workflows.
Sử dụng Maven là cần thiết trong các dự án có nhiều thư viện bên thứ ba như Struts, Hibernate, và Spring Việc quản lý các thư viện và dependencies có thể trở nên phức tạp, đặc biệt khi các phiên bản thư viện có thể xung đột với nhau Maven giúp đơn giản hóa quá trình import và đảm bảo rằng tất cả các thư viện cần thiết được tích hợp một cách hiệu quả, giảm thiểu rắc rối trong việc quản lý phiên bản.
VD như bạn muốn sử dụng struts, thì điều bắt buộc là chúng ta phải import cả thư viện servlet
Nó đơn giản hóa và chuẩn hóa quy trình xây dựng dự án, xử lý biên dịch, phân phối, tài liệu và giao tiếp giữa các đội phát triển thành một nhiệm vụ liền mạch.
Hơn hết, Maven được viết bằng ngôn ngữ Java và nó hoàn toàn free.
Mục tiêu chính của Maven
- Mục tiêu chính của Maven là cung cấp cho nhà phát triển những điều sau:
• Cung cấp một mô hình toàn diện cho các dự án, giúp nó có thể tái sử dụng, bảo trì và dễ hiểu hơn
• Cung cấp các plugins hoặc công cụ tương tác với mô hình khai báo này
Maven sử dụng cấu trúc dự án và nội dung được xác định trong tệp pom.xml, gọi là mô hình đối tượng dự án (POM), làm đơn vị cơ bản của hệ thống Trong các chương tiếp theo, chúng tôi sẽ cung cấp giải thích chi tiết về POM.
Các tính năng của Maven
- Để thực hiện được mục tiêu của mình, Maven có những tính năng sau:
• Thiết lập, cài đặt các dự án đơn giản phù hợp thực tiễn
Việc sử dụng thống nhất file pom.xml trên tất cả các dự án giúp quản lý sự phụ thuộc và tự động cập nhật phiên bản một cách hiệu quả Khi nhiều team và thành viên cùng phát triển một dự án, mọi người có thể đồng bộ hóa các thư viện và phiên bản cần thiết qua file này Điều này không chỉ giúp tránh xung đột khi cập nhật mà còn đảm bảo tính nhất quán trong quá trình phát triển.
• Kho thư viện lớn và ngày càng mở rộng
• Khả năng mở rộng với việc dễ dàng viết các plugin trong Java hoặc các ngôn ngữ scripting
• Xây dụng dựa trên mô hình: Maven có thể xây dựng bất kì project nào thành các đầu ra được định nghĩa trước như war, jar, metadata.
Cách tạo 1 project Maven
Bước 1: File -> New -> Maven Project Trong dialog hiện ra, lựa chọn “Create a simple project …” như trong hình Chọn next
Bước 2: Điền như trong hình
• Group Id : Tên tổ chức / công ty / cá nhân của dự án
• Artifact Id : Tên của packge, dự án
• Package : để ý 2 giá trị : jar có nghĩa là thư viện or java application, war là web application
• Name : Tên project (trong eclipse)
Bước 3: cấu hình file pom
The pom.xml file is essential for configuring all project-related settings in Maven, including dependencies, project version, project name, and repositories.
- Ở đây ta lấy ví dụ thêm thư viện hibernate :
- Các khai báo dependency có thể tìm tại trang https://mvnrepository.com/
- Lưu file pom.xml lại và đợi project build xong, thư viện sẽ được add tự động vào project (ở mục Maven Dependencies)
Maven sẽ tự động tải xuống các thư viện cần thiết để sử dụng Hibernate Core, vì Hibernate được phát triển dựa trên các thư viện này.
- Các thư viện download về sẽ nằm ở thư mục C:\Users{username}.m2\repository Thư viện hibernate trong ví dụ sẽ nằm ở thư mục
C:\Users{username}.m2\repository\org\hibernate\hibernate-core\5.6.1.Final
In the Project Explorer window, right-click on the maven-sample project and select Run As → Maven Build In the Goals section, enter the commands, separating each command with a space, and then click Run to execute Maven.
- clean: clean lần build trước đó
- compile: dịch các file java sang class; copy các file resources, lib…
To package a project, you can create a JAR or WAR file and upload a library to a local repository, enabling other projects to utilize it, specifically for JAR projects.
Spark
Tổng quan về Apache Spark
Apache Spark là một framework tính toán cluster mã nguồn mở, cho phép xây dựng các mô hình dự đoán nhanh chóng bằng cách thực hiện tính toán trên một nhóm máy tính Điều này giúp xử lý toàn bộ tập dữ liệu mà không cần phải trích xuất mẫu để thử nghiệm.
Nó được xây dựng dựa trên Hadoop MapReduce và nó mở rộng mô hình
MapReduce để sử dụng hiệu quả hơn các loại tính toán bao gồm Truy vấn tương tác và
Spark không phải là phiên bản sửa đổi của Hadoop và không phụ thuộc vào nó, vì Spark có hệ thống quản lý cụm riêng Hadoop chỉ là một trong nhiều phương pháp để triển khai Spark, và Spark chủ yếu sử dụng Hadoop cho mục đích lưu trữ dữ liệu.
Tốc độ xử lý của Spark được nâng cao nhờ khả năng tính toán song song trên nhiều máy khác nhau, đồng thời thực hiện các phép toán trong bộ nhớ (in-memory) hoặc hoàn toàn trên RAM.
Apache Spark được phát triển để xử lý đa dạng các khối lượng công việc, bao gồm ứng dụng batch, thuật toán lặp lại, truy vấn tương tác và streaming Sự linh hoạt này giúp Spark trở thành một công cụ mạnh mẽ trong việc xử lý dữ liệu lớn và phân tích thời gian thực.
Spark là một trong những dự án phụ của Hadoop được phát triển vào năm 2009 trong UC Berkeley’s AMPLab bởi Matei Zaharia Nó được Open Sourced vào năm
Apache Spark, được cấp phép theo giấy phép BSD vào năm 2010, đã được quyên góp cho nền tảng phần mềm Apache vào năm 2013 Kể từ tháng 2 năm 2014, Apache Spark đã trở thành một dự án cấp cao nhất của Apache, mang lại nhiều ưu điểm vượt trội cho người dùng.
- Tốc độ: Spark giúp chạy ứng dụng trong cụm Hadoop, nhanh hơn tới 100 lần trong bộ nhớ và nhanh hơn 10 lần khi chạy trên đĩa
- Hỗ trợ nhiều ngôn ngữ: Spark cung cấp các API tích hợp sẵn bằng Java, Scala hoặc Python
Spark không chỉ đơn thuần hỗ trợ các phép toán 'Map' và 'Reduce', mà còn cung cấp khả năng thực hiện các truy vấn SQL, xử lý dữ liệu truyền trực tuyến, ứng dụng máy học (ML) và triển khai các thuật toán đồ thị.
Spark xây dựng trên nền Hadoop
- Standalone: Spark và MapReduce sẽ chạy song song với nhau để bao gồm tất cả các spark job trên cụm
- Hadoop Yarn: tích hợp Spark vào hệ sinh thái Hadoop hoặc Hadoop stack
- Spark in MapReduce (SIMR): Spark trong MapReduce được sử dụng để khởi chạy công việc spark ngoài việc triển khai độc lập
Thành phần
Các thành phần của Spark được thiết kế để xử lý và thực hiện các tác vụ liên quan đến RDD (Resilient Distributed Dataset), giúp tối ưu hóa việc quản lý và phân tích dữ liệu phân tán một cách hiệu quả.
- Spark Core: Lên lịch cho các tác vụ, quản lý bộ nhớ, fault recovery, tương tác memory, cung cấp API cho Resilient Distributed DataSet
- Spark SQL: một thành phần nằm trên Spark Core giới thiệu một phần trừu tượng hóa dữ liệu mới được gọi là SchemaRDD, thao tác với nhiều loại
DB Hive tables, Parquet, và JSON
Spark Streaming tận dụng khả năng lập lịch nhanh chóng của Spark Core để thực hiện phân tích dữ liệu theo luồng Nó nhập dữ liệu dưới dạng mini-batch và thực hiện các phép biến đổi RDD, giúp xử lý dữ liệu thời gian thực một cách hiệu quả.
- MLib machine learning learning: cung cấp thuật toán học máy
GraphX là một khung xử lý đồ thị phân tán dựa trên Spark, cung cấp API cho phép người dùng mô hình hóa các đồ thị tùy chỉnh thông qua API trừu tượng Pregel Ngoài ra, GraphX còn cung cấp thời gian chạy được tối ưu hóa, giúp nâng cao hiệu suất tính toán đồ thị.
Resilient Distributed Datasets (RDD)
RDD (Resilient Distributed Dataset) là một cấu trúc dữ liệu cơ bản của Spark, đại diện cho một tập hợp phân tán và bất biến của các đối tượng Mỗi RDD được chia thành các phân vùng logic, cho phép tính toán trên các nút khác nhau trong cụm RDD có khả năng chứa bất kỳ loại đối tượng nào từ Python, Java hoặc Scala, bao gồm cả các lớp do người dùng định nghĩa.
- Về mặt hình thức, RDD là tập hợp các record chỉ đọc, có khả năng chịu lỗi và hoạt động song song
Có hai phương pháp để tạo RDD: đầu tiên, bạn có thể song song hóa một collection hiện có trên chương trình driver; thứ hai, bạn có thể tham chiếu đến tập dữ liệu lưu trữ bên ngoài như hệ thống tệp chia sẻ, HDFS, HBase hoặc bất kỳ nguồn dữ liệu nào hỗ trợ định dạng đầu vào của Hadoop.
Vì sao RDD lại nhanh và hiệu quả hơn MapReduce
MapReduce gặp vấn đề về chia sẻ dữ liệu chậm, chủ yếu do quá trình sao chép, tuần tự hóa và thao tác IO trên đĩa Trong các ứng dụng Hadoop, hệ thống lưu trữ thường chiếm hơn 90% thời gian thực hiện các thao tác đọc-ghi trên HDFS.
Sử dụng lại các kết quả trung gian qua nhiều lần tính toán trong các ứng dụng nhiều giai đoạn (Iterative)
Khi người dùng thực hiện truy vấn trên cùng một tệp dữ liệu, mỗi truy vấn đều yêu cầu thực hiện I/O trên bộ nhớ, điều này có thể ảnh hưởng đến thời gian thực thi của ứng dụng.
Chia sẻ dữ liệu trên RDD giúp lưu trữ trạng thái bộ nhớ dưới dạng đối tượng, cho phép các công việc chia sẻ dữ liệu một cách hiệu quả Việc chia sẻ dữ liệu trong bộ nhớ nhanh hơn từ 10 đến 100 lần so với việc truyền qua mạng và đĩa.
Lưu trữ các kết quả trung gian trong một bộ nhớ phân tán(RAM) thay vì Ổ lưu trữ ổn định (Disk) và làm cho hệ thống nhanh hơn
Khi nhiều truy vấn khác nhau được thực hiện liên tục trên cùng một tập dữ liệu, việc lưu trữ dữ liệu đó trong bộ nhớ sẽ giúp cải thiện thời gian thực thi.
Quản lý bộ nhớ trong Spark
RDDs hỗ trợ hai kiểu thao tác thao tác:
- Transformations: Thao tác chuyển đổi(tranformation) tạo ra dataset từ dữ liệu có sẵn
- Action: Thao tác actions trả về giá trị cho chương trình điều khiển (driver program) sau khi thực hiện tính toán trên dataset
Các phép biến đổi RDD tạo ra các RDD mới và thiết lập các phụ thuộc giữa chúng Mỗi RDD trong chuỗi phụ thuộc có một hàm tính toán dữ liệu riêng và giữ một con trỏ tới RDD mẹ của nó.
PySpark
Để tích hợp Python với Spark, cộng đồng Apache Spark đã phát hành công cụ PySpark, cho phép người dùng làm việc với RDD bằng ngôn ngữ lập trình Python Điều này được thực hiện nhờ vào thư viện Py4j.
PySpark cung cấp PySpark Shell, cho phép người dùng kết nối API Python với Spark Context SparkContext là điểm khởi đầu cho mọi chương trình Spark, nơi mà chương trình trình điều khiển được khởi động Khi ứng dụng Spark chạy, SparkContext sẽ được khởi tạo, và chương trình trình điều khiển sẽ thực hiện các tác vụ bên trong các trình thực thi trên các worker.
SparkContext sử dụng Py4J để khởi động JVM và tạo đối tượng JavaSparkContext Mặc định, PySpark đã cung cấp sẵn SparkContext với tên gọi ‘sc’, do đó việc tạo một SparkContext mới sẽ không khả thi.
Cài đặt Spark
3.7.1 Cài đặt Spark trên Ubuntu
Tải spark wget https://dlcdn.apache.org/spark/spark-3.2.0/spark-3.2.0-bin- hadoop3.2.tgz
To set up Apache Spark 3.2.0 with Hadoop 3.2, first extract the tar file using the command `tar -xzf spark-3.2.0-bin-hadoop3.2.tgz` Next, configure the environment variables by editing the `.bashrc` file with `vim ~/.bashrc` Add the following lines: `export SPARK_HOME=/home/hadoopuser/spark-3.2.0-bin-hadoop3.2`, `export PATH=$PATH:/home/hadoopuser/spark-3.2.0-bin-hadoop3.2/bin`, and `export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.9.2-src.zip:$PYTHONPATH` Finally, ensure that the Python path is updated by adding `export PATH=$SPARK_HOME/python:$PATH`.
• Khởi động spark thông qua spark-shell (Scala)
CD vào thư mục spark-3.2.0-bin-hadoop3.2
• Khởi động spark thông qua PySpark
CD vào thư mục spark-3.2.0-bin-hadoop3.2
3.7.2 Cài đặt Spark trên Window
• Install Scala a Set environmental variables i User variable
• Install Java 8 a Set environmental variables:
36 i i User variable: ii System variable c Check on cmd
• Install Spark a Set environmental variables: i User variable ii User variable
MongoDB
MongoDB là gì ?
MongoDB là một phần mềm cơ sở dữ liệu mã nguồn mở NoSQL, được thiết kế theo hướng đối tượng và hỗ trợ đa nền tảng Nó tương thích với nhiều ngôn ngữ lập trình phổ biến như C#, Java, PHP, và Javascript, cùng với các môi trường phát triển khác nhau.
NoSQL là một loại cơ sở dữ liệu mã nguồn mở, được phát triển như một mô hình tiên tiến hơn so với hệ quản trị cơ sở dữ liệu quan hệ RDBMS, với ưu điểm về tốc độ và tính năng Đặc biệt, NoSQL sử dụng kiểu dữ liệu JSON, mang lại sự linh hoạt và hiệu quả trong việc xử lý dữ liệu.
Các thuật ngữ hay gặp trong MongoDB
MongoDB sử dụng cấu trúc lưu trữ dạng JSON, mang lại hiệu suất cao, tốc độ tương tác nhanh và khả năng mở rộng tốt Hệ thống này hoạt động dựa trên khái niệm collection và document, giúp quản lý dữ liệu một cách linh hoạt và hiệu quả.
Cơ sở dữ liệu (database) là một ô chứa dữ liệu ở mức vật lý, với mỗi cơ sở dữ liệu bao gồm nhiều bộ sưu tập (collection) và được lưu trữ tại một vị trí trên máy chủ Một máy chủ MongoDB có khả năng tạo ra nhiều cơ sở dữ liệu khác nhau.
Collection là tập hợp các tài liệu, tương tự như bảng trong SQL Mỗi collection thường thuộc về một cơ sở dữ liệu duy nhất, nhưng không có ràng buộc quan hệ, giúp việc truy xuất dữ liệu diễn ra nhanh chóng.
Tài liệu có cấu trúc tương tự như kiểu dữ liệu JSON, với các cặp (key => giá trị), điều này mang lại tính năng động cao và tương đồng với các bản ghi trong cơ sở dữ liệu.
Trường _id là một thành phần bắt buộc trong mỗi tài liệu MongoDB, đóng vai trò là giá trị duy nhất cho tài liệu đó Nó có thể được coi là khóa chính, đảm bảo tính duy nhất cho mỗi bản ghi trong cơ sở dữ liệu.
- Field : Là một cặp name – value trong một document Một document có thể có không hoặc nhiều trường Các trường giống các cột ở cơ sở dữ liệu quan hệ
JSON, viết tắt của JavaScript Object Notation, là một định dạng văn bản đơn giản dễ đọc cho con người, dùng để biểu diễn dữ liệu có cấu trúc Hiện nay, JSON được hỗ trợ bởi nhiều ngôn ngữ lập trình khác nhau.
- Index : Là những cấu trúc dữ liệu đặc biệt, dùng để chứa một phần nhỏ của các tập dữ liệu một cách dễ dàng để quét.
Hoạt Động của MongoDB
- MongoDB hoạt động dưới một tiến trình ngầm service luôn mở một cổng
(Cổng mặc định là 27017) để lắng nghe các yêu cầu truy vấn, thao tác từ các ứng dụng gửi vào sau đó mới tiến hành xử lý
Mỗi bản ghi trong MongoDB được tự động gán một trường dữ liệu có tên “_id” thuộc kiểu ObjectId, nhằm đảm bảo tính duy nhất của bản ghi so với các bản ghi khác và hỗ trợ cho việc tìm kiếm, truy vấn thông tin Trường “_id” luôn được tự động đánh chỉ mục, giúp tối ưu hóa tốc độ truy vấn và nâng cao hiệu suất xử lý dữ liệu.
Khi có truy vấn dữ liệu, bản ghi sẽ được lưu vào bộ nhớ RAM để tăng tốc độ truy vấn sau mà không cần đọc từ ổ cứng Đối với các yêu cầu thêm, sửa hoặc xóa bản ghi, MongoDB không cập nhật ngay lập tức xuống ổ cứng mà sẽ thực hiện sau 60 giây để đảm bảo hiệu suất ứng dụng.
MongoDB mới thực hiện ghi toàn bộ dữ liệu thay đổi từ RAM xuống ổ cứng.
Ưu điểm và nhược điểm
+ Dữ liệu lưu trữ phi cấu trúc, không có tính ràng buộc, toàn vẹn nên tính sẵn sàng cao, hiệu suất lớn và dễ dàng mở rộng lưu trữ
+ Dữ liệu được caching (ghi đệm) lên RAM, hạn chế truy cập vào ổ cứng nên tốc độ đọc và ghi cao
+ Không ràng buộc, toàn vẹn nên không ứng dụng được cho các mô hình giao dịch yêu cầu độ chính xác cao
Trong các ứng dụng ngân hàng hiện nay, việc thiếu cơ chế giao dịch (transaction) gây ra nhiều hạn chế Đồng thời, dữ liệu được lưu trữ tạm thời bằng cách sử dụng bộ nhớ RAM, dẫn đến việc yêu cầu một lượng RAM lớn trong quá trình hoạt động.
Mọi thay đổi về dữ liệu mặc định chưa được ghi xuống ổ cứng ngay lập tức, do đó, nguy cơ mất dữ liệu do mất điện đột ngột là rất cao.
Cài đặt MongoDB Compass
* Lựa chọn thư mục để cài đặt
* Lựa chọn thư mục lưu trữ
* Thiết Lập biến môi trường
Các thao tác cơ bản trên MongoDB Compass
* Create Database (Restaurants-DB) với Collection (Restaurants)
* Import dữ liệu trong files Restaurant.json
* Show dữ liệu trong Restaurants
* Một số câu lệnh cơ bản
- Write a MongoDB query to display the fields restaurant_id, name, borough and cuisine, but exclude the field _id for all the documents in the collection restaurant
- Write a MongoDB query to display all the restaurant which is in the borough Bronx
- Write a MongoDB query to find the restaurants that achieved a score, more than 80 but less than 100
Các Thao tác cơ bản trên Command Line
A) Khởi động MongoDB với trên Command Line
B) Chạy cổng mặc định mongoDB trên command line :
C) Các thao tác cơ bản
* Liệt kê các database hiện có :
* Sử dụng database Restaurants-DB :
* Xem các collection của database đó :
* Chèn một đối tượng vào database
* Đọc(tìm kiếm ) trong database :
Kết nối MongoDB với Java
B) Kết nối đến server đơn (SYNC)
* Tạo Database (SYNC) với Collection(lophoc)
* Kết nối thành công, xuất ra phần tử đầu tiên trong database :
NULL do trong database không có malop 1a
C) Kết nối với ASYNC DRIVER
Kết quả chạy thử database Restaurants-DB :
- Điếm số count của collection