Kinh nghiệm làm việc với Big Data Đã bạn cảm thấy tải làm việc với Big Data chưa? Đã bạn phải ngồi hàng để transfer liệu từ server sang server khác để test thuật toán mình? Hay lúc chán chường nhìn script bắt đầu chạy hàng cuối phát sai đâu đó? Mình nghĩ tất bắt đầu làm việc với Big Data có cảm nhận Trong viết này, xin góp chút kinh nghiệm để làm việc với Big Data hiệu hơn, kể cá nhân hay làm việc nhóm Hãy lên plan thật tốt Khi bắt đầu dự án Big Data, Project manager đối mặt với nhiều định nên lựa chọn hệ database cho phù hợp với toán đặt ra, phát triển ngôn ngữ lập trình để dễ dàng phát triển bảo trì sau Khi chưa có nhiều kinh nghiệm, việc mắc sai lầm điều tất yếu Nhưng mấu chốt vấn đề có plan thật tốt cứu sống dự án thành viên sau Ví dụ, công ty chuyên xử lý liệu log time series, liệu sinh hàng lên đến hàng Gigabytes chuyện bình thường Bài toán đặt gồm hai phần Thứ nhất, làm để lưu trữ nhanh liệu xuất phát từ nhiều nguồn chung nơi lưu trữ mà không bị mát thông tin Thứ hai, tổng hợp nhanh liệu từ cấp độ phút sang sang ngày để thực phân tích liệu Lúc này, Project manager đứng trước hai lựa chọn để lưu trữ truy vấn nhanh thông tin: Sử dụng MongoDB Java: thành viên có kinh nghiệm hai công nghệ nên phát triển Sử dụng Kafka Spark: công nghệ đáp ứng nhu cầu toán đòi hỏi thời gian cập nhật công nghệ chưa có nhiều kinh nghiệm để phát triển Cuối cùng, ưu tiên việc cho sản phẩm nhanh chóng tự tin với kinh nghiệm đội nhóm hiên tại, Project manager định chạy dự án MongoDB Và định đáp ứng nhu cầu lâu dài gây nhiều rắc rối phiền toái dẫn đến thất bại toàn dự án Bên cạnh ưu điểm NoSQL system đảm bảo tính sẵn sàng hệ thống, MongoDB có nhiều khuyết điểm không phù hợp cho phân tích real-time Big Data Cơ chế MapReduce (MR) chậm, khó lập trình phân tán nhiều server Mặc dù cóAggregation thay cho MapReduce để cải thiện tốc độ tổng hợp liệu nhiều lỗi phát sinh liên quan đến quản lý nhớ chưa khắc phục Các phiên nâng cấp không tương thích ngược với phiên trước Dẫn đến nhiều khó khăn việc nâng cấp mã nguồn Nhiều hàm bị loại bỏ thay thế, ta khó sử dụng lại Database schema hay ràng buộc toàn vẹn, khiến cho liệu có nhiều thông tin bị trùng lặp không xác Việc thực thi phân tích số liệu dựa liệu không toàn vẹn (invalid data) dẫn đến sai sót chấp nhận Không thể chuyển qua sử dụng công nghệ khác Hệ thống chạy phát triển thời gian dài nên đập bỏ hết làm lại từ đầu Điều lại khiến cho việc bảo trì hệ thống lâu dài không đảm bảo, khó khăn việc kế thừa hệ thống Do vậy, bạn lên plan tốt chọn Kafka kết hợp với Spark để làm tảng phát triển Việc nâng cấp bảo trì dễ dàng Đừng tính dễ sử dụng thời gian phát triển nhanh mà đưa plan không tốt Nên rút data sample để thực nghiệm Khi làm việc với Big Data, điểm khác biệt thời gian Thời gian copy, thời gian chạy thuật toán, thời gian kiểm chứng, … kéo dài từ đến nhiều tiếng chí vài ngày Cách tốt quyên chữ Big rút trích small sample để thực nghiệm, nhanh dễ kiểm soát Nhỏ có nghĩa từ vài chục đến vài trăm dòng liệu, chạy trực tiếp kiểm tra phần mềm Excel Nhờ vậy, ta kiểm tra thuật toán có chạy hay không, tự tin implement liệu Big thật Cho nên, rút trích mẫu liệu quan sát thực nghiệm để đảm bảo tính đắn Ta tư theo kiểu quy nạp từ tiền đề, giả thuyết, chứng minh tổng quát tính đắn liệu Tập làm quen với debug IntelliJ debugger Trong giai đoạn thử việc, công ty đòi hỏi bạn phải hiểu người làm gì, cụ thể code họ viết Cách tốt học debug, thật kĩ cần thiết Khi vào công ty, không thích dùng debug tool cho trình làm việc với Python quen viết code tới đâu run tới debug tới dòng lệnh (command line), điều khiến chậm bước Khi tiếp tục dự án người khác, bạn khó theo kịp logic flow không debug Nhờ có debug bạn hiểu ý tưởng chức làm gì, lại có điều kiện này, xuất biến Từ đó, bạn có khả phát lỗi logic mà dự án gặp phải điểm chưa tối ưu để đưa cải tiến cho hệ thống Hãy chọn cho tool debug thuận lợi cho công việc bạn Eclipse, Netbeans, intelli J, iPython, Robomongo, Pycharm,… Đã làm big data cần phải có nhiều server Lập trình MapReduce với Python Điều nghe vô lý, công ty làm big data mà có server nghe thật nực cười Vấn đề server việc chịu tải I/O chịu tải xử lý phân tích liệu Như vậy, hệ hệ thống bị tải trì trệ Nhiều người nghĩ áp dụng Spark server đủ Xin thưa chuyện Spark công nghệ phụ thuộc nhiều vào RAM, nhiều RAM, nhiều server phát huy mạnh thuật toán để đáp ứng cho ứng dụng real-time Hãy phân tán nhiều server MapReduce chạy server làm tốn thêm tài nguyên hệ thống mà Hãy viết document thật kỹ Atlassian Confluence Nếu bạn lính công ty có sẵn chương trình training bạn thật may mắn Nhưng hầu hết công ty start-up không làm điều này, nên dẫn đến nhiều khó khăn cho người vào Document không coding có comment đầy đủ mà có đầy đủ tài liệu thiết kế hệ thống, định nghĩa chức cách thức cài đặt Nhờ có document mà ta hạn chế nhiều trở ngại người cũ người bước vào Hãy viết document cho thiết kế hệ thống từ buổi ban đầu Mô tả rõ tác vụ hệ thống, biểu diễn mạch lạc logic flow chương trình, phiên cập nhật tại,… Dữ liệu công nghệ phải đồng Local Staging and Production Nếu bạn Freelancer công việc bạn liên quan đến local remote server Mọi công đoạn phát triển, testing, debug hoàn thành local sau thay đổi push lên remote server để phiên production Tuy nhiên, với dự án lớn Big Data bạn có thêm bước trung gian staging (bước testing trước publish thành phiên production) Lúc này, bạn đối mặt với việc đồng hoá liệu Bước staging có ưu điểm bảo mật tránh mát liệu xảy cố, đồng thời đảm bảo tính sẵn sàng (available) phiên production khách hàng sử dụng Tuy nhiên, điều trở nên bất lợi làm việc với Big Data Như đề cập trên, khó khăn Big Data thời gian kiểm chứng đắn liệu Mặc dù thuật toán bạn chạy local staging chưa phiên production Sự đồng liệu phiên phần mềm hệ thống mối nguy hại tiềm tàng tương lai dễ dẫn đến nhiều sai sót, khó bảo trì Vì Data engineer, Data scientist System admin phối hợp với để lên plan đồng hoá liệu ngày Đồng thời, cài đặt môi trường phát triển cho phiên đồng Như vậy, khâu từ developing, released production trơn tru Học tập công nghệ thật nhanh Do more think less Lĩnh vực mà bạn theo đuổi có tốc độ thay đổi nhanh Những công nghệ bạn học Đại học trở nên lỗi thời Vậy làm để theo kịp công nghệ Câu trả lời kiến thức tảng thói quen (đam mê) vọc công nghệ Kiến thức tảng gồm toán học (đại số tuyến tính, toán rời rạc, giải tích, lý thuyết đồ thị, xác suất thống kê), lập trình (C/C++, hướng đối tượng, Java, C#) môn sở ngành (hệ điều hành, kiến trúc máy tính hợp ngữ, mạng máy tính, sở liệu, cấu trúc liệu giải thuật) Những kiến thức tạo cho bạn điểm tựa vựng chãi đối diện với đợt sóng lớn công nghệ Vì tất phát minh, sáng chế ngày dựa tảng khoa học Toán học giúp cho bạn làm việc hiệu logic, biết cách xếp công việc giải vấn đề mạch lạc Lập trình giúp bạn truyền tải ý tưởng vào máy tính Bản chất máy tính “trâu bò” Máy tính thực nhiều tác vụ đơn giản theo thị lập trình viên Nếu bạn thực tay tác vụ bạn cần, bạn cho máy tính làm theo ý bạn Các môn sở ngành giúp bạn có nhìn tổng quát hệ thống phần mềm, giúp bạn biết công cụ liên quan giải vấn đề ngành Vọc công nghệ mới, dường thói quen niềm đam mê xác định cho đường công nghệ thông tin Hồi xưa, chưa có báo mạng chuyên ngành, thường đọc tạp chí công nghệ “Làm bạn với máy vi tính”, “Echip”, “Thế giới vi tính”, “Thế giới Game”, … Mỗi lần có thủ thuật hay phần mềm hay, cài đặt làm thử Nhờ mà vòng tuần bắt kịp nhiều công nghệ lúc: git, pyspark, ipython, pandas, glassfish, node.js, bower, jira, stash, scala, mongodb, spark, sbt, maven, … Thật may mắn bạn vọc qua công nghệ lần, bạn có lợi nhiều người Do đó, lấy tảng kiến thức làm chỗ dựa, đừng đom đóm chạy theo công nghệ này, tool kia, lúc chợp lại tắt không vững vàng Hãy trau dồi công nghệ mới, công việc bắt buộc mà thích thú tìm tòi học hỏi Sẽ có lúc bạn cần tới nó, kiến thức không thừa