1.hbase相同的rowkey里存在多条记录问题的调研解决方案
VERSIONS => 3,Hbase version 最多插入三条记录
将一个集群hbase中表 "VerticalDataTable" 数据插入另一张表时遇到问题,本来有十几个版本,但是只插入了3个版本(还是可以插入成功)
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多大版本,再测试其抽取的整合方式,再测试其性能。
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