第6章Spark16的安装和部署.docx
- 文档编号:4283771
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:35
- 大小:244.20KB
第6章Spark16的安装和部署.docx
《第6章Spark16的安装和部署.docx》由会员分享,可在线阅读,更多相关《第6章Spark16的安装和部署.docx(35页珍藏版)》请在冰点文库上搜索。
第6章Spark16的安装和部署
SparkonYARN环境搭建
1、简介
环境搭建准备:
Hadoop2.6.4+Spark1.6.0-bin-hadoop2.6+Zookeeper3.4.6+jdk1.7
1.1hadoop介绍
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。
充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(HadoopDistributedFileSystem),简称HDFS。
HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(highthroughput)来访问应用程序的数据,适合那些有着超大数据集(largedataset)的应用程序。
HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streamingaccess)文件系统中的数据。
Hadoop的框架最核心的设计就是:
HDFS和MapReduce。
HDFS为海量的数据提供了存储,而MapReduce为海量的数据提供了计算。
简单归纳一下:
1、Mapreduce是一种模式。
2、Hadoop是一种框架。
3、Hadoop是一个实现了mapreduce模式的开源的分布式并行编程框架。
mapreduce是一种模式,一种云计算的核心计算模式,一种分布式运算技术,也是简化的分布式编程模式,它主要用于解决问题的程序开发模型,也是开发人员拆解问题的方法。
本文介绍hadoop和hbase集群搭建的主要目的是在hadoop的框架上采取mapreduce的模式处理海量数据。
Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。
用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。
它主要有以下几个优点:
高可靠性。
Hadoop按位存储和处理数据的能力值得人们信赖。
高扩展性。
Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
高效性。
Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
高容错性。
Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
低成本。
与一体机、商用数据仓库以及QlikView、YonghongZ-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。
以上介绍了hadoop的概念,优点等方面的内容,接下来再深入了解mapreduce模式和hadoop框架。
Mapreduce模式
如下图所示,mapreduce模式的主要思想是将自动分割要执行的问题(例如程序)拆解成map(映射)和reduce(化简)的方式,流程图如下图1所示:
在数据被分割后通过Map函数的程序将数据映射成不同的区块,分配给计算机机群处理达到分布式运算的效果,在通过Reduce函数的程序将结果汇整,从而输出开发者需要的结果。
MapReduce借鉴了函数式程序设计语言的设计思想,其软件实现是指定一个Map函数,把键值对(key/value)映射成新的键值对(key/value),形成一系列中间结果形式的key/value对,然后把它们传给Reduce(规约)函数,把具有相同中间形式key的value合并在一起。
Map和Reduce函数具有一定的关联性。
函数描述如表1所示:
MapReduce致力于解决大规模数据处理的问题,因此在设计之初就考虑了数据的局部性原理,利用局部性原理将整个问题分而治之。
MapReduce集群由普通PC机构成,为无共享式架构。
在处理之前,将数据集分布至各个节点。
处理时,每个节点就近读取本地存储的数据处理(map),将处理后的数据进行合并(combine)、排序(shuffleandsort)后再分发(至reduce节点),避免了大量数据的传输,提高了处理效率。
无共享式架构的另一个好处是配合复制(replication)策略,集群可以具有良好的容错性,一部分节点的down机对集群的正常工作不会造成影响。
下图是有关hadoop的作业调优参数及原理,图的左边是MapTask运行示意图,右边是ReduceTask运行示意图:
如上图所示,其中map阶段,当maptask开始运算,并产生中间数据后并非直接而简单的写入磁盘,它首先利用内存buffer来对已经产生的buffer进行缓存,并在内存buffer中进行一些预排序来优化整个map的性能。
而上图右边的reduce阶段则经历了三个阶段,分别Copy->Sort->reduce。
可以看出,其中的Sort是采用的归并排序,即mergesort。
Hadoop框架
Hadoop由许多元素构成。
其最底部是HadoopDistributedFileSystem(HDFS),它存储Hadoop集群中所有存储节点上的文件。
HDFS(对于本文)的上一层是MapReduce 引擎,该引擎由JobTrackers和TaskTrackers组成。
通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心。
如下图所示:
HadoopHDFS是GoogleGFS存储系统的开源实现,主要应用场景是作为并行计算环境(MapReduce)的基础组件,同时也是BigTable(如HBase、HyperTable)的底层分布式文件系统。
HDFS采用master/slave架构。
一个HDFS集群是有由一个Namenode和一定数目的Datanode组成。
Namenode是一个中心服务器,负责管理文件系统的namespace和客户端对文件的访问。
Datanode在集群中一般是一个节点一个,负责管理节点上它们附带的存储。
在内部,一个文件其实分成一个或多个block,这些block存储在Datanode集合里。
如下图所示(HDFS体系结构图):
HadoopMapReduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上TB级别的数据集。
一个MapReduce作业(job)通常会把输入的数据集切分为若干独立的数据块,由Map任务(task)以完全并行的方式处理它们。
框架会对Map的输出先进行排序,然后把结果输入给Reduce任务。
通常作业的输入和输出都会被存储在文件系统中。
整个框架负责任务的调度和监控,以及重新执行已经失败的任务。
如下图所示(HadoopMapReduce处理流程图):
NameNode
NameNode是一个通常在 HDFS 实例中的单独机器上运行的软件。
它负责管理文件系统名称空间和控制外部客户机的访问。
NameNode决定是否将文件映射到DataNode上的复制块上。
对于最常见的3个复制块,第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上。
DataNode
DataNode也是一个通常在 HDFS实例中的单独机器上运行的软件。
Hadoop集群包含一个NameNode和大量DataNode。
DataNode通常以机架的形式组织,机架通过一个交换机将所有系统连接起来。
Hadoop的一个假设是:
机架内部节点之间的传输速度快于机架间节点的传输速度。
DataNode响应来自HDFS客户机的读写请求。
它们还响应来自NameNode的创建、删除和复制块的命令。
NameNode依赖来自每个DataNode的定期心跳(heartbeat)消息。
每条消息都包含一个块报告,NameNode可以根据这个报告验证块映射和其他文件系统元数据。
如果DataNode不能发送心跳消息,NameNode将采取修复措施,重新复制在该节点上丢失的块。
2、Namenode的HA
2.1HDFS的高可用性
HDFSHA的解决方案可谓百花齐放,LinuxHA,VMwareFT,sharedNAS+NFS,QJM/QuorumJournalManager,BackupNode等等。
目前普遍采用的是shardNAS+NFS,因为简单易用,但是需要提供一个HA的共享存储设备。
Clouera为解决这个问题提出了QJM/QuromJournalManager,这是一个基于Paxos算法实现的HDFSHA方案。
QJM的基本原理就是用2N+1台JournalNode存储EditLog,每次写数据操作有大多数(>=N+1)返回成功时即认为该次写成功,数据不会丢失了。
当然这个算法所能容忍的是最多有N台机器挂掉,如果多于N台挂掉,这个算法就失效了。
这个原理是基于Paxos算法的,参考http:
//en.wikipedia.org/wiki/Paxos_(computer_science)。
所以,本HADOOP系统的HA方案采用QJM,基于以上原理,JournalName至少应该为3,这样任意JournalNode的宕机,都不会影响。
但是因为当前环境仅有两台服务器,所以两台服务器既做NameNode、也做DataNode、同时还需要做JournalNode,两个NameNode和DataNode停掉任意一个,服务仍然可用,但是JournalNode宕掉任意一台都不行。
除非增加JournalNode。
3、hadoop2.6.4完全分布式的安装部署
Centos6.5系统:
64位
3.1修改主机名和/etc/hosts文件
1)修改主机名(非必要)
vi/etc/sysconfig/network
HOSTNAME=master
重启后生效。
输入指令hostname可查看当前主机的名字
2)/etc/hosts是ip地址和其对应主机名文件,使机器知道ip和主机名对应关系,格式如下:
#IPAddressHostName
192.168.1.170master
192.168.1.171slave1
192.168.1.172slave2
注:
每台机器都如上操作。
3.2配置免密码登陆SSH
1)生成密钥:
在root@master根目录下执行如下语句:
ssh-keygen-tdsa-P''-f~/.ssh/id_dsa
以上是两个单引号。
2)将id_dsa.pub(公钥)追加到授权的key中:
cat~/.ssh/id_dsa.pub>>~/.ssh/authorized_keys
3)将认证文件复制到其它节点上:
scp~/.ssh/authorized_keys用户@主机名:
~/.ssh/
例如:
scp~/.ssh/authorized_keysroot@slave1:
~/.ssh/
时间等效性同步
sshmasterdate;sshslave1date;sshslave2date;
4)测试:
ssh主机名(如:
sshongmefex54vm12)
第一次要确认连接,输入yes即可。
3.3各节点上安装jdk
注:
(如果已经安装jdk请跳过)
1)选择的版本是jdk-8u45-linux-x64.gz
2)上传到root用户目录下,
3)解压:
tarvxfjdk-8u45-linux-x64.gz–C/usr/(解压到usr目录下)
4)配置环境变量:
vi/etc/profile加入以下三行
#setjavaenvironment
JAVA_HOME=/usr/jdk1.8.0_45
CLASSPATH=.:
$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:
$PATH
exportJAVA_HOMECLASSPATHPATH
5)执行source/etc/profile使环境变量的配置生效
6)执行java–version查看jdk版本,验证是否成功。
成功会显示如下:
3.4zookeeper安装配置
注:
HADOOP安装的zookeeper,是zookeeper-3.4.6.tar.gz。
1)解压zookeeper-3.4.6.tar.gz:
tar–zxvfzookeeper-3.4.6.tar.gz
2)修改conf:
a)#cpzoo_sample.cfgzoo.cfg
b)修改zoo.cfg,如下:
dataDir=/usr/hadoop_data/zookeeper/data/
dataLogDir=/usr/hadoop_data/zookeeper/dataLog/
clientPort=2183
server.1=master:
2898:
3898
server.2=slave1:
2898:
3898
server.3=slave2:
2898:
3898
3)在zookeeper目录下:
mkdirdata
vimyid(写入id为1,)
4)拷贝zookeeper到各个目录下(将slave1中的myid改为2,slave2中的myid改为3….)
随后在bin目录下逐个启动zookeeper
./zkServer.shstart
./zkServer.shstatus(查看状态)启动zookeeper
3.5Hadoop安装(完全分布式)
每台节点都要安装hadoop。
上传hadoop-2.6.4.tar.gz到用户root目录下。
1)解压
tar-zvxfhadoop-2.6.4.tar.gz–C/home/hadoop/
(注:
如果目录不存在可以手动创建:
mkdir/home/hadoop)
2)添加环境变量:
vi/etc/profile,尾部添加如下
exportHADOOP_HOME=/usr/home/hadoop-2.6.4
exportPATH=$PATH:
$HADOOP_HOME/bin
设置立即生效:
source/etc/profile
查看Hadoop是否安装成功:
hadoopversion如图:
3)修改Hadoop配置文件(在Hadoop目录下的/etc/hadoop目录下),配置具体信息可参考:
(1)core-site.xml
默认文件系统的名称,如果是HA模式,不加端口
//streamcluster
io.file.buffer.size都被用来设置缓存的大小,较大的缓存可以提供高效的数据传输,但太大也会造成更大的内存消耗和延迟
hadoop文件系统依赖的基本配置,很多配置路径都依赖它,它的默认位置在/tmp/{$user}下面
(2)hdfs-site.xml
集群的逻辑名,要注意的是,如果为HA模式,需要与core-site.xml中的fs.defaultFS名一致
datanode的端口,运行tcp/ip服务器以支持块传输,默认为0.0.0.0:
50010
50012
datanode的http服务器地址和端口
50077
datanode的rpc服务器的地址和端口,提供进程间交互通信
50022
dfs.ha.namenodes.[nameserviceID]在名称服务中每一个nameNode的唯一标识符,streamcluster为之前配置的nameservice的名称,这里配置高可用,所以配置两个NN
由namenode存储元数据的目录地址
由datanode存放数据块的目录列表
由写操作所需要创建的最小副本数目
如果是 true,则打开权限系统
设置成true,通过知道每个block所在磁盘,可以在调度cpu资源时让不同的cpu读不同的磁盘,避免查询内和查询间的IO竞争
是否在HDFS中开启权限检查。
HA模式下该参数为streamcluster中namenode1节点对外服务的RPC地址
8033
HA模式下该参数为streamcluster中namenode1节点对外服务的RPC地址
8033
HA模式下该参数为streamcluster中namenode1节点对外服务的HTTP地址
50083
HA模式下该参数为streamcluster中namenode1节点对外服务的HTTP地址
50083
设置的为journalNode的地址,Activity状态中的Namenode会将edits的Log写入JournalNode,而standby状态中的Namenode会读取这些editslog.
//master:
8489;slave1:
8489;slave2:
8489/streamcluster
JournalNode所在节点上的一个目录,用于存放editlog和其他状态信息。
journalNodeRPC服务地址和端口
8489
journalNodeHTTP服务地址和端口
8484
此参数为客户端与activity状态下的Namenode进行交互的java实现类,DFS客户端通过该类寻找当前activity的Namenode
使HA模式下不会同时出现两个master,不允许出现两个activity状态下的Nameno
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Spark16 安装 部署