hadoop hive classnotfoundexception elastic-map-reduce

¿Cómo me aseguro de que RegexSerDe esté disponible para mis nodos Hadoop?



hive classnotfoundexception (3)

La manera más fácil de arreglar esto es agregar todos estos archivos jar al directorio lib de hadoop en todos los rastreadores de tareas, lo hacemos con un montón de cosas:

scp library.jar task-tracker-1:~/<HADOOP_HOME>/lib/

o con EMR en el script bootstrap:

s3cmd get s3://path/to/lib.jar /home/hadoop/lib/

Cuando usamos EMR, acabamos de tener un directorio s3 lleno de jar que sincronizaríamos con el directorio de hadoop lib:

s3cmd sync s3://static/jars/ /home/hadoop/jars cp jars/*.jar lib/

Si usa oozie, también puede colocar los archivos jar en el directorio oozie.share.lib.

Estoy tratando de atacar el problema de analizar los registros web con Hive, y he visto muchos ejemplos, pero parece que no puedo encontrar a nadie con este problema específico.

Aquí es donde estoy: configuré un clúster AWS ElasticMapReduce, puedo iniciar sesión y activar Hive. Me aseguro de add jar hive-contrib-0.8.1.jar , y dice que está cargado. Creo una tabla llamada event_log_raw , con algunas columnas de cadena y una expresión regular. load data inpath ''/user/hadoop/tmp overwrite into table event_log_raw , y me voy a las carreras. select * from event_log_raw funciona (creo que localmente, ya que no obtengo el mapa% y reduzco% outputs), y obtengo mis 10 registros de mis datos de muestra, analizados correctamente, todo está bien. select count(*) from event_log_raw funciona, esta vez con un trabajo de mapreduce creado.

Quiero convertir mi campo request_url a un mapa, así que ejecuto:

select elr.view_time as event_time, elr.ip as ip, str_to_map(split(elr.request_url," ")[1],"&","=") as params from event_log_raw elr

Mapreduce se dispara, espera, espera ... FALLÓ.

FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask MapReduce Jobs Launched: Job 0: Map: 1 HDFS Read: 0 HDFS Write: 0 FAIL

Compruebo los syslogs de los rastreadores de tareas y veo, entre otras cosas,

java.lang.RuntimeException: Error in configuring object at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93) at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64) at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117) <snip> Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.ClassNotFoundException: org.apache.hadoop.hive.contrib.serde2.RegexSerDe at org.apache.hadoop.hive.ql.exec.MapOperator.setChildren(MapOperator.java:406) at org.apache.hadoop.hive.ql.exec.ExecMapper.configure(ExecMapper.java:90) ... 22 more Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.contrib.serde2.RegexSerDe

He googleado y SO''ed esto, pero creo que mi google-fu no está a la altura. Todo lo que he encontrado apunta a que la gente tiene problemas con esto y lo soluciona al ejecutar el comando add jar . Lo intenté, intenté agregarlo a mi hive-site.xml , intenté tenerlo localmente e intenté poner el contenedor en un contenedor s3. Intentó agregar un paso de arranque para agregarlo durante la fase de arranque (desastre).

¿Puede alguien ayudarme a encontrar un.) Por qué mis nodos de tareas no pueden encontrar RegexSerDe, yb) cómo hacer que esto funcione? Los enlaces son bienvenidos también, si pueden revelar algo más que solo ejecutar add jar .

¡Gracias por adelantado!


Copié el archivo jar de serde al

hadoop/lib

directorio y también hizo un reinicio de la hadoop (o incluso el servidor) para realmente trabajar.


Supongo que todo lo que necesita es agregar este archivo jar a la variable HIVE_AUX_JARS_PATH para, por ejemplo,

Si tu hive-contrib-0.8.1.jar está en /usr/hive/lib entonces ejecuta

export HIVE_AUX_JARS_PATH=/usr/hive/lib/hive-contrib-0.8.1.jar:$HIVE_AUX_JARS_PATH

o si HIVE_AUX_JARS_PATH no existe, simplemente ejecuta

export HIVE_AUX_JARS_PATH=/usr/hive/lib/hive-contrib-0.8.1.jar .

Después de eso, inicie la sesión de colmena y verá que todo funciona bien.

En caso de que necesite esta variable, .profile permanente en el archivo .profile o .bash_profile según su sistema operativo