Hive HBase集成

1.版本

    hive0.14

    hbase0.99.2

2.编译

    由于hive0.14版本不支持hbase0.99.2,所以需要对hive源码中的hbase-handler模块中的相关类做修改,重新编译。

2.1 修改 /hbase-handler/src/java/org/apache/hadoop/hive/hbase/HBaseStorageHandler.java 类470行

TableMapReduceUtil.addDependencyJars(
    jobConf, HBaseStorageHandler.class, TableInputFormatBase.class,
 org.cliffc.high_scale_lib.Counter.class); // this will be removed for HBase 1.0
将org.cliffc.high_scale_lib.Counter.class参数去掉。

2.2 修改/hbase-handler/src/java/org/apache/hadoop/hive/hbase/HiveHBaseInputFormatUtil.java 类

在该类中添加方法

+import org.apache.hadoop.hbase.TableName;
+  public static TableName getTableName(JobConf jobConf) throws IOException {
+    String hbaseTableName = jobConf.get(HBaseSerDe.HBASE_TABLE_NAME);
+    return TableName.valueOf(Bytes.toBytes(hbaseTableName));
+  }

2.3 修改 /hbase-handler/src/java/org/apache/hadoop/hive/hbase/HiveHBaseTableInputFormat.java 类

+import org.apache.hadoop.hbase.client.ConnectionFactory;
+import org.apache.hadoop.hbase.client.Connection;

 

93行

-    setHTable(HiveHBaseInputFormatUtil.getTable(jobConf));
+    final Connection conn = ConnectionFactory.createConnection(jobConf);
+
+    initializeTable(conn, HiveHBaseInputFormatUtil.getTableName(jobConf));

111行

       public void close() throws IOException {
         recordReader.close();
+        conn.close();
       }

 

362行

 

+    final Connection conn = ConnectionFactory.createConnection(jobConf);

+      InputSplit [] results = null;

+try{

+    initializeTable(conn, HiveHBaseInputFormatUtil.getTableName(jobConf));
-    setHTable(new HTable(HBaseConfiguration.create(jobConf), Bytes.toBytes(hbaseTableName)));

 

+       results = new InputSplit[splits.size()];

-   InputSplit[] results = new InputSplit[splits.size()];

 

         for (int i = 0; i < splits.size(); i++) { 
               results[i] = new HBaseSplit((TableSplit) splits.get(i), tablePaths[0]);
           }
+     } finally{
+           conn.close();
+     }

2.4 maven编译hive

 

3.配置

编辑hive/conf/hive-env.sh

将hive和hbase的lib包加入到hive的环境变量中。

如下

export HIVE_AUX_JARS_PATH=${HIVE_HOME}/lib;${HBASE_HOME}/lib

 

4.demo

4.1hive建表

CREATE TABLE hbase_hive_1(key int, value string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,cf:val") TBLPROPERTIES ("hbase.table.name"="hivehbase1");

在hive中建表hbase_hive_1,映射hbase中的表为hivehbase1,执行此命令同时建了hive和hbase的表。


hive外部表

CREATE EXTERNAL TABLE hbase_hive_1(key int, value string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,cf:val") TBLPROPERTIES ("hbase.table.name"="hivehbase");

hbase中已经有hivehbase表,执行hive的建外部表命令。

 

4.2插入数据

insert overwrite table hbase_hive_1 values(1,'aaaa');


4.3查询数据

select * from hbase_hive_1


5.性能测试

参考http://lxw1234.com/archives/2015/04/101.htm

HiveHBase 是 Hadoop 生态系统中的两个重要组件,它们可以集成使用以提供更强大的数据处理和分析能力。 1. **Hive 简介**: Hive 是一个基于 Hadoop 的数据仓库工具,用于处理结构化数据。它提供了类似 SQL 的查询语言 HiveQL,使得数据分析和查询变得更加简单和高效。 2. **HBase 简介**: HBase 是一个分布式、面向列的 NoSQL 数据库,建立在 Hadoop 的 HDFS 之上。它适合存储大规模稀疏数据,并提供实时读写访问。 3. **集成目的**: 将 HiveHBase 集成的主要目的是结合 Hive 的数据处理能力和 HBase 的实时数据访问能力。通过集成,用户可以使用 HiveQL 查询存储在 HBase 中的数据,并将分析结果写回 HBase。 4. **集成方式**: - **外部表**:在 Hive 中创建外部表,映射到 HBase 中的表。这样,Hive 可以直接查询 HBase 中的数据。 - **表映射**:通过 Hive 表的映射,将 HBase 表中的数据导入到 Hive 表中进行分析。 5. **集成步骤**: - **配置 HiveHBase**:确保 HiveHBase 都在同一 Hadoop 集群上,并且 Hive 配置文件正确指向 HBase。 - **创建外部表**:在 Hive 中使用 `CREATE EXTERNAL TABLE` 语句创建外部表,并使用 `STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'` 指定存储处理器。 - **查询数据**:使用 HiveQL 查询 HBase 中的数据。 ```sql CREATE EXTERNAL TABLE hive_table ( key string, column_family:column1 string, column_family:column2 int ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,column_family:column1,column_family:column2") TBLPROPERTIES ("hbase.table.name" = "hbase_table"); ``` 6. **优点**: - **实时数据访问**:通过 HBase 提供的实时数据访问能力,用户可以实时查询和分析数据。 - **数据分析**:利用 Hive 提供的强大数据处理和分析能力,用户可以对存储在 HBase 中的数据进行复杂的数据分析和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值