Мы до сих пор поражаемся количеству клиентов, которые приходят к нам с желанием перейти с HDFS на современные объектные хранилища, такие как MinIO. Мы уже думали, что все осуществили переход, но каждую неделю мы обращаемся к крупной, высокотехнологичной организации, которая решила осуществить переход.
Довольно часто в этих обсуждениях упоминаются элементы их инфраструктуры, которые они хотят сохранить после миграции. Существуют платформы и программное обеспечение, вышедшие из экосистемы HDFS, которые пользуются большой популярностью среди разработчиков и все еще имеют место в современном стеке данных. Действительно, мы часто говорили, что экосистема HDFS принесла много хорошего. Фундаментальная проблема заключается в тесной связи между хранилищем и вычислениями, а не обязательно с инструментами и услугами, пришедшими из эпохи больших данных.
В этом сообщении блога основное внимание будет уделено тому, как можно выполнить эту миграцию, не удаляя и не заменяя ценные инструменты и сервисы. Реальность такова, что если вы не модернизируете свою инфраструктуру, вы не сможете добиться прогресса в области искусственного интеллекта и машинного обучения, который требуется вашей организации, но вам не нужно бросать все усилия, чтобы добиться этого.
Мы уже прошли через некоторые
Вычислительные узлы. Kubernetes эффективно управляет контейнерами Apache Spark и Apache Hive без сохранения состояния на вычислительных узлах, обеспечивая оптимальное использование ресурсов и динамическое масштабирование.
Уровень хранения: MinIO
Уровень доступа: весь доступ к объектному хранилищу MinIO унифицирован через API S3, обеспечивая удобный интерфейс для взаимодействия с хранимыми данными.
Уровень безопасности: безопасность данных имеет первостепенное значение. MinIO шифрует все данные с использованием ключей каждого объекта, обеспечивая надежную защиту от несанкционированного доступа.
Управление идентификацией: MinIO Enterprise полностью интегрируется с поставщиками удостоверений, такими как WSO2, Keycloak, Okta, Ping Identity, что позволяет приложениям или пользователям проходить аутентификацию.
Полностью модернизированная замена Hadoop, которая позволяет вашей организации использовать Hive, YARN и любой другой продукт данных экосистемы Hadoop, который можно интегрировать с объектным хранилищем, которое представляет собой практически все, что есть в современном стеке данных.
S3a — это важная конечная точка для приложений, стремящихся перейти от Hadoop, обеспечивающая совместимость с широким спектром приложений в экосистеме Hadoop. С 2006 года S3-совместимые серверные системы объектного хранилища были легко интегрированы в многочисленные платформы данных в экосистеме Hadoop в качестве функции по умолчанию. Эта интеграция восходит к включению реализации клиента S3 в новые технологии.
На всех платформах, связанных с Hadoop, внедрение модуля hadoop-aws
и aws-java-sdk-bundle
является стандартной практикой, обеспечивающей надежную поддержку API S3. Этот стандартизированный подход облегчает плавный переход приложений с HDFS и серверных хранилищ S3. Просто указав соответствующий протокол, разработчики могут легко переключать приложения с Hadoop на современное объектное хранилище. Схема протокола для S3 обозначается как s3a://, а для HDFS — как hdfs://.
Можно долго говорить о преимуществах перехода с Hadoop на современное объектное хранилище. Если вы читаете это, вы уже в значительной степени осознаете, что без перехода с устаревших платформ, таких как Hadoop, достижения в области искусственного интеллекта и других современных продуктов обработки данных, скорее всего, будут исключены. Причина сводится к производительности и масштабу.
Нет никаких сомнений в том, что современные рабочие нагрузки требуют выдающейся производительности, чтобы конкурировать с объемом обрабатываемых данных и сложностью задач, которые сейчас требуются. Когда производительность — это не просто тщеславный тест, а жесткое требование, поле претендентов на замену Hadoop
Другим элементом, способствующим миграции, является облачное масштабирование. Когда концепция облака связана не столько с физическим местоположением, сколько с
Неотъемлемой частью этой концепции являются экономические выгоды, возникающие в результате освобождения от привязки к поставщику, что позволяет организации выбирать лучшие в своем классе варианты для конкретных рабочих нагрузок. Не говоря уже о том, что отказ от хранения трех отдельных копий данных для их защиты остался в прошлом.
Прежде чем углубляться в особенности нашей архитектуры, вам необходимо настроить и запустить несколько компонентов. Чтобы перейти с Hadoop, вам, очевидно, придется сначала установить его. Если вы хотите смоделировать этот опыт, вы можете начать работу с этим руководством, настроив дистрибутив Hadoop Hortonworks здесь .
В противном случае вы можете начать со следующих шагов установки:
Настройте Ambari: Далее,
Установите Apache Spark: Spark необходим для обработки крупномасштабных данных. Следовать
Установите MinIO : в зависимости от вашей среды вы можете выбрать один из двух подходов к установке:
После успешной установки этих элементов вы можете настроить Spark и Hive для использования MinIO вместо HDFS. Перейдите к пользовательскому интерфейсу Ambari http://<ambari-server>:8080/ и войдите в систему, используя учетные данные по умолчанию: username: admin, password: admin
,
В Ambari перейдите к службам, затем к HDFS, а затем к панели «Конфигурации», как показано на снимке экрана ниже. В этом разделе вы настраиваете Ambari для использования S3a с MinIO вместо HDFS.
Прокрутите вниз и перейдите к Custom core-site
. Здесь вы настроите S3a.
sudo pip install yq alias kv-pairify='yq ".configuration[]" | jq ".[]" | jq -r ".name + \"=\" + .value"'
Отсюда ваша конфигурация будет зависеть от вашей инфраструктуры. Но приведенное ниже может представлять собой способ с помощью core-site.xml
настроить S3a с MinIO, работающим на 12 узлах и 1,2 ТиБ памяти.
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] или в нашем сообществе.