Hadoop,Hive,Spark 之间邓伦和李沁是什么关系系

Hadoop,Hive,Spark 之间是什么关系_百度知道
Hadoop,Hive,Spark 之间是什么关系
我有更好的答案
hadoop是大数据生态环境,hive是hadoop里的数据仓库软件与计算框架,主要是用来弥补mr开发难的问题。spark与hive的关系是用来作为计算引擎代替mr
采纳率:73%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。查看: 17839|回复: 1
Spark-1.3.1与Hive
主题听众收听
1.Spark为什么减少了读写磁盘I/O操作带来的延时?
2.Spark+Hive整合是在执行hsql的时候是转换成RDD还是mapreduce?
3.Spark+Hive如何实现整合?
在大数据应用场景下,使用过Hive做查询统计分析的应该知道,计算的延迟性非常大,可能一个非常复杂的统计分析需求,需要运行1个小时以上,但是比之于使用MySQL之类关系数据库做分析,执行速度快很多很多。使用HiveQL写类似SQL的查询分析语句,最终经过Hive查询解析器,翻译成Hadoop平台上的MapReduce程序进行运行,这也是MapReduce计算引擎的特点带来的延迟问题:Map中间结果写文件。如果一个HiveQL语句非常复杂,会被翻译成多个MapReduce Job,那么就会有很多的Map输出中间结果数据到文件中,基本没有数据的共享。
如果使用Spark计算平台,基于Spark RDD数据集模型计算,可以减少计算过程中产生中间结果数据写文件的开销,Spark会把数据直接放到内存中供后续操作共享数据,减少了读写磁盘I/O操作带来的延时。另外,如果基于Spark on YARN部署模式,可以充分利用数据在Hadoop集群DataNode节点的本地性(Locality)特点,减少数据传输的通信开销。
软件准备我把使用的相关软件的版本在这里列出来,以便测试验证,如下所示:CentOS-6.6 (Final)JDK-1.7.0_25Maven-3.2.1Hadoop-2.2.0Spark-1.3.1Hive-0.12.0MySQL-Server-5.5.8
另外还要搭建好Hadoop集群,以及安装配置好Hive客户端,能够在Hive上正确执行查询分析,安装过程不再累述,可以参考网上很多文档。由于我们使用最新版本的Spark-1.3.1,为了使用我们现有2.2.0版本的Hadoop平台,所以需要重新编译构建Spark程序,接下来会做详细说明。
这里,给出使用的各个集群环境的结构拓扑,如下表所示:
Source节点服务名称说明hadoop1Spark Master/Spark DriverSpark集群hadoop2DataNode/NodeManagerHadoop集群hadoop3DataNode/NodeManagerHadoop集群hadoop4HiveHive客户端hadoop5Spark WorkerSpark集群hadoop6Spark Worker/NameNode/ResourceManager/Secondary NameNodeSpark集群/Hadoop集群10.10.4.130MySQL用于存储Hive元数据
上述节点配置相同,因为是测试机,所以配置相对比较低。我们是分别将Spark集群和Hadoop集群的Worker和NodeManager/DataNode分开部署了,在使用Spark做计算的时候,就没有数据本地性(Locality)的特性,所以如果基于Spark on YARN的模式,可能会获得更好地计算性能的提升。
Spark编译安装配置首先从官网下在Spark源码文件:
[Bash shell] 纯文本查看 复制代码cd ~/
wget [url=http://mirror.bit.edu.cn/apache/spark/spark-1.3.1/spark-1.3.1.tgz]http://mirror.bit.edu.cn/apache/spark/spark-1.3.1/spark-1.3.1.tgz[/url]
tar xvzf spark-1.3.1.tgz
mv spark-1.3.1 spark-1.3.1-bin-hadoop2.2
我的环境是JDK 1.7,使用Maven构建,执行如下命令行:[Bash shell] 纯文本查看 复制代码export MAVEN_OPTS=&-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m&
cd /home/spark/spark-1.3.1-bin-hadoop2.2/
mvn -Pyarn -Dyarn.version=2.2.0 -Phadoop-2.2 -Dhadoop.version=2.2.0 -Phive -Phive-0.12.0 -Phive-thriftserver -DskipTests clean package
编译构建完成以后,可以看到如下内容:[Bash shell] 纯文本查看 复制代码/home/spark/spark-1.3.1-bin-hadoop2.2/assembly/target/scala-2.10/spark-assembly-1.3.1-hadoop2.2.0.jar
/home/spark/spark-1.3.1-bin-hadoop2.2/lib_managed/*.jar
如果网络状况不好,可能无法构建成功。另外,也可以使用sbt构建,执行如下命令:
[Bash shell] 纯文本查看 复制代码cd /home/spark/spark-1.3.1-bin-hadoop2.2/
build/sbt -Pyarn -Phadoop-2.2 -Dhadoop.version=2.2.0 -Phive -Phive-0.12.0 -Phive-thriftserver assembly
如果失败,多试几次可能会以成功。使用Maven构建与使用sbt构建,都要耗费很长时间,而且最终生成的文件可能会有所不同。
下面,我们配置Spark集群,首先在Spark Master节点上配置,修改配置文件conf/slaves,将Worker节点主机名加入进去,一行一个,内容如下所示:[Bash shell] 纯文本查看 复制代码hadoop5
修改Spark环境变量配置文件conf/spark-env.sh,增加如下配置行:[Bash shell] 纯文本查看 复制代码SPARK_MASTER_IP=hadoop1
登录到Hive安装的节点,将Hive的配置文件拷贝到Spark安装目录下的conf目录下面,执行如下命令:[Bash shell] 纯文本查看 复制代码scp /usr/local/hive/conf/hive-site.xml spark@hadoop1:/home/spark/spark-1.3.1-bin-hadoop2.2/conf/
最后分发Spark安装文件到Spark Worker节点上:
[Bash shell] 纯文本查看 复制代码sudo scp -r /home/spark/spark-1.3.1-bin-hadoop2.2 spark@hadoop5:/home/spark/spark-1.3.1-bin-hadoop2.2/
sudo scp -r /home/spark/spark-1.3.1-bin-hadoop2.2 spark@hadoop6:/home/spark/spark-1.3.1-bin-hadoop2.2/
为了方便启动Spark集群,可以配置Spark Master到Workers的ssh免密码登录,然后只需要在Master中执行如下脚本即可:
可以查看Spark各个节点的服务启动情况,也可以通过Spark UI链接进入页面查看,默认是8080端口,如果8080端口已经被占用,Spark会自动选择端口号数字加1,如。
Spark+Hive整合我们知道,在使用Hive进行查询的时候,到底层MapReduce计算层会将HiveQL翻译成MapReduce程序,在Hadoop平台上执行计算,这使得计算的延迟比较大。我们整合Spark和Hive,就是通过Spark平台来计算Hive查询,也就是Hive不再使用它默认的MapReduce计算引擎,Spark会直接读取Hive的元数据存储,将Hive数据转换成Spark RDD数据,通过Spark提供的计算操作来实现(Transformation和Action)。
我们首先在Hive中创建一个数据库event_db,执行如下命令:
[SQL] 纯文本查看 复制代码CREATE DATABASE event_
在创建一个Hive外部表user_event,执行DDL脚本:[SQL] 纯文本查看 复制代码CREATE EXTERNAL TABLE event_db.user_event(
appid string,
event_code string,
udid string,
uid string,
install_id string,
session_id string,
play_id string,
page string,
timestamp string,
action string,
network string,
operator string,
lon string,
lat string,
imsi string,
speed string,
event_id string,
type string,
result string,
refer string,
radio_id bigint,
audio_id bigint,
play_time bigint,
duration bigint,
start_time string,
end_time string,
request_agent string,
request_referer string,
device_id string,
model_id string,
area_tag string,
remarks4 string,
remarks5 string,
ip bigint,
area_code int,
create_time string)
PARTITIONED BY (
create_date string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
'hdfs://hadoop6:8020/hive/event_db/user_event';
我选择了一天的用户事件数据(大概有5G左右,条记录),将数据加载到Hive的分区中,执行如下LOAD命令行:
[Bash shell] 纯文本查看 复制代码LOAD DATA LOCAL INPATH '/home/shirdrn/data/user_event_.log' OVERWRITE INTO TABLE event_db.user_event PARTITION (create_date='');
Standalone模式
我们可以通过指定SPARK_CLASSPATH变量,将需要访问Hive的元数据存储MySQL的驱动包加入进去,然后直接启动Spark SQL Shell即可。这里,使用Spark默认的集群管理模式Standalone,启动Shell时需要指定master选项为Spark Master服务连接:
[Bash shell] 纯文本查看 复制代码SPARK_CLASSPATH=&$SPARK_CLASSPATH:/home/spark/spark-1.3.0-bin-hadoop2.2/lib_managed/jars/mysql-connector-java-5.1.34.jar&
bin/spark-sql --master spark://hadoop1:7077
这样我们可以直接在Spark SQL Shell上输入Hive查询语句就可以执行查询分析计算。另外,还可以通过Spark Shell进行操作,不过需要了解Spark SQL支持的Scala API,启动Spark Shell,执行如下命令:[Bash shell] 纯文本查看 复制代码SPARK_CLASSPATH=&$SPARK_CLASSPATH:/home/spark/spark-1.3.0-bin-hadoop2.2/lib_managed/jars/mysql-connector-java-5.1.34.jar&
bin/spark-shell --master spark://hadoop1:7077
然后,创建一个org.apache.spark.sql.hive.HiveContext对象,用来执行Hive查询:
[Bash shell] 纯文本查看 复制代码scala& val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
sqlContext: org.apache.spark.sql.hive.HiveContext = org.apache.spark.sql.hive.HiveContext@6dcc664b
接着可以执行查询:[Bash shell] 纯文本查看 复制代码scala& sqlContext.sql(&SELECT area_code,event_code,COUNT(udid) AS user_cnt FROM event_db.user_event WHERE create_date='' GROUP BY area_code,event_code LIMIT 10&).collect().foreach(println)
可以看到查询结果。yarn-client模式
如果基于YARN模式运行(与Hive整合只支持yarn-client模式,不支持yarn-cluster),需要指定Hadoop集群的环境变量(在当前Driver节点上必须有Hadoop的安装文件),如下所示:[Bash shell] 纯文本查看 复制代码export HADOOP_HOME=/usr/local/hadoop-2.2.0
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
然后启动Spark SQL Shell,执行如下命令:
[Bash shell] 纯文本查看 复制代码SPARK_CLASSPATH=&$SPARK_CLASSPATH:/home/spark/spark-1.3.0-bin-hadoop2.2/lib_managed/jars/mysql-connector-java-5.1.34.jar&
bin/spark-sql --master yarn-client
查询结果耗时比较
我们使用Hive,以及上面提到的两种模式分别执行如下HiveQL查询统计语句:[Bash shell] 纯文本查看 复制代码SELECT area_code,event_code,COUNT(DISTINCT udid) AS user_cnt FROM event_db.user_event WHERE create_date='' AND (create_time BETWEEN ' 17:00:00' AND ' 23:30:00') GROUP BY area_code,event_code ORDER BY user_cnt DESC LIMIT 10
可以看到查询结果,结果如下所示:
[Bash shell] 纯文本查看 复制代码
对比耗时,如下表所示:运行模式花费时间(秒)Hive189.695Spark Standalone82.895Spark yarn-client104.259可见,无论是Spark Standalone模式还是Spark yarn-client模式,耗时都比直接执行Hive查询要少得多。我们执行Spark计算,2个Worker节点上各用了一个Executor,每个Executor使用512M内存,如果增加Executor个数,或者调大内存,应该比上面运行耗时更少,例如,启动Spark SQL Shell并指定相关参数:[Bash shell] 纯文本查看 复制代码bin/spark-sql --master spark://hadoop1:7077 --driver-memory 1G --driver-cores 2 --executor-memory 4G
[Bash shell] 纯文本查看 复制代码bin/spark-sql --master yarn-client --driver-memory 1G --driver-cores 2 --executor-cores 4 --num-executors 8 --executor-memory 4G
总结根据上面我们实践的整合Spark+Hive,在执行复杂统计分析时,完全可以使用Spark SQL来替代Hive,至少会提高几倍的速度,对于一些基于Hive统计应用,可能每天晚上要执行6个小时以上的统计计算,导致第二天结果数据都无法出来,如果统计需求再次增加,可能时间还会更长。除了对Hive查询语句进行优化之外,应该说优化空间不大,所以这个时候可以考虑使用Spark平台来实现统计分析,而且,Spark集群可以线性扩展,对于一些调优也更容易一些。
另外,Spark的发展超级迅猛,新版本频繁发布,而且在后期的版本中还会在性能方面进行大幅改进。Tungsten项目将是Spark自诞生以来内核级别的最大改动,以大幅度提升Spark应用程序的内存和CPU利用率为目标,旨在最大程度上压榨新时代硬件性能。Tungsten项目包括了3个方面的努力:Memory Management和Binary Processing:利用应用的语义(Application Semantics)来更明确地管理内存,同时消除JVM对象模型和垃圾回收开销。Cache-aware Computation(缓存友好的计算):使用算法和数据结构来实现内存分级结构(Memory Hierarchy)。代码生成(Code Generation):使用代码生成来利用新型编译器和CPU。
Tungsten将大幅度提升Spark的核心引擎,在Spark 1.4版本,会包括Dataframe API中聚合操作的内存管理,以及定制化序列化器。在Spark 1.5版本中,会有部分项目(基于DataFrame模型)包括二进制内存管理的扩展和Cache-aware数据结构。
主题听众收听
中级会员, 积分 953, 距离下一级还需 47 积分
中级会员, 积分 953, 距离下一级还需 47 积分
这篇文章不错。
经常参与各类话题的讨论,发帖内容较有主见
经常帮助其他会员答疑
活跃且尽责职守的版主
站长推荐 /4
会员注册不成功的原因
新手获取积分方法
hadoop3.0学习:零基础安装部署hadoop集群
about云课程:大数据日志实时分析
Powered by
& 2018 Designed by如何描述大数据技术生态?Hadoop、Hive、Spark 之间是什么关系?如何描述大数据技术生态?Hadoop、Hive、Spark 之间是什么关系?ITStar2007百家号对于我们这些文科,商科生来说。我们刚刚搞懂服务器,数据库,C++,Java等基础语言是个什么东西的时候,大数据时代来了,科技蜀黍又玩起Hadoop,HDFS,MapReduce,Common,Spark,Mahout,HBase,NoSQL,Cassandra,GFS, MapReduce, BigTable,Hive,Pig……这些蛇精病和大怪兽了。我不认识它们,还有什么妖怪没记进来的,请各位继续在评论里补充。可各位大神能不能把这些混乱的技术妖词(对不起,正是因为不懂,所以很乱),做一个生态的比喻?比成,一棵树?一个城市?一个人的循环系统?随便你比……总之让我们这些技术白痴也能搞明白,它们之间是什么关系,谁是干什么的?分享之前我还是要推荐下我自己创建的大数据学习资料分享群 ,这是全国最大的大数据学习交流的地方,2000人聚集,不管你是小白还是大牛,小编我都挺欢迎,今天的源码已经上传到群文件,不定期分享干货,包括我自己整理的一份最新的适合2017年学习的前端资料和零基础入门教程,欢迎初学和进阶中的小伙伴。你可以认为,大数据生态圈就是一个厨房工具生态圈。为了做不同的菜,中国菜,日本菜,法国菜,你需要各种不同的工具。而且客人的需求正在复杂化,你的厨具不断被发明,也没有一个万用的厨具可以处理所有情况,因此它会变的越来越复杂。本文由百家号作者上传并发布,百家号仅提供信息发布平台。文章仅代表作者个人观点,不代表百度立场。未经作者许可,不得转载。ITStar2007百家号最近更新:简介:ITStar专注打造互联网高端人才作者最新文章相关文章&>&Hadoop+Hbase+Spark+Hive搭建
Hadoop+Hbase+Spark+Hive搭建
上传大小:40KB
全套的Hadoop+Hbase+Spark+Hive搭建指导手册
综合评分:4
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有2条
谢谢楼主分享,讲的不错!
讲的很详细
VIP会员动态
热门资源标签
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
Hadoop+Hbase+Spark+Hive搭建
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
supportuat
举报的资源分:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*详细原因:
Hadoop+Hbase+Spark+Hive搭建Spark和Hadoop作业之间的区别 – 过往记忆
欢迎关注Hadoop、Spark、Flink、Hive、Hbase、Flume等大数据资料分享微信公共账号:iteblog_hadoop。
文章总数:928
浏览总数:12,795,940
评论:3737
分类目录:97 个 注册用户数:5373 最后更新:日
欢迎关注微信公共帐号:iteblog_hadoop大数据猿:bigdata_ai
  目前被越来越多的企业使用,和一样,也是以作业的形式向集群提交任务,那么在内部实现Spark和作业模型都一样吗?答案是不对的。  熟悉Hadoop的人应该都知道,用户先编写好一个程序,我们称为Mapreduce程序,一个Mapreduce程序就是一个Job,而一个Job里面可以有一个或多个Task,Task又可以区分为Map Task和Reduce Task,如下图所示:如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop  而在Spark中,也有Job概念,但是这里的Job和Mapreduce中的Job不一样,它不是作业的最高级别的粒度,在它只上还有Application的概念。我们先来看看Spark文档是怎么定义Application,Task ,Job和Stage的:Application:User program built on Spark. Consists of a driver program and executors on the cluster.Task:A unit of work that will be sent to one executorJob:A parallel computation consisting of multiple tasks that gets spawned in response to a Spark action (e.g. save, collect); you'll see this term used in the driver's logs.Stage:Each job gets divided into smaller sets of tasks called stages that depend on each other (similar to the map and reduce stages in MapReduce); you'll see this term used in the driver's logs.  一个Application和一个SparkContext相关联,每个Application中可以有一个或多个Job,可以并行或者串行运行Job。Spark中的一个Action可以触发一个Job的运行。在Job里面又包含了多个Stage,Stage是以Shuffle进行划分的。在Stage中又包含了多个Task,多个Task构成了Task Set。他们之间的关系如下图所示:如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop  Mapreduce中的每个Task分别在自己的进程中运行,当该Task运行完的时候,该进程也就结束了。和Mapreduce不一样的是,Spark中多个Task可以运行在一个进程里面,而且这个进程的生命周期和Application一样,即使没有Job在运行。  这个模型有什么好处呢?可以加快Spark的运行速度!Tasks可以快速地启动,并且处理内存中的数据。但是这个模型有的缺点就是粗粒度的资源管理,每个Application拥有固定数量的executor和固定数量的内存。本博客文章除特别声明,全部都是原创!禁止个人和公司转载本文、谢谢理解:本文链接:
下面文章您可能感兴趣

我要回帖

更多关于 华为和荣耀是什么关系 的文章

 

随机推荐