Tuesday 30 October 2012

Пост 1. Взгляд автора на Hadoop и Hive

Итак, наконец-таки я начал делать то что хотел сделать очень давно – завел блог в котором планирую рассказывать о Hadoop и Hive (мне как человеку из мира баз данных hive ближе всего в контексте высокоуровневых языков). Сразу хочу спозиционировать данный ресурс, как описывающий «внутренний мир» hive, мне не очень хочется рассказывать о том как писать SQL  HQL, обо всем этом можно прочитать здесь, я планирую описать операции с  хранилищем с точки зрения Map Reduce и HDFS (то есть hadoop). Откуда он взялся и почему в последнее время набирает такую популярность? Существует много мнений озвучу свое. Не так давно наткнулся на замечательную статью на хабре, если вкратце там идет описание о том что раньше в ВУЗах (американских) информатике учили лучше, программировали на С, было множество фундаментальных курсов, но расплатой за это было то что из 100 человек до финиша доходило 20, остальных отчисляли. Когда же ИТ перестало быть «глупым» увлечением фанатиков, а стало частью бизнеса (или отдельным бизнесом), на выпускников подобных специальностей упало пристальное внимание множества фирм. Но людей было мало, по крайней мере меньше чем требовалось, и коммерческие организации завыли, что некому писать очередную бухгалтерскую программу. Учебные заведения сопротивлялись, но в итоге пошли «в ногу со временим» и убрали ряд фундаментальных курсов, заменили С на Java и.т.п. Тем самым вырос поток, выпускаемый из альма-матер в мир денег и бухгалтерских приложений (до конца доживало 90 из 100). Отсюда получили большое количество «быдло программистов», которые начали плодить глючные приложения, прочитав что то вроде «Java для начинающих», отсюда и миф о том что Java простой и плохой язык. Скажу сразу я не большой спец по Java (я один из быдло программистов, но прогающий для души, а не для предприятия), но весьма уважаемые мною люди неоднократно говорили, что Java не «медленный язык» на котором ничего толкового написать нельзя, а мощный инструмент которым мало кто умеет правильно пользоваться. Но впрочем что я о Java да о Java? Давайте поговорим о том как масштабировать приложения. Начинается все с него, с ноутбука. После разработки приложение переносится на сервер, допустим стареньки и слабенький. Потом после того как нагрузка выросла – переносим на более или менее приличный сервер наше приложение. Нагрузка выросла еще больше... что делать? Дальше можно купить за большие деньги дорогой сервер (масштабирование по вертикали), либо рядышком поставить такой же сервер и распределить нагрузку между ними (масштабирование по горизонтали). Но приложение в случае горизонтального масштабирования должно знать о том, что оно распределенное. Тут на помощь приходит MPI (или PVM). Если вы когда-либо использовали MPI, вы понимаете, что нередко большой проект становился линиями Манергейма. Писать под много серверов сложно (чем больше серверов, тем сложнее программа). Это первый момент. Второй момент – это не эластичность программы. Есть программа написана под 3 сервера, она будет работать на 3 серверах, для того что бы распараллелить на 4 надо переписывать программу (еще один проект со своими рисками). Даже если вы все же решились запустить MPI проект стоит иметь ввиду, то что программист будет стоить очень и очень хороших денег. Альтернативы? Альтернатива – MapReduce. MapReduce – принцип распределенных приложений (одно приложение, запущенное на множестве серверов). Плюсы: легкая масштабируемость – пишем код, запускаем на 16 серверах. Выросли из 16 серваков, доставили еще 8, запускаем туже самую программу на 24 и она работает на всех машинах кластера (а не на 16 как это было бы в случае MPI). Второй плюс то что в имплементации hadoop разрабатывать достаточно просто,ну а hive еще больше упрощает процесс разработки. Третий и наверное основной плюс – масштабируемость на большое количество вычислительных узлов в yahoo,например, стоит кластер около 40 000 нод, сколько у гугла даже боюсь представить. Ура! Ну а минусы? Чудес не бывает – MapReduce медленнее MPI. Как правило, мы платим производительностью. При прочих равных MapReduce,скорее всего, будет работать медленнее MPI.
Итак, все таки что же такое Hadoop?
Hadoop = MapReduce + HDFS
HDFS () – распределенная файловая система. Одна логическая файловая система на множестве серверов.
MapReduce – распределенные вычисления над HDFS.
Ну и естественно, hadoop это Sharing Nothing система. Код доставляется к данным.
А что же такое Hive? Hive – некий переводчик с HQL (язык похожий на SQL) в MapReduce. Когда вы пишете HQL, hive переводит его в MapReduce и выполняет (соответственно используя всю мощь параллельных вычислений).
Вот как то так. Далее я планирую рассказывать о том как именно выполняется HQL и о том какие особенности разработки под Hive существуют. Не стесняйтесь задавать вопросы, если таковые появятся!

No comments:

Post a Comment