千家信息网

mr如何使用hcatalog读写hive表

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇文章给大家分享的是有关mr如何使用hcatalog读写hive表,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。企业中,由于领导们的要
千家信息网最后更新 2026年11月01日mr如何使用hcatalog读写hive表

本篇文章给大家分享的是有关mr如何使用hcatalog读写hive表,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

企业中,由于领导们的要求,hive中有数据存储格式很多时候是会变的,比如为了优化将tsv,csv格式改为了parquet或者orcfile。那么这个时候假如是mr作业读取hive的表数据的话,我们又要重新去写mr并且重新部署。这个时候就很蛋疼。hcatalog帮我们解决了这个问题,有了它我们不用关心hive中数据的存储格式。详细信息请仔细阅读本文。

本文主要是讲mapreduce使用HCatalog读写hive表。
hcatalog使得hive的元数据可以很好的被其它hadoop工具使用,比如pig,mr和hive。
HCatalog的表为用户提供了(HDFS)中数据的关系视图,并确保用户不必担心他们的数据存储在何处或采用何种格式,因此用户无需知道数据是否以RCFile格式存储, 文本文件或sequence 文件。
它还提供通知服务,以便在仓库中有新数据可用时通知工作流工具(如Oozie)。
HCatalog提供HCatInputFormat / HCatOutputFormat,使MapReduce用户能够在Hive的数据仓库中读/写数据。它允许用户只读取他们需要的表和列的分区。返回的记录格式是方便的列表格式,用户无需解析它们。
下面我们举个简单的例子。
在mapper类中,我们获取表schema并使用此schema信息来获取所需的列及其值。
下面是map类。
public class onTimeMapper extends Mapper {   @Override   protected void map(WritableComparable key, HCatRecord value,    org.apache.hadoop.mapreduce.Mapper.Context context)    throws IOException, InterruptedException {
// Get table schema HCatSchema schema = HCatBaseInputFormat.getTableSchema(context);
Integer year = new Integer(value.getString("year", schema)); Integer month = new Integer(value.getString("month", schema)); Integer DayofMonth = value.getInteger("dayofmonth", schema);
context.write(new IntPair(year, month), new IntWritable(DayofMonth)); }}

‍

在reduce类中,会为将要写入hive表中的数据创建一个schema。
public class onTimeReducer extends Reducer {public void reduce (IntPair key, Iterable value, Context context) throws IOException, InterruptedException{  int count = 0; // records counter for particular year-month for (IntWritable s:value) {  count++; }  // define output record schema List columns = new ArrayList(3); columns.add(new HCatFieldSchema("year", HCatFieldSchema.Type.INT, "")); columns.add(new HCatFieldSchema("month", HCatFieldSchema.Type.INT, "")); columns.add(new HCatFieldSchema("flightCount", HCatFieldSchema.Type.INT,"")); HCatSchema schema = new HCatSchema(columns); HCatRecord record = new DefaultHCatRecord(3);  record.setInteger("year", schema, key.getFirstInt()); record.set("month", schema, key.getSecondInt()); record.set("flightCount", schema, count); context.write(null, record);}}
最后,创建driver类,并且表明输入输出schema和表信息。
public class onTimeDriver extends Configured implements Tool{   private static final Log log = LogFactory.getLog( onTimeDriver.class );
public int run( String[] args ) throws Exception{ Configuration conf = new Configuration(); Job job = new Job(conf, "OnTimeCount"); job.setJarByClass(onTimeDriver.class); job.setMapperClass(onTimeMapper.class); job.setReducerClass(onTimeReducer.class);
HCatInputFormat.setInput(job, "airline", "ontimeperf"); job.setInputFormatClass(HCatInputFormat.class); job.setMapOutputKeyClass(IntPair.class); job.setMapOutputValueClass(IntWritable.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(DefaultHCatRecord.class); job.setOutputFormatClass(HCatOutputFormat.class); HCatOutputFormat.setOutput(job, OutputJobInfo.create("airline", "flight_count", null)); HCatSchema s = HCatOutputFormat.getTableSchema(job); HCatOutputFormat.setSchema(job, s); return (job.waitForCompletion(true)? 0:1); } public static void main(String[] args) throws Exception{ int exitCode = ToolRunner.run(new onTimeDriver(), args); System.exit(exitCode);}}

‍

当然,在跑上面写的代码之前,应该先在hive中创建输出表。
create table airline.flight_count(Year INT ,Month INT ,flightCount INT)ROW FORMAT DELIMITED FIELDS TERMINATED BY ','STORED AS TEXTFILE;
可能会引起错误的地方是没有设置$HIVE_HOME.

以上就是mr如何使用hcatalog读写hive表,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

数据 格式 用户 存储 信息 时候 仓库 工具 文件 更多 知识 篇文章 工作 输出 实用 不用 代码 企业 例子 地方 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 河南云网互联网络科技有限公司 致骋互联网科技 上海致骋互联网科技 融贸通互联网科技 互联网科技汛 互联网科技股有哪些 宁夏众和广鑫互联网科技有限公司 互联网对科技的发展 国大互联网教育科技有限公司工作 天津腾达互联网科技有限公司 如何创新互联网科技 威龙国际互联网科技公司 工业互联网等科技实现智能化赋能 深圳无忧互联网科技 21世纪互联网科技成就 互联网科技股为什么大涨 广州燕处互联网科技有限公司 玉溪新华互联网科技怎么选 瑞安市蟠桃会互联网科技有限公司 宁波允成互联网科技有限公司 科技互联网企业 科技企业和互联网企业 互联网金融与金融科技 鑫亿盛互联网科技 江苏南京365互联网科技 中盈科技互联网信息有限公司 南平创想时代互联网科技有限公司 互联网科技机房 众联互联网络科技 亚光科技低轨卫星互联网
0