web-dev-qa-db-fra.com

Juste assez Java pour Hadoop

Je suis développeur C++ depuis environ 10 ans. J'ai besoin de prendre Java juste pour Hadoop. Je doute que je ferai autre chose en Java. Donc, je voudrais une liste de choses que je devrais ramasser. Bien sûr, J'aurais besoin d'apprendre la langue principale, mais quoi d'autre?

J'ai fait des recherches sur Google pour cela et cela pourrait être considéré comme un doublon possible de "Je veux apprendre Java. Montrez-moi comment?" mais ce n'est pas. Java est un énorme langage de programmation avec beaucoup, de bibliothèques et ce que je dois apprendre dépendra en grande partie de ce que j'utilise Hadoop. Mais je suppose qu'il est possible de dire quelque chose comme ne pas prenez la peine d’apprendre ceci.

33
Nikhil

Dans mon travail de jour, je viens de passer du temps à aider une personne C++ à prendre suffisamment de Java pour utiliser certaines Java bibliothèques via JNI (Java Native Interface), puis à partager la mémoire dans leur application principalement C++. Voici quelques-unes des principales choses que j'ai remarquées:

  1. Vous ne pouvez pas gérer quoi que ce soit au-delà d'un projet de jouet sans IDE. La toute première chose à faire est de télécharger un Java IDE populaire (Eclipse est un bon choix, mais il existe également des alternatives comme Netbeans et IntelliJ). Ne soyez pas tenté d'essayer de gérer avec vi/emacs et javac/make. Vous vivrez dans une grotte et ne vous en rendrez pas compte. Une fois que vous serez au courant des fonctions IDE même de base, vous serez littéralement des dizaines de fois plus productif que sans IDE.
  2. Apprenez à mettre en page une structure de projet et des packages simples. Il y aura des procédures pas à pas simples sur la façon de procéder sur le site Eclipse ou ailleurs. Ne mettez jamais rien dans le package par défaut.
  3. Java possède un système de types dans lequel les types de référence et primitifs sont relativement séparés pour des raisons historiques/de performances.
  4. Les génériques Java sont pas les mêmes que les modèles C++. Renseignez-vous sur "effacement de type".
  5. Vous souhaiterez peut-être comprendre le fonctionnement du GC de Java. Il suffit de google "marquer et balayer" - au début, vous pouvez simplement vous contenter du modèle mental le plus naïf, puis apprendre les détails de la façon dont un GC de production moderne le ferait plus tard.
  6. Le cœur de l'API Collections doit être appris sans délai. Map/HashMap, List/ArrayList & LinkedList et Set devraient suffire.
  7. Apprenez la concurrence moderne Java. Thread est une primitive de niveau assembleur par rapport à certaines des fonctionnalités intéressantes de Java.util.concurrent. Apprenez ConcurrentHashMap, Atomic *, Lock, Condition, CountDownLatch, BlockingQueue et les pools de threads des exécuteurs. Les bons livres ici sont ceux de Brian Goetz et Doug Lea.
  8. Dès que vous souhaitez utiliser des bibliothèques tierces, vous devez apprendre comment fonctionne le chemin de classe. Ce n'est pas sorcier, mais c'est un peu bavard.

Si vous êtes un gars C++ de bas niveau, vous pouvez également trouver certains de ces éléments intéressants:

  1. Java a une répartition virtuelle par défaut. Le mot-clé static sur une méthode Java est utilisé pour indiquer une méthode de classe. Les méthodes privées Java utilisent une répartition invoquée, qui est une répartition sur le type exact utilisé.
  2. Sur un Oracle VM au moins, les objets comprennent deux mots machine d'en-tête (la marque Word et la classe Word). La marque Word est un tas de drapeaux que VM utilise - notamment pour la synchronisation des threads. Le mot de classe que vous pouvez considérer comme un pointeur vers la représentation de l'objet classe par la machine virtuelle (c'est là que vivent les tables des méthodes). Après la classe Word se trouvent les champs membres de l'instance de l'objet.
  3. Les fichiers Java .class sont un langage intermédiaire, et pas vraiment semblable au code objet x86. En particulier, il existe de nombreux autres outils utiles pour les fichiers .class (y compris le désassembleur javap fourni avec la JVM)
  4. L'équivalent Java de la table des symboles est appelé Pool constant. Il est tapé et contient beaucoup d'informations - sans doute plus que l'équivalent du code objet x86.
  5. L'envoi de méthode virtuelle Java consiste à rechercher la bonne méthode à appeler dans le pool constant, puis à la convertir en un offset en une table virtuelle. Ensuite, remontez la hiérarchie des classes jusqu'à ce qu'une valeur non nulle soit trouvée à ce décalage de table.
  6. Java commence par être interprété, puis compilé (pour Oracle et certaines autres machines virtuelles de toute façon). Le passage en mode compilé se fait méthode par méthode au besoin. Lors de l'analyse comparative et du réglage des performances, vous devez vous assurer que vous avez réchauffé le système avant de commencer, et que vous devez généralement profiler au niveau de la méthode pour commencer. Les optimisations qui sont faites peuvent être assez agressives/optimistes (avec un contrôle et un repli si les hypothèses sont violées) - donc le réglage des performances est un peu un art.

J'espère qu'il y a des choses utiles à faire - veuillez commenter/poser des questions de suivi.

49
kittylyst

Apprendre "juste assez" Java, c'est apprendre Java. Soit vous apprenez tous les principes de base et les décisions de conception de langage, soit vous souffrez en faisant des erreurs facilement évitables. Étant donné que vous savez déjà programmer, un une grande partie des informations peuvent être écrémées (en veillant à ce qu'elles diffèrent des autres langues que vous connaissez intimement).

vous devez donc apprendre:

  1. Comment commencer
  2. La langue elle-même
  3. Le noyau, classes essentielles
  4. Les grandes collections

Et si vous n'avez pas de framework de construction en place, comment empaqueter votre code compilé .

Au-delà de cela, presque tous les autres éléments que vous pourriez avoir besoin d'apprendre dépendent fortement de ce que vous avez l'intention de faire. Ne négligez pas les tutoriels en ligne d'Oracle/Sun , ils sont assez bons (par rapport aux autres tutoriels en ligne).

17
Edwin Buck

Hadoop peut utiliser C++: exemple WordCount en C++

12
warren

Vous ne pouvez pas vraiment utiliser Java sans connaître ces packages dans l'API standard:

Java.lang
Java.util
Java.io

Et, dans une moindre mesure:

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

Ils contiennent beaucoup de classes que vous devrez utiliser en permanence pour à peu près n'importe quelle application, et c'est une bonne idée de les parcourir jusqu'à ce que vous sachiez quelles classes elles contiennent et à quoi elles servent, de peur de finir par réinventer les roues.

7
Michael Borgwardt
  • Allez-y doucement, apprendre Java pourrait être agréable et rapide si vous connaissez déjà C++

    Achetez ces deux livres:

    1. Le langage de programmation JavaTM, (4e édition) Ken Arnold, James Gosling, Davis Holmes
    2. Efficace Java (2e édition), Joshua Bosh

Vous maîtriserez bientôt Java, vous ne le regretterez pas. Bonne chance.

7
Hernán Eche

Comme C++ et Java partagent des racines communes, le langage de base ne devrait pas vous poser trop de problèmes. Vous devrez vous familiariser avec le Java SDK, en particulier Java.lang et le framework Collections (Java.util.)

Mais peut-être que l'apprentissage Java est exagéré si vous ne vous voyez pas l'utiliser ailleurs. Hadoop a également des liaisons avec Python - peut-être l'apprentissage python serait une meilleure alternative? Voir Java vs Python sur Hadoop .

4
mdma

Je ne sais pas à quel point vous connaissez d'autres langages de programmation de niveau supérieur. La récupération de place est une fonction importante en Java. Il serait important de lire un peu sur le GC dans votre VM de votre choix.

Outre les packages évidents, consultez les packages Java.util pour le framework de collecte . Vous voudrez peut-être vérifier la source de certaines classes. Je suggère HashMap pour avoir une idée du coût informatique/mémoire de ces opérations.

Java aime utiliser les flux au lieu des tampons lors du traitement de grandes quantités de données. Cela peut prendre un certain temps pour s'y habituer.

Java n'a pas de types non signés. Selon les paquets de données que vous devez traiter en même temps, vous pouvez soit utiliser des variables plus grandes et des arythmiques streight (si nous parlons de paquets relativement petits), soit vous devez (b[i] & 0xff) chaque fois que vous lisez par exemple des octets non signés. Notez également que Java utilise l'ordre des octets réseau (msbf) lors de la sérialisation des nombres multi-octets.

Les modèles de conception les plus appréciés par l'API sont Singleton, Decorator et Factory. Vérifiez la source de JFC lui-même pour les meilleures pratiques, comment ces modèles sont atteints dans la langue.

... et vous pouvez toujours poster des questions plus concrètes sur SO :)

3
vbence

Ici est le quickstart pour tout ce dont vous aurez besoin Je suggère à Eclipse (Java) de commencer à travailler, voir this pour cela

3
cMinor

Peut-être que vous n'avez même pas besoin de connaître Java pour utiliser Hadoop.

Pig est assez loin d'une utilisation simple à avancée de Hadoop.

3
KARASZI István

Réponse 1:

  • Il est très souhaitable de connaître Java. Hadoop est écrit en Java. Son format de fichier de séquence populaire dépend de Java.
  • Même si vous utilisez Hive ou Pig, vous devrez probablement écrire votre propre UDF un jour. Certaines personnes essaient toujours de les écrire dans d'autres langues, mais je suppose que Java a un support plus robuste et principal pour eux.
  • La plupart des outils Hadoop ne sont pas suffisamment matures (comme Sqoop, HCatalog, etc.), vous verrez donc de nombreuses traces de pile d'erreurs Java et vous voudrez probablement pirater le code source un jour

Réponse 2

  • Il n'est pas nécessaire que vous connaissiez Java.
  • Comme les autres l'ont dit, cela serait très utile selon la complexité de votre traitement. Cependant, il y a une quantité incroyable que vous pouvez faire avec juste Pig et dire Hive.
  • Je conviens qu'il est assez probable que vous deviez éventuellement écrire une fonction définie par l'utilisateur (UDF), cependant, je les ai écrites en Python, et il est très facile d'écrire des UDF en Python.
  • Certes, si vous avez des exigences de performances très strictes, alors un programme MapReduce basé sur Java serait la voie à suivre. Cependant, de grands progrès en matière de performances sont constamment réalisés à la fois dans Pig et Hive.
  • Donc, la réponse courte à votre question est "Non", il n'est pas nécessaire que vous connaissiez Java pour effectuer le développement Hadoop.

Source: http://www.linkedin.com/groups/Is-it-must-Hadoop-Developer-988957.S.141072851

2
Abhishek Goel

La plupart des choses devraient vous être familières. Je voudrais juste télécharger Eclipse et google un site de tutoriel. Familiarisez-vous avec le chargement de classe, les mots-clés. Une chose délicate à laquelle beaucoup de gars C++ se heurtent est de savoir comment exécuter une application Java afin qu'elle trouve ses classes de bibliothèque (sorte de liaison analogue à la liaison dynamique). Apprenez la différence entre le JRE et le JDK Si vous pouvez faire fonctionner quelques applications de type Hello World, vous devriez pouvoir commencer à utiliser Hadoop si vous suivez les didacticiels.

2
nsfyn55

Vous n'avez pas besoin d'apprendre Java pour utiliser hadoop.

Vous devez connaître Linux pour installer et configurer hadoop

alors vous pouvez écrire votre carte réduire les travaux en utilisant l'api de ligne de flux dans n'importe quelle langue qui comprend les entrées/sorties standard

en outre, vous pouvez réduire la carte plus complexe en utilisant d'autres bibliothèques comme Hive, etc.

même d'autres composants de hadoop comme hbase/cassandra a également des clients dans la plupart des langues

1
prasath raman