纵有疾风起
人生不言弃

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中TIMERANGE和VERSION的使用 
hbase(main):079:0> create 'scores',{NAME=>'course',VERSIONS=>2}//版本为2hbase(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中。可以将外部数据来源作为临时表挂在的文件系统之中,减少了全部加载数据过来的种种纠结

Spark SQL1.2与HDP2.2结合插图

保存结果:

统一的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.

Spark SQL1.2与HDP2.2结合插图1

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

 

3.Spark SQL1.2 与 Spark SQL1.3

External data source API

Spark SQL1.2 

在1.2版本之前,开发者已经可以通过扩展RDD的方式支持各种外部数据源

增加了JSON、Avro、CSV等简单格式的外部数据源支持,Spark SQL 1.2中已经搭载了一套新的Parquet数据源实现

External data source API还可以实现Spark与HBase、JDBC等外部系统的高效对接

优化: 

Column pruning。在列剪枝中,Column pruning可以完全忽视无需处理的字段,从而显著地减少IO。

Predicate pushdown。将SQL查询中的部分过滤条件下推到更加靠近数据源的位置,利用Parquet、ORC等智能格式写入时记录的统计信息(比如最大值、最小值等)来跳过必 然不存在目标数据的数据段,从而节省磁盘IO。 

在Spark 1.2版本中,External data source API只提供了查询支持尚未提供数据写入支持。在后续版本中还将提供带分片剪枝的分片支持和数据写入支持。今后也期望将Spark SQL的Hive支持迁移到data source API上。

因为对其提供查询支持,可采取方案,数据存放在hive/hbase,目前并没确定是否决定迁移,但是查询时,用到多数据源抽取即可

测试:hive hbase json mysql

 

 

 
 
 
 
 
 
 

文章转载于:https://www.cnblogs.com/kxdblog/p/4471560.html

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » Spark SQL1.2与HDP2.2结合
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录