Tuy nhiên trong kỷ nguyên số, khi mà sự bùng nổ công nghệ truyền thông đã dẫn tới sự bùng nổ dữ liệu người dùng, lượng dữ liệu được tạo ra vô cùng lớn và đa dạng, đòi hỏi một hệ thô
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI TRƯỜNG CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG BÁO CÁO BÀI TẬP LỚN Đề tài: Lưu trữ và xử lý, phân tích liệu thông tin tuyển dụng việc làm Lớp : 136842 Học phần : Lưu trữ xử lý liệu lớn Mã học phần : IT4931 Giảng viên hướng dẫn : TS Trần Việt Trung Danh sách thành viên nhóm 31: Họ tên Mã số sinh viên Nguyễn Phương Trung 20194932 Trương Văn Hiển 20194276 Mai Minh Nhật 20194346 Trần Quốc Anh 20194225 Hà Nội, tháng năm 2023 IT4931 – Lưu trữ xử lý liệu lớn MỤC LỤC LỜI NÓI ĐẦU CHƯƠNG 1: TỔNG QUAN XÂY DỰNG HỆ THỐNG 1.1 Tổng quan hệ thống 1.2 Chi tiết thành phần hệ thống 1.2.1 SSH Server 1.2.2 Hadoop Cluster 1.2.3 Spark Cluster 1.2.4 ElasticSearch Kibana CHƯƠNG 2: XÂY DỰNG CHƯƠNG TRÌNH VÀ HỆ THỐNG 11 2.1 Luồng liệu hệ thống 11 2.2 Khởi động hệ thống HDFS 12 2.3 Quá trình thực 14 2.3.1 Thu thập liệu 14 2.3.2 Lưu liệu vào Hadoop 16 2.3.3 Lọc liệu Spark 17 2.3.4 Biểu diễn liệu Kibana 21 CHƯƠNG 3: NHẬN XÉT, ĐÁNH GIÁ VÀ HƯỚNG PHÁT TRIỂN 23 3.1 Nhận xét, đánh giá 23 3.2 Hướng phát triển 23 DANH MỤC TÀI LIỆU THAM KHẢO 24 Nhóm 31 – Bài tập lớn học phần IT4931 – Lưu trữ xử lý liệu lớn LỜI NÓI ĐẦU Trước đây, mạng Internet chưa phát triển, lượng liệu người sinh nhỏ giọt thưa thớt, nhìn chung, lượng liệu vẫn nằm khả xử lý người dù tay hay máy tính Tuy nhiên kỷ ngun sớ, mà bùng nổ công nghệ truyền thông đã dẫn tới bùng nổ liệu người dùng, lượng liệu tạo vô lớn đa dạng, địi hỏi hệ thớng đủ mạnh để phân tích xử lý liệu đó Khái niệm Big Data đề cập tới liệu lớn theo khía canh khác nhau, thứ tớc độ sinh liệu (velocity), thứ hai lượng liệu (volumn) thứ ba độ đa dạng (variety) Lượng liệu có thể đến từ nhiều nguồn khác các tảng truyền thông Google, Facebook, Twitter, … hay thông số thu thập từ cảm biến, thiết bị IoT đời sống, … Và thật doanh nghiệp có thể kiểm sốt tạo tri thức từ liệu tạo tiềm lực lớn để cạnh tranh với doanh nghiệp khác Có thể nói liệu sức mạnh kỷ nguyên số không ngoa chút Để tiếp cận với lĩnh vực này, nhóm chúng em định chọn loại liệu đủ lớn khả để tiến hành tiến hành phân tích lưu trữ Thơng tin tủn dụng việc làm thông tin nhiều người quan tâm, đặc biệt lao động cần tìm việc làm Những thơng tin thường xuất nhóm tuyển dụng mạng xã hội trang web tuyển dụng, trang tuyển dụng riêng công ty Việc khai thác thông tin nhu cầu tuyển dụng có thể giúp cho người lao động tìm cơng việc phù hợp, cơng ty có thể cân nhắc điều chỉnh, người có việc làm có thể đánh giá mức lực có nhận lợi ích phù hợp công ty không hay việc điều chỉnh các chương trình đào tạo để tạo nguồn nhân lực phù hợp sau Để biết thị trường lao động cần gì, giải pháp đơn giản mà hiệu quả thực đánh giá,thống kê kỹ năng, kiến thức miêu tả các đơn tuyển dụng cơng ty trang mạng tìm việc làm Các công đoạn thực giải pháp bản bao gồm thu thập liệu, lọc liệu biểu diễn, thống kê liệu Nhóm 31 – Bài tập lớn học phần IT4931 – Lưu trữ xử lý liệu lớn Trong phạm vi Bài tập lớn này, nhóm chúng em thực tạo hệ thống thu thập liệu từ trang web tuyển dụng, sau đó vận dụng kiến thức lưu trữ liệu lớn để khai thác Nguồn liệu nhóm lựa chọn để nghiên cứu liệu liên quan đến việc làm lĩnh vực phần mềm, thu thập từ trang web TopCV Bài tập lớn nhóm chúng em bao gồm nội dung chính: - Tổng quan xây dựng hệ thớng - Xây dựng chương trình hệ thớng - Nhận xét, đánh giá hướng phát triển Mặc dù đã cớ gắng hồn thiện sản phẩm khơng thể tránh khỏi thiếu hụt kiến thức sai sót kiểm thử Chúng em mong nhận nhận xét thẳng thắn, chi tiết đến từ thầy để tiếp tục hồn thiện Ći cùng, nhóm chúng em xin gửi lời cảm ơn đến thầy TS Trần Việt Trung dẫn chúng em suốt trình hồn thiện Bài tập lớn Nhóm chúng em xin chân thành cảm ơn thầy Nhóm 31 – Bài tập lớn học phần IT4931 – Lưu trữ xử lý liệu lớn CHƯƠNG 1: TỔNG QUAN XÂY DỰNG HỆ THỐNG 1.1 Tổng quan hệ thống Hệ thống xây dựng gồm phần với chức nhằm thu thập, xử lý, lưu trữ trực quan hoá liệu tuyển dụng từ thông tin tuyển dụng trang web Các thành phần hệ thống bao gồm: Bộ phần thu thập liệu: sử dụng BeautifulSoup4, thư viện để phân tích cú pháp các văn bảng dạng HTML XML, chuyên dụng việc thu thập liệu từ trang web Bộ phận lưu trữ: hệ thống lưu trữ liệu vào Hadoop dưới dạng HDFS File System (HDFS) để có thể lưu liệu phân tán có chức mở rộng, lưu, đảm bảo truy cập số máy kết nối Bộ phận xử lý liệu: từ liệu đã lưu Hadoop, Spark sử dụng để xử lý, làm liệu thực truy vấn, giúp cho việc biểu diễn liệu đơn giản Dữ liệu sau làm lại lưu Hadoop Elasticsearch Bộ phận biểu diễn liệu: liệu sau xử lý Spark đưa vàoElasticsearch thông qua thư viện mã nguồn mở Elasticsearch for Apache Hadoop Nhóm 31 – Bài tập lớn học phần IT4931 – Lưu trữ xử lý liệu lớn 1.2 Chi tiết về thành phần hệ thống 1.2.1 SSH Server SSH, hay Secure (Socket) Shell, bao gồm cả giao thức mạng lẫn tiện ích để triển khai giao thức đó SSH sử dụng mô hình client-server, kết nới ứng dụng Secure Shell client (nơi session hiển thị) với SSH server (nơi session chạy) Triển khai SSH thường hỗ trợ cả giao thức ứng dụng, dùng cho giả lập terminal hay truyền file Hadoop core sử dụng Shell (SSH) để giao tiếp với các slave node để khởi chạy quy trình máy chủ slave node Việc sử dụng chế key-pair giúp việc giao tiếp máy không cần nhập nhiều lần mật mà vẫn đảm bảo độ bảo mật Khi Cluster hoạt động môi trường phân tán việc giao tiếp cần thực nhanh, SSH giúp cho NodeManager DataNode có thể giao tiếp với Namenode nhanh chóng Nhóm 31 – Bài tập lớn học phần IT4931 – Lưu trữ xử lý liệu lớn 1.2.2 Hadoop Cluster Hadoop Cluster hệ thống file phân tán, cung cấp khả lưu trữ liệu khổng lồ tính tối ưu hoá việc sử dụng băng thông node Hadoop cài đặt máy tính hệ thống phân tán theo kiến trúc master – slave Hadoop có thể hoạt động máy (giớng team có member) mở rộng tới hàng ngàn máy, với máy có thể sử dụng để lưu trữ tính tốn liệu Khi lưu trữ Hadoop, file liệuđược chia thành chunk lưu thành nhiều bản sao, giúp cho cụm Hadoop có khả chịu lỗi HDFS nơi lưu liệu Hadoop, HDFS chia chia nhỏ liệu thành đơn vị liệu nhỏ gọi blocks lưu trữ chúng phân tán node cụm Hadoop HDFS sử dụng kiến trúc master/slave, master gồm Name Node để quản lý hệ thống file metadata v hay nhiều slave Data Nodes để lưu trữ liệu Nhóm 31 – Bài tập lớn học phần IT4931 – Lưu trữ xử lý liệu lớn Đối với hệ thớng phân tích thơng tin tủn dụng liệu thu thập Recruitment Platform lưu cụm Hadoop Cụm Hadoop RecruitmentAnalys bao gồm Namenode/SecondaryNamenode Datanode Khi lượng liệu tăng lên, kiến trúc có thể mở rộng thêm cách bổ sung các Datanode để tăng cường dung lượng lưu trữ hệ thống 1.2.3 Spark Cluster Apache Spark framework xử lý liệu mã nguồn mở quy mô lớn Spark cung cấp giao diện để lập trình cụm tính tốn song song với khả chịu lỗi Tốc độ xử lý Spark có việc tính toán thực lúc nhiều máy khác Đồng thời việc tính toán thực hoàn toàn RAM Spark cho phép xử lý liệu theo thời gian thực, vừa nhận liệu từ các nguồn khác đồng thời thực việc xử lý liệu vừa nhận Những điểm bật Spark: - Xử lý liệu: Spark xử lý liệu theo lô theo thời gian thực - Tính tương thích: Có thể tích hợp với tất cả nguồn liệu định dạng tệp hỗ trợ cụm Hadoop - Hỗ trợ ngơn ngữ: Java, Python, Scala, R - Phân tích thời gian thực Nhóm 31 – Bài tập lớn học phần IT4931 – Lưu trữ xử lý liệu lớn Kiến trúc Spark bao gồm hai thành phần chính: trình điều khiển (driver) trình thực thi (executors) Trình điều khiển dùng để chuyển đổi mã người dùng thành nhiều tác vụ (tasks) có thể phân phối các nút xử lý (worker nodes) Khi thực thi, trình điều khiển Driver tạo SparkContext, sau đó giao tiếp với Cluster Manager để tính toán tài nguyên phân chia các tác vụ đến cho các worker nodes Apache Spark xây dựng các lệnh xử lý liệu người dùng thành Đồ thị vòng có hướng DAG DAG lớp lập lịch Apache Spark; nó xác định tác vụ thực thi nút theo trình tự 1.2.4 ElasticSearch Kibana Dữ liệu sau làm Spark cần biểu diễn dưới dạng bảng biểu, đồ thị để mang đến cho người dùng góc nhìn trực quan Elasticsearch Kibana ứng dụng phù hợp để đảm nhận vai trò Là cơng cụ tìm kiếm (với tớc độ gần thời gian thực) phân tích liệu phân tán, Elasticsearch có thể lưu trữ phân tích nhiều loại liệu khác như: giữ liệu có cấu trúc, giữ liệu phi cấu trúc, giữ liệu số, liệu không gian địa lý, đánh mục liệu cách hiệu quả nhằm hỗ trợ trình tìm kiếm thực nhanh chóng Các truy vấn Elasticsearch thực thông qua API, curl, python, qua Kibana Kibana cung cấp giao diện đồ hoạ để người dùng dễ dàng việc khai phá, biểu diễn trực quan liệu lưu Elasticsearch Nhóm 31 – Bài tập lớn học phần IT4931 – Lưu trữ xử lý liệu lớn Nhóm 31 – Bài tập lớn học phần 10 IT4931 – Lưu trữ xử lý liệu lớn CHƯƠNG 2: XÂY DỰNG CHƯƠNG TRÌNH VÀ HỆ THỐNG 2.1 Luồng liệu hệ thống Luồng liệu hệ thống chúng em xây dựng gồm trình: Thu thập liệu website TopCV Lưu liệu vào Hadoop Lọc, làm liệu Hadoop Spark Sau đó lưu thành bản: bản lưu trả Hadoop, bản gửi lưu vào Elasticsearch Biểu diễn liệu Elasticsearch dưới dạng biểu đồ, đồ thị, danh sách bảng sử dụng Kibana Nhóm 31 – Bài tập lớn học phần 11 IT4931 – Lưu trữ xử lý liệu lớn 2.2 Khởi động hệ thống HDFS hdfs namenode -format start-dfs.sh start-yarn.sh Sử dụng lệnh jps xem tiến trình chạy Localhost: Nhóm 31 – Bài tập lớn học phần 12 IT4931 – Lưu trữ xử lý liệu lớn Khởi động spark master: master.sh Khởi động spark worker: worker.sh Khởi động Elasticsearch: Nhóm 31 – Bài tập lớn học phần 13 IT4931 – Lưu trữ xử lý liệu lớn 2.3 Quá trình thực 2.3.1 Thu thập liệu Dữ liệu hệ thống liệu tuyển dụng liên quan đến lĩnh vực phần mềm, có thể thu thập website TopCV Tại thời điểm liệu thu thập, TopCV có tổng 170 trang, file html trang có chứa link đến đơn tuyển dụng công ty Hệ thống truy cập vào link thu thập thông tin theo thẻ Mỗi đơn tuyển dụng lưu thành đối tượng json (một bản ghi), đó tên thẻ html nội dung thẻ tương ứng tạo thành cặp key-value Website TopCV: https://www.topcv.vn/tim-viec-lam-it-phan-memc10026?salary=0&exp=0&company_field=0&sort=up_top&page= Một bản ghi bao gồm các trường sau: - Tên công ty tuyển dụng - Mô tả công việc - Yêu cầu ứng viên - Quyền lợi - Cách thức ứng tuyển Chương trình thu thập liệu hệ thống lưu file crawl_data.py, sử dụng thư viện BeautifulSoup BeautifulSoup thư viện Python dùng để lấy liệu khỏi file HTML XML Nó hoạt động với parser (trình phân tích cú pháp) cung cấp cho bạn các cách để điều hướng, tìm kiếm chỉnh sửa parse tree (cây phân tích tạo từ parser) Để tăng tớc độ thực thi, hệ thống sử dụng bash script để chạy song song 44 luồng lúc, luồng thu thập liệu 10 trang liên tiếp Dữ liệu trả lưu 17 file json, tương ứng với kết quả chạy đồng thời 44 luồng, file json bao gồm 25x10 = 250 bản ghi từ 10 trang đã thu thập Nhóm 31 – Bài tập lớn học phần 14 IT4931 – Lưu trữ xử lý liệu lớn Ví dụ bản ghi thu thập từ đơn tuyển dụng: Nhóm 31 – Bài tập lớn học phần 15 IT4931 – Lưu trữ xử lý liệu lớn 2.3.2 Lưu liệu vào Hadoop Dữ liệu sau thu thập đẩy lên Hadoop lưu vào HDFS: Dữ liệu lưu datanode slave1 slave2 Nhóm 31 – Bài tập lớn học phần 16 IT4931 – Lưu trữ xử lý liệu lớn 2.3.3 Lọc liệu Spark Dữ liệu vừa đẩy lên HDFS mới liệu thô, ta cần trích xuất, tiền xử lý để mang loại bỏ thơng tin dư thừa giúp tối ưu khả lưu trữ mang lại tri thức, góc nhìn có ý nghĩa liệu đối với người dùng Định nghĩa schema để đọc Spark Hadoop tạo dataframe: Một dataframe raw_recruit_df với schema đã định nghĩa tạo từ liệu lưu các file json đã lưu Hadoop Nhưng mà raw_recruit_df vẫn dataframe với liệu thơ Từ raw_recruit_df, Spark trích xuất thơng tin để tạo dataframe với các trường liệu bao gồm : - Company Name : tên công ty tuyển dụng - FrameworksPlattforms : mảng gồm tên frameworks, plattforms mà công ty tuyển dụng yêu cầu - Languages: mảng gồm tên ngơn ngữ lập trình mà công ty tuyển dụng yêu cầu - DesignPatterns : mảng gồm tên design patterns mà công ty tuyển dụng yêu cầu - Knowledges: mảng gồm tên kiến thức, kỹ mà công ty tuyển dụng yêu cầu - Salaries : mảng gồm mức lương mà công ty tuyển dụng chi trả Các trường thơng tin FrameworksPlattforms, Languages, DesignPatterns, Knowledges trích xuất theo cách tìm xâu liệu gốc mà khớp với các xâu định nghĩa sẵn (gọi các pattern) tương ứng với trường Nhóm 31 – Bài tập lớn học phần 17 IT4931 – Lưu trữ xử lý liệu lớn Ví dụ, với trường Knowledges: Đới với trường Salaries việc làm liệu phức tạp Bởi mức lương biểu diễn dưới nhiều hình thức khác 2000$, 20000000 VNĐ… Vì hệ thớng đồng lương theo đơn vị triệu VNĐ thống kê lương theo các khoảng triệu VNĐ Mức lương các đơn tuyển dụng chia vào khoảng tương ứng, biểu diễn mảng số nguyên chặn dưới khoảng Dưới cho sớ ví dụ việc chủn đổi mức lương: Mảng các xâu định nghĩa trước dùng để trích xuất thơng tin liên quan: Với trường, hệ thớng dùng thư viện regex python để tìm kiếm pattern trích xuất liệu tương ứng Lọc thông tin frameworks plattfornms: Với các user define function định nghĩa, dataframe mới, extracted_recruit_df, lọc từ raw_recruit_df Nhóm 31 – Bài tập lớn học phần 18 IT4931 – Lưu trữ xử lý liệu lớn Tạo dataframe với liệu lọc từ dataframe ban đầu: Các dòng đầu dataframe lọc từ dataframe ban đầu: Tiền xử lý lưu liệu: Dataframe extracted_recruit_df bản đã có thể tiến hành biểu diễn Kibana, nhiên ta vẫn cần tiến hành tiền xử lý thêm só bước để việc biểu diễn dễ dàng Khi người dùng quan tâm đến nhóm kiến thức mà thị trường tuyển dụng yêu cầu, thay tri thức riêng rẽ, ví dụ quan tâm đến nhóm kiến thức vềblockchain bảo mật, thay quan tâm đến kiến thức cụ thể smart contract hay Defi Lúc này, chương trình cần gán nhãn trước cho kiến thức nhóm kiến thức Với nhãn này, từ dataframe extracted_recruit_df có thể đếm bản ghi chứa nhóm tri thức cụ thể Nhãn số kiến thức yêu cầu: Chương trình sử dụng hàm udf để đánh nhãn các string cột Knowledge dataframe extracted_recruit_df Tuy nhiên, để hàm udf tìm dictionary lúc đánh nhãn cần phải broadcast dictionary trước Nhóm 31 – Bài tập lớn học phần 19 IT4931 – Lưu trữ xử lý liệu lớn Ở các từ dictionary broadcast biến thành broadcast variable, biến mà phép đọc giá trị biến máy, không cho phép sửa đối giá trị nhằm mục đích đảm bảo giá trị biến broadcast tất cả node Khi Spark nhận thấy code cần đến broadcast variable, gửi liệu đến executor cần sử dụng lưu đệm phía các executor đó Điều giúp giảm chi phí truyền tải liệu Hàm broacast nhãn udf để map string cột Knowledge dataframe extracted_recruit_df: Dữ liệu lúc đã sẵn sàng để lưu Hadoop Elasticsearch, chương trình sử dụng hàm save_dataframes_to_hdfs() save_dataframes_to_elasticsearch() để tiến hành lưu trữ Để Spark Elasticsearch tương tác với cần sử dụng thư viện Elasticsearch for Apache Hadoop Thư viện có thể tải từ Maven Repository dưới dạng file jar (ví dụelasticsearch-hadoop-7.17.5.jar ) Sau upload folder src file elasticsearch-hadoop-7.17.5.jar lên spark-master, chương trình có thể thực thi spark-submit sau: /bin/spark-submit master spark://master:7077 jars elasticsearchhadoop-7.17.5.jar driver-class-path elasticsearch-hadoop-7.17.5.jar src/main.py Spark-master tiến hành phân chia tác vụ tài nguyên cho spark-worker: Nhóm 31 – Bài tập lớn học phần 20 IT4931 – Lưu trữ xử lý liệu lớn 2.3.4 Biểu diễn liệu Kibana Dữ liệu lưu Elasticsearch dùng Kibana để biểu diễn Ví dụ: Thống kê mức lương: Phân bố khoảng lương: Trung bình mức lương đới với framework: Nhóm 31 – Bài tập lớn học phần 21 IT4931 – Lưu trữ xử lý liệu lớn Trung bình mức lương đới với ngơn ngữ lập trình: Tỉ lệ % các lĩnh vực tuyển dụng: Ngôn ngữ lập trình tủn dụng nhiều nhất: Nhóm 31 – Bài tập lớn học phần 22 IT4931 – Lưu trữ xử lý liệu lớn CHƯƠNG 3: NHẬN XÉT, ĐÁNH GIÁ VÀ HƯỚNG PHÁT TRIỂN 3.1 Nhận xét, đánh giá Hệ thớng cho thấy lợi ích mà hệ thống BigData đem lại khả lưu trữ, tìm kiếm, biểu diễn lượng lớn liệu, khả mở rộng lượng tài nguyên không đủ, khả chịu lỗi mạng phân tán có thành phần mạng gặp trục trặc Đây khả mà các hệ thống truyền thớng khơng có khả đáp ứng cịn hạn chế Bên cạnh đó, hệ thớng nhóm có số nhược điểm Việc sử dụng spark nhóm không khai thác tối đa hệ thống Lượng liệu thu thập ít, hồn tàn có thể chạy máy Ngoài luồng thực hệ thống vẫn rời rạc, số bước tải liệu vẫn thực cách gõ code thủ công mà chưa tự động hóa 3.2 Hướng phát triển Do quá trình crawl liệu thực luồng nên tốc độ có thể tăng tốc lập trình đa luồng Sử dụng Spark Streaming để phân tích cải thiện tớc độ ghi liệu Nhóm 31 – Bài tập lớn học phần 23 IT4931 – Lưu trữ xử lý liệu lớn DANH MỤC TÀI LIỆU THAM KHẢO https://demanejar.github.io/posts/mode-in-spark/ Bài giảng “Lưu trữ xử lý liệu lớn” – TS Trần Việt Trung https://www.youtube.com/watch?v=dLTI2HN9Ejg https://hadoop.apache.org/docs/r1.2.1/hdfs_design.html https://viblo.asia/p/tim-hieu-ve-hadoop-bJzKmOBXl9N https://viblo.asia/p/tim-hieu-ve-apache-spark-ByEZkQQW5Q0 https://www.youtube.com/watch?v=mafw2-CVYnA https://www.youtube.com/watch?v=hRtInGQhBxs&list=PLJlKGwy7Ac6ASmzZPjonzYsV4vPELf0x https://xuanthulab.net/gioi-thieu-va-cai-dat-elasticsearch-va-kibana-bangdocker.html 10 Giáo trình “Tổng quan liệu lớn (Big Data)” – Ks Nguyễn Công Hoan – Trung Tâm Thông Tin Khoa học thớng kê (Viện KHTK) Nhóm 31 – Bài tập lớn học phần 24