├── .gitignore
├── .travis.yml
├── Changes.md
├── LICENSE
├── Readme.md
├── cascading-protobuf
├── pom.xml
└── src
│ └── main
│ └── java
│ └── com
│ └── twitter
│ └── elephantbird
│ └── cascading
│ └── protobuf
│ ├── ProtobufComparator.java
│ ├── ProtobufDeserializer.java
│ ├── ProtobufReflectionUtil.java
│ ├── ProtobufSerialization.java
│ └── ProtobufSerializer.java
├── cascading2
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── com
│ │ └── twitter
│ │ └── elephantbird
│ │ └── cascading2
│ │ └── scheme
│ │ ├── CombinedSequenceFile.java
│ │ ├── CombinedWritableSequenceFile.java
│ │ ├── LzoBinaryScheme.java
│ │ ├── LzoByteArrayScheme.java
│ │ ├── LzoProtobufB64LineScheme.java
│ │ ├── LzoProtobufBlockScheme.java
│ │ ├── LzoProtobufScheme.java
│ │ ├── LzoTextDelimited.java
│ │ ├── LzoTextLine.java
│ │ ├── LzoThriftB64LineScheme.java
│ │ └── LzoThriftScheme.java
│ └── test
│ └── java
│ └── com
│ └── twitter
│ └── elephantbird
│ └── cascading2
│ └── scheme
│ └── TestCombinedSequenceFile.java
├── cascading3
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── com
│ │ └── twitter
│ │ └── elephantbird
│ │ └── cascading3
│ │ └── scheme
│ │ ├── CombinedSequenceFile.java
│ │ ├── LzoBinaryScheme.java
│ │ ├── LzoByteArrayScheme.java
│ │ ├── LzoProtobufScheme.java
│ │ ├── LzoTextDelimited.java
│ │ ├── LzoTextLine.java
│ │ └── LzoThriftScheme.java
│ └── test
│ └── java
│ └── com
│ └── twitter
│ └── elephantbird
│ └── cascading3
│ └── scheme
│ └── TestCombinedSequenceFile.java
├── core
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── twitter
│ │ │ │ └── elephantbird
│ │ │ │ ├── mapred
│ │ │ │ ├── input
│ │ │ │ │ ├── DeprecatedFileInputFormatWrapper.java
│ │ │ │ │ ├── DeprecatedInputFormatValueCopier.java
│ │ │ │ │ ├── DeprecatedInputFormatWrapper.java
│ │ │ │ │ ├── DeprecatedLzoJsonInputFormat.java
│ │ │ │ │ ├── DeprecatedLzoTextInputFormat.java
│ │ │ │ │ ├── DeprecatedMultiInputFormat.java
│ │ │ │ │ └── DeprecatedRawMultiInputFormat.java
│ │ │ │ └── output
│ │ │ │ │ ├── DeprecatedFileOutputFormatWrapper.java
│ │ │ │ │ ├── DeprecatedLzoTextOutputFormat.java
│ │ │ │ │ └── DeprecatedOutputFormatWrapper.java
│ │ │ │ ├── mapreduce
│ │ │ │ ├── input
│ │ │ │ │ ├── Base64Codec.java
│ │ │ │ │ ├── BinaryConverterProvider.java
│ │ │ │ │ ├── FilterRecordReader.java
│ │ │ │ │ ├── IntegerListInputFormat.java
│ │ │ │ │ ├── IntegerListInputSplit.java
│ │ │ │ │ ├── IntegerListRecordReader.java
│ │ │ │ │ ├── LzoBinaryB64LineRecordReader.java
│ │ │ │ │ ├── LzoBinaryBlockRecordReader.java
│ │ │ │ │ ├── LzoGenericB64LineRecordReader.java
│ │ │ │ │ ├── LzoGenericBlockRecordReader.java
│ │ │ │ │ ├── LzoGenericProtobufBlockInputFormat.java
│ │ │ │ │ ├── LzoGenericProtobufBlockRecordReader.java
│ │ │ │ │ ├── LzoInputFormat.java
│ │ │ │ │ ├── LzoJsonInputFormat.java
│ │ │ │ │ ├── LzoJsonRecordReader.java
│ │ │ │ │ ├── LzoLineRecordReader.java
│ │ │ │ │ ├── LzoProtobufB64LineInputFormat.java
│ │ │ │ │ ├── LzoProtobufB64LineRecordReader.java
│ │ │ │ │ ├── LzoProtobufBlockInputFormat.java
│ │ │ │ │ ├── LzoProtobufBlockRecordReader.java
│ │ │ │ │ ├── LzoRecordReader.java
│ │ │ │ │ ├── LzoTextInputFormat.java
│ │ │ │ │ ├── LzoThriftB64LineInputFormat.java
│ │ │ │ │ ├── LzoThriftB64LineRecordReader.java
│ │ │ │ │ ├── LzoThriftBlockInputFormat.java
│ │ │ │ │ ├── LzoThriftBlockRecordReader.java
│ │ │ │ │ ├── LzoW3CLogInputFormat.java
│ │ │ │ │ ├── LzoW3CLogRecordReader.java
│ │ │ │ │ ├── MapReduceInputFormatWrapper.java
│ │ │ │ │ ├── MapredInputFormatCompatible.java
│ │ │ │ │ ├── MultiInputFormat.java
│ │ │ │ │ ├── RawMultiInputFormat.java
│ │ │ │ │ ├── RawSequenceFileInputFormat.java
│ │ │ │ │ ├── RawSequenceFileRecordReader.java
│ │ │ │ │ └── combine
│ │ │ │ │ │ ├── CompositeInputSplit.java
│ │ │ │ │ │ ├── CompositeRecordReader.java
│ │ │ │ │ │ └── DelegateCombineFileInputFormat.java
│ │ │ │ ├── io
│ │ │ │ │ ├── BinaryBlockReader.java
│ │ │ │ │ ├── BinaryBlockWriter.java
│ │ │ │ │ ├── BinaryConverter.java
│ │ │ │ │ ├── BinaryWritable.java
│ │ │ │ │ ├── DecodeException.java
│ │ │ │ │ ├── GenericWritable.java
│ │ │ │ │ ├── IdentityBinaryConverter.java
│ │ │ │ │ ├── ProtobufBlockReader.java
│ │ │ │ │ ├── ProtobufBlockWriter.java
│ │ │ │ │ ├── ProtobufConverter.java
│ │ │ │ │ ├── ProtobufWritable.java
│ │ │ │ │ ├── RawBlockReader.java
│ │ │ │ │ ├── RawBlockWriter.java
│ │ │ │ │ ├── RawBytesWritable.java
│ │ │ │ │ ├── SerializedBlock.java
│ │ │ │ │ ├── ThriftBlockReader.java
│ │ │ │ │ ├── ThriftBlockWriter.java
│ │ │ │ │ ├── ThriftConverter.java
│ │ │ │ │ ├── ThriftWritable.java
│ │ │ │ │ └── TypedProtobufWritable.java
│ │ │ │ └── output
│ │ │ │ │ ├── LzoBinaryB64LineRecordWriter.java
│ │ │ │ │ ├── LzoBinaryBlockOutputFormat.java
│ │ │ │ │ ├── LzoBinaryBlockRecordWriter.java
│ │ │ │ │ ├── LzoGenericBlockOutputFormat.java
│ │ │ │ │ ├── LzoOutputFormat.java
│ │ │ │ │ ├── LzoProtobufB64LineOutputFormat.java
│ │ │ │ │ ├── LzoProtobufB64LineRecordWriter.java
│ │ │ │ │ ├── LzoProtobufBlockOutputFormat.java
│ │ │ │ │ ├── LzoProtobufBlockRecordWriter.java
│ │ │ │ │ ├── LzoTextOutputFormat.java
│ │ │ │ │ ├── LzoThriftB64LineOutputFormat.java
│ │ │ │ │ ├── LzoThriftB64LineRecordWriter.java
│ │ │ │ │ ├── LzoThriftBlockOutputFormat.java
│ │ │ │ │ ├── LzoThriftBlockRecordWriter.java
│ │ │ │ │ └── WorkFileOverride.java
│ │ │ │ ├── thrift
│ │ │ │ ├── TStructDescriptor.java
│ │ │ │ ├── ThriftBinaryDeserializer.java
│ │ │ │ ├── ThriftBinaryProtocol.java
│ │ │ │ └── ThriftProtocolWrapper.java
│ │ │ │ └── util
│ │ │ │ ├── Codecs.java
│ │ │ │ ├── CoreTestUtil.java
│ │ │ │ ├── ExecuteOnClusterTool.java
│ │ │ │ ├── HadoopUtils.java
│ │ │ │ ├── HdfsUtils.java
│ │ │ │ ├── Inflection.java
│ │ │ │ ├── ListHelper.java
│ │ │ │ ├── LzoUtils.java
│ │ │ │ ├── Pair.java
│ │ │ │ ├── PathFilters.java
│ │ │ │ ├── Protobufs.java
│ │ │ │ ├── SplitUtil.java
│ │ │ │ ├── StreamSearcher.java
│ │ │ │ ├── Strings.java
│ │ │ │ ├── TaskHeartbeatThread.java
│ │ │ │ ├── ThriftToDynamicProto.java
│ │ │ │ ├── ThriftToProto.java
│ │ │ │ ├── ThriftUtils.java
│ │ │ │ ├── TypeRef.java
│ │ │ │ ├── Utils.java
│ │ │ │ └── W3CLogParser.java
│ │ └── protobuf
│ │ │ ├── address_book.proto
│ │ │ └── thrift_fixtures.proto
│ └── test
│ │ ├── java
│ │ ├── com
│ │ │ └── twitter
│ │ │ │ └── elephantbird
│ │ │ │ ├── mapreduce
│ │ │ │ ├── input
│ │ │ │ │ ├── TestBase64Codec.java
│ │ │ │ │ ├── TestIntegerListInputFormat.java
│ │ │ │ │ ├── TestLzoJsonRecordReader.java
│ │ │ │ │ ├── TestLzoProtobufBlockInputFormat.java
│ │ │ │ │ └── TestLzoTextInputFormat.java
│ │ │ │ ├── io
│ │ │ │ │ ├── TestProtobufWritable.java
│ │ │ │ │ └── TestTypedProtobufWritable.java
│ │ │ │ └── output
│ │ │ │ │ ├── TestLzoTextOutputFormat.java
│ │ │ │ │ └── TestSimpleProtobufOutputFormat.java
│ │ │ │ ├── thrift
│ │ │ │ └── TestThriftBinaryProtocol.java
│ │ │ │ └── util
│ │ │ │ ├── TestCodecs.java
│ │ │ │ ├── TestHadoopUtils.java
│ │ │ │ ├── TestHdfsUtils.java
│ │ │ │ ├── TestPathFilters.java
│ │ │ │ ├── TestSplitUtil.java
│ │ │ │ ├── TestStrings.java
│ │ │ │ ├── TestThriftToDynamicProto.java
│ │ │ │ └── TestThriftToProto.java
│ │ └── org
│ │ │ └── apache
│ │ │ └── thrift
│ │ │ └── Fixtures.java
│ │ ├── resources
│ │ └── com
│ │ │ └── twitter
│ │ │ └── elephantbird
│ │ │ └── util
│ │ │ └── sample_dir
│ │ │ ├── a.txt
│ │ │ ├── b.txt
│ │ │ └── nested
│ │ │ ├── c.txt
│ │ │ ├── d.txt
│ │ │ └── double_nested
│ │ │ └── e.txt
│ │ └── thrift
│ │ ├── DebugProtoTest.thrift
│ │ ├── address_book.thrift
│ │ └── test.thrift
├── thrift7
│ └── src
│ │ ├── main
│ │ └── java
│ │ │ └── com
│ │ │ └── twitter
│ │ │ └── elephantbird
│ │ │ └── thrift
│ │ │ ├── AbstractThriftBinaryDeserializer.java
│ │ │ └── AbstractThriftBinaryProtocol.java
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── twitter
│ │ └── elephantbird
│ │ └── thrift
│ │ └── TestThrift7BinaryProtocol.java
└── thrift9
│ └── src
│ ├── main
│ └── java
│ │ └── com
│ │ └── twitter
│ │ └── elephantbird
│ │ └── thrift
│ │ ├── AbstractThriftBinaryDeserializer.java
│ │ └── AbstractThriftBinaryProtocol.java
│ └── test
│ └── java
│ └── com
│ └── twitter
│ └── elephantbird
│ └── thrift
│ └── TestThrift9BinaryProtocol.java
├── crunch
├── Readme.md
├── pom.xml
└── src
│ └── main
│ └── java
│ └── com
│ └── twitter
│ └── elephantbird
│ └── crunch
│ ├── CrunchElephantBirdExample.java
│ ├── EBTypes.java
│ ├── LzoProtobufSource.java
│ ├── LzoProtobufSourceTarget.java
│ ├── LzoProtobufTarget.java
│ ├── LzoThriftSource.java
│ ├── LzoThriftSourceTarget.java
│ ├── LzoThriftTarget.java
│ ├── ProtobufFileReaderFactory.java
│ ├── ProtobufReadableData.java
│ ├── ThriftFileReaderFactory.java
│ └── ThriftReadableData.java
├── examples
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── com
│ │ └── twitter
│ │ └── elephantbird
│ │ └── examples
│ │ ├── DeprecatedWrapperWordCount.java
│ │ ├── LzoJsonWordCount.java
│ │ ├── LzoWordCount.java
│ │ ├── PhoneNumberCounter.java
│ │ ├── ProtobufMRExample.java
│ │ └── ThriftMRExample.java
│ ├── pig
│ ├── json_word_count.pig
│ ├── nested_json_get_distinct_items_from_nested_array.pig
│ ├── nested_json_get_top_level_property_values.pig
│ ├── nested_json_get_values_count_for_property_inside_nested_array.pig
│ ├── nested_json_pizza_sample_data.json
│ ├── people_phone_number_count.pig
│ └── people_phone_number_count_thrift.pig
│ ├── protobuf
│ ├── address_book.proto
│ └── examples.proto
│ └── thrift
│ ├── address_book.thrift
│ └── simple_age.thrift
├── hadoop-compat
├── pom.xml
└── src
│ └── main
│ └── java
│ └── com
│ └── twitter
│ └── elephantbird
│ └── util
│ └── HadoopCompat.java
├── hive
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── com
│ │ └── twitter
│ │ └── elephantbird
│ │ ├── hive
│ │ └── serde
│ │ │ ├── LzoProtobufHiveSerde.java
│ │ │ ├── ProtobufDeserializer.java
│ │ │ ├── ProtobufStructObjectInspector.java
│ │ │ └── ThriftSerDe.java
│ │ └── mapred
│ │ └── input
│ │ └── HiveMultiInputFormat.java
│ └── test
│ └── java
│ └── com
│ └── twitter
│ └── elephantbird
│ └── hive
│ └── serde
│ └── ProtobufDeserializerTest.java
├── lucene
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── com
│ │ └── twitter
│ │ └── elephantbird
│ │ ├── lucene
│ │ └── HdfsMergeTool.java
│ │ └── mapreduce
│ │ ├── input
│ │ ├── LuceneHdfsDirectory.java
│ │ ├── LuceneIndexCollectAllRecordReader.java
│ │ ├── LuceneIndexCountHitsRecordReader.java
│ │ ├── LuceneIndexInputFormat.java
│ │ └── LuceneIndexRecordReader.java
│ │ └── output
│ │ └── LuceneIndexOutputFormat.java
│ └── test
│ ├── java
│ └── com
│ │ └── twitter
│ │ └── elephantbird
│ │ └── mapreduce
│ │ ├── LuceneIndexingIntegrationTest.java
│ │ └── input
│ │ ├── TestLuceneIndexInputFormat.java
│ │ └── TestLuceneIndexRecordReader.java
│ └── resources
│ └── com
│ └── twitter
│ └── elephantbird
│ └── mapreduce
│ ├── input
│ └── sample_indexes
│ │ ├── index-1
│ │ └── index-1.txt
│ │ ├── index-2
│ │ └── data.txt
│ │ ├── more-indexes
│ │ └── index-3
│ │ │ └── data.txt
│ │ └── unrelated
│ │ └── index-unrelated.txt
│ ├── test_documents1.txt
│ ├── test_documents2.txt
│ └── test_documents3.txt
├── mahout
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── com
│ │ └── twitter
│ │ └── elephantbird
│ │ └── pig
│ │ └── mahout
│ │ └── VectorWritableConverter.java
│ └── test
│ └── java
│ └── com
│ └── twitter
│ └── elephantbird
│ └── pig
│ └── mahout
│ ├── TestDenseVectorWritableConverter.java
│ └── TestSequentialAccessSparseVectorWritableConverter.java
├── pig-lucene
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── com
│ │ └── twitter
│ │ └── elephantbird
│ │ └── pig
│ │ ├── load
│ │ └── LuceneIndexLoader.java
│ │ └── store
│ │ └── LuceneIndexStorage.java
│ └── test
│ ├── java
│ └── com
│ │ └── twitter
│ │ └── elephantbird
│ │ └── pig
│ │ ├── PigLuceneIndexingIntegrationTest.java
│ │ └── load
│ │ └── TestLuceneIndexLoader.java
│ └── resources
│ └── com
│ └── twitter
│ └── elephantbird
│ └── pig
│ ├── index.pig
│ ├── load
│ └── queryfile.txt
│ ├── search_file.pig
│ └── search_queries.pig
├── pig
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── com
│ │ └── twitter
│ │ └── elephantbird
│ │ └── pig
│ │ ├── load
│ │ ├── FilterLoadFunc.java
│ │ ├── HBaseLoader.java
│ │ ├── JsonLoader.java
│ │ ├── LocationAsTuple.java
│ │ ├── LzoBaseLoadFunc.java
│ │ ├── LzoBaseRegexLoader.java
│ │ ├── LzoJsonLoader.java
│ │ ├── LzoProtobufB64LinePigLoader.java
│ │ ├── LzoProtobufBlockPigLoader.java
│ │ ├── LzoRawBytesLoader.java
│ │ ├── LzoRegexLoader.java
│ │ ├── LzoTextLoader.java
│ │ ├── LzoThriftB64LinePigLoader.java
│ │ ├── LzoThriftBlockPigLoader.java
│ │ ├── LzoTokenizedLoader.java
│ │ ├── LzoW3CLogLoader.java
│ │ ├── MultiFormatLoader.java
│ │ ├── ProtobufPigLoader.java
│ │ ├── SequenceFileLoader.java
│ │ └── ThriftPigLoader.java
│ │ ├── piggybank
│ │ ├── BytesToThriftTuple.java
│ │ ├── GenericInvoker.java
│ │ ├── InvokeForDouble.java
│ │ ├── InvokeForFloat.java
│ │ ├── InvokeForInt.java
│ │ ├── InvokeForLong.java
│ │ ├── InvokeForString.java
│ │ ├── Invoker.java
│ │ ├── JsonStringToMap.java
│ │ ├── ProtobufBytesToTuple.java
│ │ └── ThriftBytesToTuple.java
│ │ ├── store
│ │ ├── BaseStoreFunc.java
│ │ ├── Bz2PigStorage.java
│ │ ├── LzoJsonStorage.java
│ │ ├── LzoPigStorage.java
│ │ ├── LzoProtobufB64LinePigStorage.java
│ │ ├── LzoProtobufBlockPigStorage.java
│ │ ├── LzoRawBytesStorage.java
│ │ ├── LzoThriftB64LinePigStorage.java
│ │ ├── LzoThriftBlockPigStorage.java
│ │ ├── LzoTokenizedStorage.java
│ │ └── SequenceFileStorage.java
│ │ └── util
│ │ ├── AbstractLazyTuple.java
│ │ ├── AbstractWritableConverter.java
│ │ ├── BytesWritableConverter.java
│ │ ├── GenericWritableConverter.java
│ │ ├── IntWritableConverter.java
│ │ ├── LazyThriftWritableConverter.java
│ │ ├── LoadFuncTupleIterator.java
│ │ ├── LongWritableConverter.java
│ │ ├── LzoBufferedPositionedInputStream.java
│ │ ├── NullWritableConverter.java
│ │ ├── PigCounterHelper.java
│ │ ├── PigToProtobuf.java
│ │ ├── PigToThrift.java
│ │ ├── PigTokenHelper.java
│ │ ├── PigUtil.java
│ │ ├── ProjectedProtobufTupleFactory.java
│ │ ├── ProjectedThriftTupleFactory.java
│ │ ├── ProtobufToPig.java
│ │ ├── ProtobufTuple.java
│ │ ├── ProtobufWritableConverter.java
│ │ ├── ResourceSchemaUtil.java
│ │ ├── SequenceFileConfig.java
│ │ ├── TextConverter.java
│ │ ├── ThriftToPig.java
│ │ ├── ThriftWritableConverter.java
│ │ ├── WritableConverter.java
│ │ ├── WritableLoadCaster.java
│ │ └── WritableStoreCaster.java
│ └── test
│ ├── java
│ └── com
│ │ └── twitter
│ │ └── elephantbird
│ │ ├── pig
│ │ ├── load
│ │ │ ├── TestBinaryLoaderWithManySplits.java
│ │ │ ├── TestErrorsInInput.java
│ │ │ ├── TestJsonLoader.java
│ │ │ ├── TestLocationAsTuple.java
│ │ │ ├── TestLzoTextLoader.java
│ │ │ ├── TestProtobufMultiFormatLoader.java
│ │ │ └── TestThriftMultiFormatLoader.java
│ │ ├── piggybank
│ │ │ ├── Fixtures.java
│ │ │ ├── TestInvoker.java
│ │ │ ├── TestJsonStringToMap.java
│ │ │ ├── TestPigToProto.java
│ │ │ ├── TestProtoToPig.java
│ │ │ └── TimeProtoConversions.java
│ │ ├── store
│ │ │ ├── FixedArgsConstructorIntWritableConverter.java
│ │ │ ├── TestLzoRawBytesStorage.java
│ │ │ ├── TestSequenceFileStorage.java
│ │ │ └── VarArgsConstructorIntWritableConverter.java
│ │ └── util
│ │ │ ├── AbstractTestProtobufWritableConverter.java
│ │ │ ├── AbstractTestThriftNameWritableConverter.java
│ │ │ ├── AbstractTestThriftWritableConverter.java
│ │ │ ├── AbstractTestWritableConverter.java
│ │ │ ├── IntegrationTestIntWritableConverter.java
│ │ │ ├── IntegrationTestLongWritableConverter.java
│ │ │ ├── IntegrationTestTextConverter.java
│ │ │ ├── PigTestUtil.java
│ │ │ ├── TestLoadFuncTupleIterator.java
│ │ │ ├── TestPigToProtobuf.java
│ │ │ ├── TestPigToThrift.java
│ │ │ ├── TestProtobufWritableConverter.java
│ │ │ ├── TestThriftNameWritableConverter.java
│ │ │ ├── TestThriftNameWritableConverterCustom.java
│ │ │ ├── TestThriftToPig.java
│ │ │ └── ThriftNameWritable.java
│ │ └── util
│ │ ├── TestProtobufs.java
│ │ └── TestW3CLogParser.java
│ ├── resources
│ ├── W3CLogParser.field.txt
│ ├── W3CLogParser.invalid.txt
│ ├── W3CLogParser.valid.txt
│ └── test-log4j.properties
│ └── thrift
│ └── map_keys.thrift
├── pom.xml
├── rcfile
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── com
│ │ └── twitter
│ │ └── elephantbird
│ │ ├── mapreduce
│ │ ├── input
│ │ │ ├── RCFileBaseInputFormat.java
│ │ │ ├── RCFileProtobufInputFormat.java
│ │ │ ├── RCFileProtobufTupleInputFormat.java
│ │ │ ├── RCFileThriftInputFormat.java
│ │ │ └── RCFileThriftTupleInputFormat.java
│ │ └── output
│ │ │ ├── RCFileOutputFormat.java
│ │ │ ├── RCFileProtobufOutputFormat.java
│ │ │ └── RCFileThriftOutputFormat.java
│ │ ├── pig
│ │ ├── load
│ │ │ ├── RCFileProtobufPigLoader.java
│ │ │ └── RCFileThriftPigLoader.java
│ │ └── store
│ │ │ ├── RCFilePigStorage.java
│ │ │ ├── RCFileProtobufPigStorage.java
│ │ │ └── RCFileThriftPigStorage.java
│ │ └── util
│ │ ├── ColumnarMetadata.java
│ │ └── RCFileUtil.java
│ └── test
│ └── java
│ └── com
│ └── twitter
│ └── elephantbird
│ └── pig
│ └── load
│ ├── TestRCFilePigStorage.java
│ ├── TestRCFileProtobufStorage.java
│ └── TestRCFileThriftStorage.java
├── release.sh
└── repo
└── com
└── twitter
└── elephant-bird
├── 2.1.10
├── elephant-bird-2.1.10.jar
├── elephant-bird-2.1.10.jar.md5
├── elephant-bird-2.1.10.jar.sha1
├── elephant-bird-2.1.10.pom
├── elephant-bird-2.1.10.pom.md5
└── elephant-bird-2.1.10.pom.sha1
├── 2.1.11
├── elephant-bird-2.1.11.jar
├── elephant-bird-2.1.11.jar.md5
├── elephant-bird-2.1.11.jar.sha1
├── elephant-bird-2.1.11.pom
├── elephant-bird-2.1.11.pom.md5
└── elephant-bird-2.1.11.pom.sha1
├── 2.1.5
├── elephant-bird-2.1.5.jar
├── elephant-bird-2.1.5.jar.md5
├── elephant-bird-2.1.5.jar.sha1
├── elephant-bird-2.1.5.pom
├── elephant-bird-2.1.5.pom.md5
└── elephant-bird-2.1.5.pom.sha1
├── 2.1.6
├── elephant-bird-2.1.6.jar
├── elephant-bird-2.1.6.jar.md5
├── elephant-bird-2.1.6.jar.sha1
├── elephant-bird-2.1.6.pom
├── elephant-bird-2.1.6.pom.md5
└── elephant-bird-2.1.6.pom.sha1
├── 2.1.7
├── elephant-bird-2.1.7.jar
├── elephant-bird-2.1.7.jar.md5
├── elephant-bird-2.1.7.jar.sha1
├── elephant-bird-2.1.7.pom
├── elephant-bird-2.1.7.pom.md5
└── elephant-bird-2.1.7.pom.sha1
├── 2.1.8
├── elephant-bird-2.1.8.jar
├── elephant-bird-2.1.8.jar.md5
├── elephant-bird-2.1.8.jar.sha1
├── elephant-bird-2.1.8.pom
├── elephant-bird-2.1.8.pom.md5
└── elephant-bird-2.1.8.pom.sha1
├── 2.1.9
├── elephant-bird-2.1.9.jar
├── elephant-bird-2.1.9.jar.md5
├── elephant-bird-2.1.9.jar.sha1
├── elephant-bird-2.1.9.pom
├── elephant-bird-2.1.9.pom.md5
└── elephant-bird-2.1.9.pom.sha1
├── 2.2.0
├── elephant-bird-2.2.0.jar
├── elephant-bird-2.2.0.jar.md5
├── elephant-bird-2.2.0.jar.sha1
├── elephant-bird-2.2.0.pom
├── elephant-bird-2.2.0.pom.md5
└── elephant-bird-2.2.0.pom.sha1
├── 2.2.1
├── elephant-bird-2.2.1.jar
├── elephant-bird-2.2.1.jar.md5
├── elephant-bird-2.2.1.jar.sha1
├── elephant-bird-2.2.1.pom
├── elephant-bird-2.2.1.pom.md5
└── elephant-bird-2.2.1.pom.sha1
├── 2.2.2
├── elephant-bird-2.2.2.jar
├── elephant-bird-2.2.2.jar.md5
├── elephant-bird-2.2.2.jar.sha1
├── elephant-bird-2.2.2.pom
├── elephant-bird-2.2.2.pom.md5
└── elephant-bird-2.2.2.pom.sha1
├── 2.2.3
├── elephant-bird-2.2.3.jar
├── elephant-bird-2.2.3.jar.md5
├── elephant-bird-2.2.3.jar.sha1
├── elephant-bird-2.2.3.pom
├── elephant-bird-2.2.3.pom.md5
└── elephant-bird-2.2.3.pom.sha1
├── maven-metadata.xml
├── maven-metadata.xml.md5
└── maven-metadata.xml.sha1
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | *.ipr
3 | *.iws
4 | *.tmproj
5 | *.swp
6 | *~
7 | .DS_Store
8 | .classpath
9 | .generators
10 | .idea
11 | .project
12 | .settings
13 | **/target
14 | target
15 | # TODO fix this
16 | core/test.txt
17 | core/test2.txt
18 | core/test3.txt
19 | build
20 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: java
2 |
3 | before_install:
4 | # An attempt to fix the buffer overflow in the pig tests
5 | # /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/libnet.so(Java_java_net_Inet4AddressImpl_getLocalHostName+0x190)[
6 | # https://github.com/travis-ci/travis-ci/issues/1484
7 | - echo "127.0.0.1 " `hostname` | sudo tee /etc/hosts
8 | - sudo apt-get update -qq
9 |
10 | install: true
11 | matrix:
12 | include:
13 | - jdk: openjdk7
14 | env: THRIFT_TAG=0.7.0
15 | - jdk: openjdk7
16 | env: THRIFT_TAG=0.7.0 HADOOP_PROFILE=-Phadoop2
17 | - jdk: openjdk7
18 | env: THRIFT_TAG=0.10.0
19 | - jdk: openjdk7
20 | env: THRIFT_TAG=0.10.0 HADOOP_PROFILE=-Phadoop2
21 |
22 | script: "./release.sh -c travis"
23 |
--------------------------------------------------------------------------------
/cascading-protobuf/pom.xml:
--------------------------------------------------------------------------------
1 |
2 | mapreduce
interface to be used in contexts where
15 | * a {@link org.apache.hadoop.mapred.FileOutputFormat} old
mapred
16 | * interface is required.
19 | *
20 | * Use MultiInputFormat if RawBytesWritable is required or suffices.
21 | */
22 | @SuppressWarnings("rawtypes")
23 | public class RawMultiInputFormat extends MultiInputFormat {
24 |
25 | @SuppressWarnings("unchecked")
26 | public RawMultiInputFormat() {
27 | super(new TypeRef
23 | *
24 | * If classLoader fails to load the class, this returns silently.
17 | * TypeRef
27 | *
28 | * See the ProtobufBlockWriter for how to write data files like "person_data" above.
29 | */
30 |
31 | public class ProtobufBlockReader
13 | * ProtobufBlockWriter
21 | * To make an output stream for an lzo-compressed file in a Path named lzoPath in HDFS,
22 | * use the following code:
23 | *
24 | * Configuration conf = new Configuration();
25 | * FileSystem fs = lzoPath.getFileSystem(conf);
26 | * FSDataOutputStream outputStream = fs.create(lzoPath, true);
27 | * LzopCodec codec = new LzopCodec();
28 | * codec.setConf(conf);
29 | * OutputStream lzopOutputStream = codec.createOutputStream(outputStream);
30 | *
31 | *
32 | * See the ProtobufBlockReader for how to read data files like "person_data" above.
33 | */
34 | public class ProtobufBlockWriter
11 | * It is just there to make the Protobuf dependency clear.
12 | *
13 | * @param
18 | *
19 | * Do not forget to set Thrift class using setClassConf().
20 | */
21 | public class LzoThriftB64LineOutputFormat
12 | * It is just there to make the Protobuf dependency clear.
13 | *
14 | * @param
18 | *
19 | * Do not forget to set Thrift class using setClassConf().
20 | */
21 | public class LzoThriftBlockOutputFormat
6 | * Throws a RuntimeExcepiton if the class is not found.
7 | *
8 | * @see {@link Class#forName(String, boolean, ClassLoader)
9 | */
10 | public static Class> classForName(String className, ClassLoader classLoader) {
11 | try {
12 | return Class.forName(className, true, classLoader);
13 | } catch (ClassNotFoundException e) {
14 | throw new RuntimeException("failed to load class " + className, e);
15 | }
16 | }
17 |
18 | /**
19 | * Ensures the classLoader
is 'consistent' with the original
20 | * class loader that created existingClass
. Asserts
21 | * classLoader.loadClass(existingClass.getName()) == existingClass
.
22 | *
25 | * Throws a RuntimeException with detailed message if the consistency
26 | * check fails.
27 | *
28 | * @param existingClass
29 | * @param classLoader
30 | */
31 | public static void ensureClassLoaderConsistency(Class> existingClass,
32 | ClassLoader classLoader) {
33 | Class> loadedClass;
34 | try {
35 | loadedClass = Class.forName(existingClass.getName(), true, classLoader);
36 | } catch (ClassNotFoundException e) {
37 | return; // let class loading fail some where else.
38 | }
39 |
40 | if (!loadedClass.equals(existingClass)) {
41 | throw new RuntimeException("The class loader is incosistent with the "
42 | + "class loader that initially loaded "
43 | + existingClass.getClass()
44 | + ". This can lead to various unexpected side effects.");
45 |
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/core/src/main/protobuf/address_book.proto:
--------------------------------------------------------------------------------
1 | package com.twitter.data.proto.tutorial;
2 |
3 | // The sample protocol buffer file that Google uses in their examples at
4 | // https://code.google.com/p/protobuf.
5 | // Used in this project for tests and examples.
6 |
7 | option java_outer_classname = "AddressBookProtos";
8 |
9 | message Person {
10 | required string name = 1;
11 | required int32 id = 2;
12 | optional string email = 3;
13 |
14 | enum PhoneType {
15 | MOBILE = 0;
16 | HOME = 1;
17 | WORK = 2;
18 | }
19 |
20 | message PhoneNumber {
21 | required string number = 1;
22 | optional PhoneType type = 2 [default = HOME];
23 | }
24 |
25 | repeated PhoneNumber phone = 4;
26 | }
27 |
28 | message AddressBook {
29 | repeated Person person = 1;
30 | optional bytes byteData = 2;
31 | }
32 |
33 | // used testing handling of unknown fields
34 | message PersonWithoutEmail {
35 | required string name = 1;
36 | required int32 id = 2;
37 | repeated Person.PhoneNumber phone = 4;
38 | }
39 |
--------------------------------------------------------------------------------
/core/src/main/protobuf/thrift_fixtures.proto:
--------------------------------------------------------------------------------
1 | package com.twitter.elephantbird.examples.proto;
2 |
3 | message OneOfEach {
4 | optional bool im_true = 1;
5 | optional bool im_false = 2;
6 | optional int32 a_bite = 3;
7 | optional int32 integer16 = 4;
8 | optional int32 integer32 = 5;
9 | optional int64 integer64 = 6;
10 | optional double double_precision = 7;
11 | optional string some_characters = 8;
12 | optional string zomg_unicode = 9;
13 | optional bool what_who = 10;
14 | optional bytes base64 = 11;
15 | repeated int32 byte_list = 12;
16 | repeated int32 i16_list = 13;
17 | repeated int64 i64_list = 14;
18 | };
--------------------------------------------------------------------------------
/core/src/test/java/com/twitter/elephantbird/mapreduce/input/TestLzoJsonRecordReader.java:
--------------------------------------------------------------------------------
1 | package com.twitter.elephantbird.mapreduce.input;
2 |
3 | import junit.framework.TestCase;
4 | import org.apache.hadoop.io.MapWritable;
5 | import org.apache.hadoop.io.Text;
6 | import org.json.simple.parser.JSONParser;
7 | import org.junit.Test;
8 |
9 | /**
10 | * Test the LzoJsonRecordReader, make sure it reads the data properly.
11 | */
12 | public class TestLzoJsonRecordReader extends TestCase {
13 |
14 | /**
15 | * {@link LzoJsonRecordReader#decodeLineToJson(JSONParser, Text, MapWritable)}
16 | * must not choke on lines containing the word "null" (i.e. not the null
17 | * value but the string "null").
18 | *
19 | * This can happen when the original input line to JSONParser contains "null"
20 | * as a string. In this case {@link JSONParser#parse(java.io.Reader)} will
21 | * return a null reference.
22 | *
23 | */
24 | @Test
25 | public void testNullString() {
26 | Text line = new Text("null");
27 | boolean result = LzoJsonRecordReader.decodeLineToJson(new JSONParser(), line, new MapWritable());
28 | assertEquals("Parsing line with contents 'null'", false, result);
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/core/src/test/java/com/twitter/elephantbird/mapreduce/input/TestLzoProtobufBlockInputFormat.java:
--------------------------------------------------------------------------------
1 | package com.twitter.elephantbird.mapreduce.input;
2 |
3 | import static org.junit.Assert.assertTrue;
4 |
5 | import org.junit.Test;
6 |
7 | public class TestLzoProtobufBlockInputFormat {
8 |
9 | @Test
10 | public void testCreation() {
11 | assertTrue("we need to write a real test", true);
12 | /*
13 | * LzoDeviceInputFormat a = new LzoDeviceInputFormat();
14 |
15 | System.out.println("a's class is " + a.getClass());
16 |
17 | LzoStatusInputFormat b = new LzoStatusInputFormat();
18 | System.out.println("b's class is " + b.getClass());
19 |
20 | Message m = Protobufs.instantiateFromClassName("com.twitter.elephantbird.data.proto.Tables.Device");
21 | System.out.println("m's classname is " + m.getClass() + " and it looks like[ " + m + " ]");
22 |
23 | Device m2 = Protobufs. LzoProtobufSourceTarget at(Path path, Class protoClass) {
24 | return new LzoProtobufSourceTarget(path, EBTypes.protos(protoClass));
25 | }
26 |
27 | public LzoProtobufSourceTarget(Path path, PType> LzoThriftSourceTarget at(Path path, Class thriftClass) {
24 | return new LzoThriftSourceTarget(path, EBTypes.thrifts(thriftClass));
25 | }
26 |
27 | public LzoThriftSourceTarget(Path path, PType