SlideShare a Scribd company logo
Flexible Indexing in Hadoop
         Dmitriy Ryaboy @squarecog
        Analytics Infrastructure @ Twitter
    Hadoop Summit, San Jose, CA June 2012
@JoinTheFlock | Hadoop Summit, June 14 2012   2
@JoinTheFlock | Hadoop Summit, June 14 2012   3
Hadoop is great at plowing
through data


                                                              @JoinTheFlock | Hadoop Summit, June 14 2012   4
       Image source: http://en.wikipedia.org/wiki/File:Snowplow_in_the_morning.jpg
And we do plow
   10s of Thousands of Jobs per day

100 TB (uncompressed) ingested daily

Many users and diverse use cases




                                       @JoinTheFlock | Hadoop Summit, June 14 2012   5
Looking for needles in
haystacks.




                                                         @JoinTheFlock | Hadoop Summit, June 14 2012   6

        Image Source: http://en.wikipedia.org/wiki/File:July_1903_-_on_the_Gaisberg,_nr_Salzburg.JPG
Looking for needles in
haystacks.




With snowplows.
                                                         @JoinTheFlock | Hadoop Summit, June 14 2012   6

        Image Source: http://en.wikipedia.org/wiki/File:July_1903_-_on_the_Gaisberg,_nr_Salzburg.JPG
A Pig Script
 event_logs = load '/logs/lots_of_data'
                     using ThriftPigLoader('thrift.gen.LogEvent');
 filtered_logs = filter event_logs by event == 'something_rare';


 -- Then do stuff.




90% of the mappers in this job output no data.
We can do better...


                                                   @JoinTheFlock | Hadoop Summit, June 14 2012   7
Find smaller haystacks.




                                                                     @JoinTheFlock | Hadoop Summit, June 14 2012   8
     Image Source: http://en.wikipedia.org/wiki/File:July_1903_-_on_the_Gaisberg,_nr_Salzburg.JPG
Use subpartitions!




                     @JoinTheFlock | Hadoop Summit, June 14 2012   9
Use subpartitions!
• tablename/year/month/day/hour/bucket




                                         @JoinTheFlock | Hadoop Summit, June 14 2012   9
Use subpartitions!
• tablename/year/month/day/hour/bucket
• Only so many things you can partition by




                                             @JoinTheFlock | Hadoop Summit, June 14 2012   9
Use subpartitions!
• tablename/year/month/day/hour/bucket
• Only so many things you can partition by
• Up-front planning required




                                             @JoinTheFlock | Hadoop Summit, June 14 2012   9
Use subpartitions!
• tablename/year/month/day/hour/bucket
• Only so many things you can partition by
• Up-front planning required
• Rewrite or duplicate for different query patterns




                                              @JoinTheFlock | Hadoop Summit, June 14 2012   9
Keep the data sorted!




                        @JoinTheFlock | Hadoop Summit, June 14 2012   10
Keep the data sorted!
• Painful to maintain




                        @JoinTheFlock | Hadoop Summit, June 14 2012   10
Keep the data sorted!
• Painful to maintain
• Only one sort order at a time




                                  @JoinTheFlock | Hadoop Summit, June 14 2012   10
Keep the data sorted!
• Painful to maintain
• Only one sort order at a time
• Rewrite or duplicate for different query patterns




                                              @JoinTheFlock | Hadoop Summit, June 14 2012   10
Trojan Layouts*




                  * http://infosys.uni-saarland.de/publications/JQD11.pdf
                                     @JoinTheFlock | Hadoop Summit, June 14 2012   11
Trojan Layouts*
• Identify interesting column groupings




                             * http://infosys.uni-saarland.de/publications/JQD11.pdf
                                                @JoinTheFlock | Hadoop Summit, June 14 2012   11
Trojan Layouts*
• Identify interesting column groupings
• Use different column groupings per HDFS block replica




                             * http://infosys.uni-saarland.de/publications/JQD11.pdf
                                                @JoinTheFlock | Hadoop Summit, June 14 2012   11
Trojan Layouts*
• Identify interesting column groupings
• Use different column groupings per HDFS block replica
• Requires changes to NN




                             * http://infosys.uni-saarland.de/publications/JQD11.pdf
                                                @JoinTheFlock | Hadoop Summit, June 14 2012   11
Trojan Layouts*
• Identify interesting column groupings
• Use different column groupings per HDFS block replica
• Requires changes to NN
• ... and increases load on NN




                             * http://infosys.uni-saarland.de/publications/JQD11.pdf
                                                @JoinTheFlock | Hadoop Summit, June 14 2012   11
HBase!




         @JoinTheFlock | Hadoop Summit, June 14 2012   12
HBase!
• Good solution in many cases!




                                 @JoinTheFlock | Hadoop Summit, June 14 2012   12
HBase!
• Good solution in many cases!
• Maintenance overhead




                                 @JoinTheFlock | Hadoop Summit, June 14 2012   12
HBase!
• Good solution in many cases!
• Maintenance overhead
• All data must live in HBase




                                 @JoinTheFlock | Hadoop Summit, June 14 2012   12
HBase!
• Good solution in many cases!
• Maintenance overhead
• All data must live in HBase
• Full table scans slower than MR




                                    @JoinTheFlock | Hadoop Summit, June 14 2012   12
HBase!
• Good solution in many cases!
• Maintenance overhead
• All data must live in HBase
• Full table scans slower than MR
• Again with the up-front design




                                    @JoinTheFlock | Hadoop Summit, June 14 2012   12
HBase!
• Good solution in many cases!
• Maintenance overhead
• All data must live in HBase
• Full table scans slower than MR
• Again with the up-front design
  • Secondary Indexes can help




                                    @JoinTheFlock | Hadoop Summit, June 14 2012   12
Hive!




        @JoinTheFlock | Hadoop Summit, June 14 2012   13
Hive!
• That kind of works, actually.




                                  @JoinTheFlock | Hadoop Summit, June 14 2012   13
Hive
Generic Interface for defining indexing behavior.


Reference implementation: “compact” index
 value -> list of HDFS blocks; drop unneeded blocks.


Other indexes available (bitmap in 0.8)


It’ll even update indexes as you add partitions.




                                              @JoinTheFlock | Hadoop Summit, June 14 2012   14
WIN!
Done, Right?




               @JoinTheFlock | Hadoop Summit, June 14 2012   15
Hive
Good news if your data is in Hive!


Bad news if your world is a little bigger.


Indexing is tightly coupled to Hive.


No interoperability with the rest of the Hadoop stack.




                                             @JoinTheFlock | Hadoop Summit, June 14 2012   16
Democracy of Tools




                                                                                 @JoinTheFlock | Hadoop Summit, June 14 2012   17
   Image Source: http://en.wikipedia.org/wiki/File:20070124_sejm_sala_plenarna.jpg
Democracy of Tools
• Pig




                                                                                      @JoinTheFlock | Hadoop Summit, June 14 2012   17
        Image Source: http://en.wikipedia.org/wiki/File:20070124_sejm_sala_plenarna.jpg
Democracy of Tools
• Pig
• Raw Map-Reduce




                                                                                   @JoinTheFlock | Hadoop Summit, June 14 2012   17
     Image Source: http://en.wikipedia.org/wiki/File:20070124_sejm_sala_plenarna.jpg
Democracy of Tools
• Pig
• Raw Map-Reduce
• Cascading DSLs (Scalding, Cascalog, Py-Cascading)




                                                                                    @JoinTheFlock | Hadoop Summit, June 14 2012   17
      Image Source: http://en.wikipedia.org/wiki/File:20070124_sejm_sala_plenarna.jpg
Democracy of Tools
• Pig
• Raw Map-Reduce
• Cascading DSLs (Scalding, Cascalog, Py-Cascading)
• Mahout




                                                                                    @JoinTheFlock | Hadoop Summit, June 14 2012   17
      Image Source: http://en.wikipedia.org/wiki/File:20070124_sejm_sala_plenarna.jpg
Democracy of Tools
• Pig
• Raw Map-Reduce
• Cascading DSLs (Scalding, Cascalog, Py-Cascading)
• Mahout
• Maybe even Hive



                                                                                    @JoinTheFlock | Hadoop Summit, June 14 2012   17
      Image Source: http://en.wikipedia.org/wiki/File:20070124_sejm_sala_plenarna.jpg
Design Goals




               @JoinTheFlock | Hadoop Summit, June 14 2012   18
Design Goals




               @JoinTheFlock | Hadoop Summit, June 14 2012   18
Design Goals

• Minimal Job/Script modification required




                                 @JoinTheFlock | Hadoop Summit, June 14 2012   18
Design Goals

• Minimal Job/Script modification required
• As low in the stack as possible




                                 @JoinTheFlock | Hadoop Summit, June 14 2012   18
Design Goals

• Minimal Job/Script modification required
• As low in the stack as possible
 • In fact, pretty sure we could get Hive to use this...




                                        @JoinTheFlock | Hadoop Summit, June 14 2012   18
Design Goals

• Minimal Job/Script modification required
• As low in the stack as possible
 • In fact, pretty sure we could get Hive to use this...
• No unnecessary copies of data




                                        @JoinTheFlock | Hadoop Summit, June 14 2012   18
Design Goals

• Minimal Job/Script modification required
• As low in the stack as possible
 • In fact, pretty sure we could get Hive to use this...
• No unnecessary copies of data
• Allow post-factum indexing




                                        @JoinTheFlock | Hadoop Summit, June 14 2012   18
Design Goals

• Minimal Job/Script modification required
• As low in the stack as possible
 • In fact, pretty sure we could get Hive to use this...
• No unnecessary copies of data
• Allow post-factum indexing
• Graceful degradation




                                        @JoinTheFlock | Hadoop Summit, June 14 2012   18
Design Goals

• Minimal Job/Script modification required
• As low in the stack as possible
 • In fact, pretty sure we could get Hive to use this...
• No unnecessary copies of data
• Allow post-factum indexing
• Graceful degradation
• Flexible on-disk representation


                                        @JoinTheFlock | Hadoop Summit, June 14 2012   18
Elephant-Twin
Twitter’s library for creating indexes in Hadoop
https://github.com/twitter/elephant-twin
https://github.com/twitter/elephant-twin-lzo




                                               @JoinTheFlock | Hadoop Summit, June 14 2012   19
Block-Level Indexes
For each value, record the block it occurs in


“Block” can be HDFS block (100s of MBs)
Or LZO block (100s of KBs)
Or SequenceFile block
Or RCFile block ...


Ignore irrelevant blocks
Scan relevant blocks using original InputFormat




                                                @JoinTheFlock | Hadoop Summit, June 14 2012   20
Record-Level Indexes
For each value, record some representation of the record


Can be value + offset, as in bitmap indexes
Can be transformed projection of records, as in Lucene indexes


Some queries can be answered directly from index.




                                              @JoinTheFlock | Hadoop Summit, June 14 2012   21
Indexing:
                 MR
                               Index
                 job
   InputFormat


                 Data



                        @JoinTheFlock | Hadoop Summit, June 14 2012   22
Creating an Index
     public abstract class AbstractBlockIndexingJob {
    protected abstract List<String> getInput();
    protected abstract String getIndex();
    protected abstract String getInputFormat();
    protected abstract String getValueClass();
    protected abstract String getColumnName();
    protected abstract Job setMapper(Job job);
}

public abstract class AbstractLuceneIndexingJob {
  // Similar.
}




                                            @JoinTheFlock | Hadoop Summit, June 14 2012   23
Creating an Index
Mapper transforms the records: emit <DocId, Value>
                     Key                           Value
                 Block Offset                 Column Value
                   Tweet Id                       Text


Block helper:
public abstract class BlockIndexingMapper<KIN, VIN> extends
Mapper<KIN, VIN, TextLongPairWritable, LongPairWritable> {}


Lucene helper:
public abstract class AbstractIndexingMapper<KIN, VIN, KOUT, VOUT>
extends Mapper<KIN, VIN, KOUT, VOUT>
  abstract protected boolean filter(KIN k, VIN v);
  abstract protected KOUT buildOutputKey(KIN k, VIN v);

                                          @JoinTheFlock | Hadoop Summit, June 14 2012   24
Creating an Index
Reducer writes appropriately processed indexes and metadata.


MapFile block index:
public class MapFileIndexingReducer
    extends Reducer<TextLongPairWritable, LongPairWritable,
                    Text, ListLongPair>

Lucene index:
public abstract class AbstractLuceneIndexingReducer<KIN, VIN>
    extends Reducer<KIN, VIN, NullWritable, NullWritable> {
  protected abstract Document buildDocument(KIN k, VIN v);
}




                                          @JoinTheFlock | Hadoop Summit, June 14 2012   25
Creating an Index: Metadata
struct FileIndexDescriptor {
    1: DocType docType
    2: IndexType indexType
    3: i32 indexVersion
    4: string sourcePath
    5: FileChecksum checksum
    6: list<IndexedField> indexedFields
}
struct ETwinIndexDescriptor {
    1: list<FileIndexDescriptor> fileIndexDescriptors
    2: i32 indexPart
    3: optional map<string, string> options
}
                                              @JoinTheFlock | Hadoop Summit, June 14 2012   26
MR
       job     searchKey



                    IndexedInputFormat

Retrieval:
                                Index




             Data



                           @JoinTheFlock | Hadoop Summit, June 14 2012   27
InputFormat
  public class BlockIndexedFileInputFormat<K, V> extends
FileInputFormat<K, V> {

    // Indexing jobs call this function to set up indexing job
related parameters.
    public static void setIndexOptions(Job job,
      String inputformatClass, String valueClass,
      String indexDir, String columnName)

    // Searching jobs call this function to set up searching job
related parameters.
    public static void setSearchOptions(Job job,
      String inputformatClass, String valueClass,
      String indexDir, BinaryExpression filter)
}




                                         @JoinTheFlock | Hadoop Summit, June 14 2012   28
BinaryExpression
  public BinaryExpression(
  Expression lhs, Expression rhs, OpType opType)

public static enum OpType {
    OP_PLUS (" + "),
    OP_MINUS(" - "),
    ...
    OP_EQ(" == "),
    OP_NE(" != "),
    ...
    OP_AND(" and "),
    OP_OR(" or "),
    ...
    TERM_COL(" Column "),
    TERM_CONST(" Constant ");
}



                                         @JoinTheFlock | Hadoop Summit, June 14 2012   29
Pig Integration
    event_logs = load '/logs/lots_of_data'
    using ThriftPigLoader(
	       'thrift.gen.LogEvent');
	
    filtered_logs = filter event_logs by event == 'something_rare';
    -- Then do stuff.




                                               @JoinTheFlock | Hadoop Summit, June 14 2012   30
Pig Integration
    register elephant-twin-1.0.jar
    event_logs = load '/logs/lots_of_data'
    using IndexedLZOPigLoader(
	      'ThriftPigLoader',
	      'thrift.gen.LogEvent',
	      '/user/dmitriy/etwin');
	
    -- Pig will automatically push this down into the Loader and InputFormat
    filtered_logs = filter event_logs by event == 'something_rare';




                                                      @JoinTheFlock | Hadoop Summit, June 14 2012   31
Optimization: merge neighbors
     HDFS Block 1        HDFS Block 2




                     @JoinTheFlock | Hadoop Summit, June 14 2012   32
Optimization: merge neighbors
           HDFS Block 1                       HDFS Block 2




Merge neighbors, share the scan.
(Limit expansion to size of HDFS block)


                                          @JoinTheFlock | Hadoop Summit, June 14 2012   33
Optimization: merge neighbors
            HDFS Block 1                           HDFS Block 2




Scans are faster than random reads.. allow gaps?
Turns out, not that much faster. Better to jump.


                                              @JoinTheFlock | Hadoop Summit, June 14 2012   34
Optimization: combine small splits
              HDFS Block 1                            HDFS Block 2




      match                                             match                          match




                                Generated Split


Combine small relevant spans into single splits.
Try to take locality into account.



                                                  @JoinTheFlock | Hadoop Summit, June 14 2012   35
Applicability
Most keys occur in very few blocks!
Most frequent key only occurs in half the blocks.




                                             @JoinTheFlock | Hadoop Summit, June 14 2012   36
Results
Applicable Jobs take 5-10x fewer resources


Ad-hoc jobs particularly likely to benefit


“Real” indexes still faster..
 -- but can be represented using the same abstraction




                                             @JoinTheFlock | Hadoop Summit, June 14 2012   37
Future Work




                                                                                @JoinTheFlock | Hadoop Summit, June 14 2012   38
   Image Source:http://en.wikipedia.org/wiki/File:Shasta_dam_under_construction_new_edit.jpg
Future Work


  • Regex matching on keys




                                                                                 @JoinTheFlock | Hadoop Summit, June 14 2012   38
    Image Source:http://en.wikipedia.org/wiki/File:Shasta_dam_under_construction_new_edit.jpg
Future Work


  • Regex matching on keys
  • Better Pig pushdown support




                                                                                 @JoinTheFlock | Hadoop Summit, June 14 2012   38
    Image Source:http://en.wikipedia.org/wiki/File:Shasta_dam_under_construction_new_edit.jpg
Future Work


  • Regex matching on keys
  • Better Pig pushdown support
  • MultiIndexInputFormat




                                                                                 @JoinTheFlock | Hadoop Summit, June 14 2012   38
    Image Source:http://en.wikipedia.org/wiki/File:Shasta_dam_under_construction_new_edit.jpg
Future Work


  • Regex matching on keys
  • Better Pig pushdown support
  • MultiIndexInputFormat
  • Traditional indexes under ETwin




                                                                                 @JoinTheFlock | Hadoop Summit, June 14 2012   38
    Image Source:http://en.wikipedia.org/wiki/File:Shasta_dam_under_construction_new_edit.jpg
Future Work


  • Regex matching on keys
  • Better Pig pushdown support
  • MultiIndexInputFormat
  • Traditional indexes under ETwin
  • Index maintenance (via HCatalog?)




                                                                                 @JoinTheFlock | Hadoop Summit, June 14 2012   38
    Image Source:http://en.wikipedia.org/wiki/File:Shasta_dam_under_construction_new_edit.jpg
Questions?
@squarecog


Sounds like fun? We are hiring.



                                  @JoinTheFlock | Hadoop Summit, June 14 2012   39

More Related Content

PDF
Integrating Hadoop Into the Enterprise – Hadoop Summit 2012
PDF
Jan 2013 HUG: Cloud-Friendly Hadoop and Hive
PDF
Data Analysis with Hadoop and Hive, ChicagoDB 2/21/2011
PDF
Hadoop and Hive at Orbitz, Hadoop World 2010
PPTX
Hdp r-google charttools-webinar-3-5-2013 (2)
PDF
Integration of HIve and HBase
PDF
Hadoop Overview
 
PPTX
Hadoop online training
Integrating Hadoop Into the Enterprise – Hadoop Summit 2012
Jan 2013 HUG: Cloud-Friendly Hadoop and Hive
Data Analysis with Hadoop and Hive, ChicagoDB 2/21/2011
Hadoop and Hive at Orbitz, Hadoop World 2010
Hdp r-google charttools-webinar-3-5-2013 (2)
Integration of HIve and HBase
Hadoop Overview
 
Hadoop online training

What's hot (20)

PPT
Where does hadoop come handy
PPTX
Big Data & Hadoop Tutorial
PPTX
Big Data Warehousing: Pig vs. Hive Comparison
PDF
Apache Hadoop Tutorial | Hadoop Tutorial For Beginners | Big Data Hadoop | Ha...
PDF
Intro to HDFS and MapReduce
PDF
Web Briefing: Unlock the power of Hadoop to enable interactive analytics
PDF
Introduction to Hadoop and MapReduce
PDF
Distributed Data Analysis with Hadoop and R - OSCON 2011
PPTX
Strata + Hadoop World 2012: Data Science on Hadoop: How Cloudera Impala Unloc...
PDF
Big data Hadoop Analytic and Data warehouse comparison guide
PDF
Why Every NoSQL Deployment Should Be Paired with Hadoop Webinar
PPTX
201305 hadoop jpl-v3
PDF
SQL in Hadoop
PDF
Hadoop 101
 
PPTX
Impala Unlocks Interactive BI on Hadoop
PDF
Using Hadoop and Hive to Optimize Travel Search , WindyCityDB 2010
PDF
SQL on Hadoop: Defining the New Generation of Analytic SQL Databases
PDF
Introduction to Big Data and Hadoop
PDF
Introduction to Big data & Hadoop -I
PDF
Building a Big Data platform with the Hadoop ecosystem
Where does hadoop come handy
Big Data & Hadoop Tutorial
Big Data Warehousing: Pig vs. Hive Comparison
Apache Hadoop Tutorial | Hadoop Tutorial For Beginners | Big Data Hadoop | Ha...
Intro to HDFS and MapReduce
Web Briefing: Unlock the power of Hadoop to enable interactive analytics
Introduction to Hadoop and MapReduce
Distributed Data Analysis with Hadoop and R - OSCON 2011
Strata + Hadoop World 2012: Data Science on Hadoop: How Cloudera Impala Unloc...
Big data Hadoop Analytic and Data warehouse comparison guide
Why Every NoSQL Deployment Should Be Paired with Hadoop Webinar
201305 hadoop jpl-v3
SQL in Hadoop
Hadoop 101
 
Impala Unlocks Interactive BI on Hadoop
Using Hadoop and Hive to Optimize Travel Search , WindyCityDB 2010
SQL on Hadoop: Defining the New Generation of Analytic SQL Databases
Introduction to Big Data and Hadoop
Introduction to Big data & Hadoop -I
Building a Big Data platform with the Hadoop ecosystem
Ad

Viewers also liked (14)

PPTX
Les grands enjeux de la banque de demain
PDF
Référentiel Client Unique
PDF
Etude sur le Big Data
PDF
7 astuces pour attirer l'attention d'un influenceur sur Linkedin et sur Twitter
PDF
Mc5.marketing multicanal
PDF
Hadoop Hbase - Introduction
PPTX
MapReduce: Traitement de données distribué à grande échelle simplifié
PDF
Junior Connect : la conquête de l'engagement
PPT
Hadoop MapReduce Fundamentals
PPTX
Introduction aux algorithmes map reduce
PDF
Les community managers en France 2012
PDF
Carnet de témoignages #2 : les community managers dans les entreprises franca...
PDF
infographie : les Français et Facebook
PDF
Digital in 2017 Global Overview
Les grands enjeux de la banque de demain
Référentiel Client Unique
Etude sur le Big Data
7 astuces pour attirer l'attention d'un influenceur sur Linkedin et sur Twitter
Mc5.marketing multicanal
Hadoop Hbase - Introduction
MapReduce: Traitement de données distribué à grande échelle simplifié
Junior Connect : la conquête de l'engagement
Hadoop MapReduce Fundamentals
Introduction aux algorithmes map reduce
Les community managers en France 2012
Carnet de témoignages #2 : les community managers dans les entreprises franca...
infographie : les Français et Facebook
Digital in 2017 Global Overview
Ad

Similar to Flexible In-Situ Indexing for Hadoop via Elephant Twin (20)

PDF
Getting Started with Hadoop
PPTX
Scaling Big Data Mining Infrastructure Twitter Experience
PDF
Hadoop Overview & Architecture
 
PDF
20080529dublinpt1
PPTX
Brief Introduction about Hadoop and Core Services.
PDF
Hadoop Overview kdd2011
PDF
Chicago Data Summit: Keynote - Data Processing with Hadoop: Scalable and Cost...
PPTX
Big data ppt
PDF
1500 JIRAs in 20 minutes - HBaseCon 2013
PPTX
Intro to Hadoop
PDF
EclipseCon Keynote: Apache Hadoop - An Introduction
PDF
Avoiding big data antipatterns
PDF
Dallas TDWI Meeting Dec. 2012: Hadoop
PDF
Houston Hadoop Meetup Presentation by Vikram Oberoi of Cloudera
PPTX
Big Data Processing Using Hadoop Infrastructure
PDF
Hadoop - Lessons Learned
PDF
Apache Hadoop & Friends at Utah Java User's Group
PDF
Data model for analysis of scholarly documents in the MapReduce paradigm
PPTX
מיכאל
PPTX
Strata + Hadoop World 2012: Apache HBase Features for the Enterprise
Getting Started with Hadoop
Scaling Big Data Mining Infrastructure Twitter Experience
Hadoop Overview & Architecture
 
20080529dublinpt1
Brief Introduction about Hadoop and Core Services.
Hadoop Overview kdd2011
Chicago Data Summit: Keynote - Data Processing with Hadoop: Scalable and Cost...
Big data ppt
1500 JIRAs in 20 minutes - HBaseCon 2013
Intro to Hadoop
EclipseCon Keynote: Apache Hadoop - An Introduction
Avoiding big data antipatterns
Dallas TDWI Meeting Dec. 2012: Hadoop
Houston Hadoop Meetup Presentation by Vikram Oberoi of Cloudera
Big Data Processing Using Hadoop Infrastructure
Hadoop - Lessons Learned
Apache Hadoop & Friends at Utah Java User's Group
Data model for analysis of scholarly documents in the MapReduce paradigm
מיכאל
Strata + Hadoop World 2012: Apache HBase Features for the Enterprise

Recently uploaded (20)

DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
KodekX | Application Modernization Development
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
cuic standard and advanced reporting.pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
The AUB Centre for AI in Media Proposal.docx
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
KodekX | Application Modernization Development
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
cuic standard and advanced reporting.pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?
MYSQL Presentation for SQL database connectivity
Dropbox Q2 2025 Financial Results & Investor Presentation
Building Integrated photovoltaic BIPV_UPV.pdf
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
NewMind AI Monthly Chronicles - July 2025
Encapsulation_ Review paper, used for researhc scholars
Chapter 3 Spatial Domain Image Processing.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
20250228 LYD VKU AI Blended-Learning.pptx
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
Digital-Transformation-Roadmap-for-Companies.pptx
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy

Flexible In-Situ Indexing for Hadoop via Elephant Twin

  • 1. Flexible Indexing in Hadoop Dmitriy Ryaboy @squarecog Analytics Infrastructure @ Twitter Hadoop Summit, San Jose, CA June 2012
  • 2. @JoinTheFlock | Hadoop Summit, June 14 2012 2
  • 3. @JoinTheFlock | Hadoop Summit, June 14 2012 3
  • 4. Hadoop is great at plowing through data @JoinTheFlock | Hadoop Summit, June 14 2012 4 Image source: http://en.wikipedia.org/wiki/File:Snowplow_in_the_morning.jpg
  • 5. And we do plow 10s of Thousands of Jobs per day 100 TB (uncompressed) ingested daily Many users and diverse use cases @JoinTheFlock | Hadoop Summit, June 14 2012 5
  • 6. Looking for needles in haystacks. @JoinTheFlock | Hadoop Summit, June 14 2012 6 Image Source: http://en.wikipedia.org/wiki/File:July_1903_-_on_the_Gaisberg,_nr_Salzburg.JPG
  • 7. Looking for needles in haystacks. With snowplows. @JoinTheFlock | Hadoop Summit, June 14 2012 6 Image Source: http://en.wikipedia.org/wiki/File:July_1903_-_on_the_Gaisberg,_nr_Salzburg.JPG
  • 8. A Pig Script event_logs = load '/logs/lots_of_data' using ThriftPigLoader('thrift.gen.LogEvent'); filtered_logs = filter event_logs by event == 'something_rare'; -- Then do stuff. 90% of the mappers in this job output no data. We can do better... @JoinTheFlock | Hadoop Summit, June 14 2012 7
  • 9. Find smaller haystacks. @JoinTheFlock | Hadoop Summit, June 14 2012 8 Image Source: http://en.wikipedia.org/wiki/File:July_1903_-_on_the_Gaisberg,_nr_Salzburg.JPG
  • 10. Use subpartitions! @JoinTheFlock | Hadoop Summit, June 14 2012 9
  • 11. Use subpartitions! • tablename/year/month/day/hour/bucket @JoinTheFlock | Hadoop Summit, June 14 2012 9
  • 12. Use subpartitions! • tablename/year/month/day/hour/bucket • Only so many things you can partition by @JoinTheFlock | Hadoop Summit, June 14 2012 9
  • 13. Use subpartitions! • tablename/year/month/day/hour/bucket • Only so many things you can partition by • Up-front planning required @JoinTheFlock | Hadoop Summit, June 14 2012 9
  • 14. Use subpartitions! • tablename/year/month/day/hour/bucket • Only so many things you can partition by • Up-front planning required • Rewrite or duplicate for different query patterns @JoinTheFlock | Hadoop Summit, June 14 2012 9
  • 15. Keep the data sorted! @JoinTheFlock | Hadoop Summit, June 14 2012 10
  • 16. Keep the data sorted! • Painful to maintain @JoinTheFlock | Hadoop Summit, June 14 2012 10
  • 17. Keep the data sorted! • Painful to maintain • Only one sort order at a time @JoinTheFlock | Hadoop Summit, June 14 2012 10
  • 18. Keep the data sorted! • Painful to maintain • Only one sort order at a time • Rewrite or duplicate for different query patterns @JoinTheFlock | Hadoop Summit, June 14 2012 10
  • 19. Trojan Layouts* * http://infosys.uni-saarland.de/publications/JQD11.pdf @JoinTheFlock | Hadoop Summit, June 14 2012 11
  • 20. Trojan Layouts* • Identify interesting column groupings * http://infosys.uni-saarland.de/publications/JQD11.pdf @JoinTheFlock | Hadoop Summit, June 14 2012 11
  • 21. Trojan Layouts* • Identify interesting column groupings • Use different column groupings per HDFS block replica * http://infosys.uni-saarland.de/publications/JQD11.pdf @JoinTheFlock | Hadoop Summit, June 14 2012 11
  • 22. Trojan Layouts* • Identify interesting column groupings • Use different column groupings per HDFS block replica • Requires changes to NN * http://infosys.uni-saarland.de/publications/JQD11.pdf @JoinTheFlock | Hadoop Summit, June 14 2012 11
  • 23. Trojan Layouts* • Identify interesting column groupings • Use different column groupings per HDFS block replica • Requires changes to NN • ... and increases load on NN * http://infosys.uni-saarland.de/publications/JQD11.pdf @JoinTheFlock | Hadoop Summit, June 14 2012 11
  • 24. HBase! @JoinTheFlock | Hadoop Summit, June 14 2012 12
  • 25. HBase! • Good solution in many cases! @JoinTheFlock | Hadoop Summit, June 14 2012 12
  • 26. HBase! • Good solution in many cases! • Maintenance overhead @JoinTheFlock | Hadoop Summit, June 14 2012 12
  • 27. HBase! • Good solution in many cases! • Maintenance overhead • All data must live in HBase @JoinTheFlock | Hadoop Summit, June 14 2012 12
  • 28. HBase! • Good solution in many cases! • Maintenance overhead • All data must live in HBase • Full table scans slower than MR @JoinTheFlock | Hadoop Summit, June 14 2012 12
  • 29. HBase! • Good solution in many cases! • Maintenance overhead • All data must live in HBase • Full table scans slower than MR • Again with the up-front design @JoinTheFlock | Hadoop Summit, June 14 2012 12
  • 30. HBase! • Good solution in many cases! • Maintenance overhead • All data must live in HBase • Full table scans slower than MR • Again with the up-front design • Secondary Indexes can help @JoinTheFlock | Hadoop Summit, June 14 2012 12
  • 31. Hive! @JoinTheFlock | Hadoop Summit, June 14 2012 13
  • 32. Hive! • That kind of works, actually. @JoinTheFlock | Hadoop Summit, June 14 2012 13
  • 33. Hive Generic Interface for defining indexing behavior. Reference implementation: “compact” index value -> list of HDFS blocks; drop unneeded blocks. Other indexes available (bitmap in 0.8) It’ll even update indexes as you add partitions. @JoinTheFlock | Hadoop Summit, June 14 2012 14
  • 34. WIN! Done, Right? @JoinTheFlock | Hadoop Summit, June 14 2012 15
  • 35. Hive Good news if your data is in Hive! Bad news if your world is a little bigger. Indexing is tightly coupled to Hive. No interoperability with the rest of the Hadoop stack. @JoinTheFlock | Hadoop Summit, June 14 2012 16
  • 36. Democracy of Tools @JoinTheFlock | Hadoop Summit, June 14 2012 17 Image Source: http://en.wikipedia.org/wiki/File:20070124_sejm_sala_plenarna.jpg
  • 37. Democracy of Tools • Pig @JoinTheFlock | Hadoop Summit, June 14 2012 17 Image Source: http://en.wikipedia.org/wiki/File:20070124_sejm_sala_plenarna.jpg
  • 38. Democracy of Tools • Pig • Raw Map-Reduce @JoinTheFlock | Hadoop Summit, June 14 2012 17 Image Source: http://en.wikipedia.org/wiki/File:20070124_sejm_sala_plenarna.jpg
  • 39. Democracy of Tools • Pig • Raw Map-Reduce • Cascading DSLs (Scalding, Cascalog, Py-Cascading) @JoinTheFlock | Hadoop Summit, June 14 2012 17 Image Source: http://en.wikipedia.org/wiki/File:20070124_sejm_sala_plenarna.jpg
  • 40. Democracy of Tools • Pig • Raw Map-Reduce • Cascading DSLs (Scalding, Cascalog, Py-Cascading) • Mahout @JoinTheFlock | Hadoop Summit, June 14 2012 17 Image Source: http://en.wikipedia.org/wiki/File:20070124_sejm_sala_plenarna.jpg
  • 41. Democracy of Tools • Pig • Raw Map-Reduce • Cascading DSLs (Scalding, Cascalog, Py-Cascading) • Mahout • Maybe even Hive @JoinTheFlock | Hadoop Summit, June 14 2012 17 Image Source: http://en.wikipedia.org/wiki/File:20070124_sejm_sala_plenarna.jpg
  • 42. Design Goals @JoinTheFlock | Hadoop Summit, June 14 2012 18
  • 43. Design Goals @JoinTheFlock | Hadoop Summit, June 14 2012 18
  • 44. Design Goals • Minimal Job/Script modification required @JoinTheFlock | Hadoop Summit, June 14 2012 18
  • 45. Design Goals • Minimal Job/Script modification required • As low in the stack as possible @JoinTheFlock | Hadoop Summit, June 14 2012 18
  • 46. Design Goals • Minimal Job/Script modification required • As low in the stack as possible • In fact, pretty sure we could get Hive to use this... @JoinTheFlock | Hadoop Summit, June 14 2012 18
  • 47. Design Goals • Minimal Job/Script modification required • As low in the stack as possible • In fact, pretty sure we could get Hive to use this... • No unnecessary copies of data @JoinTheFlock | Hadoop Summit, June 14 2012 18
  • 48. Design Goals • Minimal Job/Script modification required • As low in the stack as possible • In fact, pretty sure we could get Hive to use this... • No unnecessary copies of data • Allow post-factum indexing @JoinTheFlock | Hadoop Summit, June 14 2012 18
  • 49. Design Goals • Minimal Job/Script modification required • As low in the stack as possible • In fact, pretty sure we could get Hive to use this... • No unnecessary copies of data • Allow post-factum indexing • Graceful degradation @JoinTheFlock | Hadoop Summit, June 14 2012 18
  • 50. Design Goals • Minimal Job/Script modification required • As low in the stack as possible • In fact, pretty sure we could get Hive to use this... • No unnecessary copies of data • Allow post-factum indexing • Graceful degradation • Flexible on-disk representation @JoinTheFlock | Hadoop Summit, June 14 2012 18
  • 51. Elephant-Twin Twitter’s library for creating indexes in Hadoop https://github.com/twitter/elephant-twin https://github.com/twitter/elephant-twin-lzo @JoinTheFlock | Hadoop Summit, June 14 2012 19
  • 52. Block-Level Indexes For each value, record the block it occurs in “Block” can be HDFS block (100s of MBs) Or LZO block (100s of KBs) Or SequenceFile block Or RCFile block ... Ignore irrelevant blocks Scan relevant blocks using original InputFormat @JoinTheFlock | Hadoop Summit, June 14 2012 20
  • 53. Record-Level Indexes For each value, record some representation of the record Can be value + offset, as in bitmap indexes Can be transformed projection of records, as in Lucene indexes Some queries can be answered directly from index. @JoinTheFlock | Hadoop Summit, June 14 2012 21
  • 54. Indexing: MR Index job InputFormat Data @JoinTheFlock | Hadoop Summit, June 14 2012 22
  • 55. Creating an Index public abstract class AbstractBlockIndexingJob { protected abstract List<String> getInput(); protected abstract String getIndex(); protected abstract String getInputFormat(); protected abstract String getValueClass(); protected abstract String getColumnName(); protected abstract Job setMapper(Job job); } public abstract class AbstractLuceneIndexingJob { // Similar. } @JoinTheFlock | Hadoop Summit, June 14 2012 23
  • 56. Creating an Index Mapper transforms the records: emit <DocId, Value> Key Value Block Offset Column Value Tweet Id Text Block helper: public abstract class BlockIndexingMapper<KIN, VIN> extends Mapper<KIN, VIN, TextLongPairWritable, LongPairWritable> {} Lucene helper: public abstract class AbstractIndexingMapper<KIN, VIN, KOUT, VOUT> extends Mapper<KIN, VIN, KOUT, VOUT> abstract protected boolean filter(KIN k, VIN v); abstract protected KOUT buildOutputKey(KIN k, VIN v); @JoinTheFlock | Hadoop Summit, June 14 2012 24
  • 57. Creating an Index Reducer writes appropriately processed indexes and metadata. MapFile block index: public class MapFileIndexingReducer extends Reducer<TextLongPairWritable, LongPairWritable, Text, ListLongPair> Lucene index: public abstract class AbstractLuceneIndexingReducer<KIN, VIN> extends Reducer<KIN, VIN, NullWritable, NullWritable> { protected abstract Document buildDocument(KIN k, VIN v); } @JoinTheFlock | Hadoop Summit, June 14 2012 25
  • 58. Creating an Index: Metadata struct FileIndexDescriptor { 1: DocType docType 2: IndexType indexType 3: i32 indexVersion 4: string sourcePath 5: FileChecksum checksum 6: list<IndexedField> indexedFields } struct ETwinIndexDescriptor { 1: list<FileIndexDescriptor> fileIndexDescriptors 2: i32 indexPart 3: optional map<string, string> options } @JoinTheFlock | Hadoop Summit, June 14 2012 26
  • 59. MR job searchKey IndexedInputFormat Retrieval: Index Data @JoinTheFlock | Hadoop Summit, June 14 2012 27
  • 60. InputFormat public class BlockIndexedFileInputFormat<K, V> extends FileInputFormat<K, V> { // Indexing jobs call this function to set up indexing job related parameters. public static void setIndexOptions(Job job, String inputformatClass, String valueClass, String indexDir, String columnName) // Searching jobs call this function to set up searching job related parameters. public static void setSearchOptions(Job job, String inputformatClass, String valueClass, String indexDir, BinaryExpression filter) } @JoinTheFlock | Hadoop Summit, June 14 2012 28
  • 61. BinaryExpression public BinaryExpression( Expression lhs, Expression rhs, OpType opType) public static enum OpType { OP_PLUS (" + "), OP_MINUS(" - "), ... OP_EQ(" == "), OP_NE(" != "), ... OP_AND(" and "), OP_OR(" or "), ... TERM_COL(" Column "), TERM_CONST(" Constant "); } @JoinTheFlock | Hadoop Summit, June 14 2012 29
  • 62. Pig Integration event_logs = load '/logs/lots_of_data' using ThriftPigLoader( 'thrift.gen.LogEvent'); filtered_logs = filter event_logs by event == 'something_rare'; -- Then do stuff. @JoinTheFlock | Hadoop Summit, June 14 2012 30
  • 63. Pig Integration register elephant-twin-1.0.jar event_logs = load '/logs/lots_of_data' using IndexedLZOPigLoader( 'ThriftPigLoader', 'thrift.gen.LogEvent', '/user/dmitriy/etwin'); -- Pig will automatically push this down into the Loader and InputFormat filtered_logs = filter event_logs by event == 'something_rare'; @JoinTheFlock | Hadoop Summit, June 14 2012 31
  • 64. Optimization: merge neighbors HDFS Block 1 HDFS Block 2 @JoinTheFlock | Hadoop Summit, June 14 2012 32
  • 65. Optimization: merge neighbors HDFS Block 1 HDFS Block 2 Merge neighbors, share the scan. (Limit expansion to size of HDFS block) @JoinTheFlock | Hadoop Summit, June 14 2012 33
  • 66. Optimization: merge neighbors HDFS Block 1 HDFS Block 2 Scans are faster than random reads.. allow gaps? Turns out, not that much faster. Better to jump. @JoinTheFlock | Hadoop Summit, June 14 2012 34
  • 67. Optimization: combine small splits HDFS Block 1 HDFS Block 2 match match match Generated Split Combine small relevant spans into single splits. Try to take locality into account. @JoinTheFlock | Hadoop Summit, June 14 2012 35
  • 68. Applicability Most keys occur in very few blocks! Most frequent key only occurs in half the blocks. @JoinTheFlock | Hadoop Summit, June 14 2012 36
  • 69. Results Applicable Jobs take 5-10x fewer resources Ad-hoc jobs particularly likely to benefit “Real” indexes still faster.. -- but can be represented using the same abstraction @JoinTheFlock | Hadoop Summit, June 14 2012 37
  • 70. Future Work @JoinTheFlock | Hadoop Summit, June 14 2012 38 Image Source:http://en.wikipedia.org/wiki/File:Shasta_dam_under_construction_new_edit.jpg
  • 71. Future Work • Regex matching on keys @JoinTheFlock | Hadoop Summit, June 14 2012 38 Image Source:http://en.wikipedia.org/wiki/File:Shasta_dam_under_construction_new_edit.jpg
  • 72. Future Work • Regex matching on keys • Better Pig pushdown support @JoinTheFlock | Hadoop Summit, June 14 2012 38 Image Source:http://en.wikipedia.org/wiki/File:Shasta_dam_under_construction_new_edit.jpg
  • 73. Future Work • Regex matching on keys • Better Pig pushdown support • MultiIndexInputFormat @JoinTheFlock | Hadoop Summit, June 14 2012 38 Image Source:http://en.wikipedia.org/wiki/File:Shasta_dam_under_construction_new_edit.jpg
  • 74. Future Work • Regex matching on keys • Better Pig pushdown support • MultiIndexInputFormat • Traditional indexes under ETwin @JoinTheFlock | Hadoop Summit, June 14 2012 38 Image Source:http://en.wikipedia.org/wiki/File:Shasta_dam_under_construction_new_edit.jpg
  • 75. Future Work • Regex matching on keys • Better Pig pushdown support • MultiIndexInputFormat • Traditional indexes under ETwin • Index maintenance (via HCatalog?) @JoinTheFlock | Hadoop Summit, June 14 2012 38 Image Source:http://en.wikipedia.org/wiki/File:Shasta_dam_under_construction_new_edit.jpg
  • 76. Questions? @squarecog Sounds like fun? We are hiring. @JoinTheFlock | Hadoop Summit, June 14 2012 39

Editor's Notes