

{"id":20025,"date":"2018-06-29T12:40:05","date_gmt":"2018-06-29T12:40:05","guid":{"rendered":"https:\/\/data-flair.training\/blogs\/?p=20025"},"modified":"2018-06-29T12:40:05","modified_gmt":"2018-06-29T12:40:05","slug":"hcatalog-inputoutput","status":"publish","type":"post","link":"https:\/\/data-flair.training\/blogs\/hcatalog-inputoutput\/","title":{"rendered":"HCatalog InputOutput Interface | HCatalog MapReduce Integration"},"content":{"rendered":"<p><span style=\"font-weight: 400\">In our last<strong> HCatalog Tutorial<\/strong>, we discussed<strong> HCatalog Applications<\/strong>. Today, we will see Hcatalog InputOutput Interfaces. In this HCatalog InputOutputtutorial,\u00a0we will discuss the input and output formats of HCatalog. Moreover, we will learn HCatalog Mapreduce Integration. <\/span><\/p>\n<p><span style=\"font-weight: 400\">In this HCatalog tutorial, we will see HCatalog <strong>Mapreduce<\/strong> examples, filters, and authentication. Basically, to read data from <strong>HDFS<\/strong> and write the resultant data into HDFS after processing especially using MapReduce job we use HCatalog InputOutput Format interfaces.\u00a0<\/span><\/p>\n<p>So, let&#8217;s start HCatalog InputOutput Interface,<\/p>\n<h2><span style=\"font-weight: 400\">HCatInputFormat<\/span><\/h2>\n<p><span style=\"font-weight: 400\">In order to read data from HCatalog-managed tables, we can use the HCatInputFormat along with <strong>MapReduce jobs<\/strong>.<\/span><\/p>\n<p><span style=\"font-weight: 400\">In addition, for reading data, HCatInputFormat exposes a <strong>Hadoop<\/strong> <strong>0.20 <\/strong><strong>MapReduce <\/strong>API as if it had been published to a table.<\/span><\/p>\n<h3>a. API of HCatInputFormat<\/h3>\n<p><span style=\"font-weight: 400\">HCatInputFormat APIs are:<\/span><\/p>\n<ol>\n<li><span style=\"font-weight: 400\"> setInput<\/span><\/li>\n<li>setOutputSchema<\/li>\n<li>getTableSchema<\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">At very first, if HCatInputFormat.setInput has not been called instantiate an InputJobInfo, in order to use HCatInputFormat to read data, afterward call setInput with the InputJobInfo.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Further, to specify the output fields, we can use the setOutputSchema method to include a projection schema. So, all the columns in the table will be returned, if a schema is not specified.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Moreover, to determine the table schema for a specified input table we can use the getTableSchema method.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">\/**\n  * Set the input to use for the Job. This queries the metadata server with\n  * the specified partition predicates, gets the matching partitions, puts\n  * the information in the conf object. The inputInfo object is updated with\n  * information needed in the client context\n  * @param job the job object\n  * @param inputJobInfo the input info for the table to read\n  * @throws IOException the exception in communicating with the metadata server\n  *\/\n public static void setInput(Job job,\n     InputJobInfo inputJobInfo) throws IOException;<\/pre>\n<pre class=\"EnlighterJSRAW\">\/**\n * by HCatInputFormat, set the schema for the HCatRecord data returned.\n * @param job the job object\n * the schema to use as the consolidated schema @param hcatSchema\n *\/\npublic static void setOutputSchema(Job job,HCatSchema hcatSchema)\n  throws IOException;\u00a0<b>\u00a0<\/b><\/pre>\n<pre class=\"EnlighterJSRAW\">\/**\n  * for the table specified in the HCatInputFormat.setInput, get the HCatTable schema\n  * then call on the specified job context. it is available only after\n  * HCatInputFormat.setInput has been called for a JobContext.\n  * @param context the context\n  * @return the table schema\n  * if HCatInputFormat.setInput has not been called @throws IOException\n  *                   for the current context\n  *\/\n public static HCatSchema getTableSchema(JobContext context)\n   throws IOException;<\/pre>\n<h2><span style=\"font-weight: 400\">HCatOutputFormat<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Now, to write data to HCatalog-managed tables we use HCatOutputFormat with MapReduce jobs.<\/span><br \/>\n<span style=\"font-weight: 400\">In addition, for writing data to a table, HCatOutputFormat exposes a <strong>Hadoop<\/strong> 0.20 MapReduce API. <\/span><\/p>\n<p><span style=\"font-weight: 400\">So, basically, we can use the default OutputFormat which is configured for the table and then\u00a0after the job completes new partition is published to the table at the time a MapReduce job uses HCatOutputFormat to write output.<\/span><\/p>\n<h3>a. API of HCatOutputFormat<\/h3>\n<p><span style=\"font-weight: 400\">HCatOutputFormat APIs are:<\/span><\/p>\n<ol>\n<li><span style=\"font-weight: 400\"> setOutput<\/span><\/li>\n<li>setSchema<\/li>\n<li>getTableSchema<\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">It is must that setOutput is the first call on HCatOutputFormat, because any call other than that will throw an exception, which will say that the output format is not initialized. Moreover, by the setSchema method, the schema for the data being written out is specified. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Also, we can use HCatOutputFormat.getTableSchema() to get the table schema and then pass that along to setSchema(), if our data has the same schema as the table schema.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\">\/**\n  * to write for the job, set the information about the output. This queries the metadata\n  * server to find the StorageHandler to use for the table. It throws an error if the\n  * partition is already published.\n  * @param job the job object\n  * @param outputJobInfo the table output information for the job\n  * @throws IOException the exception in communicating with the metadata server\n  *\/\n @SuppressWarnings(\"unchecked\")\n public static void setOutput(Job job, OutputJobInfo outputJobInfo) throws IOException;<\/pre>\n<pre class=\"EnlighterJSRAW\">\/**\n  * Set the schema for the data being written out to the partition. The\n  * table schema is used by default for the partition if this is not called.\n  * @param job the job object\n  * @param schema the schema for the data\n  * @throws IOException\n  *\/\n public static void setSchema(final Job job, final HCatSchema schema) throws IOException;<b>\u00a0<\/b><\/pre>\n<pre class=\"EnlighterJSRAW\">\/**\n  * Get the table schema for the table specified in the HCatOutputFormat.setOutput call\n  * on the specified job context.\n  * @param context the context\n  * @return the table schema\n  * @throws IOException if HCatOutputFormat.setOutput has not been called\n  *                   for the passed context\n  *\/\n public static HCatSchema getTableSchema(JobContext context) throws IOException;<\/pre>\n<h2><span style=\"font-weight: 400\">HCatalog InputOutput &#8211; HCatRecord<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Basically, for storing values in HCatalog tables, HCatRecord is supported type in HCatalog InputOutput Interface.<\/span><\/p>\n<p><span style=\"font-weight: 400\">In addition, for different fields in HCatRecord, the types in an HCatalog table schema determine the types of objects returned. Now, here you can see the mappings between <strong>Java classes<\/strong> for MapReduce programs as well as HCatalog data types:<\/span><\/p>\n<p><strong><span style=\"font-family: Verdana, Geneva, sans-serif\">1. HCatalog data types- TINYINT<\/span><\/strong><br \/>\n<span style=\"font-weight: 400\">Java classes for MapReduce- java.lang.Byte<\/span><br \/>\n<span style=\"font-weight: 400\">Values- -128 to 127<\/span><br \/>\n<strong>2. HCatalog data types-SMALLINT<\/strong><br \/>\n<span style=\"font-weight: 400\">Java classes for MapReduce- \u00a0java.lang.Short<\/span><br \/>\n<span style=\"font-weight: 400\">Values- -(2^15) to (2^15)-1, which is -32,768 to 32,767<\/span><br \/>\n<strong>3. HCatalog data types- INT<\/strong><br \/>\n<span style=\"font-weight: 400\">Java classes for MapReduce- java.lang.Integer<\/span><br \/>\n<span style=\"font-weight: 400\">Values- -(2^31) to (2^31)-1, which is -2,147,483,648 to 2,147,483,647<\/span><br \/>\n<strong>4. HCatalog data types- BIGINT<\/strong><br \/>\n<span style=\"font-weight: 400\">Java classes for MapReduce- java.lang.Long<\/span><br \/>\n<span style=\"font-weight: 400\">Values- -(2^63) to (2^63)-1, which is -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807<\/span><br \/>\n<strong>5. HCatalog data types- BOOLEAN<\/strong><br \/>\n<span style=\"font-weight: 400\">Java classes for MapReduce- java.lang.Boolean<\/span><br \/>\n<span style=\"font-weight: 400\">Values- true or fals<\/span><br \/>\n<strong>6. HCatalog data types- FLOAT<\/strong><br \/>\n<span style=\"font-weight: 400\">Java classes for MapReduce- java.lang.Float<\/span><br \/>\n<span style=\"font-weight: 400\">Values- single-precision floating-point value<\/span><br \/>\n<strong>7. \u00a0HCatalog data types- DOUBLE<\/strong><br \/>\n<span style=\"font-weight: 400\">Java classes for MapReduce- java.lang.Double<\/span><br \/>\n<span style=\"font-weight: 400\">Values- double-precision floating-point value<\/span><br \/>\n<strong>8. \u00a0HCatalog data types- DECIMAL<\/strong><br \/>\n<span style=\"font-weight: 400\">Java classes for MapReduce- java.math.BigDecimal<\/span><br \/>\n<span style=\"font-weight: 400\">Values-exact floating-point value with 38-digit precision<\/span><br \/>\n<strong>9. HCatalog data types- BINARY<\/strong><br \/>\n<span style=\"font-weight: 400\">Java classes for MapReduce- byte []<\/span><br \/>\n<span style=\"font-weight: 400\">Values-Binary Data<\/span><br \/>\n<strong>10. HCatalog data types-STRING<\/strong><br \/>\n<span style=\"font-weight: 400\">Java classes for MapReduce- java.lang.String<\/span><br \/>\n<span style=\"font-weight: 400\">Values- character string<\/span><br \/>\n<strong>11. HCatalog data types- STRUCT<\/strong><br \/>\n<span style=\"font-weight: 400\">Java classes for MapReduce- java.util.List<\/span><br \/>\n<span style=\"font-weight: 400\">Values- structured data<\/span><br \/>\n<strong>12. HCatalog data types- ARRAY<\/strong><br \/>\n<span style=\"font-weight: 400\">Java classes for MapReduce- java.util.List<\/span><br \/>\n<span style=\"font-weight: 400\">Values- values of one data type<\/span><br \/>\n<strong>13. HCatalog data types- MAP<\/strong><br \/>\n<span style=\"font-weight: 400\">Java classes for MapReduce- java.util.Map <\/span><br \/>\n<span style=\"font-weight: 400\">Values- key-value pairs<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Running MapReduce With HCatalog<\/span><\/h2>\n<p><span style=\"font-weight: 400\">For Running MapReduce with HCatalog, our MapReduce program must know where the Thrift server is. So, the best way to do this is that we can pass the location as an argument to our Java program. Then we need to pass the Hive as well as HCatalog jars to MapReduce as well, with the -libjars argument.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">export HADOOP_HOME=&lt;path_to_hadoop_install&gt;\nexport HCAT_HOME=&lt;path_to_hcat_install&gt;\nexport HIVE_HOME=&lt;path_to_hive_install&gt;\nexport LIB_JARS=$HCAT_HOME\/share\/hcatalog\/hcatalog-core-0.5.0.jar,\n$HIVE_HOME\/lib\/hive-metastore-0.10.0.jar,\n$HIVE_HOME\/lib\/libthrift-0.7.0.jar,\n$HIVE_HOME\/lib\/hive-exec-0.10.0.jar,\n$HIVE_HOME\/lib\/libfb303-0.7.0.jar,\n$HIVE_HOME\/lib\/jdo2-api-2.3-ec.jar,\n$HIVE_HOME\/lib\/slf4j-api-1.6.1.jar\nexport HADOOP_CLASSPATH=$HCAT_HOME\/share\/hcatalog\/hcatalog-core-0.5.0.jar:\n$HIVE_HOME\/lib\/hive-metastore-0.10.0.jar:\n$HIVE_HOME\/lib\/libthrift-0.7.0.jar:\n$HIVE_HOME\/lib\/hive-exec-0.10.0.jar:\n$HIVE_HOME\/lib\/libfb303-0.7.0.jar:\n$HIVE_HOME\/lib\/jdo2-api-2.3-ec.jar:\n$HIVE_HOME\/conf:$HADOOP_HOME\/conf:\n$HIVE_HOME\/lib\/slf4j-api-1.6.1.jar\n$HADOOP_HOME\/bin\/hadoop --config $HADOOP_HOME\/conf jar &lt;path_to_jar&gt;\n&lt;main_class&gt; -libjars $LIB_JARS &lt;program_arguments&gt;<\/pre>\n<p><span style=\"font-weight: 400\">Although Hadoop will ship libjars every time we run the MapReduce program, so, that is not efficient and as a result, it also may deplete the <strong>Hadoop distributed cache<\/strong>.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Rather than that, by using HDFS locations we can optimize to ship libjars. However, Hadoop will reuse the entries in the distributed cache, by doing this.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">bin\/hadoop fs -copyFromLocal $HCAT_HOME\/share\/hcatalog\/hcatalog-core-0.5.0.jar \/tmp\nbin\/hadoop fs -copyFromLocal $HIVE_HOME\/lib\/hive-metastore-0.10.0.jar \/tmp\nbin\/hadoop fs -copyFromLocal $HIVE_HOME\/lib\/libthrift-0.7.0.jar \/tmp\nbin\/hadoop fs -copyFromLocal $HIVE_HOME\/lib\/hive-exec-0.10.0.jar \/tmp\nbin\/hadoop fs -copyFromLocal $HIVE_HOME\/lib\/libfb303-0.7.0.jar \/tmp\nbin\/hadoop fs -copyFromLocal $HIVE_HOME\/lib\/jdo2-api-2.3-ec.jar \/tmp\nbin\/hadoop fs -copyFromLocal $HIVE_HOME\/lib\/slf4j-api-1.6.1.jar \/tmp\nexport LIB_JARS=hdfs:\/\/\/tmp\/hcatalog-core-0.5.0.jar,\nhdfs:\/\/\/tmp\/hive-metastore-0.10.0.jar,\nhdfs:\/\/\/tmp\/libthrift-0.7.0.jar,\nhdfs:\/\/\/tmp\/hive-exec-0.10.0.jar,\nhdfs:\/\/\/tmp\/libfb303-0.7.0.jar,\nhdfs:\/\/\/tmp\/jdo2-api-2.3-ec.jar,\nhdfs:\/\/\/tmp\/slf4j-api-1.6.1.jar\n# (Other statements remain the same.)<\/pre>\n<h2><span style=\"font-weight: 400\">HCatalog InputOuput &#8211; Authentication<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Make sure you have run &#8220;kinit &lt;username&gt;@FOO.COM&#8221; to get a Kerberos ticket and to be able to authenticate to the HCatalog server if a failure results in a message like &#8220;2010-11-03 16:17:28,225 WARN hive.metastore &#8230; &#8211; Unable to connect metastore with URI thrift:\/\/&#8230;&#8221; in \/tmp\/&lt;username&gt;\/hive.log.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Filter Operators<\/span><\/h2>\n<p><span style=\"font-weight: 400\">There can be \u00a0operators in a filter like&#8217;and&#8217;, &#8216;or&#8217;, &#8216;like&#8217;, &#8216;()&#8217;, &#8216;=&#8217;, &#8216;&lt;&gt;&#8217; (not equal), &#8216;&lt;&#8216;, &#8216;&gt;&#8217;, &#8216;&lt;=&#8217; and &#8216;&gt;=&#8217;.<\/span><br \/>\n<strong>For example:<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">ds &gt; \"20110924\"\nds &lt; \"20110925\"\nds &lt;= \"20110925\" and ds &gt;= \"20110924\"<\/pre>\n<h2><span style=\"font-weight: 400\">HCatalog InputOutput-\u00a0<\/span><span style=\"font-weight: 400\">Scan Filter<\/span><\/h2>\n<p><span style=\"font-weight: 400\">let&#8217;s suppose we have a web_logs table that is partitioned by the column &#8220;ds&#8221;.\u00a0hence, we could select one partition of the table by changing:<\/span><br \/>\n<b><\/b><\/p>\n<p><b>HCatInputFormat.setInput(job, InputJobInfo.create(dbName, inputTableName, null));<\/b><br \/>\n<span style=\"font-weight: 400\">to<\/span><br \/>\n<b>HCatInputFormat.setInput(job,<\/b><br \/>\n<b> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0InputJobInfo.create(dbName, inputTableName, &#8220;ds=\\&#8221;20110924\\&#8221;&#8221;));<\/b><br \/>\n<span style=\"font-weight: 400\">This filter must reference only partition columns. Values from other columns will cause the job to fail.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">HCatalog InputOutput-\u00a0<\/span><span style=\"font-weight: 400\">Write Filter<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Moreover, we can change the above example to have a Map of key-value pairs that describe all of the partition keys and values for that partition, to write to a single partition. In our example web_logs table, there is only one partition column (ds), so our Map will have only one entry. Change<\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">HCatOutputFormat.setOutput(job, OutputJobInfo.create(dbName, outputTableName, null));\nto\nMap partitions = new HashMap&lt;String, String&gt;(1);\npartitions.put(\"ds\", \"20110924\");\nHCatOutputFormat.setOutput(job, OutputJobInfo.create(dbName, outputTableName, partitions));<\/pre>\n<p><span style=\"font-weight: 400\">Also, we can leave the Map null, to write multiple partitions simultaneously, still, in the data,\u00a0we are writing, all of the partitioning columns must be present.<\/span><\/p>\n<p>So, this was all about HCatalog InputOutPut\u00a0and HCatalog- MapReduce Integration. Hope you like our explanation<\/p>\n<h2><span style=\"font-weight: 400\">Conclusion<\/span><\/h2>\n<p>Hence, we have seen the concept of\u00a0HCatalog InputOutput Format interfaces in detail. Along with this, we discussed how to run MapReduce with HCatalog. Moreover, we also see HCatInput and HCatOutput Formats in HCatalog InputOutput tutorial.<\/p>\n<p>Also, we discussed Hcatalog Mapreduce example. However, if any doubt occurs regarding HCatalog InputOutput, feel free to ask in the comment section.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In our last HCatalog Tutorial, we discussed HCatalog Applications. Today, we will see Hcatalog InputOutput Interfaces. In this HCatalog InputOutputtutorial,\u00a0we will discuss the input and output formats of HCatalog. Moreover, we will learn HCatalog&#46;&#46;&#46;<\/p>\n","protected":false},"author":7,"featured_media":20356,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[995,997,4695,5516,5517,5540,5543,5545,12610,16295],"class_list":["post-20025","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hcatalog","tag-api-of-hcatoutputformat","tag-apiof-hcatinputformat","tag-filter-operators","tag-hcatalog-inputouput-authentication","tag-hcatalog-inputoutput","tag-hcatinputformat","tag-hcatoutputformat","tag-hcatrecord","tag-scan-filter","tag-write-filter"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>HCatalog InputOutput Interface | HCatalog MapReduce Integration - DataFlair<\/title>\n<meta name=\"description\" content=\"HCatalog InputOutput Interface,HCatalog Mapreduce Integration with example,Filters in HCatalog:scan &amp; write filter,HCatInput,HCatOutput format,API\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/data-flair.training\/blogs\/hcatalog-inputoutput\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"HCatalog InputOutput Interface | HCatalog MapReduce Integration - DataFlair\" \/>\n<meta property=\"og:description\" content=\"HCatalog InputOutput Interface,HCatalog Mapreduce Integration with example,Filters in HCatalog:scan &amp; write filter,HCatInput,HCatOutput format,API\" \/>\n<meta property=\"og:url\" content=\"https:\/\/data-flair.training\/blogs\/hcatalog-inputoutput\/\" \/>\n<meta property=\"og:site_name\" content=\"DataFlair\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DataFlairWS\/\" \/>\n<meta property=\"article:published_time\" content=\"2018-06-29T12:40:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/HCatalog-InputOutpu-Interface-01.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"DataFlair Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:site\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"DataFlair Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"HCatalog InputOutput Interface | HCatalog MapReduce Integration - DataFlair","description":"HCatalog InputOutput Interface,HCatalog Mapreduce Integration with example,Filters in HCatalog:scan & write filter,HCatInput,HCatOutput format,API","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/data-flair.training\/blogs\/hcatalog-inputoutput\/","og_locale":"en_US","og_type":"article","og_title":"HCatalog InputOutput Interface | HCatalog MapReduce Integration - DataFlair","og_description":"HCatalog InputOutput Interface,HCatalog Mapreduce Integration with example,Filters in HCatalog:scan & write filter,HCatInput,HCatOutput format,API","og_url":"https:\/\/data-flair.training\/blogs\/hcatalog-inputoutput\/","og_site_name":"DataFlair","article_publisher":"https:\/\/www.facebook.com\/DataFlairWS\/","article_published_time":"2018-06-29T12:40:05+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/HCatalog-InputOutpu-Interface-01.jpg","type":"image\/jpeg"}],"author":"DataFlair Team","twitter_card":"summary_large_image","twitter_creator":"@DataFlairWS","twitter_site":"@DataFlairWS","twitter_misc":{"Written by":"DataFlair Team","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/data-flair.training\/blogs\/hcatalog-inputoutput\/#article","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/hcatalog-inputoutput\/"},"author":{"name":"DataFlair Team","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/beb0cab24b7aa54423a3b50e669a9dcd"},"headline":"HCatalog InputOutput Interface | HCatalog MapReduce Integration","datePublished":"2018-06-29T12:40:05+00:00","mainEntityOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/hcatalog-inputoutput\/"},"wordCount":1045,"commentCount":0,"publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/hcatalog-inputoutput\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/HCatalog-InputOutpu-Interface-01.jpg","keywords":["API of HCatOutputFormat","APIof HCatInputFormat","Filter Operators","HCatalog InputOuput - Authentication","HCatalog InputOutput","HCatInputFormat","HCatOutputFormat","HCatRecord","Scan Filter","Write Filter"],"articleSection":["HCatalog Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/data-flair.training\/blogs\/hcatalog-inputoutput\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/data-flair.training\/blogs\/hcatalog-inputoutput\/","url":"https:\/\/data-flair.training\/blogs\/hcatalog-inputoutput\/","name":"HCatalog InputOutput Interface | HCatalog MapReduce Integration - DataFlair","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/#website"},"primaryImageOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/hcatalog-inputoutput\/#primaryimage"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/hcatalog-inputoutput\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/HCatalog-InputOutpu-Interface-01.jpg","datePublished":"2018-06-29T12:40:05+00:00","description":"HCatalog InputOutput Interface,HCatalog Mapreduce Integration with example,Filters in HCatalog:scan & write filter,HCatInput,HCatOutput format,API","breadcrumb":{"@id":"https:\/\/data-flair.training\/blogs\/hcatalog-inputoutput\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/data-flair.training\/blogs\/hcatalog-inputoutput\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/hcatalog-inputoutput\/#primaryimage","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/HCatalog-InputOutpu-Interface-01.jpg","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/HCatalog-InputOutpu-Interface-01.jpg","width":1200,"height":628,"caption":"HCatalog InputOutput Interface | HCatalog MapReduce Integration"},{"@type":"BreadcrumbList","@id":"https:\/\/data-flair.training\/blogs\/hcatalog-inputoutput\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog Home","item":"https:\/\/data-flair.training\/blogs\/"},{"@type":"ListItem","position":2,"name":"HCatalog Tutorials","item":"https:\/\/data-flair.training\/blogs\/category\/hcatalog\/"},{"@type":"ListItem","position":3,"name":"HCatalog InputOutput Interface | HCatalog MapReduce Integration"}]},{"@type":"WebSite","@id":"https:\/\/data-flair.training\/blogs\/#website","url":"https:\/\/data-flair.training\/blogs\/","name":"DataFlair","description":"Learn Today. Lead Tomorrow.","publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/data-flair.training\/blogs\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/data-flair.training\/blogs\/#organization","name":"DataFlair","url":"https:\/\/data-flair.training\/blogs\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","width":106,"height":48,"caption":"DataFlair"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DataFlairWS\/","https:\/\/x.com\/DataFlairWS","https:\/\/www.linkedin.com\/company\/dataflair-web-services-pvt-ltd\/","https:\/\/www.youtube.com\/user\/DataFlairWS"]},{"@type":"Person","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/beb0cab24b7aa54423a3b50e669a9dcd","name":"DataFlair Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c322416204232f4dd97ef3901b0a499a5d34d7ba7fe333f4bfe53a907873d293?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c322416204232f4dd97ef3901b0a499a5d34d7ba7fe333f4bfe53a907873d293?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c322416204232f4dd97ef3901b0a499a5d34d7ba7fe333f4bfe53a907873d293?s=96&d=mm&r=g","caption":"DataFlair Team"},"description":"DataFlair Team specializes in creating clear, actionable content on programming, Java, Python, C++, DSA, AI, ML, data Science, Android, Flutter, MERN, Web Development, and technology. Backed by industry expertise, we make learning easy and career-oriented for beginners and pros alike.","url":"https:\/\/data-flair.training\/blogs\/author\/dfteam3\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/20025","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/comments?post=20025"}],"version-history":[{"count":0,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/20025\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media\/20356"}],"wp:attachment":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media?parent=20025"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/categories?post=20025"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/tags?post=20025"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}