우리는 HDFS에서 MinIO와 같은 최신 객체 스토리지로 마이그레이션하기 위해 우리를 찾아오는 고객의 수에 여전히 놀랐습니다. 이제 우리는 모두가 전환을 완료했다고 생각했지만 매주 전환을 결정한 고도로 기술적인 주요 조직과 대화를 나눕니다.
이러한 논의에는 마이그레이션 후에도 유지 관리하고 싶은 인프라 요소가 포함되는 경우가 많습니다. HDFS 생태계에서 나온 프레임워크와 소프트웨어는 개발자의 동의가 많고 여전히 최신 데이터 스택에 자리잡고 있습니다. 실제로 우리는 HDFS 생태계에서 많은 좋은 결과가 나왔다고 자주 말했습니다. 근본적인 문제는 밀접하게 결합된 스토리지와 컴퓨팅이 반드시 빅 데이터 시대의 도구와 서비스와는 상관이 없다는 것입니다.
이 블로그 게시물에서는 가치가 있는 도구와 서비스를 전면 교체하지 않고도 마이그레이션을 수행할 수 있는 방법에 중점을 둘 것입니다. 현실은 인프라를 현대화하지 않으면 조직에 필요한 AI/ML의 발전을 이룰 수 없지만 거기에 도달하기 위해 모든 것을 다 쏟아부을 필요는 없다는 것입니다.
우리는 이미 몇 가지 일을 겪었습니다.
컴퓨팅 노드: Kubernetes는 컴퓨팅 노드에서 상태 비저장 Apache Spark 및 Apache Hive 컨테이너를 효율적으로 관리하여 최적의 리소스 활용도와 동적 확장을 보장합니다.
스토리지 레이어: MinIO
액세스 레이어: MinIO 개체 스토리지에 대한 모든 액세스는 S3 API를 통해 통합되어 저장된 데이터와 상호 작용하기 위한 원활한 인터페이스를 제공합니다.
보안 계층: 데이터 보안이 가장 중요합니다. MinIO는 객체별 키를 사용하여 모든 데이터를 암호화하여 무단 액세스로부터 강력한 보호를 보장합니다.
ID 관리: MinIO Enterprise는 WSO2, Keycloak, Okta, Ping Identity와 같은 ID 공급자와 완벽하게 통합되어 애플리케이션이나 사용자가 인증할 수 있습니다.
조직에서 최신 데이터 스택의 거의 모든 요소인 개체 스토리지와 통합할 수 있는 Hive, YARN 및 기타 Hadoop 생태계 데이터 제품을 유지할 수 있도록 완전히 현대화된 Hadoop 대체 제품입니다.
S3a는 Hadoop에서 벗어나려는 애플리케이션을 위한 필수 엔드포인트로, Hadoop 에코시스템 내의 다양한 애플리케이션과의 호환성을 제공합니다. 2006년부터 S3 호환 객체 스토리지 백엔드는 기본 기능으로 Hadoop 생태계 내의 수많은 데이터 플랫폼에 원활하게 통합되었습니다. 이 통합은 새로운 기술에 S3 클라이언트 구현을 통합한 것으로 거슬러 올라갑니다.
모든 Hadoop 관련 플랫폼에서 hadoop-aws
모듈과 aws-java-sdk-bundle
채택하는 것이 표준 관행이므로 S3 API에 대한 강력한 지원이 보장됩니다. 이 표준화된 접근 방식을 통해 HDFS 및 S3 스토리지 백엔드에서 애플리케이션을 원활하게 전환할 수 있습니다. 적절한 프로토콜을 지정하기만 하면 개발자는 Hadoop에서 최신 개체 스토리지로 애플리케이션을 쉽게 전환할 수 있습니다. S3의 프로토콜 체계는 s3a://로 표시되고, HDFS의 경우 hdfs://로 표시됩니다.
Hadoop에서 최신 객체 스토리지로 마이그레이션할 때의 이점에 대해 길게 이야기하는 것이 가능합니다. 이 글을 읽고 계시다면 Hadoop의 AI 발전과 기타 최신 데이터 제품과 같은 레거시 플랫폼에서 마이그레이션하지 않으면 불가능할 것이라는 사실을 이미 대부분 알고 계실 것입니다. 그 이유는 성능과 규모로 귀결됩니다.
처리되는 데이터의 양과 현재 요구되는 작업의 복잡성에 맞서기 위해 현대 워크로드에 뛰어난 성능이 필요하다는 점에는 의심의 여지가 없습니다. 성능이 허영 벤치마킹에 관한 것이 아니라 엄격한 요구 사항인 경우 Hadoop 대체를 위한 경쟁자 분야
마이그레이션을 추진하는 또 다른 요소는 클라우드 기반 규모입니다. 클라우드의 개념이 물리적 위치라기보다는
이 개념의 가장 중요한 부분은 공급업체 종속에서 벗어나서 얻을 수 있는 경제적 이점입니다. 이를 통해 조직은 특정 워크로드에 대해 동급 최고의 옵션을 선택하고 선택할 수 있습니다. 말할 것도 없이, 데이터를 보호하기 위해 별도의 데이터 복사본 3개를 유지 관리하는 것은 더 이상 과거의 일입니다.
아키텍처의 세부 사항을 살펴보기 전에 몇 가지 구성 요소를 준비하고 실행해야 합니다. Hadoop에서 마이그레이션하려면 먼저 Hadoop을 설치해야 합니다. 이 경험을 시뮬레이션하려면 여기에서 Hadoop의 Hortonworks 배포판을 설정하여 이 튜토리얼을 시작할 수 있습니다.
그렇지 않은 경우에는 다음 설치 단계를 시작할 수 있습니다.
Ambari 설정: 다음,
Apache Spark 설치: Spark는 대규모 데이터 처리에 필수적입니다. 따라가다
MinIO 설치 : 환경에 따라 두 가지 설치 방법 중 하나를 선택할 수 있습니다.
이러한 요소를 성공적으로 설치한 후 HDFS 대신 MinIO를 사용하도록 Spark 및 Hive를 구성할 수 있습니다. Ambari UI http://<ambari-server>:8080/ 으로 이동하여 기본 자격 증명( username: admin, password: admin
을 사용하여 로그인합니다.
Ambari에서 아래 스크린샷과 같이 서비스, HDFS, 구성 패널로 이동합니다. 이 섹션에서는 HDFS 대신 MinIO와 함께 S3a를 사용하도록 Ambari를 구성합니다.
아래로 스크롤하여 Custom core-site
로 이동합니다. 여기에서 S3a를 구성합니다.
sudo pip install yq alias kv-pairify='yq ".configuration[]" | jq ".[]" | jq -r ".name + \"=\" + .value"'
여기에서 구성은 인프라에 따라 달라집니다. 그러나 아래는 core-site.xml
12개 노드와 1.2TiB 메모리에서 실행되는 MinIO로 S3a를 구성하는 방법을 나타낼 수 있습니다.
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
이 마이그레이션 패턴에 대한 문서를 확인하여 탐색할 수 있는 몇 가지 최적화가 있습니다.
구성에 만족하면 모두를 다시 시작하십시오.
또한 Spark2 구성 패널로 이동해야 합니다.
Custom spark-defaults
까지 아래로 스크롤하고 다음 속성을 추가하여 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
구성 변경 사항이 적용된 후 모두 다시 시작하십시오.
Hive 패널로 이동하여 구성을 완료합니다.
Custom hive-site
까지 아래로 스크롤하고 다음 속성을 추가합니다.
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
더 자세한 구성 정보를 확인할 수 있습니다.
이제 통합을 테스트할 수 있습니다.
이 블로그 게시물에서는 기존 시스템을 완전히 점검할 필요 없이 Hadoop에서 마이그레이션하는 현대적인 접근 방식을 간략하게 설명했습니다. Kubernetes를 활용하여 Apache Spark 및 Apache Hive를 관리하고 상태 저장 개체 스토리지를 위해 MinIO를 통합함으로써 조직은 동적 확장 및 효율적인 리소스 활용을 지원하는 균형 잡힌 아키텍처를 달성할 수 있습니다. 이 설정은 데이터 처리 환경의 기능을 유지하고 향상시켜 더욱 강력하고 미래에도 사용할 수 있도록 해줍니다.
MinIO를 사용하면 상용 하드웨어에서 고성능을 제공하고 삭제 코딩을 통해 비용을 절감하며(Hadoop 데이터 복제의 중복성 제거) 공급업체 종속 및 Cassandra 기반 메타데이터 저장소 필요성과 같은 제한 사항을 우회하는 스토리지 솔루션의 이점을 누릴 수 있습니다. 이러한 이점은 기존 데이터 시스템의 핵심 요소를 폐기하지 않고 고급 AI/ML 워크로드를 활용하려는 조직에 매우 중요합니다.
조직의 고유한 요구 사항에 맞게 이 마이그레이션 전략을 맞춤화할 수 있는 방법에 대한 자세한 토론이나 구체적인 지침이 필요하면 언제든지 문의하세요. [email protected]로 이메일을 보내든 커뮤니티를 통해서든