java - tutoriales - tecnologias hadoop
Lo suficiente Java para Hadoop (12)
He sido desarrollador de C ++ durante aproximadamente 10 años. Necesito elegir Java solo para Hadoop. Dudo que vaya a hacer otra cosa en Java. Entonces, me gustaría una lista de cosas que necesitaría recoger. Por supuesto, necesitaría aprender el lenguaje central, pero ¿qué más?
Busqué en Google esto y esto podría ser visto como un posible duplicado de "Quiero aprender Java. ¿Mostrarme cómo?" pero no lo es. Java es un gran lenguaje de programación con muchas librerías y lo que necesito aprender dependerá en gran medida de para qué estoy usando Hadoop. Pero supongo que es posible decir algo así como no molestarse en aprender esto. Esto también será muy útil.
Aprendiendo "lo suficiente" Java está aprendiendo Java. O aprendes todos los principios básicos y las decisiones de diseño del lenguaje, o sufres errores fáciles de evitar. Teniendo en cuenta que ya sabes cómo programar, se puede analizar gran parte de la información (con un ojo para saber dónde difiere de otros idiomas que estás íntimamente familiarizado).
entonces necesitas aprender:
- Cómo comenzar
- El idioma en sí
- El núcleo, clases esenciales
- Las principales colecciones
Y si no tiene un marco de compilación en su lugar, cómo empacar su código compilado .
Más allá de eso, casi cualquier otro elemento que puedas necesitar depende en gran medida de lo que pretendas hacer. No descarte los tutoriales en línea de Oracle / Sun , son bastante buenos (en comparación con otros tutoriales en línea).
Como C ++ y Java comparten raíces comunes, el lenguaje central no debería causarle demasiados problemas. Tendrá que familiarizarse con el SDK de java, especialmente java.lang y el marco de Colecciones (java.util).
Pero tal vez aprender java sea exagerado si no te ves utilizándolo en otro lugar. Hadoop también tiene enlaces a Python, ¿quizás aprender Python sería una mejor alternativa? Ver Java vs Python en Hadoop .
En mi trabajo diario, acabo de dedicar algo de tiempo a ayudar a una persona de C ++ a recoger suficiente Java para usar algunas bibliotecas de Java a través de JNI (Java Native Interface) y luego compartí la memoria en su aplicación C ++ principalmente. Estas son algunas de las cosas clave que noté:
- No puede administrar nada más allá de un proyecto de juguete sin un IDE. Lo primero que debe hacer es descargar un popular IDE de Java (Eclipse es una buena elección, pero también hay alternativas que incluyen Netbeans e IntelliJ). No se sienta tentado de intentar y administrar con vi / emacs y javac / make. Estarás viviendo en una cueva y sin darte cuenta . Una vez que esté al día con las funciones básicas de IDE, literalmente será docenas de veces más poductivo que sin un IDE.
- Aprenda a diseñar una estructura de proyecto y paquetes simples. Habrá simples tutoriales sobre cómo hacer esto en el sitio de Eclipse o en otro lugar. Nunca coloque nada en el paquete predeterminado.
- Java tiene un sistema de tipos según el cual los tipos primitivos y de referencia están relativamente separados por razones históricas / de rendimiento.
- Los genéricos de Java no son lo mismo que las plantillas de C ++. Lea sobre "borrado de tipo".
- Es posible que desee comprender cómo funciona el GC de Java. Simplemente google "marque y barra": al principio, puede conformarse con el modelo mental ingenuo y luego aprender los detalles de cómo un GC de producción moderna lo haría más tarde.
- El núcleo de la API de colecciones debe aprenderse sin demora. Map / HashMap, List / ArrayList & LinkedList and Set debería ser suficiente para comenzar.
- Aprende la concurrencia de Java moderna. El subproceso es una primitiva de nivel de lenguaje ensamblador en comparación con algunas de las cosas geniales en java.util.concurrent. Aprenda ConcurrentHashMap, Atomic *, Lock, Condition, CountDownLatch, BlockingQueue y los grupos de subprocesos de los ejecutores. Buenos libros son los de Brian Goetz y Doug Lea.
- Tan pronto como desee utilizar bibliotecas de terceros, tendrá que aprender cómo funciona classpath. No es ciencia espacial, pero es un poco detallado.
Si eres un chico de bajo nivel de C ++, entonces puedes encontrar algo de esto interesante también:
- Java tiene un despacho virtual por defecto. La palabra clave static en un método de Java se usa para indicar un método de clase. los métodos privados de Java usan el despacho de invocación especial, que es un despacho del tipo exacto en uso.
- En una máquina virtual de Oracle al menos, los objetos comprenden dos palabras máquina de encabezado (la palabra de marca y la palabra de clase). La palabra de marca es un conjunto de indicadores que usa la VM, especialmente para la sincronización de subprocesos. La palabra de clase que se puede pensar como un puntero a la representación de la VM del objeto Class (que es donde viven los vtables para los métodos). Siguiendo la palabra de clase están los campos miembros de la instancia del objeto.
- Los archivos Java .class son un lenguaje intermedio, y en realidad no son tan similares al código objeto x86. En particular, hay muchas más herramientas útiles para los archivos .class (incluido el desensamblador javap que se envía con la JVM)
- El equivalente de Java de la tabla de símbolos se llama Pool constante. Está tipeado y tiene mucha información, posiblemente más que el equivalente del código objeto x86.
- El despacho de métodos virtuales de Java consiste en buscar el método correcto para ser llamado en el conjunto de constantes y luego convertirlo en un desplazamiento en un archivo vtable. A continuación, suba la jerarquía de clases hasta que se encuentre un valor no nulo en ese desplazamiento de vtable.
- Java comienza a interpretarse y luego se compila (para Oracle y algunas otras máquinas virtuales de todos modos). El cambio al modo compilado se realiza método por método según sea necesario. Cuando se realiza una evaluación comparativa y una optimización del rendimiento, debe asegurarse de haber calentado el sistema antes de comenzar y, por lo general, debe realizar un perfil en el nivel de método para comenzar. Las optimizaciones que se realizan pueden ser bastante agresivas / optimistas (con un control y un retroceso si se incumplen las suposiciones), por lo que el ajuste de rendimiento es un poco artístico.
Afortunadamente, hay algunas cosas útiles para continuar: por favor comenten / hagan preguntas de seguimiento.
Hadoop puede usar C ++: ejemplo de WordCount en C ++
La mayoría de las cosas deberían serle familiares. Acabo de descargar eclipse y googlear un sitio tutorial. Familiarízate con la carga de clases, palabras clave. Una cosa complicada con la que se topan muchos tipos de C ++ es cómo ejecutar una aplicación Java para que encuentre sus clases de biblioteca (algo así como el enlace dinámico). Aprende la diferencia entre JRE y JDK. Si puede obtener algunas aplicaciones tipo hello world que funcionen, debería ser capaz de comenzar con hadoop si sigue los tutoriales.
No necesitas aprender java para usar hadoop.
Necesita saber Linux para instalar y configurar hadoop
luego puede escribir su mapa para reducir trabajos usando la API de línea de flujo en cualquier idioma que entienda la entrada / salida estándar
Además, puede hacer una reducción de mapa más complejo utilizando otras bibliotecas como colmena, etc.
incluso otros componentes de hadoop como hbase / cassandra también tienen clientes en la mayoría de los idiomas
No sé qué tan familiarizado estás con otros lenguajes de programación de nivel superior. La recolección de basura es una función importante en Java. Sería importante leer un poco sobre el GC en su VM de elección.
Además de los paquetes obvios, consulte los paquetes de java.util para el marco de recopilación . Es posible que desee verificar el origen de algunas clases. Sugiero HashMap
para obtener la idea del costo de computación / memoria de estas operaciones.
A Java le gusta usar flujos en lugar de búferes cuando procesa grandes cantidades de datos. Eso puede tomar un tiempo para acostumbrarse.
Java no tiene tipos sin firmar. Dependiendo de los paquetes de datos que necesite procesar de inmediato, puede usar variables más grandes y aritéticos streight (si estamos hablando de paquetes relativamente pequeños), o tiene que hacerlo (b[i] & 0xff)
cada vez que lee para ejemplo sin signo bytes. También tenga en cuenta que Java usa el orden de bytes de red (msbf) al serializar números de multibyte.
Los patrones de diseño más apreciados por la API son Singleton, Decorator y Factory. Consulte la fuente de JFC para conocer las mejores prácticas, cómo se logran estos patrones en el idioma.
... y aún puedes publicar preguntas más concretas sobre SO :)
Realmente no puedes usar Java sin conocer estos paquetes en la API estándar:
java.lang
java.util
java.io
Y, en menor grado:
java.text
java.math
java.net
java.lang.reflect
java.util.concurrent
Contienen muchas clases que necesitarás usar constantemente para prácticamente cualquier aplicación, y es una buena idea consultarlas hasta saber qué clases contienen y para qué sirven, para que no acabes reinventando las ruedas.
Tal vez ni siquiera necesites saber Java para usar Hadoop.
Pig está lo suficientemente lejos del uso simple y avanzado de Hadoop.
Respuesta 1 :
- Es muy deseable conocer Java. Hadoop está escrito en Java. Su popular formato de archivo de secuencia depende de Java.
- Incluso si usa Hive o Pig, probablemente necesite escribir su propia UDF algún día. Algunas personas aún intentan escribirlas en otros idiomas, pero supongo que Java tiene un soporte más robusto y primario para ellas.
- La mayoría de las herramientas de Hadoop no son lo suficientemente maduras (como Sqoop, HCatalog, etc.), por lo que verá muchos rastreos de pila de errores de Java y probablemente quiera piratear el código fuente algún día.
Respuesta 2
- No es necesario que conozcas Java.
- Como dijeron los otros, sería muy útil dependiendo de qué tan complejo sea su procesamiento. Sin embargo, hay una cantidad increíble que puedes hacer con solo Pig y decir Hive.
- Estoy de acuerdo en que es bastante probable que eventualmente necesites escribir una función definida por el usuario (UDF), sin embargo, las escribí en Python, y es muy fácil escribir UDF en Python.
- Por supuesto, si tiene requisitos de rendimiento muy estrictos, entonces un programa MapReduce basado en Java sería el camino a seguir. Sin embargo, grandes avances en el rendimiento se están realizando todo el tiempo tanto en Pig como en Hive.
- Por lo tanto, la respuesta breve a su pregunta es "No", no es necesario que conozca Java para realizar el desarrollo de Hadoop.
Fuente: http://www.linkedin.com/groups/Is-it-must-Hadoop-Developer-988957.S.141072851
Tómalo con calma, aprender Java puede ser agradable y rápido si ya sabes C ++
Compre estos dos libros:
- El lenguaje de programación JavaTM, (4ª edición) Ken Arnold, James Gosling, Davis Holmes
- Effective Java (2nd Edition), Joshua Bosh
Pronto dominarás Java, no te arrepentirás. Buena suerte.