http://blog.csdn.net/pelick/article/details/11964291

Shark简介

Shark即Hive on Spark,本质上是通过Hive的HQL解析,把HQL翻译成Spark上的RDD操作,然后通过Hive的metadata获取数据库里的表信息,实际HDFS上的数据和文件,会由Shark获取并放到Spark上运算。Shark的特点就是快,完全兼容Hive,且可以在shell模式下使用rdd2sql()这样的API,把HQL得到的结果集,继续在scala环境下运算,支持自己编写简单的机器学习或简单分析处理函数,对HQL结果进一步分析计算。

Shark速度快的原因除了Spark平台提供的基于内存迭代计算外,在设计上还存在对Spark上进行了一定的改造,主要有

- partial DAG execution:对join优化,调节并行粒度,因为Spark本身的宽依赖和窄依赖会影响并行计算和速度

- 基于列的压缩和存储:把HQL表数据按列存,每列是一个array,存在JVM上,避免了JVM GC低效,而压缩和解压相关的技术是Yahoo!提供的

其他特性和设计要点请参看论文Shark: SQL and Rich Analytics at scale

总结来说,Shark是一个插件式的东西,在我现有的Spark和Hive及hadoop-client之间,在这两套都可用的情况下,Shark只要获取Hive的配置(还有metastore和exec等关键包),Spark的路径,Shark就能利用Hive和Spark,把HQL解析成RDD的转换,把数据取到Spark上运算和分析。在SQL on Hadoop这块,Shark有别于Impala,Stringer,而这些系统各有自己的设计思路,相对于对MR进行优化和改进的思路,Shark的思路更加简单明了些。

Shark部署

Shark Wiki上发布了两个主要版本,shark-0.7.0-hadoop1-bin.tgz和shark-0.7.0-hadoop2-bin.tgz。shark-0.7.0-hadoop1-bin.tgz适用于CDH3,shark-0.7.0-hadoop2-bin.tgz适用于CDH4,他们都使用hive-0.9.0进行了编译,使用的Spark是0.7.2的。相对来说,hive的版本比较老,想要支持0.11.0这样更新的版本的话需要自己重新编译Shark。在github上,现在Shark的master分支已经开始支持未发布的Spark0.8版本,编译注意的地方会在下一节讲。

Shark的部署参看https://github.com/amplab/shark/wiki/Running-Shark-on-a-Cluster和https://github.com/amplab/shark/wiki/Running-Shark-Locally。首先要选择适合自己Hadoop集群版本的shark-0.7.0-hadoopX-bin.tgz。

解压出来的hive-0.9.0配置在shark-env.sh的HIVE_HOME,同时还可以额外指定HIVE_CONF的目录,一般就指定自己已有的可以连接hadoop的hive conf目录。其余的SPARK_MEM, SPARK_HOME, SCALA_HOME就不说了。

用bin/shark-withinfo启动shark,可以看到INFO信息,shark首先启动自己的CLI,然后会启动Hive,再启动Spark,之后就可以用HQL测试Shark可用与否。

在配置好各个HOME后,如果跑在common hadoop上,当你进行select这样和HDFS数据打交道的操作时,会报如下的版本错误,

[html] view plaincopy
  1. ERROR shark.SharkDriver: FAILED: Hive Internal Error: java.lang.RuntimeException(java.io.IOException: Failed on local exception: java.io.IOException: Response is null.; Host Details : local host is: "namenode.hadoop.game.yy.com/xxx.xxx.xx.xxx"; destination host is: "xxx.xxx.com":pppp;

具体见Shark Group的这个帖。目前,我尝试了很多也没有找到解决办法,特别是像我用的hadoop-client还是公司自己改装过的,相对的Hive的几个主要jar包(hive-metastore-xx, hive-exec-xx)也被改动了,导致不但shark发布的包不能直接使用,连使用shark重新根据自己的hive编译一遍都编译不过。

最后再提醒几个可能发生的常见错误。

1. HIVE_HOME/lib下要有jdbc驱动包,比如mysql-driver的jar包,否则会报错。

2. HIVE_HOME/lib下的hive-metastore-xx.jar,可能太旧,不适应自己的hadoop集群,可以替换成自己的hive/lib下的metastore包,否则会报错,HQL执行不成功。替换后至少在执行use db; show tables; 这样的HQL没有问题。

3. 有一个错误是:

[html] view plaincopy
  1. java.lang.UnsatisfiedLinkError: org.apache.hadoop.security.JniBasedUnixGroupsMapping.getGroupForUser(Ljava/lang/String;)[Ljava/lang/String;

后来我根据hadoop jira上的这个相似的问题https://issues.apache.org/jira/browse/HADOOP-9232,受到启发,解决方案是对shark目录下lib_manage/jars/org.apache.hadoop/hadoop-common内的jar包内的配置文件core-site.xml,去掉hadoop.security.group.mapping的相关配置,就OK了。

Shark编译

主要参考官方文档:https://github.com/amplab/shark/wiki/Building-Shark-from-Source-Code。在下载版本的时候,一定要注意下载配套的源码。我第一次编译的时候用了shark-master的源码,就编译失败了,因为它依赖Spark-0.8版本,而这版本还未发布。应该获取branch-0.7下的版本,

[html] view plaincopy
  1. git clone https://github.com/amplab/shark.git -b branch-0.7 shark-0.7

除了指定下SCALA_HOME和HIVE_HOME外,最好再指定下SPARK_HOME。最后sbt/sbt package,利用sbt进行打包,需要蛮长的时间。

我尝试了依赖公司的hive包编译,失败了,报了77个error,原因是Shark的源码里很多依赖于hive的接口,有些有,有些没有,所以我又尝试了依赖hive-0.9.0的包编译,成功了,没有报错。虽然我想尝试编译适合自己公司集群的shark失败了,但是我还是完成了这条路的探索。目前我如果想使用Shark的话,只能自己部一套CDH的hadoop和hive了。哎。

Shark简介、部署及编译小结相关推荐

  1. weblogic自带的jdk是在工程的包部署后编译使用

    weblogic自带的jdk是在工程的包部署后编译使用的.当用户把项目打包部署到weblogic上面,运行该项目的java环境jdk就是用的weblogic自带的jdk了,工程中的jdk和编译时的jd ...

  2. PaddleOCR——Visual Studio 2019 环境下C++推理部署 CMake 编译解决方案

    PaddleOCR--Visual Studio 2019 环境下C++推理部署 CMake 编译解决方案 官方文档 环境配置 Step1: 下载PaddlePaddle C++ 预测库 paddle ...

  3. php反序列化漏洞实验,PHP反序列化漏洞简介及相关技巧小结

    原标题:PHP反序列化漏洞简介及相关技巧小结 *严正声明:本文仅限于技术讨论与分享,严禁用于非法途径 要学习PHP反序列漏洞,先了解下PHP序列化和反序列化是什么东西. php程序为了保存和转储对象, ...

  4. OnlyOffice验证(二)在Centos7上部署OnlyOffice编译结果

    在Centos7上部署OnlyOffice编译结果   此处将尝试将OnlyOffice验证(一)DocumentServer编译验证的结果部署到Centos7上.并且使用其它服务器现有的Rabbit ...

  5. openfire服务器源码,Openfire源码部署以及编译运行.doc

    Openfire源码部署以及编译运行 Openfire源码下载 可以去官方网站:官网地址/projects/openfire/. 也可以利用eclispe自带的SVN插件导入,再次就过多介绍,官网上写 ...

  6. Windows10 + VS2015 (Win SDK10)环境下的64位 VTK编译小结

    之前在学习vtk过程中,感觉vtk的编译还是很简单的,基本上不会碰到什么棘手的错误.但是,当我在Win10+VS2015这个环境下配置时,却遇到了麻烦.经过一番折腾之后,终于将vtkbian编译成功了 ...

  7. 【Windows 逆向】CheatEngine 工具 ( CheatEngine 简介 | 使用 Lazarus 编译 CE 源码 | CheatEngine 相关文档资料 )

    文章目录 一.CheatEngine 简介 二.使用 Lazarus 编译 CE 源码 三.CheatEngine 相关文档资料 一.CheatEngine 简介 CheatEngine 简称 CE ...

  8. 【Android 插件化】VirtualAppEx 编译运行 ( VirtualAppEx 简介 | 配置 VirtualAppEx 编译环境 | 编译运行 VirtualAppEx 代码 )

    文章目录 一.VirtualAppEx 简介 二.配置 VirtualAppEx 编译环境 1.Android Studio 3.0 2.NDK 版本 ( Android NDK r10e ) 3.配 ...

  9. java 不重启部署_编译Java类后不重启Tomcat有两种方式:热部署、热加载

    不重启Tomcat有两种方式:热部署.热加载 热部署:容器状况在运行时重新部署整个项目.这类环境下一般整个内存会清空,重新加载,这类方式 有可能会造成sessin丢失等环境.tomcat 6确实可以热 ...

  10. linux内核体系学习路径_Linux内核分析(一)linux体系简介|内核源码简介|内核配置编译安装...

    从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底,同时在博文中如果那些地方有问题还请各位大神为我讲解. 今天我们会分析到以下内容: 1. Linux体系结构简介 ...

最新文章

  1. Zookeeper源码分析:集群模式启动概述
  2. 海豚php添加一行,添加表单项通用方法-海豚PHP1.0.6完全开发手册-基于ThinkPHP5.0.10的快速开发框架...
  3. mysql jdbc dbcp_连接数据库 JDBC、DBCP、JNDI
  4. 模拟noj——打扑克
  5. 调光设备术语:调光曲线(转)
  6. (5)DFS(深度优先搜索算法):排列数字
  7. LeetCode(1047)——删除字符串中的所有相邻重复项(JavaScript)
  8. 获取当前时间---年月日时分秒------iOS
  9. VS2010中配置OpenGL的一些问题小结
  10. 华为计算机网络技术试题,(完整版)华为试题答案
  11. 安装搭建Reviewboard 实现pre-commit-review
  12. 2022建筑电工(建筑特殊工种)考试题目模拟考试平台操作
  13. 云栖大会人脸识别闸机【技术亮点篇4】--户外闸机高20%的抗撞击能力
  14. python 计算两直线交点
  15. windows执行cygwin慢问题
  16. 学习记录 重叠网络权威知识——多尺度复杂网络社区发现的链接
  17. 互联网风控系统架构分析
  18. 银行数据仓库体系实践(8)--主数据模型设计
  19. Java面试错题集1
  20. android+平板+输入法,搜狗推首款Android3.0平板电脑输入法

热门文章

  1. Atitit 安全措施流程法 目录 1. 常见等安全措施方法 2 1.1. 安全的语言 代码法,编译型 java 2 1.2. 安全编码法 2 1.3. 安全等框架类库 api 2 1.4. 加密法
  2. Atitit 实体的概念与理解 目录 1. 使用不同的语言来描述实体 1 1.1. H5 table dom模型 json 1 1.2. Sql table 1 1.3. Java class m
  3. Atitit 自然语言处理(NLP)的应用 与 搜索引擎 目录 1.1. 搜索引擎并不是自然语言处理(NLP)的唯一应用。 2 1.2. NLP的应用 2 1.3. 社交网站信息流, 2 1.4.
  4. Atitit 现代信息检索 Atitit 重要章节 息检索建模 检索评价 第8章 文本分类 Line 210: 第9章 索引和搜索 第11章 Web检索 第13章 结构化文本检索 目录 L
  5. Atitit 诗歌之道 attilax著 艾龙 著 1. 诗歌集分类 1 1.1. 国王颂歌 1 1.2. 爱情类(相逢 赞美 相识 思念 离去 分分离离 忘记) 1 1.3. 其他 1 2. 世界
  6. Atitit 图像处理之编程之类库调用的接口api cli gui ws rest attilax大总结.docx
  7. Atitit jsr规范化分类 attilax总结
  8. Atitit. 构造ast 语法树的总结attilax v2 q0f
  9. paip java.net.SocketException No buffer space available的解决办法及总结
  10. paip.Adblock屏蔽规则保存位置以及修理恢复