Мы начинаем аналитический проект на основе больших данных, и мы рассматриваем возможность принятия scala (typeafe stack). Я хотел бы знать различные scala API/проекты, которые доступны для работы с программами hasoop, map reduce.
Какие опции для hadoop на scala
Ответ 1
Определенно проверьте Scalding. Говоря как пользователь и случайный вкладчик, я нашел, что это очень полезный инструмент. API Scalding также должен быть очень совместим со стандартным API-интерфейсом Scala. Так же, как вы можете вызывать flatMap, map или groupBy в обычных коллекциях, вы можете сделать то же самое на обжигающих трубах, которые вы можете представить как распределенный список кортежей. Там также типизированная версия API, которая обеспечивает более надежные гарантии безопасности. Я не использовал Scoobi, но API кажется похожим на то, что у них есть.
Кроме того, есть еще несколько преимуществ:
- Scalding широко используется в производстве в Твиттере и был проверен в битве на наборах данных на базе Twitter.
- В нем есть несколько активных участников как внутри, так и за пределами Twitter, которые стремятся сделать это замечательным.
- Он совместим с вашими каскадными заданиями.
- В дополнение к типизированному API он имеет API полей, который может быть более знаком пользователям R и фреймворкам данных.
- Он обеспечивает надежную Матричную библиотеку.
Ответ 2
У меня был успех с Scoobi. Простое использование, строго типизированное, скрывает большую часть беспорядка Hadoop (делая так, как автоматическая сериализация ваших объектов для вас) и полностью Scala. Одна из вещей, которые мне нравятся в его API, заключается в том, что дизайнеры хотели, чтобы коллекции Scoobi чувствовали себя так же, как и стандартные коллекции Scala, поэтому вы фактически используете их одинаково, за исключением того, что операции выполняются на Hadoop вместо локального. Это фактически позволяет легко переключаться между коллекциями Scoobi и коллекциями Scala во время разработки и тестирования.
Я также использовал Scrunch, который построен поверх Java Crunch. Я не использовал его некоторое время, но теперь он является частью Apache.
Ответ 3
Twitter вкладывает много усилий в Scalding, включая красивую библиотеку Matrix, которая может использоваться для различных задач машинного обучения. Мне тоже нужно дать Скуби попробовать.
Для полноты, если вы не привязаны к MapReduce, посмотрите проект Spark. Он работает намного лучше во многих сценариях, в том числе в их порту Hive to Spark, соответственно называемом Shark. Как частый пользователь Hive, я в восторге от этого.
Ответ 4
Первые два, которые я, скорее всего, расследую, Scalding (который строится поверх Cascading) и Scoobi. Я тоже не использовал, но Scalding, в частности, выглядит так, как будто он обеспечивает действительно хороший API.
Ответ 5
Другим вариантом является Stratosphere, он предлагает Scala API, который преобразует типы Scala в внутренние типы данных Stratosphere.
API очень похож на Scalding, но Stratosphere изначально поддерживает расширенные потоки данных (поэтому вам не нужно связывать MapReduce Jobs). У вас будет намного лучшая производительность с Стратосферой, чем с Скальдингом.
Стратосфера не работает на Hadoop MapReduce, но на Hadoop YARN, так что вы можете используйте существующий кластер YARN.
Это пример подсчета слов в Стратосфере (с API Scala):
val input = TextFile(textInput)
val words = input.flatMap { line => line.split(" ") }
val counts = words
.groupBy { word => word }
.count()
val output = counts.write(wordsOutput, CsvOutputFormat())
val plan = new ScalaPlan(Seq(output))