Есть ли потеря функциональности потоковых заданий в hbase / hadoop по сравнению с использованием java? - PullRequest
3 голосов
/ 02 октября 2011

Извините, если это основной вопрос. Я читаю книгу о hbase и обучении, но большинство примеров в книге (и в том числе онлайн), как правило, используют Java (я думаю, потому что hbase является родным для java). Есть несколько примеров Python, и я знаю, что могу получить доступ к hbase с помощью Python (используя Thrift или другие модули), но мне интересно узнать о дополнительных функциях?

Например, hbase имеет функцию «сопроцессора», которая отправляет данные туда, где вы выполняете вычисления. Работает ли этот тип с python или другими приложениями, которые используют потоковые задания hadoop? Кажется, с Java, он может знать, что вы делаете и управлять потоком данных соответственно, но как это работает с потоковой передачей? Если это не работает, есть ли способ получить этот тип функциональности (через потоковую передачу без переключения на другой язык)?

Может быть, еще один способ задать вопрос: что может сделать не Java-программист, чтобы получить все преимущества функций hadoop при потоковой передаче?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 06 октября 2011

Насколько я знаю, вы говорите о 2 (или более) совершенно разных концепциях.

" Hadoop Streaming " предназначен для потоковой передачи данных через ваш исполняемый файл (независимо от вашеговыбор языка программирования).При использовании потоковой передачи не может быть никакой потери функциональности, поскольку функциональность, в основном, заключается в отображении / сокращении данных, которые вы получаете из потока hadoop.

Для части hadoop вы можете даже использовать языки запросов данных больших объемов данных pig или hive.чтобы сделать вещи эффективно.С помощью новейших версий pig вы даже можете написать собственные функции на python и использовать их в своих скриптах pig.

Хотя существуют инструменты, позволяющие вам использовать язык, который вам удобен, никогда не забывайте, что среда разработки hadoop в основном написанав Яве.Могут быть случаи, когда вам нужно будет написать специализированный InputFormat;или UDF внутри pig, и т. д. Тогда пригодятся приличные знания в java.

Ваш пример "Hbase сопроцессоров" в некотором роде не связан с потоковой функциональностью hadoop.Сопроцессоры Hbase состоят из двух частей: серверной части и клиентской части.Я почти уверен, что в выпуске hbase будут встроены некоторые полезные серверные сопроцессоры;но кроме этого вам нужно написать свой собственный сопроцессор (и плохие новости: это Java).Что касается клиента, я уверен, что вы сможете без проблем использовать их с вашим любимым языком программирования через thrift.

Итак, в качестве ответа на свой вопрос: вы всегда можете избежать изучения java;все еще использую hadoop, чтобы использовать его потенциал (используя сторонние библиотеки / приложения).Но когда дерьмо поражает поклонника, лучше понять подстилающий контент;быть в состоянии развиваться с Java.Знание java даст вам полный контроль над окружающей средой hadoop / hbase.

Надеюсь, вы найдете это полезным.

1 голос
/ 10 октября 2011

Да, вы должны получить данные локального выполнения кода с потоковой передачей.Вы не толкаете данные туда, где находится программа, вы толкаете программу туда, где находятся данные.Потоковая передача просто берет локальные входные данные и запускает их через stdin для вашей программы на Python.Вместо того, чтобы каждая карта выполнялась внутри задачи Java, она запускает и экземпляр вашей программы на Python и просто прокачивает ввод через него.

Если вы действительно хотите сделать быструю обработку, вы действительно должны изучить Java.Необходимость передавать все через stdin и stout - это много накладных расходов.

...