Tải bản đầy đủ (.docx) (33 trang)

ATPM nhom 10 phantichweblogkhoiluonglonsudungapachespark

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.44 MB, 33 trang )

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG

BÁO CÁO HỌC PHẦN TỐT NGHIỆP
MƠN HỌC: AN TỒN PHẦN MỀM
ĐỀ TÀI: PHÂN TÍCH WEB LOG KHỐI LƯỢNG LỚN SỬ DỤNG
APACHE SPARK
GVHD: TS. ĐỖ XUÂN CHỢ
SINH VIÊN:
TRẦN ĐỨC HUY - B14DCAT025
TÔ THỊ HẢI YẾN - B15DCAT199
LÊ NGỌC MINH SƠN – B14DCAT056
NGÔ VĂN CƯỜNG - B15DCAT031

Hà Nội, 11/2019


Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

GIỚI THIỆU
Ngày này, trong lĩnh vực công nghệ thông tin, thuật ngữ Big Data khơng cịn xa lạ gì. Big
Data là thuật ngữ dùng để chỉ một tập hợp dữ liệu rất lớn và rất phức tạp đến nỗi những
công cụ, ứng dụng xử lí dữ liệu truyền thống khơng thể nào đảm đương được. Tuy nhiên,
Big Data lại chứa trong mình rất nhiều thơng tin q giá mà nếu trích xuất thành cơng, nó sẽ
giúp rất nhiều cho việc kinh doanh, nghiên cứu khoa học, dự đoán các dịch bệnh sắp phát
sinh và thậm chí là cả việc xác định điều kiện giao thơng theo thời gian thực. Chính vì thế,
những dữ liệu này phải được thu thập, tổ chức, lưu trữ, tìm kiếm, chia sẻ theo một cách khác
so với bình thường.
Để giúp cho việc xử lý lượng dữ liệu khổng lồ một cách nhanh chóng, giúp người dùng
có thể dễ dàng tìm được thơng tin cần thiết trong thời gian thực, rất nhiều công cụ xử lý dữ


liệu lớn được nghiên cứu và phát triển bởi các viện nghiên cứu trên thế giới như: Hadoop,
Apache Spark,…
Trong một thời gian gần đây, Apache Spark đã nổi lên như một công cụ xử lý dữ liệu lớn
thế hệ mới, và đang được áp dụng trong toàn ngành nhanh hơn bao giờ hết. Spark cải thiện
Hadoop MapReduce, giúp kích hoạt cuộc cách mạng dữ liệu lớn, trong một số thứ nguyên
chính: nhanh hơn, dễ sử dụng hơn nhờ API phong phú và vượt xa các ứng dụng hàng loạt để
hỗ trợ nhiều khối lượng công việc khác nhau, bao gồm tương tác truy vấn, phát trực tuyến,
học máy và xử lý biểu đồ.Apache Spark in-memory clusters đang là sự chú ý của nhiều
doanh nghiệp trong việc ứng dụng công nghệ vào phân tích và xử lý dữ liệu nhanh chóng.
Báo cáo gồm 3 nội dung chính như sau:
Chương 1: Giới thiệu các vấn đề cơ bản về phân tích web log khối lượng lớn như lợi ích,
thách thức cùng với hướng giải quyết. Đồng thời, giới thiệu những khái niệm cơ bản về
framework Apache Spark.
Chương 2: Trình bày chi tiết, cụ thể về kiến trúc và hoạt động của Apache Spark. Bên
cạnh đó, trình bày mơ hình triển khai hệ thống phân tích web log sử dụng Apache Spark.
Chương 3: Trình bày quá trình cài đặt Apache Spark và demo giải quyết các bài tốn cụ
thể.

Nhóm 10

Page 2


Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

MỤC LỤC

DANH MỤC HÌNH ẢNH


CHƯƠNG 1: GIỚI THIỆU VỀ WEB LOG VÀ FRAMEWORK APACHE
SPARK
1.1.

WEB LOG, WEB LOG KHỐI LƯỢNG LỚN LÀ GÌ?

Web logs file là tệp logs được tạo và duy trì bởi máy chủ web. Mỗi “tác động” vào trang
Web, bao gồm mỗi lần xem một tài liệu HTML, hình ảnh hoặc đối tượng khác đều được ghi
Nhóm 10

Page 3


Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

lại. Định dạng tệp nhật ký web thô thực chất là một dòng văn bản cho mỗi lần truy cập vào
trang web. Thông tin này chứa thông tin về người đã truy cập trang web, họ đến từ đâu và
chính xác họ đang làm gì trên trang web.
Các tệp nhật ký chứa thông tin về: Tên người dùng, Địa chỉ IP, Dấu thời gian, Yêu cầu
truy cập, số lượng byte được chuyển, Trạng thái kết quả, URL và tác nhân người dùng.
Tệp nhật ký là các tệp liệt kê các hành động đã xảy ra. Các tệp nhật ký này nằm trong
máy chủ web. Máy tính cung cấp các trang web được gọi là máy chủ web. Máy chủ Web lưu
trữ tất cả các tệp cần thiết để hiển thị các trang Web trên máy tính người dùng.
Web log khối lượng lớn là tệp web logs chứa một tập hợp dữ liệu rất lớn và phức tạp và
rất khó thu thập, lưu trữ, quản lý và phân tích với các cơng cụ thống kê hay ứng dụng xử lý
dữ liệu truyền thống.
1.2.

CÁC VẤN ĐỀ TRONG PHÂN TÍCH WEB LOG KHỐI LƯỢNG LỚN
1.2.1. Lợi ích của phân tích dữ liệu lớn

Phân tích tập dữ hợp liệu có thể tìm ra tương quan mới tới xu hướng kinh doanh hiện
tại,quảng cáo, phòng bệnh tật, chống tội phạm… cho phép các tổ chức giải quyết các bài
tốn phức tạp trước kia khơng thể làm được.
Các cơng ty có thể sử dụng phân tích dữ liệu để xác định thị trường mới hoặc thậm chí
chia nhỏ thị trường hiện có thành các thị trường nhỏ hơn để tăng sức cạnh tranh. Kết hợp
với những tiến bộ trong tiếp thị truyền thông tự động, chúng ta đang hướng tới thời đại của
quảng cáo đại chúng. Như vậy, mục tiêu cuối cùng của các nhà tiếp thị là quảng cáo đại
chúng.
Tổng hợp và phân tích dữ liệu lớn cung cấp cho các doanh nghiệp có cái nhìn thực tế về
thị yếu của khách hàng. Từ đó, giúp giảm bớt các chi phí nghiên cứu thị trường, các sai lầm
trong bán hàng, tiếp thị, chiến lược kinh doanh của cơng ty.
Phân tích hành vi của khách hàng để đưa ra dự đoán, cho phép các nhà tiếp thi phát hiện
lệch lạc trong mơ hình kinh doanh.

1.2.2. Thách thức và hướng giải quyết

Do dữ liệu lớn, không ngừng tăng nhanh, dữ liệu phức tạp, các ứng dụng dữ liệu truyền
thống khơng đáp ứng được việc lưu trữ, phân tích và xử lý dữ liệu. Vì vậy, yêu cầu cần có
một ứng dụng giải quyết các khó khăn trên
Hiện nay có rất nhiều cơng cụ dùng để xử lý dữ liệu lớn đã và đang được nghiên cứu,
phát triển bởi các viện nghiên cứu lớn trên Thế Giới. Các công cụ này giúp cho việc xử lý
Nhóm 10

Page 4


Báo cáo học phần tốt nghiệp


GVHD: TS. Đỗ Xuân Chợ

một lượng dữ liệu khổng lồ một cách nhanh chóng, giúp người dùng có thể dễ dàng tìm
được thơng tin cần thiết trong thời gian thực, nhất là khi kỷ nguyên của exabytes đang đến
gần.
Phân tích web log là một trường hợp lý tưởng sử dụng nền tảng Apache Spark.
1.3.
1.3.1.

GIỚI THIỆU VỀ APACHE SPARK
Apache Spark là gì?

Apache Spark là một framework mã nguồn mở tính tốn cụm, được phát triển vào năm
2009 bởi AMPLab tại đại học California. Sau này, Spark đã được trao cho Apache Software
Foundation vào năm 2013 và được phát triển cho đến nay.
Tính năng của Apache Spark:
Tốc độ: Spark có thể chạy trên cụm Hadoop và có thể chạy nhanh hơn 100 lần khi
chạy trên bộ nhớ RAM, và nhanh hơn 10 lần khi chạy trên ổ cứng. Bằng việc giảm số
thao tác đọc ghi lên đĩa cứng, lưu trữ trực tiếp dữ liệu xử lý lên bộ nhớ.
- Hỗ trợ đa ngôn ngữ: Spark cung cấp các API có sẵn cho các ngơn ngữ Java, Scala,
hoặc Python.
- Phân tích nâng cao: Spark khơng chỉ hỗ trợ “Map” và “Reduce” mà còn hỗ trợ truy
vấn SQL, xử lý theo Stream, học máy, và các thuật toán đồ thị (Graph).
1.3.2. Tại sao sử dụng Apache Spark?
-

Với các bài tốn phân tích dữ liệu lớn nên sử dụng Apache Spark do:
+ Tốc độ xử lý của Spark có được do việc tính tốn được thực hiện cùng lúc trên nhiều


+

+

+

+

máy khác nhau. Đồng thời việc tính tốn được thực hiện ở bộ nhớ trong (in-memories)
hay thực hiện hoàn toàn trên RAM.
Spark cho phép xử lý dữ liệu theo thời gian thực, vừa nhận dữ liệu từ các nguồn khác
nhau đồng thời thực hiện ngay việc xử lý trên dữ liệu vừa nhận được ( Spark
Streaming).
Spark khơng có hệ thống file của riêng mình, nó sử dụng hệ thống file khác như:
HDFS, Cassandra, S3,…. Spark hỗ trợ nhiều kiểu định dạng file khác nhau (text, csv,
json…) đồng thời nó hồn tồn khơng phụ thuộc vào bất cứ một hệ thống file nào.
Spark cho phép xây dựng và phân tích nhanh các mơ hình dự đốn. Hơn nữa, nó cịn
cung cấp khả năng truy xuất toàn bộ dữ liệu cùng lúc, nhờ vậy ta không cần phải lấy
mẫu dữ liệu – địi hỏi bởi các ngơn ngữ lập trình như R. Thêm vào đó, Spark cịn cung
cấp tính năng streaming, được dùng để xây dựng các mơ hình real-time bằng cách nạp
tồn bộ dữ liệu vào bộ nhớ.
Khi có một tác vụ nào đó q lớn mà khơng thể xử lý trên một laptop hay một server,
Spark cho phép ta phân chia tác vụ này thành những phần dễ quản lý hơn. Sau đó,
Spark sẽ chạy các tác vụ này trong bộ nhớ, trên các cluster của nhiều server khác nhau

Nhóm 10

Page 5



Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

để khai thác tốc độ truy xuất nhanh từ RAM. Spark sử dụng API Resilient Distributed
Dataset (RDD) để xử lý dữ liệu.
1.3.3. Thành phần của Apache Spark

Hình 1. 1 Thành phần của Apache Spark

-

-

1.4.

Spark Core (Thành phần trung gian của Spark): Cung cấp những chức năng cơ bản
nhất của Spark như lập lịch cho các tác vụ, quản lý bộ nhớ, fault recovery, tương tác
với các hệ thống lưu trữ…Đặc biệt, Spark Core cung cấp API để định nghĩa RDD
(Resilient Distributed DataSet) là tập hợp của các item được phân tán trên các node
của cluster và có thể được xử lý song song.
Spark có thể chạy trên nhiều loại Cluster Managers như Hadoop YARN, Apache
Mesos hoặc trên chính cluster manager được cung cấp bởi Spark được gọi là
Standalone Scheduler.
Spark SQL: Cho phép truy vấn dữ liệu cấu trúc qua các câu lệnh SQL. Spark SQL có
thể thao tác với nhiều nguồn dữ liệu như Hive tables, Parquet, và JSON.
Spark Streaming: Cung cấp API để dễ dàng xử lý dữ liệu stream,
Mllib: Cung cấp rất nhiều thuật toán của học máy như: classification, regression,
clustering, collaborative filtering…
GraphX: Là thư viện để xử lý đồ thị.

BÀI TỐN CỤ THỂ

Sử dụng Apache Spark phân tích file web log khối lượng lớn để thống kê , xử lý log theo
các yêu cầu như thống kê Website có lượng truy cập nhiều nhất, bài viết nhiều view nhất để
tính doanh thu, đưa quảng cáo, ... theo yêu cầu của khách hàng.
+ Đầu vào: Là log đã được xử lý và chuẩn hoá gồm 24 trường dữ liệu, phân cách bởi ký

tự “/t”.
+ Đầu ra: Hiển thị dữ liệu đã được xử lý.
Nhóm 10

Page 6


Báo cáo học phần tốt nghiệp

Nhóm 10

GVHD: TS. Đỗ Xuân Chợ

Page 7


Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

CHƯƠNG 2: KIẾN TRÚC VÀ MƠ HÌNH TRIỂN KHAI HỆ THỐNG PHÂN
TÍCH WEB LOG KHỐI LƯỢNG LỚN SỬ DỤNG APACHE SPARK
2.1.

KIẾN TRÚC VÀ HOẠT ĐỘNG CỦA APACHE SPARK
2.1.1. Kiến trúc của Apache Spark

Worker
Executor
Task

Driver
SparkContext

Task

Master
Worker
Executor
Task

Task

Hình 2. 1 Kiến trúc Apache Spark

Apache Spark có kiến trúc gồm một node master và nhiều node worker.
+ Spark Driver sẽ liên hệ với master node để điều phối các worker node nơi có chứa

các executor đang thực thi cơng việc.
+ Master node: Chứa trình quản lý cụm (Spark Standalone /YARN /MESSO) các
worker node. Chương trình lập lịch sẽ chịu trách nhiệm lập lịch cho các tác vụ và yêu
cầu các worker node thực hiện.
+ Worker node: Mỗi worker bao gồm một hoặc một số Executor thực hiện việc lưu trữ,
đọc ghi khi xử lý dữ liệu.

+ Executor: Chịu trách nhiệm xử lý các task nhỏ riêng biệt bằng các luồng độc lập.
2.1.2. Quản lý bộ nhớ trong Spark
Việc quản lý bộ nhớ của Spark trong bộ nhớ dựa trên 2 khái niệm:



Resilient Distributed Datasets (RDD) – các tập dữ liệu phân tán.
Directed Acyclic Graph (DAG) – đồ thị tuần hồn có hướng.

Nhóm 10

Page 8


Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

Hình 2. 2 Quản lý bộ nhớ trong Spark
 RDD (Resilient Distributed Datasets):
+ Là tập dữ liệu phân tán mà các dữ liệu này được phân tán vào các node của cluster để
+
+
+
+
+

thực hiện tính tốn song song.
Lưu trữ trên bộ nhớ phục vụ việc sử dụng lại một cách nhanh chóng.
Cung cấp cơ chế cache trên bộ nhớ.

Tự động phục hồi dữ liệu khi xảy ra lỗi.
RDDs hỗ trợ hai kiểu thao tác thao tác: transformation và action.
Transformation (map, filter, groupBy, join…): tạo ra dataset từ dữ liệu có sẵn, nghĩa
là biến đổi một hoặc nhiều RDD thành một RDD mới. Tất cả các transformation đều
là lazy, có nghĩa là các transformation này sẽ khơng thực hiện tính tốn trong phương
thức ngay mà chúng sẽ được lưu lại thành dữ liệu cơ bản( ví dụ như file) và chúng
chỉ thực hiện tính tốn khi 1 action được gọi để u cầu trả về kết quả cho driver
program. Nhờ thiết kế này mà Spark chạy hiệu quả hơn.
Bảng 1. Một số phương thức Transformation
Transformation

Ý nghĩa

map(func)

Trả về 1 RDD mới bằng cách truyền mỗi phần tử đầu
vào(nguồn)qua hàm func.

filter(func)

Trả về 1 RDD mới bằng cách chọn những phần tử
đầu vào(nguồn)mà hàm func trả về kết quả true.

union(otherDataset)

Trả về 1 RDD mới là hợp của tập dữ liệu phần tử đầu
vào(nguồn) vàcác phần tử của đối(otherDataset).

distinct([numTasks]))


Trả về 1 RDD mới chứa mỗi phần tử là duy nhất của
tập dữ liệunguồn(đầu vào).

groupByKey([numTasks])

Khi gọi đến 1 tập dữ liệu (K,V) sẽ trả về 1 tập là cặp
(K,Seq(V))( Tức lànhóm tập các phần tử cùng Key).
Chú ý: mặc định chỉ có 8 task song songkhi grouping.
Có thể thay đổi số task song song này bằng việc
truyềnvào tham số đầu vào.

Nhóm 10

Page 9


Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

reduceByKey(func, [numTasks])

Khi gọi tập dữ liệu (K,V), trả về 1 tập (K,V) mà giá
trị của key đượctổng hợp sử dụng hàm reduce func

join(otherDataset, [numTasks])

Khi gọi tập dữ liệu có kiểu (K,V) và (K,W), nó sẽ trả
về 1 cặp mới(K,(V,W))( nối 2 phần tử có cùng key).


flatMap(func)

Tương tự map nhưng khác map ở chỗ, mỗi phần tử
đầu vào quaflatMap sẽ trả về 0 hoặc nhiều phần tử đầu
ra(có thể hiểu quamap sẽ là 1-1).

mapPartitions(func)

Tương tự như map nhưng chạy riêng biệt trên mỗi
vùng RDD. Hàm func phải có dạng Iterator[T] =>
Iterator[U] khi chạy RDD kiểuT.

+ Action (count, collect, save…): trả về giá trị cho chương trình điều khiển (driver

program) sau khi thực hiện tính tốn trên dataset.
Bảng 2. Một số phương thức Action
Action

Ý nghĩa

reduce(func)

Tổng hợp các phần tử của tập dữ liệu sử dụng hàm func(có 2 đối
và trả về 1 kết quả)

collect()

Trả về tất cả các phần tử của tập dữ liệu như 1 mảng ở
driverProgram. Hàm này hữu ích sau khi lọc hoặc thao tác khác
mà trả về tập dữ liệu con đủ nhỏ.


count()

Trả về số phần tử của tập dữ liệu

first()

Trả về phần tử đầu tiên của tập dữ liệu( tương tự take(1)).

saveAsTextFile(path)

Ghi các phần tử của tập dữ liệu như 1 file text( hoặc tập file
text) lên 1 thư mục trong hệ thống local, HDFS hoặc hệ thống hỗ
trợ Hadoop bất kỳ.

countByKey()

Chỉ cho RDD có kiểu (K,V). Trả về 1 Map (K,Int). Int là chỉ số
key.

foreach(func)

Chạy hàm func cho mỗi phần tử của tập dữ liệu. Điều này có tác
dụng khi thực hiện cập nhật 1 biến accumulator hoặc tương tác
với hệ thống lưu trữ ngoài.

 DAG (Directed Acyclic Graph):
+ RDD được hình thành sau mỗi lần chuyển đổi. Ở cấp độ cao khi áp dụng action trên

các RDD này, Spark tạo ra một DAG . DAG là một chuỗi các tính tốn được thực hiện

trên dữ liệu trong đó mỗi nút là một phân vùng RDD.
+ Chia các stage thành các tasks và thực hiện các phép biến đổi bên trong mỗi stage.
+ Phân chia phân vùng hạn chế tối đa việc xáo trộn dữ liệu giữa các node.

Nhóm 10

Page 10


Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

Hình 2. 3 Sơ đồ hoạt động của RDD và DAG

Khi một action được gọi trên RDD, Spark sẽ tạo DAG và chuyển cho DAG scheduler.
DAG scheduler chia các thao tác thành các nhóm (stage) khác nhau của các task.
Mỗi nhóm (stage) bao gồm các task dựa trên phân vùng của dữ liệu đầu vào có thể
pipline với nhau và có thể thực hiện một cách độc lập trên một máy worker. DAG scheduler
sắp xếp các thao tác phù hợp với quá trình thực hiện theo thời gian sao cho tối ưu nhất.
Việc chia nhỏ các task giúp đem lại hiệu năng cao hơn, giảm thiểu ảnh hưởng của dữ liệu
không đối xứng (kích thước các file khơng đồng đều).
Nếu kích thước RAM khơng đủ chứa dữ liệu thì dữ liệu sẽ được lưu trữ sang Tachyon và
cuối cùng là lưu trữ lên đĩa. Khi dữ liệu (RDD) không được lưu trữ trên RAM, khi có nhu
cầu sử dụng đến, chúng sẽ được recompute lại.

2.1.3.

Hoạt động của Apache Spark


Nhóm 10

Page 11


Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

Hình 2. 4 Sơ đồ hoạt động của Apache Spa

Khi một client gửi ứng dụng của người dùng spark, driver ngầm chuyển đổi code chứa
các phép transformations và actions thành một DAG.
Ở giai đoạn này, DAG được chuyển cho DAG scheduler. DAG scheduler phân chia đồ thị
thành các nhóm (stage) và gửi từng nhóm khi sẵn sàng lên Task Scheduler
Sau khi đã tạo ra một tập các stages , nó tạo ra các đơn vị thực thi nhỏ được gọi là các
task theo từng stage. Sau đó, các task được nhóm lại để được gửi tới cluster manager.
Driver program sau đó sẽ giao tiếp với cluster manager và đàm phán các nguồn lực. Sau
đó, cluster manager sẽ khởi chạy các executor trên các worker nodes thay cho driver. Tại
thời điểm này driver gửi tác vụ (tasks) đến cluster manager dựa trên vị trí dữ liệu.
Trước khi các executor bắt đầu thực hiện, chúng tự xác nhận với driver program để driver
có nắm được tổng thể về tất cả các executor. Bây giờ các executors bắt đầu thực hiện các
task khác nhau do driver program gán.
Tại bất kỳ thời điểm nào khi ứng dụng spark đang chạy, driver program sẽ theo dõi tập
hợp các executor chạy. Driver Program trong kiến trúc Spark cũng lên lịch các tasks trong
tương lai dựa trên vị trí dữ liệu bằng cách theo dõi vị trí của dữ liệu được lưu trong bộ nhớ
cache. Khi phương thức main() của driver program thốt hoặc khi nó gọi phương thức stop()
của Spark Context.

2.1.4. Sử dụng Spark SQL trong phân tích xử lý dữ liệu web log


Nhóm 10

Page 12


Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

Spark SQL là một mô-đun Spark để xử lý dữ liệu có cấu trúc. Khơng giống như API
Spark RDD cơ bản, các giao diện được cung cấp bởi Spark SQL cung cấp Spark với nhiều
thông tin hơn về cấu trúc của cả dữ liệu và tính tốn được thực hiện. Bên trong Spark SQL
sử dụng thông tin bổ sung này để thực hiện tối ưu hóa thêm. Có một số cách để tương tác
với Spark SQL bao gồm SQL và API tập dữ liệu. Khi tính tốn kết quả, cùng một công cụ
thực thi được sử dụng, không phụ thuộc vào API /ngôn ngữ nào bạn đang sử dụng để diễn tả
tính tốn. Sự thống nhất này có nghĩa là các nhà phát triển có thể dễ dàng chuyển đổi qua lại
giữa các API khác nhau dựa trên đó cung cấp cách tự nhiên nhất để thể hiện một phép biến
đổi đã cho.
Một cách sử dụng Spark SQL là thực thi các truy vấn SQL. Spark SQL cũng có thể được
sử dụng để đọc dữ liệu từ một cài đặt Hive hiện có . Khi chạy SQL từ bên trong một ngơn
ngữ lập trình khác, kết quả sẽ được trả về dưới dạng một Datasets/DataFrames.
 Datasets

Datasets là tập hợp dữ liệu được phân phối.
Cung cấp các lợi ích của RDD (khả năng sử dụng các hàm lambda mạnh mẽ) với các lợi
ích của cơng cụ thực hiện tối ưu hóa của Spark SQL.
Một Dataset có thể được xây dựng từ vật JVM và sau đó thao tác sử dụng biến đổi chức
năng ( map, flatMap, filter,…). API tập dữ liệu có sẵn trong Scala và Java. Python khơng có
hỗ trợ cho API tập dữ liệu. Nhưng do tính chất động của Python, nhiều lợi ích của API tập

dữ liệu đã có sẵn (nghĩa là bạn có thể truy cập vào trường của một hàng theo tên một cách tự
nhiên row.columnName). Trường hợp cho R là tương tự.
 DataFrames

DataFrame là một tập dữ liệu được sắp xếp thành các cột được đặt tên. Nó tương đương
với một bảng trong cơ sở dữ liệu quan hệ hoặc một khung dữ liệu trong R/Python.
DataFrames có thể được xây dựng từ một loạt các nguồn như: tệp dữ liệu có cấu trúc,
bảng trong Hive, cơ sở dữ liệu bên ngồi hoặc RDD hiện có. API DataFrame có sẵn trong
Scala, Java, Python , và R . Trong Scala và Java, một DataFrame được biểu diễn bằng một
tập dữ liệu của Rows.
(1)Nạp dữ liệu vào một DataFrame sử dụng schema inference

Ví dụ:
import sqlContext.implicits._
case class Person(firstName: String, lastName: String, gender: String, age: Int)
Nhóm 10

Page 13


Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

val rdd = sc.textFile("people.csv")
val peopleRDD = rdd.map { line => val cols = line.split(",") Person(cols(0), cols(1),
cols(2), cols(3).toInt) }
val df = peopleRDD.toDF
// df: DataFrame = [firstName: string, lastName: string, gender: string, age: int]
(1) Làm việc với dataFrame

+ column

Nó cung cấp một chế độ xem theo định hướng cột chung của dữ liệu cơ bản, bất kỳ dữ liệu
được tổ chức thực sự như thế nào. Một vị trí cho một giá trị dữ liệu có thể có các trạng thái:
trống(null), chứa giá trị (not-null), khơng có. Xác định một columns trong API dataFrames:

+ show() : Có thể xem các phần tử n đầu tiên trong một dataFrame với phương thức

show (). Nếu khơng được chỉ định, n mặc định là 20.

Nhóm 10

Page 14


Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

+ cache(): Spark có thể cache một dataFrame, sử dụng bộ nhớ trong định dạng cột,

bằng cách gọi df.cache ()
+ Select(): giống như một SQL SELECT, cho phép giới hạn kết quả cho các cột cụ thể.

+ filter(): cho phép lọc các hàng ra kết quả.

Nhóm 10

Page 15



Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

+ orderBy(): cho phép sắp xếp các kết quả.

+ limit(n): Giới hạn kết quả thành n hàng.
+ distinct(): Trả về một dataFrame mới chỉ chứa các hàng duy nhất trong dataFrame.
+ drop(column): Trả về một dataFrame mới với một cột giảm.
+ join(dataframe): join một dataFrame với một dataFrame khác như SQL join.
+ groupBy(): Thường được sử dụng với count(), groupBy() nhóm dữ liệu các mục theo

giá trị cột cụ thể.
+ as() or alias():cho phép đổi tên một cột. Nó đặc biệt hữu ích với các cột được tạo.

Nhóm 10

Page 16


Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

MÔ HÌNH TRIỂN KHAI HỆ THỐNG PHÂN TÍCH
LƯỢNG LỚN SỬ DỤNG APACHE SPARK
2.2.1. Sơ đồ hệ thống
2.2.


WEB LOG KHỐI

Hình 2. 5 Sơ đồ triển khai hệ thống phân tích web log khối lượng lớn sử dụng Apache Spark
Nhóm 10

Page 17


Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

 Hệ thống file phân tán Hadoop: HDFS

Trong mơ hình hệ thống phân tích web log khối lượng lớn, sử dụng hệ thống file phân tán
HDFS trong Hadoop lưu trữ file.

Hình 2. 6 Sơ đồ kiến trúc HDFS

Hadoop Distributed File System (HDFS) dựa trên Google File System (GFS), cung cấp
một hệ thống dữ liệu phân tán, được thiết kế để chạy trên các cụm máy tính lớn (gồm hàng
ngàn máy tính) có khả năng chịu lỗi cao.
HDFS sử dụng kiến trúc master/slave, trong đó master gồm một NameNode để quản lý
hệ thống file metadata và một hay nhiều slave DataNodes để lưu trữ dữ liệu thực tại.
Khi chuyển một tập tin trên HDFS nó sẽ tự động chia tập tin được chia thành nhiều block
và những block này được lưu trữ trong một tập các DataNodes. NameNode định nghĩa ánh
xạ từ các block đến các DataNode. Các DataNode điều hành các tác vụ đọc và ghi dữ liệu
lên hệ thống file. Chúng cũng quản lý việc tạo, huỷ, và nhân rộng các block thông qua các
chỉ thị từ NameNode. HDFS cũng hỗ trợ các câu lệnh shell để tương tác với tập tin như các
hệ thống file khác.

2.2.2. Hoạt động của hệ thống

Hệ thống thực hiện 3 giai đoạn hoạt động:

Nhóm 10

Page 18


Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

Hình 2. 7 Sơ đồ hoạt động của hệ thống phân tích web log khối lượng lớn sử dụng Apache Spark

Giai đoạn 1
Một ứng dụng có thể submit một job lên spark (spark job client) với yêu cầu xử lý cùng
các thông tin cơ bản:
-

Nơi lưu (location) dữ liệu input, output trên hệ thống dữ liệu phân tán.
Các java class ở định dạng jar chứa các dòng lệnh thực thi .
Các thiết lập cụ thể liên quan đến job thông qua các thông số truyền vào.

Giai đoạn 2
Driver ngầm chuyển đổi code chứa các phép transformations và actions thành một đồ thị
theo chu kỳ (DAG).
Driver program sau đó sẽ giao tiếp với cluster manager và đàm phán các nguồn lực. Sau
đó, cluster manager sẽ khởi chạy các executor trên các worker nodes thay cho driver.
Tại thời điểm này driver gửi tác vụ (tasks) đến trình quản lý cụm dựa trên vị trí dữ liệu.

Giai đoạn 3
Executor trên các node worker thực thi tác vụ và trả về kết quả output được hiển thị trên
màn hình/ lưu ra file.

Nhóm 10

Page 19


Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

CHƯƠNG 3: CÀI ĐẶT VÀ DEMO
3.1.

CÀI ĐẶT

Vì Spark khơng có hệ thống file riêng nên sử dụng hệ thống file phân tán HDFS trong
Hadoop để hỗ trợ Apache Spark lưu trữ dữ liệu.
3.1.1. Cài đặt Hadoop (HDFS)
(1) Thiết lập môi trường

Trước khi cài đặt Hadoop vào môi trường Linux, cần thiết lập Linux bằng ssh (Secure
Shell). Làm theo các bước dưới đây để thiết lập môi trường Linux.
+ Bước 1: Tạo người dùng

Lúc đầu, cần tạo một người dùng riêng biệt cho Hadoop để cô lập hệ thống tệp Hadoop từ
hệ thống tệp linux. Trong demo sử dụng tên người dùng là: hduser
+ Bước 2: Thiết lập SSH và tạo khóa

Thiết lập SSH là cần thiết để thực hiện các hoạt động khác nhau trên một cụm như khởi
động, dừng, phân phối các hoạt động . Để xác thực người dùng Hadoop khác
nhau, cần phải cung cấp cặp khóa cơng khai/riêng cho người dùng Hadoop và chia sẻ nó
với người dùng khác nhau.
Các lệnh sau được sử dụng để tạo cặp giá trị khóa bằng SSH. Sao chép khóa cơng khai
biểu mẫu id_rsa.pub sang authorized_keys và cung cấp cho chủ sở hữu quyền đọc và ghi đối
với tệp authorized_keys tương ứng.
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
+ Bước 3: Cài đặt Java

Java là điều kiện tiên quyết chính cho Hadoop. Trước hết, cần kiểm tra java đã được cài
đặt trong hệ thống chưa bằng cách sử dụng lệnh: $ java -version
Kiểm tra lệnh java -version từ terminal.

Hình 3. 1 Kiểm tra java version
Nhóm 10

Page 20


Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

+ Bước 4: Tải Hadoop

Tải và giải nén Hadoop 2.4.1 từ nền tảng phần mềm Apache bằng cách sử dụng các lệnh
sau:

$ su
password:
# cd /usr/local
#
wget
2.4.1.tar.gz

/>
# tar xzf hadoop-2.4.1.tar.gz
# mv hadoop-2.4.1/* to hadoop/
# exit
(2) Cài đặt Hadoop trong chế độ phân tán giả
+ Bước 1: Thiết lập Hadoop

Cài đặt biến môi trường Hadoop bằng cách thêm các lệnh sau vào tệp ~ / .bashrc .
export HADOOP_HOME=/usr/local/hadoop
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
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_INSTALL=$HADOOP_HOME
Áp dụng tất cả các thay đổi vào hệ thống đang chạy: $ source ~/.bashrc
+ Bước 2: Cấu hình Hadoop

Tất cả các tệp cấu hình Hadoop ở đường dẫn “$ HADOOP_HOME / etc / hadoop”. Cần
phải thực hiện các thay đổi trong các tệp cấu hình đó theo cơ sở hạ tầng Hadoop của hệ
thống.

$cd $HADOOP_HOME/etc/hadoop

Nhóm 10

Page 21


Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

Hình 3. 2 Danh sách các file cấu hình Hadoop

Để phát triển các chương trình Hadoop trong java, cần phải thiết lập lại các biến môi
trường java trong tệp hadoop-env.sh bằng cách thay thế giá trị JAVA_HOME với vị trí của
java trong hệ thống.
export JAVA_HOME=/usr/local/jdk1.7.0_71
Sau đây là danh sách các tệp cần phải chỉnh sửa để cấu hình Hadoop:


core-site.xml

Tệp core-site.xml chứa thông tin như số cổng được sử dụng cho cá thể Hadoop, bộ nhớ
được cấp phát cho hệ thống tệp, giới hạn bộ nhớ để lưu trữ dữ liệu và kích thước bộ đệm
đọc/ghi.
Mở tệp core-site.xml và thêm các thuộc tính sau vào giữa các thẻ <configuration>, configuration>.

Hình 3. 3 File cấu hình core-site.xml
Nhóm 10


Page 22


Báo cáo học phần tốt nghiệp


GVHD: TS. Đỗ Xuân Chợ

hdfs-site.xml

Tệp hdfs-site.xml chứa các thông tin như giá trị của dữ liệu nhân bản, đường dẫn tên và
đường dẫn datanode của các hệ thống tệp cục bộ.
Mở tệp này và thêm các thuộc tính sau vào giữa các thẻ <configuration> configuration> trong tệp này:

Hình 3. 4 File cấu hình hdfs-site.xml

Lưu ý: Trong tệp ở trên, tất cả các giá trị thuộc tính được người dùng xác định và có thể
thực hiện thay đổi theo cơ sở hạ tầng Hadoop của mình.
+ yarn-site.xml

Tệp này được sử dụng để định cấu hình yarn thành Hadoop. Mở tệp yarn-site.xml và
thêm các thuộc tính sau vào giữa các thẻ <configuration>, </ configuration> trong tệp này:

Nhóm 10

Page 23



Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

Hình 3. 5 File cấu hình yarn-site.xml



mapred-site.xml

Tệp này được sử dụng để chỉ định khung MapReduce mà chúng tôi đang sử dụng. Theo
mặc định, Hadoop chứa một mẫu của tệp yarn-site.xml. Trước hết, cần phải sao chép tệp từ
mapred-site.xml.template vào tệp mapred-site.xml bằng lệnh sau đây:
$ cp mapred-site.xml.template mapred-site.xml
Mở tệp mapred-site.xml và thêm các thuộc tính sau vào giữa các thẻ <configuration>, configuration> trong tệp này:

Nhóm 10

Page 24


Báo cáo học phần tốt nghiệp

GVHD: TS. Đỗ Xuân Chợ

Hình 3. 6 File cấu hình mapred-site.xml
+ Bước 3: Xác minh cài đặt Hadoop

Hình 3. 7 Kết quả xác minh cài đặt Hadoop


Các bước sau được sử dụng để xác minh cài đặt Hadoop.


Đặt tên cho thiết lập node: Thiết lập namenode bằng cách sử dụng lệnh “hdfs
namenode -format” như sau.
$ cd ~
$ hdfs namenode –format



Start Hadoop dfs: Lệnh sau được sử dụng để bắt đầu dfs. Việc thực hiện lệnh này sẽ
khởi động hệ thống tệp Hadoop.
$ start-dfs.sh

Nhóm 10

Page 25


×