搭建5个节点的Hadoop集群

搭建5个节点的Hadoop集群



节点



在实验室192.168.100.20:8006,用户名:root,密码:gzudb604,申请了5个节点,分别是:

192.168.100.120  #主节点
192.168.100.123  #节点1
192.168.100.126  #节点2
192.168.100.127  #节点3
192.168.100.128  #节点4

网络基本配置

255.255.255.0    #子网掩码
192.168.100.1    #网关
233.6.6.6        #使用阿里的DNS

各个节点的初始用户名均是:zhujunpeng,密码均是:560128,在配置hadoop集群时,新创建了hadoop用户,下面会讲这个过程

安装操作系统



安装操作系统(centos 7)中注意三点:

  1. 请安装Development版本的操作系统,我安装的是Centos 7的Development版本。
  2. 请使用固定ip地址,因为整个集群将使用网络进行通讯,ip地址是他们进行通讯的关键。
  3. 在配置网络的过程中采用的是 muanul(手动设置),不要使用动态分配,这样不利用集群节点之间的通信

创建hadoop用户



如果你安装hadoop时不是采用“hadoop”用户,那么需要增加一个名为hadoop的用户,密码也为hadoop,首先打开终端,在终端中输入:

su  #切换成root用户登录

输入密码之后,进入root权限,接着在终端中输入:

useradd -m hadoop -G root -s /bin/bash  #创建用户hadoop,使用/bin/bash作为shell

接着使用下面的命令修改密码,提示输入两次密码,可简单的设为“hadoop”(密码随意指定,若提示“无效的密码,过于简单”,不用理会,再次输入确认即可)。

passwd hadoop #该条命令设置hadoop用户的密码

可以为hadoop用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题,在终端中输入:

visudo  #该命令会打开一个编辑文件,在其中的98行进行操作

打开这个文件之后,在文件的98行会看见如下的一条命令:

root   ALL=(ALL)   ALL
hadoop ALL=(ALL)   ALL  #在上面一条命令的后面增加这条命令,意思是为hadoop用户增加管理员权限

准备工作



使用hadoop用户登陆后,还需要安装几个软件才能安装hadoop,Centos采用的是yum来安装软件,需要联网环境,请检查你的操作系统是否已经连接网络,连接网络之后,需要安装ssh和java环境。

安装SSH、配置SSH无密码登陆


首先检查是否已经安装ssh,在终端中输入:

rpm -qa | grep ssh

在返回的结果中如果有clients和server说明已经安装成功,如果安装没有成功,在终端中输入:

sudo yum install openssh-clients
sudo yum install openssh-server

接着用下面的命令测试ssh是否可用,在终端中输入:

ssh localhost

但是仅仅这样登陆的话,每次都是需要密码的,我们需要配置ssh无密码登陆方式才比较方便,在终端中输入下面的命令:

cd ~/.ssh/  #若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa #会有提示,都按回车就可以
cat id_rsa.pub >> authorized_keys #加入授权
chmod 600 ./authorized_keys  #修改文件的权限

增加了上述的操作之后,再次使用ssh localhost命令,无需密码就能直接登录了。

安装Java环境


首先下载相应版本的JDK,我推荐sun公司发行的JDK,并且在当前生态环境下使用JDK 1.7就够了,我的计算机中使用的是:jdk-7u79-linux-x64.tar.gz。并且放在”/home/hadoop(即~)”中。注意hadoop用户必须是超级用户,前面已经设置过

#解压JDK压缩包
$ sudo tar -zxvf jdk-7u79-linux-x64.tar.gz

#复制JDK文件夹到/usr/lib/jvm目录中
$ sudo cp -r ~/jdk1.7.0_79/ /usr/lib/jvm

#配置环境变量
$ sudo vim /etc/profile
#在末尾加上:
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79
然后保存关闭,使用source命令更新下
$ source /etc/profile
#使用env命令查看JAVA_HOME环境变量的值
$ env
#如果JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79,说明配置成功。

#修改系统默认的JDK
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_79/bin/java 300
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_79/bin/javac 300
$ sudo update-alternatives --config java #输入/usr/lib/jvm/jdk1.7.0_79/bin/java前面的数字就可以了
$ sudo update-alternatives --config javac #输入/usr/lib/jvm/jdk1.7.0_79/bin/javac前的数字就好了

#查看是否安装成功
$ java
$ javac
$ java -version

#删除冗余文件,该操作在“/home/hadoop”下进行
$ sudo rm -rf jdk1.7.0_79/
$ sudo rm -rf jdk-7u79-linux-x64.tar.gz

在各个节点上安装hadoop 2.7.2稳定版



可用从apache官网下载最新版本的hadoop,但是请下载稳定版。下载时请下载hadoop-2.x.x.tar.gz这个格式的文件,这是编译好的文件,另一个包含src的文件时hihadoop源代码,需要进行编译才能使用。在Windows上下载好hadoop的安装包只有,使用WinSCP将其传入”/home/hadoop”中,接着进行下面的过程。

$ sudo tar -zxf /home/hadoop/hadoop-2.7.2.tar.gz -C /usr/local #解压到/usr/local中
$ cd /usr/local/
$ sudo mv ./hadoop-2.7.2/ ./hadoop #将文件夹命名改为hadoop
$ sudo chown -R hadoop:hadoop ./hadoop #修改文件权限

#hadoop解压后即可使用,输入如下命令来检查hadoop是否可用,成功则会显示hadoop版本信息。
$ cd /usr/local/hadoop
$ ./bin/hadoop version

测试实例看单节点是否成功配置



hadoop默认模式为非分布式,无需进行其他的配置即可运行,非分布式即单java进程,方便进行调试。现在我们可以执行例子来感受一下hadoop的运行。hadoop附带了丰富的例子(运行./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-example-2.7.2.jar可以看到所有的例子),包括wordcount、terasort、join、grep等。在此我们选择运行grep的例子,我们将input文件夹中的所有文件作为输入,筛选当中符合正则表达式dfs[a-z.]+的单词并统计出现的次数,最后输出结果到output文件夹中。

$ cd /usr/local/hadoop
$ mkdir ./input
$ cp ./etc/hadoop/*.xml ./input  #将配置文件作为输入文件
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input  ./output  ‘dfs[a-z.]+‘
cat ./output/*  #查看运行结果

上述代码的运行结果为:

1 dfsadmin #注意hadoop不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将`./output`删除

输入下面的命令:

rm -rf ./output

集群生态系统之间互相通信-网络配置



首先应该保证集群在同一个局域网,如果使用的是虚拟机安装的系统,需要更改网络连接方式为桥接(Bridge)模式,才能实现多个节点之间的互联。

$ sudo vim /etc/hostname #修改节点的名字,我的节点一次为:Master、Slave1、Slave2、Slave3、Slave4
$ 在打开的文件中依次写入Master、Slave1、Slave2、Slave3、Slave4
$ sudo vim /etc/hosts #修改IP映射关系,在每一个节点的该文件中写入一下的信息
#在打开的文件中写入下面的内容
192.168.100.120 Master
192.168.100.123 Slave1
192.168.100.126 Slave2
192.168.100.127 Slave3
192.168.100.128 Slave4

完成上述操作之后,ping一下看是否能联通

ping Master -c 3 #只ping3次
ping Slave1 -c 3
ping Slave2 -c 3
ping Slave3 -c 3
ping Slave4 -c 3 

修改完成后,需要重新启动一下,重启后在终端中才能看到机器名的变化。后面的操作请注意区分Master和Slave节点的操作

ssh无密码登陆节点



这个操作是让Master节点可以无密码ssh登陆到各个Slave节点上,首先生成Master节点的公钥,在Master节点的终端执行(因为改过主机名,所以还需要删掉原来有的重新生成一次)。

# 在Master节点上执行下面所有的命令
$ cd ~/.ssh  #如果没有该目录,先执行一次ssh localhost
$ rm ./id_rsa* #删除之前生成的公钥
$ ssh-keygen -t rsa #一直按回车就可以
$ cat ./id_rsa.pub >> ./authorized_keys #让Master节点能首先无密码ssh登陆本机,在Master执行该命令
$ ssh Master  #验证是否能成功的登陆本机
$ scp ~/.ssh/id_rsa.pub [email protected]:/home/hadoop #scp是Secure Copy的简写,用于在Linux下进行远程拷贝文件,类似于cp命令,不过cp只能在本机中拷贝,执行scp时会要求输入Slave1节点上hadoop用户的密码(hadoop),输入完成后会提示传输完毕。
$ scp ~/.ssh/id_rsa.pub [email protected]:/home/hadoop #传入2号节点
$ scp ~/.ssh/id_rsa.pub [email protected]:/home/hadoop #传入3号节点
$ scp ~/.ssh/id_rsa.pub [email protected]:/home/hadoop #传入4号节点

#在各个子节点上将ssh公钥介入授权
$ cat ~/id_rsa.pub  >> ~/.ssh/authorized_keys
$ rm ~/id_rsa.pub  #用完就可以删掉了

#接着在Slave1节点上将ssh公钥添加到授权中
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys #在Slave1节点上执行
$ rm ./id_rsa.pub #用完删掉

#接着在Slave2节点上将ssh公钥添加到授权中
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys #在Slave2节点上执行
$ rm ./id_rsa.pub #用完删掉

#接着在Slave3节点上将ssh公钥添加到授权中
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys #在Slave3节点上执行
$ rm ./id_rsa.pub #用完删掉

#接着在Slave4节点上将ssh公钥添加到授权中
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys #在Slave4节点上执行
$ rm ./id_rsa.pub #用完删掉

#最后我们在Master节点上测试是否能成功登陆各个子节点
$ ssh Slave1  #登陆子节点1
$ ssh Master  #返回Master节点,也可以在终端执行exit退出Slave1
$ ssh Slave2  #登陆子节点2
$ ssh Master  #返回Master节点,也可以在终端执行exit退出Slave2
$ ssh Slave3  #登陆子节点3
$ ssh Master  #返回Master节点,也可以在终端执行exit退出Slave3
$ ssh Slave4  #登陆子节点1
$ ssh Master  #返回Master节点,也可以在终端执行exit退出Slave4

配置PATH环境变量



可以将hadoop安装目录加入到PATH变量中,这样就有可以在任意目录中使用hadoop、hdfs等命令,需要在Master节点上进行配置,注意下面命令只须在Master节点上执行,其他的Slave节点不需要

$ vim ~/.bashrc
#加入下面的命令
$
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79 #加入Java环境变量
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
$ source ~/.bashrc  #刷新一下

配置集群/分布式环境



集群/分布式环境需要修改/usr/local/hadoop/etc/hadoop中的5个配置文件,更多设置项可查看官方说明,这里仅仅设置了正常启动所必须的设置项:slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml。

  • 文件slaves,将作为DataNode的主机名写入该文件,每行一个,默认为localhost,所谓在伪分布式节点配置时,节点即作为NameNode也可以作为DataNode。分布式配置可以保留localhost,也可以删掉,让Master节点近作为NameNode节点。本教程让Master节点仅仅作为NameNode节点使用,因此将文件中原来的localhost删除,在slaves中添加:
Slave1  #作为DataNode节点
Slave2  #作为DataNode节点
Slave3  #作为DataNode节点
SLave4  #作为DataNode节点
  • 将core-site.xml文件改为下面的配置:
<configuration>
      <property>
          <name>fs.defaultFS</name>
          <value>hdfs://Master:9000</value>
      </property>
      <property>
          <name>hadoop.tmp.dir</name>
          <value>file:/usr/local/hadoop/tmp</value>
          <description>Abase for other temporary directories.</description>
      </property>
</configuration>
  • 文件hdfs-site.xml,dfs.replication一般设置为3,但是我们现在有4个Slave节点,所以dfs.replication的值设置为4。
  <configuration>
      <property>
          <name>dfs.namenode.secondary.http-address</name>
          <value>Master:50090</value>
      </property>
      <property>
          <name>dfs.replication</name>
          <value>4</value>
      </property>
      <property>
          <name>dfs.namenode.name.dir</name>
          <value>file:/usr/local/hadoop/tmp/dfs/name</value>
      </property>
      <property>
          <name>dfs.datanode.data.dir</name>
          <value>file:/usr/local/hadoop/tmp/dfs/data</value>
       </property>
  </configuration>
  • 文件mapred-site.xml(可能需要先重命名,默认文件名为madred-site.xml.template),然后配置修改如下:

    首先重命名,在终端中输入:

mv madred-site.xml.template madred-site.xml  #将前一个文件的名字修改为后者
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>Master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>Master:19888</value>
        </property>
</configuration>
  • 修改文件yarn-site.xml如下:
<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>Master</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>
  • 最基本的配置完成,我们需要将Master节点上的/usr/local/hadoop文件夹复制到各个节点上,因为之前在节点上跑过单节点的例子,所以在切换到集群模式之前应先删除之前临时的文件,在Master节点上执行:
$ cd /usr/local
$ sudo rm -r ./hadoop/tmp #删除hadoop临时文件
$ sudo rm -r ./hadoop/logs/*  #删除日志文件
$ tar -zcf ~/hadoop.master.tar.gz ./hadoop #先压缩再执行复制
$ cd ~
$ scp ./hadoop.master.tar.gz Slave1:/home/hadoop #传输到Shave1节点上
$ scp ./hadoop.master.tar.gz Slave2:/home/hadoop #传输到Shave2节点上
$ scp ./hadoop.master.tar.gz Slave3:/home/hadoop #传输到Shave3节点上
$ scp ./hadoop.master.tar.gz Slave4:/home/hadoop #传输到Shave4节点上
  • 在各个slave节点上执行下面的命令,我有4个slave节点,所有在4个节点下都应该执行下面的命令:
$ sudo rm -r /usr/local/hadoop  #删掉旧的
$ sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
$ sudo chown -R hadoop:hadoop /usr/local/hadoop

首次启动hadoop


  • 首次启动需要先在Master节点上执行NameNode的格式化
$ hdfs namenode -format  #首次运行需要执行格式化操作,之后不需要
  • 关闭防火墙,Centos中默认开启了防火墙,在开启hadoop集群之前,需要关闭集群中每个节点的防火墙,有防火墙会导致ping得通但是telnet端口不通,从而导致DataNode启动了,但是Live datanodes为0的情况。

    • 在Centos 6.x中关闭防火墙命令

      $ sudo service iptables stop #关闭防火墙服务
      $ sudo chkconfig iptables off #禁止防火墙开机自启动,这样就不用手动去关闭了
    • 在Centos 7中需要通过如下命令(防火墙改成了firewall)
      $ systemctl stop firewalld.service #关闭firewall
      $ systemctl disable firewalld.service #禁止firewall开机自启动
  • 启动hadoop,需要在Master上进行:
$ start-dfs.sh
$ start-yarn.sh
$ mr-jobhistory-daemon.sh start historyserver

最终环境变量设置



最终在~/.bashrc和~/.bash_profile文件中应该有下面的环境变量,请直接复制下面的环境变量,这种设置可以方便你izai任意路径下打开相应的可执行文件。

export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin:$JAVA_HOME/bin
export HADOOP_PREFIX=/usr/local/hadoop
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
时间: 2024-08-09 14:46:46

搭建5个节点的Hadoop集群的相关文章

基于Docker快速搭建多节点Hadoop集群--已验证

Docker最核心的特性之一,就是能够将任何应用包括Hadoop打包到Docker镜像中.这篇教程介绍了利用Docker在单机上快速搭建多节点 Hadoop集群的详细步骤.作者在发现目前的Hadoop on Docker项目所存在的问题之后,开发了接近最小化的Hadoop镜像,并且支持快速搭建任意节点数的Hadoop集群. 一. 项目简介 GitHub: kiwanlau/hadoop-cluster-docker 直接用机器搭建Hadoop集群是一个相当痛苦的过程,尤其对初学者来说.他们还没开

Linux 下 LXD 容器搭建 Hadoop 集群

配置要求 主机内存 4GB . 磁盘 100 GB 以上. HOST 机安装常用 Linux 发行版. Linux Container ( LXD ) 以主机 ubuntu 16.04 为例. 安装 LXD . $ sudo apt-get install lxd $ newgrp lxd $ sudo lxd init 查看可用的镜像源,如果使用默认的 image ,可以跳过下面两步,直接进入后面的 launch . $ lxc remote list 选取上一步喜欢的 image ,复制链接

Hadoop集群大数据平台搭建

Hadoop集群环境搭建配置 前言 Hadoop的搭建分为三种形式:单机模式.伪分布模式.完全分布模式,只要掌握了完全分布模式,也就是集群模式的搭建,剩下的两种模式自然而然就会用了,一般前两种模式一般用在开发或测试环境下,Hadoop最大的优势就是分布式集群计算,所以在生产环境下都是搭建的最后一种模式:完全分布模式. 硬件选择 须知: 分布式环境中一个服务器就是一个节点 节点越多带来的是集群性能的提升 一个Hadoop集群环境中,NameNode,SecondaryNameNode和DataNo

大数据系列(3)——Hadoop集群完全分布式坏境搭建

前言 上一篇我们讲解了Hadoop单节点的安装,并且已经通过VMware安装了一台CentOS 6.8的Linux系统,咱们本篇的目标就是要配置一个真正的完全分布式的Hadoop集群,闲言少叙,进入本篇的正题. 技术准备 VMware虚拟机.CentOS 6.8 64 bit 安装流程 我们先来回顾上一篇我们完成的单节点的Hadoop环境配置,已经配置了一个CentOS 6.8 并且完成了java运行环境的搭建,Hosts文件的配置.计算机名等诸多细节. 其实完成这一步之后我们就已经完成了Had

Hadoop4 利用VMware搭建自己的hadoop集群

前言:       前段时间自己学习如何部署伪分布式模式的hadoop环境,之前由于工作比较忙,学习的进度停滞了一段时间,所以今天抽出时间把最近学习的成果和大家分享一下.       本文要介绍的是如何利用VMware搭建自己的hadoop的集群.如果大家想了解伪分布式的大家以及eclipse中的hadoop编程,可以参考我之前的三篇文章. 1.在Linux环境中伪分布式部署hadoop(SSH免登陆),运行WordCount实例成功. http://www.cnblogs.com/Purple

Hadoop概念学习系列之Hadoop集群动态增加新节点或删除已有某节点及复制策略导向

hadoop-2.6.0动态添加新节点 https://blog.csdn.net/baidu_25820069/article/details/52225216 Hadoop集群动态增加新节点 一.在新增节点配置运行环境 1.安装和其他节点相同的java环境,jdk版本要相同. 2.修改/etc/hosts配置文件,添加ip与hostname的对应关系并分发到集群各个节点. 3.关闭防火墙.相关软件工具的安装等. 4.配置ssh免密码登录,使新增节点和集群其他节点能实现免密码登录. 5.修改s

大数据系列(2)——Hadoop集群坏境CentOS安装

前言 前面我们主要分析了搭建Hadoop集群所需要准备的内容和一些提前规划好的项,本篇我们主要来分析如何安装CentOS操作系统,以及一些基础的设置,闲言少叙,我们进入本篇的正题. 技术准备 VMware虚拟机.CentOS 6.8 64 bit 安装流程 因为我的笔记本是Window7操作系统,然后内存配置,只有8G,内存配置太低了,当然为了演示,我会将Hadoop集群中的主节点分配2GB内存,然后剩余的三个节点都是1GB配置. 所有的节点存储我都设置为50GB. 在安装操作系统之前,我们需要

大数据——Hadoop集群坏境CentOS安装

前言 前面我们主要分析了搭建Hadoop集群所需要准备的内容和一些提前规划好的项,本篇我们主要来分析如何安装CentOS操作系统,以及一些基础的设置,闲言少叙,我们进入本篇的正题. 技术准备 VMware虚拟机.CentOS 6.8 64 bit 安装流程 因为我的笔记本是Window7操作系统,然后内存配置,只有8G,内存配置太低了,当然为了演示,我会将Hadoop集群中的主节点分配2GB内存,然后剩余的三个节点都是1GB配置. 所有的节点存储我都设置为50GB. 在安装操作系统之前,我们需要

hadoop 集群调优实践总结

调优概述# 几乎在很多场景,MapRdeuce或者说分布式架构,都会在IO受限,硬盘或者网络读取数据遇到瓶颈.处理数据瓶颈CPU受限.大量的硬盘读写数据是海量数据分析常见情况. IO受限例子: 索引 分组 数据倒入导出 数据移动和转换 CPU受限例子: 聚类/分类 复杂的文本挖掘 特征提取 用户画像 自然语言处理 我们需要从硬件规划和软件规划等多方面结合实现性能和效率的提升. 硬件规划# 评估集群规模# 我们需要搭建多少节点的hadoop集群?回答这个问题考虑的因素比较多:预算?数据量?计算资源