• Shark用户迁移指南
    • 调度(Scheduling)
    • Reducer数量
    • Caching

    Shark用户迁移指南

    调度(Scheduling)

    为JDBC客户端会话设置Fair Scheduler池。用户可以设置spark.sql.thriftserver.scheduler.pool
    变量。

    1. SET spark.sql.thriftserver.scheduler.pool=accounting;

    Reducer数量

    在Shark中,默认的reducer数目是1,可以通过mapred.reduce.tasks属性来控制其多少。Spark SQL反对使用这个属性,支持spark.sql.shuffle.partitions属性,它的默认值是200。
    用户可以自定义这个属性。

    1. SET spark.sql.shuffle.partitions=10;
    2. SELECT page, count(*) c
    3. FROM logs_last_month_cached
    4. GROUP BY page ORDER BY c DESC LIMIT 10;

    你也可以在hive-site.xml中设置这个属性覆盖默认值。现在,mapred.reduce.tasks属性仍然可以被识别,它会自动转换为spark.sql.shuffle.partition

    Caching

    表属性shark.cache不再存在,名字以_cached结尾的表也不再自动缓存。作为替代的方法,我们提供CACHE TABLEUNCACHE TABLE语句显示地控制表的缓存。

    1. CACHE TABLE logs_last_month;
    2. UNCACHE TABLE logs_last_month;

    注意:CACHE TABLE tbl是懒加载的,类似于在RDD上使用.cache。这个命令仅仅标记tbl来确保计算时分区被缓存,但实际并不缓存它,直到一个查询用到tbl才缓存。

    要强制表缓存,你可以简单地执行CACHE TABLE后,立即count表。

    1. CACHE TABLE logs_last_month;
    2. SELECT COUNT(1) FROM logs_last_month;

    有几个缓存相关的特征现在还不支持:

    • 用户定义分区级别的缓存逐出策略
    • RDD重加载
    • 内存缓存的写入策略(In-memory cache write through policy)