Spark SQL1.2与HDP2.2结合

1.hbase相同的rowkey里存在多条记录问题的调研解决方案

VERSIONS => 3,Hbase version 最多插入三条记录

将一个集群hbase中表 "VerticalDataTable" 数据插入另一张表时遇到问题,本来有十几个版本,但是只插入了3个版本(还是可以插入成功)

搜索后发现是因为在建表的时候,VERSIONS => 3默认为3, VERSIONS是跟columnfamily相关的所以需要修改表的VERSIONS 属性
alter table {NAME => ‘columnfamily‘, VERSIONS => ‘300‘}
用处:如果将VERSIONS => 1则只插入一个版本,这样就可以避免在相同的rowkey的情况下,有重复的记录
但平时我们做scan查询时:
hbase(main):079:0> create ‘scores‘,{NAME=>‘course‘,VERSIONS=>2}
//版本为2
hbase(main):080:0> put ‘scores‘,‘Tom‘,‘course:math‘,‘97‘
hbase(main):082:0> put ‘scores‘,‘Tom‘,‘course:math‘,‘100‘
hbase(main):026:0> scan ‘scores‘
ROW COLUMN+CELL 
Tom column=course:math, timestamp=1394097651029, value=100 
1 row(s) in 0.0110 seconds
//HBASE默认scan出来的结果是最后一条时间戳的记录
hbase(main):032:0> scan ‘scores‘,{VERSIONS=>2}
ROW COLUMN+CELL 
Tom column=course:math, timestamp=1394097651029, value=100 
Tom column=course:math, timestamp=1394097631387, value=97 
1 row(s) in 0.0130 seconds
//查出两条记录
hbase(main):029:0> alter ‘member‘,{NAME=>‘info‘,‘VERSIONS‘=>2}
//修改versions
 

2.hive表内去重数据解决方案

insert overwrite table store  
  select t.p_key,t.sort_word from   
    ( select p_key,  
           sort_word ,  
           row_number()over(distribute by p_key sort by sort_word) as rn  
     from store) t  
     where t.rn=1; 

Hive上一个典型表内除重的写法, p_key为除重依据, sort_word 为排序依据,一般为时间   rn为排名。

2.关于用SparkSQL历史数据(DBMS)和大数据平台多数据源同时抽取的调研解决方案

Spark Submit 2014上,Databricks宣布放弃Shark 的开发,而转投Spark SQL,理由是Shark继承了Hive太多,优化出现了瓶颈

2015年3月13日 Databricks发布版本1.3.0, 此次版本发布的最大亮点是新引入的DataFrame API 参考这里 这里

目前HDP有支持Spark 1.2.0(Spark SQL在版本1.1.0中产生)

Apache Spark 1.2.0 on YARN with HDP 2.2  例子程序在此

HDP2.2支持Spark1.2.0,等待测试特性,特别是Spark SQL,要提前了解当前版本的bug

数据源支持:

External data source API在支持了多种如JSON、Avro、CSV等简单格式的同时,还实现了Parquet、ORC等的智能支持;同时,通过这个API,开发者还可以使用JDBC将HBase这样的外部系统对接到Spark中。可以将外部数据来源作为临时表挂在的文件系统之中,减少了全部加载数据过来的种种纠结

技术分享

保存结果:

统一的load/save API

在Spark 1.2.0中,要想将SchemaRDD中的结果保存下来,便捷的选择并不多。常用的一些包括:

  • rdd.saveAsParquetFile(...)
  • rdd.saveAsTextFile(...)
  • rdd.toJSON.saveAsTextFile(...)
  • rdd.saveAsTable(...)

Spark SQL中缓存表一定要用cacheTable(“tableName”)这种形式,否则无法享受到列式存储带来的一系列好处

Using the JDBC data source and the JSON data source to join two tables together to find the traffic log fot the most recently registered users.

技术分享

先测试HDP最大支持Spark多大版本,再测试其抽取的整合方式,再测试其性能。

 

 
 
 
 
 
 
 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。