zoukankan      html  css  js  c++  java
  • 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多大版本,再测试其抽取的整合方式,再测试其性能。

    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

     
     
     
     
     
     
     
  • 相关阅读:
    返回页面顶部的方法
    一个获取当前 url 查询字符串中的参数的方法
    那些让你看起来很牛逼的Docker使用技巧
    Docker 1.13 新特性 —— Docker服务编排相关
    docker1.13新功能network关注点
    Docker 1.13 最实用命令行:终于可以愉快地打扫房间了
    Docker 1.13 – 新增功能大揭秘
    Docker 1.13 编排能力进化
    Docker
    Docker
  • 原文地址:https://www.cnblogs.com/kxdblog/p/4471560.html
Copyright © 2011-2022 走看看