H01_Linux系统中搭建Hadoop和Spark集群

前言

  1.操作系统为Centos7

  2.所有操作都是使用root用户去操作。也可以使用其他用户,非root的话要注意操作的权限问题。

  3.安装的Hadoop版本是2.6.5,Spark版本是2.2.0,Scala的版本是2.11.8。因为我安装的Spark要同Hadoop搭配工作,所以需要注意他们之间的版本依赖关系。可以从spark官网上查询到spark运行需要的环境,如下:

  4.需要的安装包:

安装包下载地址:

  JDK: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

  Hadoop2.6.5:http://archive.apache.org/dist/hadoop/common/hadoop-2.6.5/

  Scala2.11.8:https://www.scala-lang.org/download/all.html

  Spark2.2.0:http://archive.apache.org/dist/spark/spark-2.2.0/

1.集群基础环境配置

1.1集群规划:


IP


配置


Namenode


SecondaryNamenode


Datanode


ResourceManager


NodeManager


Master


Worker


Hadoop1


192.168.137.21


1G内存、1核






Hadoop2


192.168.137.22


1G内存、1核





Hadoop3


192.168.137.23


1G内存、1核




1.2增加ip和机器名称的映射关系(所有节点),且3个节点可以相互ping通。

1.3所有节点关闭防火墙。

当然也可以不关闭防火墙,不过这样一来就得打开特定的端口了(比如50070/8088等)。不熟练的话建议还是先统一关闭防火墙。

查看防火墙状态命令:

systemctl status firewalld

关闭防火墙命令:

systemctl stop firewalld
systemctl disable firewalld

  

1.4 SSH免密登录设置(所有节点)

SSH免密登录设置参考:https://www.cnblogs.com/suhaha/p/9071216.html。通过配置,使得hadoop1、hadoop2、和hadoop3之间都可以相互免密登录(至少要使得hadoop1可以免密登录hadoop2和hadoop3)。

1.5配置NTP

这一步在测试环境中可有可无。生产环境的话,毕竟集群之间需要协同工作,几个节点之间的时间同步还是比较重要的。

集群中配置NTP可参考:http://www.cnblogs.com/suhaha/p/8552897.htm

 

1.6配置JDK(所有节点)

JDK的配置可参考博文:https://blog.csdn.net/qian_feifei/article/details/75195016

我安装的JDK1.8

注:到这一步,基础环境算是配置好了,可以给各个节点做个快照,后面步骤出错了也可以快速恢复。

2.安装Hadoop

下面的2.1~2.2的步骤在所有节点上都要如此操作。我们先在hadoop1上做这些操作,然后在2.3步用scp命令将配置好的hadoop文件发送到hadoop2、hadoop3节点。

2.1解压安装包到/usr/local/目录下(hadoop1上操作)

命令:

tar -xvf hadoop-2.6.5.tar.gz -C /usr/local/

  

2.2进入到/usr/local/hadoop-2.6.5/etc/hadoop目录下,修改配置文件。(hadoop1上操作)

2.2.1修改hadoop-env.sh

在hadoop-env.sh中添加JAVA_HOME

如下:

注:需根据实际java路径进行修改

2.2.2修改core-site.xml添加如下内容

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop1:9000</value>
</property>

  

2.2.3修改hdfs-site.xml,添加如下内容

<property>
         <name>dfs.replication</name>
         <value>2</value>
</property>

注:该文件其实也可以保持默认,其他个性化操作比如有:

<property>
        <name>dfs.namenode.name.dir</name>
        <value> /bigdata/dfs/name</value>
        <description>需要创建相应的/bigdata/dfs/name目录</description>
</property>
<property>
        <name>dfs.datanode.data.dir</name>
        <value> /bigdata/dfs/data</value>
        <description>需要创建相应的/bigdata/data/name目录</description>
</property>
<property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
</property>

  

2.2.4修改yarn-site.xml,添加如下内容:

<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<property>
    <name>yarn.resourcemanager.address</name>
    <value>hadoop1:8032</value>
</property>
<property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>hadoop1:8030</value>
</property>
<property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>hadoop1:8031</value>
</property>
<property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>hadoop1:8033</value>
</property>
<property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>hadoop1:8088</value>
</property>
<property>
    <name>yarn.nodemanager.pmem-check-enabled</name>
    <value>false</value>
</property>
<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
</property>

  

注:

可以看到上面有许多端口的配置,网上很多文章的教程中是没有的,这是因为这些端口默认就是8032、8031这样,感觉没有必要显式地再次配置。

最开始我也没配,结果出错了,出错的情形表现为:通过主节点可以启动yarn集群,子节点上有NodeManager进程,但是,在http://192.168.137.22:8088/cluster/nodes页面却没有显示子节点的信息,同时在主节点上通过yarn node -list -all命令查看也没有子节点的信息。然后在nodemanager节点的相关日志日志文件里(/usr/local/hadoop-2.6.5/logs/yarn-root-nodemanager-hadoop2.log)有org.apache.hadoop.ipc.Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8031异常,如下图一。我的理解是,因为没有在yarn-site.xml文件中没有显式地将这些端口配置出来的原因,导致子节点无法向主节点注册(Registered)——然后,从报错的信息看貌似是只要把8031端口配置上了就可以了,其实也不是so easy的……如果不配置其他端口,则提交yarn任务的时候依然会无限地卡在ACCEPTED状态上,卡在该状态上的日志我看不出问题来,但是确实把上面的端口都配置了之后就好了。

因此,最好是将这些端口都显式配置好!!!

图一:

关于最后两项配置

yarn.nodemanager.pmem-check-enabled:是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true

yarn.nodemanager.vmem-check-enabled:是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true

因为我实验时给3台机器分配的资源都很少,所以必须得设置它们都为false,否则运行yarn程序的时候会报如下错误。

报错是因为,执行程序时,yarn对于机器能分配的资源进行了检查,结果发现运行程序需要的资源超出了机器所能分配资源的上限,然后就粗错了。如果把上面两项设置为false,则运行程序时就不会去进行对应的资源检查了,此时虽然机器能分配的资源依然不足,但是yarn不会像之前那样立马把container干掉了,而是会花较长的时间才能把程序跑完。

2.2.5修改slaves,在slaves文件中写入如下内容:

hadoop2
hadoop3

注:本次配置是hadoop1是管理节点,hadoop2和hadoop3是数据节点,如果如果想使得hadoop1既是管理节点又是数据节点,可以把hadoop1写到slaves文件中来。

2.3将hadoop1上配置好的hadoop文件分发到hadoop2和hadoop3节点上(hadoop1上操作)

命令:

scp -r /usr/local/hadoop-2.6.5 [email protected]:/usr/local/
scp -r /usr/local/hadoop-2.6.5 [email protected]:/usr/local/

  

2.4修改环境变量,在hadoop1上执行以下命令

命令:

vim /etc/profile

在文件中添加如下内容:

export HADOOP_HOME=/usr/local/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

用source /etc/profile命令使修改的环境变量生效,接着用which hdfs命令查看是否修改成功。

2.5配置完成,接着格式化hdfs

在主节点hadoop1上执行以下命令:

hdfs namenode -format

注:命令执行完之后从结果上很难看出是否格式化成功了,这时可以紧接着通过

echo $? 命令查看hdfs namenode -format命令是否执行成功。如下,如果输出0,则说明上一条执行成功。

2.6启动hdfs,在hadoop1上执行以下命令

cd /usr/local/hadoop-2.6.5/sbin
./start-dfs.sh

2.7验证hdfs是否安装成功

方法一:

在主节点hadoop1上用jps命令可以看到SecondaryNameNode和NameNode进程:

在任一子节点上用jps命令可以查看到DataNode进程

如此,可以认为,从主节点上可以成功启动hdfs集群了。

但是是否一定没有问题了呢?不一定。

我们知道,hadoop集群启动成功之后,子节点会定时向主节点发送心跳信息,主节点以此判断子节点的状态。所以,有时候即使我们通过主节点启动hadoop集群成功了,使用jps命令也能查询到相应的SecondaryNameNode、NameNode和DataNode进程——但如果由于某些原因,比如某个子节点的某个配置配错了,如我搭建时的情况是子节点的core-site.xml文件中fs.defaultFS项配置错了,或者是由于防火墙的原因,又或者是由于前面格式化次数太多了出问题导致子节点的cluster_id跟主节点的cluster_id不一致——导致子节点无法向主节点发送心跳信息,那么对主节点来说,该子节点就是dead的了。

于是,作为进一步验证的方法,是在主节点上使用hdfs dfsadmin -report来观察集群配置情况。如下:

方法二:

通过本地浏览器查看192.168.137.21:50070,验证否部署成功

注,一定要在页面看到所有子节点信息才算hdfs集群没有问题。

2.7启动yarnhadoop1上执行以下命令

cd  /usr/local/hadoop-2.6.5/sbin
./start-yarn.sh

2.8验证yarn是否启动成功

方法一

用jps命令可以看到主节点上有ResourceManager进程

在子节点上有NodeManager进程

但是,同样还不能认为yarn集群就没有问题了,原因如2.2.4中所说的那样(即:可能由于某些原因,导致子节点在启动起来之后却无法向主节点注册)。因此,保险起见,应在主节点上再通过yarn node -list -all命令查看一下。如下:

如上图,说明yarn启动成功。

如果像下图一那样,说明yarn集群是有问题的——这种时候如果提交了以yarn作为资源调度器的任务,则任务会永远卡在ACCEPTED状态(如下图二),这是因为此时yarn集群只剩下ResourceManager这个光杆司令了,没有资源可以给它调度,所以它会一直卡在分配资源的状态下,要命的是它会很顽强地一直不断地努力尝试分配资源,还不报错......

图一:

图二:

方法二:

通过本地浏览器访问192.168.137.21:8088,查看yarn是否正常工作

如上图,在页面上能看到子节点的信息,说明yarn集群没有问题。如果像下图这样,说明你的yarn集群是有问题的。

3.安装Spark

Spark的安装跟hadoop(包括yarn)是相对独立的,即使是需要以Spark-on-yarn模式运行Spark程序。Spark和hadoop的关系,不像hadoop和jdk之间的关系,不是说要安装spark,就必须要先安装hadoop。Spark和hadoop的关系,更像是你和楼下饭店的关系,当你自己做饭吃的时候,楼下饭店存不存在是与你无关的;当你不自己做饭了,你才需要楼下有家饭店。拿Spark来说,即:如果只是需要以local或者standalone模式运行Spark程序,那么甚至可以不安装hadoop环境;只有当Spark程序需要以spark-on-yarn模式运行或者需要读取hdfs中的文件时,它才需要hadoop的存在。所以如果没有以spark-on-yarn模式运行spark程序的需求的话,可以不安装第2步中的hadoop环境,不过第1步的基础环境还是需要配置的。——这是我初学Spark时一直迷糊的一个点,希望这里说明清楚了。

3.1安装Scala

关于安装Spark之前要不要安装scala?其实我也不确定。有教程说不用安装,因为Spark安装包中自带scala了。也有的教程说需要先安装scala。

对于我来说,首先因为安装scala也没多难,而且后期我还要用scala来开发Spark程序,所以就安装了scala。

不管怎样,安装步骤如下。

3.1.1root用户解压scala安装包到/usr/local目录下hadoop1上操作

命令:

tar -xvf scala-2.11.8.tgz  -C  /usr/local/

3.1.2将解压后的scala目录拷贝到hadoop2hadoop3hadoop1上操作

scp -r /usr/local/scala-2.11.8 [email protected]:/usr/local/
scp -r /usr/local/scala-2.11.8 [email protected]:/usr/local/

  

3.1.3分别在三台虚拟机上修改环境变量:

命令:

vi /etc/profile

加入如下内容

export SCALA_HOME=/usr/local/scala-2.11.8
export PATH=$PATH:$SCALA_HOME/bin

3.1.4用source  /etc/profile命令使修改的环境变量生效

接着用which scala命令查看scala的安装目录是不是我们想要的

3.1.5测试是否安装成功

命令:

scala

或者

scala -version

3.2安装Spark

3.2.1解压spark安装包到/usr/local/目录下hadoop1上操作

命令:

tar -xvf spark-2.2.0-bin-hadoop2.6.tgz -C /usr/local/

  

3.2.2配置slaves

命令:

cd  /usr/local/spark-2.2.0-bin-hadoop2.6/conf
cp slaves.template slaves
vim slaves

写入如下内容

hadoop2
hadoop3

3.2.3配置spark-env.sh

命令:

cp spark-env.sh.template spark-env.sh
vi spark-env.sh

在文件中加入以下内容:

export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/local/hadoop-2.6.5
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_MASTER_HOST=hadoop1
export SPARK_MASTER_PORT=7077

如下图所示

注:

  1) JAVA_HOME是一定要配置的

  2) 配置HADOOP_HOME和HADOOP_CONF_DIR是因为,之后我需要以spark-on-yarn模式运行spark程序,配置HADOOP_CONF_DIR才能使得spark可以找到正确的hadoop环境,否则每次以spark-on-yarn模式运行spark程序时都需要手动export HADOOP_CONF_DIR=xxxxx才行。如果只想以local或standalone模式运行spark程序,则这两项可以不配置。

  3) 至于SPARK_MASTER_HOST和SPARK_MASTER_PORT,感觉没有必要显式地配置,因为人家使用默认值也是没有问题的,但是我还是配上了,不配置的话会不会有问题我就不知道了。

3.2.4将配置好的spark文件拷贝到hadoop2和hadoop3节点上

命令:

scp -r /usr/local/spark-2.2.0-bin-hadoop2.6 [email protected]:/usr/local/
scp -r /usr/local/spark-2.2.0-bin-hadoop2.6 [email protected]:/usr/local/

  

3.2.5在hadoop1节点上配置环境变量

命令:

vim /etc/profile

在文件中加入以下内容:

export SPARK_HOME=/usr/local/spark-2.2.0-bin-hadoop2.6
export PATH=$PATH: ${SPARK_HOME}/bin

注:这里之所以没有在PATH中加入${SPARK_HOME}/sbin,是因为该目录和$HADOOP_HOME/sbin目录下都存在start-all.sh和stop-all.sh脚本,如果在PATH中加入${SPARK_HOME}/sbin,当然也是没有问题的,但是有可能会产生误操作(有时候你想关闭spark集群,于是在任意位置执行stop-all.sh命令,极有可能就把hadoop集群给关咯),所以为了避免这种情况,干脆不配置了,当要执行start-all.sh和stop-all.sh时再手动切换到${SPARK_HOME}/sbin目录下去执行命令即可。

使修改的环境变量生效:

source  /etc/profile

  

3.2.6启动spark集群

命令:

cd /usr/local/spark-2.2.0-bin-hadoop2.6/sbin
./start-all.sh

3.2.7 通过网页192.168.137.21:8080查看是否成功

注意,同样也是要在页面上看到所有的Woker子节点的信息才算是成功了。

3.3运行spark程序测试

安装完Spark之后,应该测试一下安装的spark在local模式、standalone模式和spark-on-yarn模式下是否等能运行程序。

对于安装的Spark集群,测试一下standalone模式是否可以成功运行是有必要的。

若是需要以spark-on-yarn模式运行程序,则spark-on-yarn模式的测试也非常有必要,因为有的时候虽然yarn集群启动成功了,但是由于yarn默认参数配置不一定适合你当时的集群硬件配置,极有可能是有问题的,只有跑一个程序测试一下才能试出问题来。

测试方式参考:https://blog.csdn.net/pucao_cug/article/details/72453382

 

至此,配置完成。

  

  

  

  

  

  

  

  

原文地址:https://www.cnblogs.com/suhaha/p/9159232.html

时间: 2024-11-09 03:28:43

H01_Linux系统中搭建Hadoop和Spark集群的相关文章

在vm里搭建高可用Spark集群

说明:本机是在win10系统下,安装用的是VMware15, centOS7, JDK1.8, spark-2.4.0,hadoop-2.7.7, apache-hive-2.3.4, scala-2.12.8.在VMware里创建了node01, node02, node03, node04四个节点(或者叫四个虚拟机).注意在使用vm14版本的时候出现黑屏,情况如下:在vm上安装好4个节点后,用管理员身份打开VM,启动节点有时候会碰到启动的节点是黑屏的情况,一直挂起,解决方法:以管理员身份运行

0基础搭建Hadoop大数据处理-集群安装

经过一系列的前期环境准备,现在可以开始Hadoop的安装了,在这里去apache官网下载2.7.3的版本 http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz 不需要下载最新的3.0版本, 与后续Hive最新版本有冲突,不知道是不是自己的打开方式不对.  hadoop有三种运行方式:单机.伪分布式.完全分布式,本文介绍完全分布式. 安装Hadoop 现在有三个机器,一个Master

基于 ZooKeeper 搭建 Hadoop 高可用集群

一.高可用简介 二.集群规划 三.前置条件 四.集群配置 五.启动集群 六.查看集群 七.集群的二次启动 一.高可用简介 Hadoop 高可用 (High Availability) 分为 HDFS 高可用和 YARN 高可用,两者的实现基本类似,但 HDFS NameNode 对数据存储及其一致性的要求比 YARN ResourceManger 高得多,所以它的实现也更加复杂,故下面先进行讲解: 1.1 高可用整体架构 HDFS 高可用架构如下: 图片引用自:https://www.edure

搭建Hadoop伪分布式集群

目录 版本与环境 准备 添加环境变量 配置Hadoop 克隆节点 配置主机名与IP 设置节点间免密登录 配置脚本文件 启动并验证 运行测试用例 版本与环境 虚拟机:VMware Workstation Pro 15 Linux镜像:Ubuntu-18.04.2-live-server-amd64.iso Java版本:jdk-8u231-linux-x64.tar.gz Hadoop版本:version-3.1.3 准备 (PS:以下配置需在克隆slave之前完成) 安装Ubuntu(PS:记得

实验室中搭建Spark集群和PyCUDA开发环境

1.安装CUDA 1.1安装前工作 1.1.1选取实验器材 实验中的每台计算机均装有双系统.选择其中一台计算机作为master节点,配置有GeForce GTX 650显卡,拥有384个CUDA核心.另外两台计算机作为worker节点,一个配置有GeForce GTX 650显卡,另外一个配置有GeForce GTX 750 Ti显卡,拥有640个CUDA核心. 在每台计算机均创建hadoop用户并赋予root权限,本文所有的操作都将在hadoop用户下进行. 1.1.2安装前准备 用以下命令来

spark 集群运行python作业

今天尝试用刚搭建好的spark集群运行python作业,遇到了一些问题,解决了一些坑的同时也对spark集群的运作和配置方式有了一些比较浅的认识,不像之前那么没有概念了,记录如下,之后还要继续更多的对Hadoop生态圈和spark并行计算框架的探究. 首先说下环境,集群有五个节点,集群环境是用cloudera manager 搭建的,hadoop用的是cloudera的CDH,我对CDH和hadoop之间关系的理解就是与linux和CentOS的关系一样,其他的的相关组件例如Hbase和Hive

Hadoop+Spark:集群环境搭建

环境准备: 在虚拟机下,大家三台Linux ubuntu 14.04 server x64 系统(下载地址:http://releases.ubuntu.com/14.04.2/ubuntu-14.04.2-server-amd64.iso): 192.168.1.200 master 192.168.1.201 node1 192.168.1.202 node2 在Master上安装Spark环境: 具体请参考我的文章:<Hadoop:搭建hadoop集群> Spark集群环境搭建: 搭建h

Spark集群框架搭建【VM15+CentOS7+Hadoop+Scala+Spark+Zookeeper+HBase+Hive】

目录 1 目的 2 准备工作 3 安装过程 3.1 在虚拟机中安装CentOS7 3.1.1 虚拟机设置 3.1.2 安装Linux系统 3.2 JAVA环境 3.2.1 卸载Linux自带的jdk 3.2.2 下载并安装最新版本的jdk 3.2.3 环境变量设置 3.3 SSH免密登陆 3.3.1 准备工作 3.3.2 设置免密登陆 3.4 Hadoop2.7.2安装及集群配置 3.4.1 Hadoop安装 3.4.2 伪分布式集群配置 3.4.3 启动hadoop 3.5 Spark安装及环

hadoop伪分布式集群搭建与安装(ubuntu系统)

1:Vmware虚拟软件里面安装好Ubuntu操作系统之后使用ifconfig命令查看一下ip; 2:使用Xsheel软件远程链接自己的虚拟机,方便操作.输入自己ubuntu操作系统的账号密码之后就链接成功了: 3:修改主机的名称vi /etc/hostname和域名和主机映射对应的关系 vi /etc/hosts,改过之后即生效,自己可以ping一下,我这里ip对应master,比如ping master之后发现可以ping通即可: 4:修改过主机名称和主机名与ip对应的关系之后:开始上传jd