?Hi Ashutosh,

  Thanks for the reply!

  Well, we are a yarn app that is essentially doing the same things mapreduce 
does. For regular files in Hadoop, we get the block locations and sizes and 
perform some internal sorting and load balancing on the master which then 
creates the slave yarn apps on individual nodes for reading. We strive for data 
locality, as much as possible.

  To interface with Hive, the HCatalog api seemed like the appropriate 
interface.  It does a lot of things we want via the ReadEntity, allowing us to 
query and read the Hive tables at a high level.

  I used the readerwriter example (from Hive 0.12) to get things running, but I 
was using HCatSplit just like our internal split classes. I retrieved them from 
the ReaderContext and ran them through the same sorting algorithms, then 
serialized them and sent them to the individual yarn apps, etc.

  I understand the rationale for the smaller api, which is why I wondered if 
there's another avenue I should be pursuing as a yarn app (metadata vs. 
HCatalog, for instance).

  All that being said :), the ability to get the block locations (and sizes, if 
possible) would certainly solve my problems.


Thanks,


Nathan



________________________________
From: Ashutosh Chauhan <hashut...@apache.org>
Sent: Wednesday, September 3, 2014 9:16 AM
To: user@hive.apache.org
Subject: Re: Reading and Writing with Hive 0.13 from a Yarn application

Hi Nathan,

This was done in https://issues.apache.org/jira/browse/HIVE-6248 Reasoning was 
to minimize api surface area to users so that they are immune of incompatible 
changes in internal classes and thus making it easier for them to consume this 
and not get worried about version upgrade. Seems like in the process some of 
the functionality went away.
Which info you are looking for exactly? Is it String[] getBlockLocations() 
equivalent of InputSplit? If so, we can consider adding that in ReaderContext() 
since that one need not to expose any hadoop or hive classes.

Thanks,
Ashutosh


On Tue, Sep 2, 2014 at 5:26 PM, Nathan Bamford 
<nathan.bamf...@redpoint.net<mailto:nathan.bamf...@redpoint.net>> wrote:

Hi,

  My company has been working on a Yarn application for a couple of years-- we 
essentially take the place of MapReduce and split our data and processing 
ourselves.

  One of the things we've been working to support is Hive access, and the 
HCatalog interfaces and API seemed perfect. Using this information: 
<https://hive.apache.org/javadocs/hcat-r0.5.0/readerwriter.html> 
https://hive.apache.org/javadocs/hcat-r0.5.0/readerwriter.html and 
TestReaderWriter.java from the source code, I was able to create and use 
HCatSplits to allow balanced data local parallel reading (using the size and 
locations methods available from each HCatSplit).

  Much to my dismay, 0.13 removes a lot of that functionality. The 
ReaderContext class is now an interface that only exposes numSplits, whereas 
all of the other methods are in the inaccessible (package only) 
ReaderContextImpl class.

  Since I no longer have access to the actual HCatSplits from the 
ReaderContext, I am unable to process them and send them to our yarn app on the 
data local nodes.  My only choice seems to be to partition out the splits to 
slave nodes more or less at random.

  Does anyone know if, as of 0.13, this is the intended way to interface with 
Hive via non-Hadoop yarn applications? Is the underlying HCatSplit only 
intended for internal use, now?


Thanks,


Nathan Bamford

Reply via email to