Chúng tôi vẫn ngạc nhiên về số lượng khách hàng đến với chúng tôi muốn chuyển từ HDFS sang bộ lưu trữ đối tượng hiện đại như MinIO. Đến bây giờ chúng tôi nghĩ rằng mọi người đã thực hiện quá trình chuyển đổi, nhưng hàng tuần, chúng tôi đều nói chuyện với một tổ chức lớn, có kỹ thuật cao đã quyết định thực hiện quá trình chuyển đổi.
Thông thường, trong các cuộc thảo luận đó, có những yếu tố cơ sở hạ tầng mà họ muốn duy trì sau khi di chuyển. Có những khung và phần mềm xuất phát từ hệ sinh thái HDFS được nhiều nhà phát triển mua và vẫn có một vị trí trong ngăn xếp dữ liệu hiện đại. Thật vậy, chúng tôi thường nói rằng hệ sinh thái HDFS đã mang lại rất nhiều điều tốt đẹp. Vấn đề cơ bản là việc lưu trữ và tính toán được kết hợp chặt chẽ không nhất thiết phải có các công cụ và dịch vụ xuất phát từ kỷ nguyên Dữ liệu lớn.
Bài đăng trên blog này sẽ tập trung vào cách bạn có thể thực hiện quá trình di chuyển đó mà không cần trích xuất và thay thế các công cụ và dịch vụ có giá trị. Thực tế là nếu bạn không hiện đại hóa cơ sở hạ tầng của mình, bạn không thể đạt được những tiến bộ về AI/ML mà tổ chức của bạn yêu cầu, nhưng bạn không cần phải vứt bỏ mọi thứ để đạt được điều đó.
Chúng tôi đã trải qua một số
Nút điện toán: Kubernetes quản lý hiệu quả các thùng chứa Apache Spark và Apache Hive không trạng thái trên các nút điện toán, đảm bảo sử dụng tài nguyên tối ưu và mở rộng quy mô linh hoạt.
Lớp lưu trữ: MinIO
Lớp truy cập: Tất cả quyền truy cập vào bộ lưu trữ đối tượng MinIO được thống nhất thông qua API S3, cung cấp giao diện liền mạch để tương tác với dữ liệu được lưu trữ.
Lớp bảo mật: Bảo mật dữ liệu là điều tối quan trọng. MinIO mã hóa tất cả dữ liệu bằng cách sử dụng khóa cho mỗi đối tượng, đảm bảo khả năng bảo vệ mạnh mẽ chống lại sự truy cập trái phép.
Quản lý danh tính: MinIO Enterprise tích hợp đầy đủ với các nhà cung cấp danh tính như WSO2, Keycloak, Okta, Ping Identity để cho phép ứng dụng hoặc người dùng xác thực.
Một sự thay thế được hiện đại hóa hoàn toàn cho Hadoop, cho phép tổ chức của bạn giữ Hive, YARN và bất kỳ sản phẩm dữ liệu hệ sinh thái Hadoop nào khác có thể tích hợp với bộ lưu trữ đối tượng, hầu hết mọi thứ trong ngăn xếp dữ liệu hiện đại.
S3a là điểm cuối thiết yếu cho các ứng dụng muốn chuyển đổi khỏi Hadoop, mang lại khả năng tương thích với nhiều ứng dụng trong hệ sinh thái Hadoop. Kể từ năm 2006, các chương trình phụ trợ lưu trữ đối tượng tương thích với S3 đã được tích hợp liền mạch vào nhiều nền tảng dữ liệu trong hệ sinh thái Hadoop như một tính năng mặc định. Sự tích hợp này bắt nguồn từ việc kết hợp triển khai ứng dụng khách S3 trong các công nghệ mới nổi.
Trên tất cả các nền tảng liên quan đến Hadoop, việc áp dụng mô- hadoop-aws
và aws-java-sdk-bundle
là thông lệ tiêu chuẩn, đảm bảo hỗ trợ mạnh mẽ cho API S3. Cách tiếp cận được tiêu chuẩn hóa này tạo điều kiện thuận lợi cho việc chuyển đổi suôn sẻ các ứng dụng từ phần phụ trợ lưu trữ HDFS và S3. Chỉ cần chỉ định giao thức phù hợp, các nhà phát triển có thể dễ dàng chuyển đổi ứng dụng từ Hadoop sang bộ lưu trữ đối tượng hiện đại. Sơ đồ giao thức cho S3 được biểu thị bằng s3a://, trong khi đối với HDFS, nó được ký hiệu là hdfs://.
Có thể nói dài dòng về lợi ích của việc di chuyển khỏi Hadoop sang bộ lưu trữ đối tượng hiện đại. Nếu bạn đang đọc điều này, thì phần lớn bạn đã biết rằng nếu không di chuyển khỏi các nền tảng cũ như Hadoop thì những tiến bộ trong AI và các sản phẩm dữ liệu hiện đại khác có thể sẽ không còn nữa. Lý do chắt lọc từ hiệu suất và quy mô.
Hoàn toàn không nghi ngờ gì rằng khối lượng công việc hiện đại đòi hỏi hiệu suất vượt trội để cạnh tranh với khối lượng dữ liệu đang được xử lý và độ phức tạp của các nhiệm vụ hiện đang được yêu cầu. Khi hiệu suất không chỉ là điểm chuẩn phù phiếm mà còn là một yêu cầu khắt khe, thì sẽ có nhiều đối thủ cạnh tranh để thay thế Hadoop
Yếu tố khác thúc đẩy quá trình di chuyển về phía trước là quy mô gốc của đám mây. Khi khái niệm đám mây ít thiên về vị trí vật lý mà thiên về
Một phần của khái niệm này là lợi ích kinh tế đến từ việc giải phóng khỏi sự khóa chặt của nhà cung cấp, cho phép tổ chức lựa chọn các tùy chọn tốt nhất cho khối lượng công việc cụ thể. Chưa kể, việc phát hành ba bản sao dữ liệu riêng biệt để bảo vệ nó, đã là quá khứ với
Trước khi đi sâu vào chi tiết cụ thể về kiến trúc của chúng tôi, bạn sẽ cần thiết lập và chạy một số thành phần. Để di chuyển khỏi Hadoop, rõ ràng bạn phải cài đặt nó ngay từ đầu. Nếu muốn mô phỏng trải nghiệm này, bạn có thể bắt đầu hướng dẫn này bằng cách thiết lập Phân phối Hortonworks của Hadoop tại đây .
Nếu không, bạn có thể bắt đầu với các bước cài đặt sau:
Thiết lập Ambari: Tiếp theo,
Cài đặt Apache Spark: Spark rất cần thiết để xử lý dữ liệu quy mô lớn. Theo
Cài đặt MinIO : Tùy thuộc vào môi trường của bạn, bạn có thể chọn giữa hai phương pháp cài đặt:
Sau khi cài đặt thành công các phần tử này, bạn có thể định cấu hình Spark và Hive để sử dụng MinIO thay vì HDFS. Điều hướng đến Giao diện người dùng Ambari http://<ambari-server>:8080/ và đăng nhập bằng thông tin xác thực mặc định: username: admin, password: admin
,
Trong Ambari, điều hướng đến các dịch vụ, sau đó là HDFS, sau đó đến bảng Cấu hình như trong ảnh chụp màn hình bên dưới. Trong phần này, bạn đang định cấu hình Ambari để sử dụng S3a với MinIO thay vì HDFS.
Cuộn xuống và điều hướng đến Custom core-site
. Đây là nơi bạn sẽ cấu hình S3a.
sudo pip install yq alias kv-pairify='yq ".configuration[]" | jq ".[]" | jq -r ".name + \"=\" + .value"'
Từ đây, cấu hình của bạn sẽ phụ thuộc vào cơ sở hạ tầng của bạn. Tuy nhiên, phần dưới đây có thể là một cách để core-site.xml
định cấu hình S3a với MinIO chạy trên 12 nút và 1,2TiB bộ nhớ.
cat ${HADOOP_CONF_DIR}/core-site.xml | kv-pairify | grep "mapred" mapred.maxthreads.generate.mapoutput=2 # Num threads to write map outputs mapred.maxthreads.partition.closer=0 # Asynchronous map flushers mapreduce.fileoutputcommitter.algorithm.version=2 # Use the latest committer version mapreduce.job.reduce.slowstart.completedmaps=0.99 # 99% map, then reduce mapreduce.reduce.shuffle.input.buffer.percent=0.9 # Min % buffer in RAM mapreduce.reduce.shuffle.merge.percent=0.9 # Minimum % merges in RAM mapreduce.reduce.speculative=false # Disable speculation for reducing mapreduce.task.io.sort.factor=999 # Threshold before writing to drive mapreduce.task.sort.spill.percent=0.9 # Minimum % before spilling to drive
Có khá nhiều cách tối ưu hóa có thể được khám phá bằng cách xem tài liệu về mẫu di chuyển này
Khởi động lại tất cả khi bạn hài lòng với cấu hình.
Bạn cũng cần điều hướng đến bảng cấu hình Spark2.
Cuộn xuống Mặc Custom spark-defaults
và thêm Thuộc tính sau để định cấu hình với MinIO:
spark.hadoop.fs.s3a.access.key minio spark.hadoop.fs.s3a.secret.key minio123 spark.hadoop.fs.s3a.path.style.access true spark.hadoop.fs.s3a.block.size 512M spark.hadoop.fs.s3a.buffer.dir ${hadoop.tmp.dir}/s3a spark.hadoop.fs.s3a.committer.magic.enabled false spark.hadoop.fs.s3a.committer.name directory spark.hadoop.fs.s3a.committer.staging.abort.pending.uploads true spark.hadoop.fs.s3a.committer.staging.conflict-mode append spark.hadoop.fs.s3a.committer.staging.tmp.path /tmp/staging spark.hadoop.fs.s3a.committer.staging.unique-filenames true spark.hadoop.fs.s3a.committer.threads 2048 # number of threads writing to MinIO spark.hadoop.fs.s3a.connection.establish.timeout 5000 spark.hadoop.fs.s3a.connection.maximum 8192 # maximum number of concurrent conns spark.hadoop.fs.s3a.connection.ssl.enabled false spark.hadoop.fs.s3a.connection.timeout 200000 spark.hadoop.fs.s3a.endpoint http://minio:9000 spark.hadoop.fs.s3a.fast.upload.active.blocks 2048 # number of parallel uploads spark.hadoop.fs.s3a.fast.upload.buffer disk # use disk as the buffer for uploads spark.hadoop.fs.s3a.fast.upload true # turn on fast upload mode spark.hadoop.fs.s3a.impl org.apache.hadoop.spark.hadoop.fs.s3a.S3AFileSystem spark.hadoop.fs.s3a.max.total.tasks 2048 # maximum number of parallel tasks spark.hadoop.fs.s3a.multipart.size 512M # size of each multipart chunk spark.hadoop.fs.s3a.multipart.threshold 512M # size before using multipart uploads spark.hadoop.fs.s3a.socket.recv.buffer 65536 # read socket buffer hint spark.hadoop.fs.s3a.socket.send.buffer 65536 # write socket buffer hint spark.hadoop.fs.s3a.threads.max 2048 # maximum number of threads for S3A
Khởi động lại tất cả sau khi thay đổi cấu hình đã được áp dụng.
Điều hướng đến bảng Hive để hoàn tất cấu hình.
Cuộn xuống Custom hive-site
và thêm Thuộc tính sau:
hive.blobstore.use.blobstore.as.scratchdir=true hive.exec.input.listing.max.threads=50 hive.load.dynamic.partitions.thread=25 hive.metastore.fshandler.threads=50 hive.mv.files.threads=40 mapreduce.input.fileinputformat.list-status.num-threads=50
Bạn có thể tìm thêm thông tin cấu hình tinh chỉnh
Thế là xong, bây giờ bạn có thể kiểm tra sự tích hợp của mình.
Bài đăng trên blog này đã phác thảo một cách tiếp cận hiện đại để di chuyển từ Hadoop mà không cần phải đại tu hoàn toàn các hệ thống hiện có của bạn. Bằng cách tận dụng Kubernetes để quản lý Apache Spark và Apache Hive, đồng thời tích hợp MinIO để lưu trữ đối tượng trạng thái, các tổ chức có thể đạt được kiến trúc cân bằng hỗ trợ mở rộng quy mô linh hoạt và sử dụng tài nguyên hiệu quả. Thiết lập này không chỉ giữ lại mà còn nâng cao khả năng của môi trường xử lý dữ liệu của bạn, làm cho chúng trở nên mạnh mẽ hơn và phù hợp với tương lai.
Với MinIO, bạn được hưởng lợi từ giải pháp lưu trữ mang lại hiệu suất cao trên phần cứng phổ thông, giảm chi phí thông qua mã hóa xóa (loại bỏ sự dư thừa trong quá trình sao chép dữ liệu của Hadoop) và bỏ qua các hạn chế như khóa nhà cung cấp và nhu cầu lưu trữ siêu dữ liệu dựa trên Cassandra. Những lợi thế này rất quan trọng đối với các tổ chức đang tìm cách tận dụng khối lượng công việc AI/ML nâng cao mà không loại bỏ các yếu tố cốt lõi của hệ thống dữ liệu hiện có của họ.
Vui lòng liên hệ để thảo luận chi tiết hơn hoặc hướng dẫn cụ thể về cách bạn có thể điều chỉnh chiến lược di chuyển này để đáp ứng nhu cầu riêng của tổ chức mình. Cho dù qua email tại [email protected] hoặc trên cộng đồng của chúng tôi