shark 原理和架构《一》

来源:互联网 发布:东方证券炒股软件 编辑:程序博客网 时间:2024/06/07 12:17

1.shark简介


shark在spark中的位置:


2.shark 运行架构

shark对hive架构进行了修改,主要修改了内存管理,物理执行计划,执行器;使其能够运行在spark上。
在使用shark的时候要注意版本与hive版本的对应(shark0.92对应hive0.11)


3.性能对比(shark vs hive)


4.Shark动态优化( Dy namic Quer y Optimi z ation )

– 未发生数据加载过程中的新数据,缺乏数据统计信息;结合普遍使用的 UDF 缺乏,就必须使 用动态优化查询。 
– 允许基于在运行时收集的数据统计信息来动态优化查询计划

部分的DAG运行,收集partition大小 ,最频繁数据表,数据分布直方图等统计信息,基于这些统计的信息来调整后面执行计划。


在Map join中有一小部分数据访问比较频繁,就会把这小部分数据以广播的方式发送到需要的各个节点,优化计算。
对于上图中的Shufffle join 采取的是重新分区来进行优化。

基于列的压缩和存储( Columnar Memor y Store )


对于基础的数据类型是存储在JVM基础数据集数组里;对于复杂的数据类型是先序列化然后存储在bate数组里。

5.shark 的基本操作

./bin/shark 启动 shark 客户端
./bin/shark -e " SELECT *FR OM foo"
 ./bin/shark -i q ueries.h q l 执行文件中的语句并进入客户端
 ./bin/shark -f q ueries.h q l 执行文件中的语句 ,不进入客户端
 ./bin/shark -H  查看shark的帮助信息

sharkserver (允许多个客户端连入shark)
– ./bin/shark – service sharkserver < port > 
– ./bin/shark -h < server-host > -p < server-port >

同 hive 的操作,但要注意所兼容的版本

缓存表
– CREATE TA BLE ... T BL P R OPERTIES ( " shark.cache " = " true " ) AS SELECT ... 
– CREATE TA BLE xxx _ cached AS SELECT ... 

 缓存分区表
– CREATE TA BLE srcpart _ cached (ke y int, value string) PARTITIONED BY (ke y part int); 
– shark.cache.polic y= shark.memstore2.CacheAll P olic y| LR UCache Polic y| FIF OCache P olic y  //指定缓存策略
– shark.cache.polic y .maxSi z e =100     //指定分区最大的数目
– 可以通过扩展 shark.memstore2.Cache P olic y 来实现自己的缓存策略

当遇到 shuffle data 的时候需要指定 reducer 的数量
– set mapred.reduce.tasks = xxx 

可以使用 explain 看执行计划



0 0
原创粉丝点击