Подтвердить что ты не робот

Достаточно Java для Hadoop

Я был разработчиком С++ около 10 лет. Мне нужно забрать Java только для Hadoop. Я сомневаюсь, что я буду делать что-то еще на Java. Итак, мне нужен список вещей, которые мне нужно будет подобрать. Конечно, мне нужно будет изучить основной язык, но что еще?

Я использовал Google для этого, и это можно было бы рассматривать как возможный дубликат "Я хочу изучать Java. Покажите мне, как?" но это не так. Java - это огромный язык программирования с множеством библиотек, и то, что мне нужно узнать, будет во многом зависеть от того, для чего я использую Hadoop. Но я полагаю, что можно сказать что-то вроде этого, не утруждая себя изучением этого. Это тоже будет очень полезно.

4b9b3361

Ответ 1

В моей дневной работе я просто потратил некоторое время на то, чтобы помочь человеку на С++ собрать достаточно Java для использования некоторых библиотек Java через JNI (Java Native Interface), а затем совместно использовать память в их основном приложении на С++. Вот некоторые из ключевых замечаний, которые я заметил:

  • Вы не можете обойтись ничем, кроме игрушечного проекта без IDE. Самое первое, что вам нужно сделать, это загрузить популярную Java IDE (Eclipse - прекрасный выбор, но есть и альтернативы, включая Netbeans и IntelliJ). Не испытывайте соблазна попробовать с vi/emacs и javac/make. Вы будете жить в пещере и не осознавать ее. Как только вы достигнете скорости с помощью даже основных функций IDE, вы будете буквально в десятки раз более восприимчивыми, чем без IDE.
  • Узнайте, как развернуть простую структуру и пакеты проекта. Будут простые пошаговые инструкции о том, как это сделать на сайте Eclipse или в другом месте. Никогда не помещайте ничего в пакет по умолчанию.
  • Java имеет систему типов, в которой ссылочные и примитивные типы относительно разные по историческим причинам/причинам.
  • Генераторы Java не совпадают с шаблонами С++. Прочитайте "стирание типа".
  • Возможно, вы захотите понять, как работает Java GC. Просто google "mark and sweep" - сначала вы можете просто согласиться на наивную ментальную модель, а затем узнать подробности о том, как это сделает современное производство GC.
  • Ядро API Collections следует изучать без задержек. Карта /HashMap, List/ArrayList и LinkedList и Set должны быть достаточными для перехода.
  • Изучите современную Java concurrency. Thread - примитив уровня на уровне сборки по сравнению с некоторыми из классных вещей в java.util.concurrent. Изучите ConcurrentHashMap, Atomic *, Lock, Condition, CountDownLatch, BlockingQueue и потоковые пулы от Executors. Хорошими книгами здесь являются Брайан Гетц и Дуг Ли.
  • Как только вы захотите использовать сторонние библиотеки, вам нужно узнать, как работает путь к классам. Это не ракетостроение, но это немного многословно.

Если вы парень с низким уровнем С++, то вы можете найти и некоторые из этих интересных:

  • Java имеет виртуальную отправку по умолчанию. Ключевое слово static в методе Java используется для указания метода класса. частные методы Java используют функцию invokespecial dispatch, которая представляет собой отправку на точный тип использования.
  • По крайней мере в VMware Oracle объекты состоят из двух машинных слов заголовка (слова метки и слова класса). Слово метки - это куча флагов, которые использует VM - особенно для синхронизации потоков. Классовое слово, которое вы можете представить как указатель на представление виртуальной машины объекта класса (в котором живут vtables для методов). Следующее слово класса - это поля-члены экземпляра объекта.
  • Файлы Java.class являются промежуточным языком и не похожи на объектный код x86. В частности, есть много полезных инструментов для файлов .class(включая дизассемблер javap, который поставляется с JVM).
  • Явный эквивалент таблицы символов называется константным пулом. Он печатается, и в нем много информации - возможно, больше, чем эквивалент объектного кода x86.
  • Диспетчер виртуальных методов Java состоит в поиске правильного метода, который должен быть вызван в пуле констант, а затем преобразовании его в смещение в таблицу vtable. Затем, идя вверх по иерархии классов, до тех пор, пока в этом смещении vtable не будет найдено ненулевое значение.
  • Java начинает интерпретироваться, а затем скомпилируется (для Oracle и некоторых других виртуальных машин). Переключение в скомпилированный режим выполняется методом по методу по принципу "как нужно". При проведении бенчмаркинга и перфомансии вам необходимо убедиться, что вы начали нагревать систему до начала работы, и что вы должны сначала профилировать на уровне метода для начала. Сделанные оптимизации могут быть довольно агрессивными/оптимистичными (с проверкой и резервными ошибками, если допущения будут нарушены) - поэтому перфорирование является немного искусством.

Надеюсь, там будет полезный материал, который будет продолжаться, - прокомментируйте/задайте вопросы о последующих действиях.

Ответ 2

Изучение "достаточно" Java изучает Java. Либо вы изучаете все основные принципы и решения по языковому дизайну, либо страдаете, делая легко устраняемые ошибки. Учитывая, что вы уже знаете, как программировать, многие данные могут быть сняты (с учетом того, где он отличается от других языков, которые вы хорошо знакомы).

поэтому вам нужно научиться:

И если у вас нет рамки сборки, как упакуйте скомпилированный код.

Помимо этого, почти каждый другой предмет, который вам нужно изучить, зависит в значительной степени от того, что вы намереваетесь сделать. Не отвлекайте онлайновые учебники от Oracle/Sun, они неплохие (по сравнению с другими онлайн-учебниками).

Ответ 4

Вы не можете использовать Java, не зная этих пакетов в стандартном API:

java.lang
java.util
java.io

И, в меньшей степени:

java.text
java.math
java.net
java.lang.reflect
java.util.concurrent

Они содержат много классов, которые вам нужно использовать постоянно для практически любого приложения, и это хорошая идея, чтобы просмотреть их до тех пор, пока вы не узнаете, какие классы они содержат и для чего они хороши, чтобы вы не заново изобрели колеса.

Ответ 5

  • Успокойся, изучение Java может быть приятно и быстро, если вы уже знаете С++

    Купите эти две книги:

    • Язык программирования JavaTM, (4-е издание) Кен Арнольд, Джеймс Гослинг, Дэвис Холмс
    • Эффективная Java (2-е издание), Джошуа Бош

Скоро вы овладеете Java, вы не пожалеете. Удачи.

Ответ 6

Поскольку С++ и Java имеют общие корни, основной язык не должен давать вам слишком много проблем. Вам нужно будет познакомиться с java SDK, в частности java.lang и Framework Collections (java.util.)

Но, возможно, изучение java излишне, если вы не видите, что используете его в другом месте. Hadoop также имеет привязки к Python - возможно, изучение питона было бы лучшей альтернативой? См. Java vs Python на Hadoop.

Ответ 7

Здесь - это быстрый старт для всего, что вам понадобится Я предлагаю Eclipse (java) начать работу, см. this для этого

Ответ 8

Возможно, вам даже не нужно знать Java для использования Hadoop.

Pig достаточно далеко от простого и расширенного использования Hadoop.

Ответ 9

Я не знаю, насколько вы знакомы с другими языками программирования высшего уровня. Сбор мусора - важная функция в Java. Было бы важно прочитать немного о GC в вашей виртуальной машине по выбору.

Помимо очевидных пакетов, ознакомьтесь с java.util пакетами для рамки сбора. Возможно, вы захотите проверить источник некоторых классов. Я предлагаю HashMap получить представление о стоимости вычислений/памяти для этих операций.

Java любит использовать потоки вместо буферов при обработке больших объемов данных. Это может занять некоторое время.

Java не имеет неподписанных типов. В зависимости от пакетов данных, которые необходимо обработать сразу, вы можете использовать более крупные переменные и атрибуты aighttheics (если речь идет о относительно небольших пакетах), или вы должны (b[i] & 0xff) каждый раз, когда вы читаете, например, беззнаковые байты. Также обратите внимание, что Java использует сетевой байтовый порядок (msbf) при сериализации многобайтовых чисел.

Наиболее любимыми шаблонами проектирования API являются Singleton, Decorator и Factory. Проверьте источник JFC для наилучшей практики, как эти шаблоны достигнуты на языке.

... и вы все еще можете задать более конкретные вопросы по SO:)

Ответ 10

Большая часть материала должна быть вам знакома. Я просто загрузил eclipse и google учебный сайт. Ознакомьтесь с классом, ключевым словом. Одна сложная вещь, с которой сталкиваются многие ребята из С++, - это запустить приложение Java, чтобы он нашел свои классы библиотек (вроде аналогичных динамическим связям). Узнайте разницу между JRE и JDK. Если вы можете получить несколько приложений приветствия мирового уровня, вы должны быть в состоянии начать работу с hadoop, если будете следовать учебным пособиям.

Ответ 11

Ответ 1:

  • Очень желательно знать Java. Hadoop написан на Java. Его популярный формат файла последовательности зависит от Java.
  • Даже если вы используете Hive или Pig, вам, вероятно, когда-нибудь понадобится написать свой собственный UDF. Некоторые люди все еще пытаются записать их на других языках, но я думаю, что Java имеет более надежную и первичную поддержку для них.
  • Большинство инструментов Hadoop недостаточно зрелы (например, Sqoop, HCкаталог и т.д.), поэтому вы увидите много трассировок стека ошибок Java и, возможно, вам захочется взломать исходный код когда-нибудь

Ответ 2

  • Вам не требуется знать Java.
  • Как говорили другие, это будет очень полезно в зависимости от сложности вашей обработки. Тем не менее, есть невероятная сумма, которую вы можете сделать с помощью Pig и сказать Hive.
  • Я бы согласился с тем, что вполне вероятно, что вам в конечном итоге понадобится написать определенную пользователем функцию (UDF), однако я написал их в Python, и очень легко писать UDF в Python.
  • Конечно, если у вас есть очень строгие требования к производительности, то программа MapReduce на основе Java станет для вас способом. Тем не менее, большие успехи в производительности делаются все время как в Pig, так и в Hive.
  • Итак, короткий ответ на ваш вопрос: "Нет", вам не нужно знать Java, чтобы выполнить разработку Hadoop.

Источник: http://www.linkedin.com/groups/Is-it-must-Hadoop-Developer-988957.S.141072851

Ответ 12

Вам не нужно изучать java для использования hadoop.

Вам нужно знать linux для установки и настройки hadoop

тогда вы можете написать свои задания по сокращению карты, используя линию потока api на любом языке, который понимает стандартный ввод/вывод

далее вы можете сделать более сложную карту, используя другие библиотеки, такие как hive etc

даже другие компоненты hadoop, такие как hbase/cassandra, также имеют клиентов на большинстве языков