03-大数据内存计算spark系列贴-spark整合hbase,优化BI平台

本文介绍了如何在Hadoop 1.0生态圈中,利用Spark与Hive结合,针对HBase进行BI分析。通过将Hive作为主要分析接口,存储小部分信息于HBase,实现高效的数据查询和分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   (原文地址: http://blog.youkuaiyun.com/codemosi/article/category/2777045,转载麻烦带上原文地址。hadoop hive hbase mahout storm spark kafka flume,等连载中,做个爱分享的人 奋斗)

(hadoop1.0生态圈的BI系统。由hive作为大头提供分析接口,整合hbase,在hbase上存储小部分信息,由hive来分析hbase的小部分信息)

2.jpg (79.68 KB, 下载次数: 0)

下载附件

2014-8-29 10:01 上传


(hadoop2.0生态圈+spark的BI系统。在分析接口上由spark sql , hive ,spark协作提供分析接口,存储还是一样,hbase存储小部分信息,但是是由 spark直接访问hbase的数据。)

此文主要介绍2.0系统中的红圈部分,spark 如何分析 hbase的信息。还是一样,作为程序员应该直接看代码入手。代码就在spark的shell界面直接输入。不在scala文件写了。

import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor}
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.spark.rdd.NewHadoopRDD
import scala.collection.JavaConverters._

val conf = HBaseConfiguration.create()                                   //Hbase访问配置
conf.set(TableInputFormat.INPUT_TABLE, "user")                    //访问Hbase的user表
var hBaseRDD = sc.newAPIHadoopRDD(conf,                         //sc 是spark shell界面的内置对象,表示spark的上下文。
                                                         classOf[TableInputFormat],   // 使用Hbase的的参数格式
                                                         classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],   //
                                                         classOf[org.apache.hadoop.hbase.client.Result])// 返回值类型  最后解析返回值var hBaseRDD。这个RDD就可以来分析Hbase的user表了
hBaseRDD.count()         //查出user表有几条记录
hBaseRDD.map(tuple => tuple._2) //
.map(result => result.getColumn("infos".getBytes(), "username".getBytes()))//
.map(keyValues => {
                                   ( keyValues.asScala.reduceLeft {
                                                  (a, b) => if (a.getTimestamp > b.getTimestamp) a else b
                                             }.getRow,
                                   keyValues.asScala.reduceLeft {
                                                 (a, b) => if (a.getTimestamp > b.getTimestamp) a else b
                                             }.getValue
                                    )
                              }
).take(5)
这个例子,用来取出HBase user表中的用户名username字段的值123456。其他的业务,使用spark的transformation结合程序的逻辑来处理hbaseRDD,来做各种业务逻辑和分析。if,groupby什么的。transformation见02篇。
user:大概表结构 如下

rowkey                                       columeFamily:infos   
                                colume :username                    colume:password                     
21121998                                123456                           123321

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值