Shark简介、部署及编译小结
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数据打交道的操作时,会报如下的版本错误,
- 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. 有一个错误是:
- 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下的版本,
- 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简介、部署及编译小结相关推荐
- weblogic自带的jdk是在工程的包部署后编译使用
weblogic自带的jdk是在工程的包部署后编译使用的.当用户把项目打包部署到weblogic上面,运行该项目的java环境jdk就是用的weblogic自带的jdk了,工程中的jdk和编译时的jd ...
- PaddleOCR——Visual Studio 2019 环境下C++推理部署 CMake 编译解决方案
PaddleOCR--Visual Studio 2019 环境下C++推理部署 CMake 编译解决方案 官方文档 环境配置 Step1: 下载PaddlePaddle C++ 预测库 paddle ...
- php反序列化漏洞实验,PHP反序列化漏洞简介及相关技巧小结
原标题:PHP反序列化漏洞简介及相关技巧小结 *严正声明:本文仅限于技术讨论与分享,严禁用于非法途径 要学习PHP反序列漏洞,先了解下PHP序列化和反序列化是什么东西. php程序为了保存和转储对象, ...
- OnlyOffice验证(二)在Centos7上部署OnlyOffice编译结果
在Centos7上部署OnlyOffice编译结果 此处将尝试将OnlyOffice验证(一)DocumentServer编译验证的结果部署到Centos7上.并且使用其它服务器现有的Rabbit ...
- openfire服务器源码,Openfire源码部署以及编译运行.doc
Openfire源码部署以及编译运行 Openfire源码下载 可以去官方网站:官网地址/projects/openfire/. 也可以利用eclispe自带的SVN插件导入,再次就过多介绍,官网上写 ...
- Windows10 + VS2015 (Win SDK10)环境下的64位 VTK编译小结
之前在学习vtk过程中,感觉vtk的编译还是很简单的,基本上不会碰到什么棘手的错误.但是,当我在Win10+VS2015这个环境下配置时,却遇到了麻烦.经过一番折腾之后,终于将vtkbian编译成功了 ...
- 【Windows 逆向】CheatEngine 工具 ( CheatEngine 简介 | 使用 Lazarus 编译 CE 源码 | CheatEngine 相关文档资料 )
文章目录 一.CheatEngine 简介 二.使用 Lazarus 编译 CE 源码 三.CheatEngine 相关文档资料 一.CheatEngine 简介 CheatEngine 简称 CE ...
- 【Android 插件化】VirtualAppEx 编译运行 ( VirtualAppEx 简介 | 配置 VirtualAppEx 编译环境 | 编译运行 VirtualAppEx 代码 )
文章目录 一.VirtualAppEx 简介 二.配置 VirtualAppEx 编译环境 1.Android Studio 3.0 2.NDK 版本 ( Android NDK r10e ) 3.配 ...
- java 不重启部署_编译Java类后不重启Tomcat有两种方式:热部署、热加载
不重启Tomcat有两种方式:热部署.热加载 热部署:容器状况在运行时重新部署整个项目.这类环境下一般整个内存会清空,重新加载,这类方式 有可能会造成sessin丢失等环境.tomcat 6确实可以热 ...
- linux内核体系学习路径_Linux内核分析(一)linux体系简介|内核源码简介|内核配置编译安装...
从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底,同时在博文中如果那些地方有问题还请各位大神为我讲解. 今天我们会分析到以下内容: 1. Linux体系结构简介 ...
最新文章
- Zookeeper源码分析:集群模式启动概述
- 海豚php添加一行,添加表单项通用方法-海豚PHP1.0.6完全开发手册-基于ThinkPHP5.0.10的快速开发框架...
- mysql jdbc dbcp_连接数据库 JDBC、DBCP、JNDI
- 模拟noj——打扑克
- 调光设备术语:调光曲线(转)
- (5)DFS(深度优先搜索算法):排列数字
- LeetCode(1047)——删除字符串中的所有相邻重复项(JavaScript)
- 获取当前时间---年月日时分秒------iOS
- VS2010中配置OpenGL的一些问题小结
- 华为计算机网络技术试题,(完整版)华为试题答案
- 安装搭建Reviewboard 实现pre-commit-review
- 2022建筑电工(建筑特殊工种)考试题目模拟考试平台操作
- 云栖大会人脸识别闸机【技术亮点篇4】--户外闸机高20%的抗撞击能力
- python 计算两直线交点
- windows执行cygwin慢问题
- 学习记录 重叠网络权威知识——多尺度复杂网络社区发现的链接
- 互联网风控系统架构分析
- 银行数据仓库体系实践(8)--主数据模型设计
- Java面试错题集1
- android+平板+输入法,搜狗推首款Android3.0平板电脑输入法
热门文章
- Atitit 安全措施流程法 目录 1. 常见等安全措施方法	2 1.1. 安全的语言 代码法,编译型 java	2 1.2. 安全编码法	2 1.3. 安全等框架类库 api	2 1.4. 加密法
- Atitit 实体的概念与理解 目录 1. 使用不同的语言来描述实体	1 1.1. H5 table dom模型 json	1 1.2. Sql table	1 1.3. Java class m
- Atitit 自然语言处理(NLP)的应用 与 搜索引擎 目录 1.1. 搜索引擎并不是自然语言处理(NLP)的唯一应用。	2 1.2. NLP的应用	2 1.3. 社交网站信息流,	2 1.4.
- Atitit 现代信息检索 Atitit 重要章节 息检索建模 检索评价 第8章 文本分类 	Line 210: 第9章 索引和搜索 第11章 Web检索 第13章 结构化文本检索 目录 	L
- Atitit 诗歌之道 attilax著 艾龙 著 1. 诗歌集分类	1 1.1. 国王颂歌	1 1.2. 爱情类(相逢 赞美 相识 思念 离去 分分离离 忘记)	1 1.3. 其他	1 2. 世界
- Atitit 图像处理之编程之类库调用的接口api cli gui ws rest attilax大总结.docx
- Atitit jsr规范化分类 attilax总结
- Atitit. 构造ast 语法树的总结attilax v2 q0f
- paip java.net.SocketException No buffer space available的解决办法及总结
- paip.Adblock屏蔽规则保存位置以及修理恢复