spark写表指定外部表_Spark访问与HBase关联的Hive表

知识点1:创建关联Hbase的Hive表

知识点2:Spark访问Hive

知识点3:Spark访问与Hbase关联的Hive表

知识点1:创建关联Hbase的Hive表

两种方式创建,内部表和外部表

内部表,如果删除hive表,hbase表也会删除;不建议使用这种方式,大多数都是关联进行查询操作

外部表,如果删除hive表,hbase表不受影响;

hive使用的还是存储在hbase中的数据。

这里创建外部表。

CREATE EXTERNAL TABLE tdatafromhbase(key string, id string, info map )

STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, cf1:id, cf2:")

TBLPROPERTIES("hbase.table.name" = "userinfo");

Hbase中的表名为userinfo;

Hive中的表名为tdatafromhbase,字段为key, id, info<>;

由于在使用hbase的时候列名会很多且未知,这里使用了map数据类型存储列族cf2的内容。针对已知的列名可以直接指定,这里id就是列族cf1的字段id;

知识点2:spark访问hive

importorg.apache.spark.sql.hive.HiveContextimportorg.apache.spark.{SparkContext, SparkConf}/*** Created by Edward on 2017/9/19.*/object HiveSql {

def main(args: Array[String]) {

val conf= new SparkConf().setAppName("sql-hive")

val sc=newSparkContext(conf)

val hiveContext= newHiveContext(sc)

hiveContext.sql("select key, id, info from tdatafromhbase").collect().foreach(println)

sc.stop()

}

}

知识点3:Spark访问与Hbase关联的Hive表

直接调用hive没什么差别,需要注意的就是,需要引用jar包,不然会报错

2017-10-03 01:55:36,817ERROR [main] hive.log: error in initSerDe: java.lang.ClassNotFoundException Class org.apache.hadoop.hive.hbase.HBaseSerDe not found

java.lang.ClassNotFoundException: Class org.apache.hadoop.hive.hbase.HBaseSerDe not found

在spark-submit的时候添加参数,使用hive的库hive-hbase-handler-1.1.0-cdh5.10.0.jar

--jars /home/hadoop/app/hive-1.1.0-cdh5.10.0/lib/hive-hbase-handler-1.1.0-cdh5.10.0.jar

应用场景,spark操作hive,当然spark也可以直接操作hbase, 这里使用spark通过hive访问hbase,有点绕。

根据自己的实际需求,和性能要求进行调整。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值