hadoop hive apache-pig hue cloudera-cdh

hadoop - Cargando el archivo JSON con serde en Cloudera



hive apache-pig (2)

Estoy tratando de trabajar con un archivo JSON con esta estructura de bolsa:

{ "user_id": "kim95", "type": "Book", "title": "Modern Database Systems: The Object Model, Interoperability, and Beyond.", "year": "1995", "publisher": "ACM Press and Addison-Wesley", "authors": [ { "name": "null" } ], "source": "DBLP" } { "user_id": "marshallo79", "type": "Book", "title": "Inequalities: Theory of Majorization and Its Application.", "year": "1979", "publisher": "Academic Press", "authors": [ { "name": "Albert W. Marshall" }, { "name": "Ingram Olkin" } ], "source": "DBLP" }

Intenté usar serde para cargar datos JSON para Hive. Seguí las dos formas que vi aquí: http://blog.cloudera.com/blog/2012/12/how-to-use-a-serde-in-apache-hive/

Con este código:

CREATE EXTERNAL TABLE IF NOT EXISTS serd ( user_id:string, type:string, title:string, year:string, publisher:string, authors:array<struct<name:string>>, source:string) ROW FORMAT SERDE ''org.openx.data.jsonserde.JsonSerDe'' LOCATION ''/user/hdfs/data/book-seded_workings-reduced.json'';

Tengo este error:

error while compiling statement: failed: parseexception line 2:17 cannot recognize input near '':'' ''string'' '','' in column type

Yo también probé esta versión: https://github.com/rcongiu/Hive-JSON-Serde

que dio un error diferente:

Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Cannot validate serde: org.openx.data.jsonserde.JsonSerde

¿Alguna idea?

También quiero saber cuáles son las alternativas para trabajar con un JSON como este para realizar consultas en el campo ''nombre'' en ''autores''. Si es cerdo o colmena?

Ya lo he convertido en un archivo "tsv". Pero, dado que la columna de mis autores es una tupla, no sé cómo hacer solicitudes en ''nombre'' con Hive, si construyo una tabla a partir de este archivo. ¿Debo cambiar mi script por la conversión "tsv" o conservarlo? ¿O hay alguna alternativa con Hive o Pig?


Hive no tiene compatibilidad incorporada para JSON. Entonces, para usar JSON con Hive necesitamos usar jarros de tercera parte como: https://github.com/rcongiu/Hive-JSON-Serde

Tiene un par de problemas con la declaración de crear tabla. Debe tener un aspecto como este:

CREATE EXTERNAL TABLE IF NOT EXISTS serd ( user_id string,type string,title string,year string,publisher string,authors array<string>,source:string) ROW FORMAT SERDE ''org.openx.data.jsonserde.JsonSerDe'' LOCATION...

Los registros JSON que está usando mantienen cada registro en una sola línea como esta:

{"user_id": "kim95", "type": "Book", "title": "Modern Database Systems: The Object Model, Interoperability, and Beyond.", "year": "1995", "publisher": "ACM Press and Addison-Wesley", "authors": [{"name":"null"}], "source": "DBLP"} {"user_id": "marshallo79", "type": "Book", "title": "Inequalities: Theory of Majorization and Its Application.", "year": "1979", "publisher": "Academic Press","authors": [{"name":"Albert W. Marshall"},{"name":"Ingram Olkin"}], "source": "DBLP"}

Después de descargar el proyecto de GIT, debe compilar el proyecto que creará un jar, debe agregar este jar en la sesión de Hive antes de ejecutar la declaración create table.

Espero eso ayude...!!!


Añadir jar solo agrega a la sesión que no estará disponible y, finalmente, está recibiendo un error. Obtenga el JAR cargado en todos los nodos en Hive y Map Reduzca la ruta como en la ubicación siguiente para que el componente HIVE y Map Reduce escoja esto cuando sea llamado.

  1. /hadoop/CDH_5.2.0_Linux_parcel/parcels/CDH-5.2.0- 1.cdh5.2.0.p0.36 / lib / hive / lib / json-serde-1.3.6-jar-with-dependencies.jar

  2. /hadoop/CDH_5.2.0_Linux_parcel/parcels/CDH-5.2.0-1.cdh5.2.0.p0.36/lib/hadoop-mapreduce/lib/json-serde-1.3.6-jar-with-dependencies.jar

Nota: Esta ruta varía según el clúster.