diff --git ql/src/java/org/apache/hadoop/hive/ql/io/avro/AvroGenericRecordReader.java ql/src/java/org/apache/hadoop/hive/ql/io/avro/AvroGenericRecordReader.java index 60b4388..87ef43a 100644 --- ql/src/java/org/apache/hadoop/hive/ql/io/avro/AvroGenericRecordReader.java +++ ql/src/java/org/apache/hadoop/hive/ql/io/avro/AvroGenericRecordReader.java @@ -52,6 +52,7 @@ public class AvroGenericRecordReader implements RecordReader, JobConfigurable { private static final Log LOG = LogFactory.getLog(AvroGenericRecordReader.class); + private static final Schema.Parser PARSER = new Schema.Parser(); final private org.apache.avro.file.FileReader reader; final private long start; @@ -127,7 +128,7 @@ private Schema getSchema(JobConf job, FileSplit split) throws AvroSerdeException String s = job.get(AvroSerdeUtils.AVRO_SERDE_SCHEMA); if(s != null) { LOG.info("Found the avro schema in the job: " + s); - return Schema.parse(s); + return PARSER.parse(s); } // No more places to get the schema from. Give up. May have to re-encode later. return null; diff --git serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroGenericRecordWritable.java serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroGenericRecordWritable.java index b554743..129daa8 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroGenericRecordWritable.java +++ serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroGenericRecordWritable.java @@ -42,6 +42,7 @@ public class AvroGenericRecordWritable implements Writable{ GenericRecord record; private BinaryDecoder binaryDecoder; + private static final Schema.Parser PARSER = new Schema.Parser(); // Schema that exists in the Avro data file. private Schema fileSchema; @@ -93,8 +94,8 @@ public void write(DataOutput out) throws IOException { @Override public void readFields(DataInput in) throws IOException { - Schema schema = Schema.parse(in.readUTF()); - fileSchema = Schema.parse(in.readUTF()); + Schema schema = PARSER.parse(in.readUTF()); + fileSchema = PARSER.parse(in.readUTF()); recordReaderID = UID.read(in); record = new GenericData.Record(schema); binaryDecoder = DecoderFactory.defaultFactory().createBinaryDecoder((InputStream) in, binaryDecoder); diff --git serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerdeUtils.java serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerdeUtils.java index 8c5cf3e..cf36001 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerdeUtils.java +++ serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerdeUtils.java @@ -45,6 +45,7 @@ */ public class AvroSerdeUtils { private static final Log LOG = LogFactory.getLog(AvroSerdeUtils.class); + private static final Schema.Parser PARSER = new Schema.Parser(); public static final String SCHEMA_LITERAL = "avro.schema.literal"; public static final String SCHEMA_URL = "avro.schema.url"; @@ -67,7 +68,7 @@ public static Schema determineSchemaOrThrowException(Properties properties) throws IOException, AvroSerdeException { String schemaString = properties.getProperty(SCHEMA_LITERAL); if(schemaString != null && !schemaString.equals(SCHEMA_NONE)) - return Schema.parse(schemaString); + return PARSER.parse(schemaString); // Try pulling directly from URL schemaString = properties.getProperty(SCHEMA_URL); @@ -78,7 +79,7 @@ public static Schema determineSchemaOrThrowException(Properties properties) Schema s = getSchemaFromFS(schemaString, new Configuration()); if (s == null) { //in case schema is not a file system - return Schema.parse(new URL(schemaString).openStream()); + return PARSER.parse(new URL(schemaString).openStream()); } return s; } catch (IOException ioe) { @@ -123,7 +124,7 @@ protected static Schema getSchemaFromFS(String schemaFSUrl, } try { in = fs.open(new Path(schemaFSUrl)); - Schema s = Schema.parse(in); + Schema s = PARSER.parse(in); return s; } finally { if(in != null) in.close(); diff --git serde/src/java/org/apache/hadoop/hive/serde2/avro/SchemaResolutionProblem.java serde/src/java/org/apache/hadoop/hive/serde2/avro/SchemaResolutionProblem.java index 3dceb63..8c9a734 100644 --- serde/src/java/org/apache/hadoop/hive/serde2/avro/SchemaResolutionProblem.java +++ serde/src/java/org/apache/hadoop/hive/serde2/avro/SchemaResolutionProblem.java @@ -20,6 +20,7 @@ import org.apache.avro.Schema; class SchemaResolutionProblem { + private static final Schema.Parser PARSER = new Schema.Parser(); static final String sentinelString = "{\n" + " \"namespace\": \"org.apache.hadoop.hive\",\n" + " \"name\": \"CannotDetermineSchemaSentinel\",\n" + @@ -55,5 +56,5 @@ " }\n" + " ]\n" + "}"; - public final static Schema SIGNAL_BAD_SCHEMA = Schema.parse(sentinelString); + public final static Schema SIGNAL_BAD_SCHEMA = PARSER.parse(sentinelString); } diff --git serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroDeserializer.java serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroDeserializer.java index 198bd24..787122d 100644 --- serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroDeserializer.java +++ serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroDeserializer.java @@ -45,6 +45,7 @@ public class TestAvroDeserializer { private final GenericData GENERIC_DATA = GenericData.get(); + private static final Schema.Parser PARSER = new Schema.Parser(); @Test public void canDeserializeVoidType() throws IOException, SerDeException { @@ -55,7 +56,7 @@ public void canDeserializeVoidType() throws IOException, SerDeException { " {\"name\": \"isANull\", \"type\": \"null\"}\n" + " ]\n" + "}"; - Schema s = Schema.parse(schemaString); + Schema s = PARSER.parse(schemaString); GenericData.Record record = new GenericData.Record(s); record.put("isANull", null); @@ -83,7 +84,7 @@ public void canDeserializeVoidType() throws IOException, SerDeException { @Test public void canDeserializeMapsWithPrimitiveKeys() throws SerDeException, IOException { - Schema s = Schema.parse(TestAvroObjectInspectorGenerator.MAP_WITH_PRIMITIVE_VALUE_TYPE); + Schema s = PARSER.parse(TestAvroObjectInspectorGenerator.MAP_WITH_PRIMITIVE_VALUE_TYPE); GenericData.Record record = new GenericData.Record(s); Map m = new Hashtable(); @@ -129,7 +130,7 @@ public void canDeserializeMapsWithPrimitiveKeys() throws SerDeException, IOExcep @Test public void canDeserializeArrays() throws SerDeException, IOException { - Schema s = Schema.parse(TestAvroObjectInspectorGenerator.ARRAY_WITH_PRIMITIVE_ELEMENT_TYPE); + Schema s = PARSER.parse(TestAvroObjectInspectorGenerator.ARRAY_WITH_PRIMITIVE_ELEMENT_TYPE); GenericData.Record record = new GenericData.Record(s); List list = new ArrayList(); @@ -187,7 +188,7 @@ public void canDeserializeArrays() throws SerDeException, IOException { @Test public void canDeserializeRecords() throws SerDeException, IOException { - Schema s = Schema.parse(TestAvroObjectInspectorGenerator.RECORD_SCHEMA); + Schema s = PARSER.parse(TestAvroObjectInspectorGenerator.RECORD_SCHEMA); GenericData.Record record = new GenericData.Record(s); GenericData.Record innerRecord = new GenericData.Record(s.getField("aRecord").schema()); innerRecord.put("int1", 42); @@ -246,7 +247,7 @@ private ResultPair(ObjectInspector oi, Object value, Object unionObject) { @Test public void canDeserializeUnions() throws SerDeException, IOException { - Schema s = Schema.parse(TestAvroObjectInspectorGenerator.UNION_SCHEMA); + Schema s = PARSER.parse(TestAvroObjectInspectorGenerator.UNION_SCHEMA); GenericData.Record record = new GenericData.Record(s); record.put("aUnion", "this is a string"); @@ -295,7 +296,7 @@ private ResultPair unionTester(Schema s, GenericData.Record record) @Test // Enums are one of two types we fudge for Hive. Enums go in, Strings come out. public void canDeserializeEnums() throws SerDeException, IOException { - Schema s = Schema.parse(TestAvroObjectInspectorGenerator.ENUM_SCHEMA); + Schema s = PARSER.parse(TestAvroObjectInspectorGenerator.ENUM_SCHEMA); GenericData.Record record = new GenericData.Record(s); record.put("baddies", new GenericData.EnumSymbol(s.getField("baddies").schema(),"DALEKS")); @@ -325,7 +326,7 @@ public void canDeserializeEnums() throws SerDeException, IOException { @Test // Fixed doesn't exist in Hive. Fixeds go in, lists of bytes go out. public void canDeserializeFixed() throws SerDeException, IOException { - Schema s = Schema.parse(TestAvroObjectInspectorGenerator.FIXED_SCHEMA); + Schema s = PARSER.parse(TestAvroObjectInspectorGenerator.FIXED_SCHEMA); GenericData.Record record = new GenericData.Record(s); byte [] bytes = "ANANCIENTBLUEBOX".getBytes(); @@ -361,7 +362,7 @@ public void canDeserializeFixed() throws SerDeException, IOException { @Test public void canDeserializeBytes() throws SerDeException, IOException { - Schema s = Schema.parse(TestAvroObjectInspectorGenerator.BYTES_SCHEMA); + Schema s = PARSER.parse(TestAvroObjectInspectorGenerator.BYTES_SCHEMA); GenericData.Record record = new GenericData.Record(s); byte [] bytes = "ANANCIENTBLUEBOX".getBytes(); @@ -400,7 +401,7 @@ public void canDeserializeBytes() throws SerDeException, IOException { @Test public void canDeserializeNullableTypes() throws IOException, SerDeException { - Schema s = Schema.parse(TestAvroObjectInspectorGenerator.NULLABLE_STRING_SCHEMA); + Schema s = PARSER.parse(TestAvroObjectInspectorGenerator.NULLABLE_STRING_SCHEMA); GenericData.Record record = new GenericData.Record(s); record.put("nullableString", "this is a string"); @@ -413,7 +414,7 @@ public void canDeserializeNullableTypes() throws IOException, SerDeException { @Test public void canDeserializeNullableEnums() throws IOException, SerDeException { - Schema s = Schema.parse(TestAvroObjectInspectorGenerator.NULLABLE_ENUM_SCHEMA); + Schema s = PARSER.parse(TestAvroObjectInspectorGenerator.NULLABLE_ENUM_SCHEMA); GenericData.Record record = new GenericData.Record(s); record.put("nullableEnum", new GenericData.EnumSymbol(AvroSerdeUtils.getOtherTypeFromNullableType(s.getField("nullableEnum").schema()), "CYBERMEN")); @@ -426,7 +427,8 @@ public void canDeserializeNullableEnums() throws IOException, SerDeException { @Test public void canDeserializeMapWithNullablePrimitiveValues() throws SerDeException, IOException { - Schema s = Schema.parse(TestAvroObjectInspectorGenerator.MAP_WITH_NULLABLE_PRIMITIVE_VALUE_TYPE_SCHEMA); + Schema s = PARSER.parse(TestAvroObjectInspectorGenerator + .MAP_WITH_NULLABLE_PRIMITIVE_VALUE_TYPE_SCHEMA); GenericData.Record record = new GenericData.Record(s); Map m = new HashMap(); @@ -504,7 +506,7 @@ private void verifyNullableType(GenericData.Record record, Schema s, String fiel @Test public void verifyCaching() throws SerDeException, IOException { - Schema s = Schema.parse(TestAvroObjectInspectorGenerator.RECORD_SCHEMA); + Schema s = PARSER.parse(TestAvroObjectInspectorGenerator.RECORD_SCHEMA); GenericData.Record record = new GenericData.Record(s); GenericData.Record innerRecord = new GenericData.Record(s.getField("aRecord").schema()); innerRecord.put("int1", 42); @@ -541,7 +543,7 @@ public void verifyCaching() throws SerDeException, IOException { assertEquals(0, de.getReEncoderCache().size()); //Read the record with **different** record reader ID and **evolved** schema - Schema evolvedSchema = Schema.parse(s.toString()); + Schema evolvedSchema = PARSER.parse(s.toString()); evolvedSchema.getField("aRecord").schema().addProp("Testing", "meaningless"); garw.setRecordReaderID(recordReaderID = new UID()); //New record reader ID row = diff --git serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroObjectInspectorGenerator.java serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroObjectInspectorGenerator.java index 76c1940..2bfacc5 100644 --- serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroObjectInspectorGenerator.java +++ serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroObjectInspectorGenerator.java @@ -41,13 +41,14 @@ import org.junit.Test; public class TestAvroObjectInspectorGenerator { - private final TypeInfo STRING = TypeInfoFactory.getPrimitiveTypeInfo("string"); - private final TypeInfo INT = TypeInfoFactory.getPrimitiveTypeInfo("int"); - private final TypeInfo BOOLEAN = TypeInfoFactory.getPrimitiveTypeInfo("boolean"); - private final TypeInfo LONG = TypeInfoFactory.getPrimitiveTypeInfo("bigint"); - private final TypeInfo FLOAT = TypeInfoFactory.getPrimitiveTypeInfo("float"); - private final TypeInfo DOUBLE = TypeInfoFactory.getPrimitiveTypeInfo("double"); - private final TypeInfo VOID = TypeInfoFactory.getPrimitiveTypeInfo("void"); + private static final TypeInfo STRING = TypeInfoFactory.getPrimitiveTypeInfo("string"); + private static final TypeInfo INT = TypeInfoFactory.getPrimitiveTypeInfo("int"); + private static final TypeInfo BOOLEAN = TypeInfoFactory.getPrimitiveTypeInfo("boolean"); + private static final TypeInfo LONG = TypeInfoFactory.getPrimitiveTypeInfo("bigint"); + private static final TypeInfo FLOAT = TypeInfoFactory.getPrimitiveTypeInfo("float"); + private static final TypeInfo DOUBLE = TypeInfoFactory.getPrimitiveTypeInfo("double"); + private static final TypeInfo VOID = TypeInfoFactory.getPrimitiveTypeInfo("void"); + private static final Schema.Parser PARSER = new Schema.Parser(); // These schemata are used in other tests static public final String MAP_WITH_PRIMITIVE_VALUE_TYPE = "{\n" + @@ -265,7 +266,7 @@ public void failOnNonRecords() throws Exception { " \"symbols\" : [\"SPADES\", \"HEARTS\", \"DIAMONDS\", \"CLUBS\"]\n" + "}"; - Schema s = Schema.parse(nonRecordSchema); + Schema s = PARSER.parse(nonRecordSchema); try { new AvroObjectInspectorGenerator(s); fail("Should not be able to handle non-record Avro types"); @@ -311,7 +312,7 @@ public void primitiveTypesWorkCorrectly() throws SerDeException { " }\n" + " ]\n" + "}"; - AvroObjectInspectorGenerator aoig = new AvroObjectInspectorGenerator(Schema.parse(bunchOfPrimitives)); + AvroObjectInspectorGenerator aoig = new AvroObjectInspectorGenerator(PARSER.parse(bunchOfPrimitives)); String [] expectedColumnNames = {"aString", "anInt", "aBoolean", "aLong", "aFloat", "aDouble", "aNull"}; verifyColumnNames(expectedColumnNames, aoig.getColumnNames()); @@ -350,7 +351,7 @@ private void verifyColumnNames(String[] expectedColumnNames, List column @Test public void canHandleMapsWithPrimitiveValueTypes() throws SerDeException { - Schema s = Schema.parse(MAP_WITH_PRIMITIVE_VALUE_TYPE); + Schema s = PARSER.parse(MAP_WITH_PRIMITIVE_VALUE_TYPE); AvroObjectInspectorGenerator aoig = new AvroObjectInspectorGenerator(s); verifyMap(aoig, "aMap"); } @@ -379,7 +380,7 @@ private void verifyMap(final AvroObjectInspectorGenerator aoig, final String fie @Test public void canHandleArrays() throws SerDeException { - Schema s = Schema.parse(ARRAY_WITH_PRIMITIVE_ELEMENT_TYPE); + Schema s = PARSER.parse(ARRAY_WITH_PRIMITIVE_ELEMENT_TYPE); AvroObjectInspectorGenerator aoig = new AvroObjectInspectorGenerator(s); // Column names @@ -398,7 +399,7 @@ public void canHandleArrays() throws SerDeException { @Test public void canHandleRecords() throws SerDeException { - Schema s = Schema.parse(RECORD_SCHEMA); + Schema s = PARSER.parse(RECORD_SCHEMA); AvroObjectInspectorGenerator aoig = new AvroObjectInspectorGenerator(s); // Column names @@ -429,7 +430,7 @@ public void canHandleRecords() throws SerDeException { @Test public void canHandleUnions() throws SerDeException { - Schema s = Schema.parse(UNION_SCHEMA); + Schema s = PARSER.parse(UNION_SCHEMA); AvroObjectInspectorGenerator aoig = new AvroObjectInspectorGenerator(s); // Column names @@ -452,7 +453,7 @@ public void canHandleUnions() throws SerDeException { @Test // Enums are one of two Avro types that Hive doesn't have any native support for. public void canHandleEnums() throws SerDeException { - Schema s = Schema.parse(ENUM_SCHEMA); + Schema s = PARSER.parse(ENUM_SCHEMA); AvroObjectInspectorGenerator aoig = new AvroObjectInspectorGenerator(s); // Column names - we lose the enumness of this schema @@ -466,7 +467,7 @@ public void canHandleEnums() throws SerDeException { @Test // Hive has no concept of Avro's fixed type. Fixed -> arrays of bytes public void canHandleFixed() throws SerDeException { - Schema s = Schema.parse(FIXED_SCHEMA); + Schema s = PARSER.parse(FIXED_SCHEMA); AvroObjectInspectorGenerator aoig = new AvroObjectInspectorGenerator(s); @@ -483,7 +484,7 @@ public void canHandleFixed() throws SerDeException { @Test // Avro considers bytes primitive, Hive doesn't. Make them list of tinyint. public void canHandleBytes() throws SerDeException { - Schema s = Schema.parse(BYTES_SCHEMA); + Schema s = PARSER.parse(BYTES_SCHEMA); AvroObjectInspectorGenerator aoig = new AvroObjectInspectorGenerator(s); @@ -500,7 +501,7 @@ public void canHandleBytes() throws SerDeException { @Test // That Union[T, NULL] is converted to just T. public void convertsNullableTypes() throws SerDeException { - Schema s = Schema.parse(NULLABLE_STRING_SCHEMA); + Schema s = PARSER.parse(NULLABLE_STRING_SCHEMA); AvroObjectInspectorGenerator aoig = new AvroObjectInspectorGenerator(s); assertEquals(1, aoig.getColumnNames().size()); @@ -517,14 +518,14 @@ public void convertsNullableTypes() throws SerDeException { @Test // That Union[T, NULL] is converted to just T, within a Map public void convertsMapsWithNullablePrimitiveTypes() throws SerDeException { - Schema s = Schema.parse(MAP_WITH_NULLABLE_PRIMITIVE_VALUE_TYPE_SCHEMA); + Schema s = PARSER.parse(MAP_WITH_NULLABLE_PRIMITIVE_VALUE_TYPE_SCHEMA); AvroObjectInspectorGenerator aoig = new AvroObjectInspectorGenerator(s); verifyMap(aoig, "aMap"); } @Test // That Union[T, NULL] is converted to just T. public void convertsNullableEnum() throws SerDeException { - Schema s = Schema.parse(NULLABLE_ENUM_SCHEMA); + Schema s = PARSER.parse(NULLABLE_ENUM_SCHEMA); AvroObjectInspectorGenerator aoig = new AvroObjectInspectorGenerator(s); assertEquals(1, aoig.getColumnNames().size()); @@ -542,10 +543,10 @@ public void convertsNullableEnum() throws SerDeException { @Test public void objectInspectorsAreCached() throws SerDeException { // Verify that Hive is caching the object inspectors for us. - Schema s = Schema.parse(KITCHEN_SINK_SCHEMA); + Schema s = PARSER.parse(KITCHEN_SINK_SCHEMA); AvroObjectInspectorGenerator aoig = new AvroObjectInspectorGenerator(s); - Schema s2 = Schema.parse(KITCHEN_SINK_SCHEMA); + Schema s2 = PARSER.parse(KITCHEN_SINK_SCHEMA); AvroObjectInspectorGenerator aoig2 = new AvroObjectInspectorGenerator(s2); diff --git serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroSerde.java serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroSerde.java index 072225d..fb88a78 100644 --- serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroSerde.java +++ serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroSerde.java @@ -60,9 +60,10 @@ " }\n" + " ]\n" + "}"; + private static final Schema.Parser PARSER = new Schema.Parser(); - static final Schema originalSchema = Schema.parse(originalSchemaString); - static final Schema newSchema = Schema.parse(newSchemaString); + static final Schema originalSchema = PARSER.parse(originalSchemaString); + static final Schema newSchema = PARSER.parse(newSchemaString); @Test public void initializeDoesNotReuseSchemasFromConf() throws SerDeException { @@ -81,7 +82,7 @@ public void initializeDoesNotReuseSchemasFromConf() throws SerDeException { // Verify that the schema now within the configuration is the one passed // in via the properties - assertEquals(newSchema, Schema.parse(conf.get(AVRO_SERDE_SCHEMA))); + assertEquals(newSchema, PARSER.parse(conf.get(AVRO_SERDE_SCHEMA))); } @Test diff --git serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroSerdeUtils.java serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroSerdeUtils.java index 67d5570..570291a 100644 --- serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroSerdeUtils.java +++ serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroSerdeUtils.java @@ -56,9 +56,10 @@ " {\"name\":\"mayBeNull\", \"type\":[\"null\", \"string\"]}\n" + " ]\n" + "}"; + private static final Schema.Parser PARSER = new Schema.Parser(); private void testField(String schemaString, String fieldName, boolean shouldBeNullable) { - Schema s = Schema.parse(schemaString); + Schema s = PARSER.parse(schemaString); assertEquals(shouldBeNullable, isNullableType(s.getField(fieldName).schema())); } @@ -106,11 +107,11 @@ public void isNullableTypeIdentifiesNonUnionTypes() { @Test public void getTypeFromNullableTypePositiveCase() { - Schema s = Schema.parse(NULLABLE_UNION); + Schema s = PARSER.parse(NULLABLE_UNION); Schema typeFromNullableType = getOtherTypeFromNullableType(s.getField("mayBeNull").schema()); assertEquals(Schema.Type.STRING, typeFromNullableType.getType()); - s = Schema.parse(NULLABLE_UNION2); + s = PARSER.parse(NULLABLE_UNION2); typeFromNullableType = getOtherTypeFromNullableType(s.getField("mayBeNull").schema()); assertEquals(Schema.Type.STRING, typeFromNullableType.getType()); } @@ -126,7 +127,7 @@ public void determineSchemaFindsLiterals() throws Exception { String schema = TestAvroObjectInspectorGenerator.RECORD_SCHEMA; Properties props = new Properties(); props.put(AvroSerdeUtils.SCHEMA_LITERAL, schema); - Schema expected = Schema.parse(schema); + Schema expected = PARSER.parse(schema); assertEquals(expected, AvroSerdeUtils.determineSchemaOrThrowException(props)); } @@ -163,7 +164,7 @@ public void noneOptionWorksForSpecifyingSchemas() throws IOException, AvroSerdeE try { s = determineSchemaOrThrowException(props); assertNotNull(s); - assertEquals(Schema.parse(TestAvroObjectInspectorGenerator.RECORD_SCHEMA), s); + assertEquals(PARSER.parse(TestAvroObjectInspectorGenerator.RECORD_SCHEMA), s); } catch(AvroSerdeException he) { fail("Should have parsed schema literal, not thrown exception."); } @@ -197,7 +198,7 @@ public void determineSchemaCanReadSchemaFromHDFS() throws IOException, AvroSerde Schema schemaFromHDFS = AvroSerdeUtils.getSchemaFromFS(onHDFS, miniDfs.getFileSystem().getConf()); - Schema expectedSchema = Schema.parse(schemaString); + Schema expectedSchema = PARSER.parse(schemaString); assertEquals(expectedSchema, schemaFromHDFS); } finally { if(miniDfs != null) miniDfs.shutdown(); diff --git serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroSerializer.java serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroSerializer.java index f8161da..830e5f9 100644 --- serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroSerializer.java +++ serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroSerializer.java @@ -44,6 +44,7 @@ import static org.junit.Assert.assertTrue; public class TestAvroSerializer { + private static final Schema.Parser PARSER = new Schema.Parser(); private Schema buildSchema(String recordValues) { String s = "{\n" + @@ -53,7 +54,7 @@ private Schema buildSchema(String recordValues) { " \"fields\": [" + recordValues + " ] }"; - return Schema.parse(s); + return PARSER.parse(s); } /** @@ -231,7 +232,7 @@ public void canSerializeUnions() throws SerDeException, IOException { public void canSerializeEnums() throws SerDeException, IOException { String type = "{\"type\": \"enum\", \"name\": \"enum1_values\", " + "\"symbols\":[\"BLUE\",\"RED\",\"GREEN\"]}"; - Schema schema = Schema.parse(type); + Schema schema = PARSER.parse(type); String field = "{ \"name\":\"enum1\", \"type\": " + schema + " }"; for(enum1 e : enum1.values()) { GenericEnumSymbol symbol = new GenericData.EnumSymbol(schema, e.toString()); @@ -247,7 +248,7 @@ public void canSerializeNullableEnums() throws SerDeException, IOException { String type = "{\"type\": \"enum\", \"name\": \"enum1_values\",\n" + " \"namespace\": \"org.apache.hadoop.hive\",\n" + " \"symbols\":[\"BLUE\",\"RED\",\"GREEN\"]}"; - Schema schema = Schema.parse(type); + Schema schema = PARSER.parse(type); String field = "{ \"name\":\"nullableenum\", \"type\": [\"null\", " + schema + "] }"; GenericEnumSymbol symbol = new GenericData.EnumSymbol(schema, enum1.BLUE.toString()); GenericRecord r = serializeAndDeserialize(field, "nullableenum", symbol); diff --git serde/src/test/org/apache/hadoop/hive/serde2/avro/TestGenericAvroRecordWritable.java serde/src/test/org/apache/hadoop/hive/serde2/avro/TestGenericAvroRecordWritable.java index cf3b16c..3331736 100644 --- serde/src/test/org/apache/hadoop/hive/serde2/avro/TestGenericAvroRecordWritable.java +++ serde/src/test/org/apache/hadoop/hive/serde2/avro/TestGenericAvroRecordWritable.java @@ -47,10 +47,11 @@ " }\n" + " ]\n" + "}"; + private static final Schema.Parser PARSER = new Schema.Parser(); @Test public void writableContractIsImplementedCorrectly() throws IOException { - Schema schema = Schema.parse(schemaJSON); + Schema schema = PARSER.parse(schemaJSON); GenericRecord gr = new GenericData.Record(schema); gr.put("first", "The"); diff --git serde/src/test/org/apache/hadoop/hive/serde2/avro/TestSchemaReEncoder.java serde/src/test/org/apache/hadoop/hive/serde2/avro/TestSchemaReEncoder.java index 8dd6109..f8ec521 100644 --- serde/src/test/org/apache/hadoop/hive/serde2/avro/TestSchemaReEncoder.java +++ serde/src/test/org/apache/hadoop/hive/serde2/avro/TestSchemaReEncoder.java @@ -27,6 +27,8 @@ import org.junit.Test; public class TestSchemaReEncoder { + private static final Schema.Parser PARSER = new Schema.Parser(); + @Test public void schemasCanAddFields() throws SerDeException { String original = "{\n" + @@ -56,8 +58,8 @@ public void schemasCanAddFields() throws SerDeException { " }\n" + " ]\n" + "}"; - Schema originalSchema = Schema.parse(original); - Schema evolvedSchema = Schema.parse(evolved); + Schema originalSchema = PARSER.parse(original); + Schema evolvedSchema = PARSER.parse(evolved); GenericRecord record = new GenericData.Record(originalSchema); record.put("text", "it is a far better thing I do, yadda, yadda"); @@ -97,8 +99,8 @@ public void schemasCanAddFields() throws SerDeException { " }\n" + " ]\n" + "}"; - Schema originalSchema2 = Schema.parse(original2); - Schema evolvedSchema2 = Schema.parse(evolved2); + Schema originalSchema2 = PARSER.parse(original2); + Schema evolvedSchema2 = PARSER.parse(evolved2); record = new GenericData.Record(originalSchema2); record.put("a", 19); diff --git serde/src/test/org/apache/hadoop/hive/serde2/avro/TestThatEvolvedSchemasActAsWeWant.java serde/src/test/org/apache/hadoop/hive/serde2/avro/TestThatEvolvedSchemasActAsWeWant.java index 4b8cc98..44c3bc1 100644 --- serde/src/test/org/apache/hadoop/hive/serde2/avro/TestThatEvolvedSchemasActAsWeWant.java +++ serde/src/test/org/apache/hadoop/hive/serde2/avro/TestThatEvolvedSchemasActAsWeWant.java @@ -34,6 +34,8 @@ import static org.junit.Assert.assertTrue; public class TestThatEvolvedSchemasActAsWeWant { + private static final Schema.Parser PARSER = new Schema.Parser(); + @Test public void resolvedSchemasShouldReturnReaderSchema() throws IOException { // Need to verify that when reading a datum with an updated reader schema @@ -68,7 +70,7 @@ public void resolvedSchemasShouldReturnReaderSchema() throws IOException { " ]\n" + "}"; - Schema[] schemas = {Schema.parse(v0), Schema.parse(v1)}; + Schema[] schemas = {PARSER.parse(v0), PARSER.parse(v1)}; // Encode a schema with v0, write out. GenericRecord record = new GenericData.Record(schemas[0]);