美文网首页Hadoop大数据
搭建本地hadoop集群(虚拟机)

搭建本地hadoop集群(虚拟机)

作者: 二进制的二哈 | 来源:发表于2019-05-03 14:43 被阅读26次

    1.搭建虚拟机环境

    创建三个虚拟机,网络以桥接模式,三台虚拟机在同一网段,保证三台机器能够相互ping通。

    1.1修改主机名

    用root账户登录,修改/etc/sysconfig/network文件,将HOSTNAME改成自己想要的起的主机名。我这将三台机器分别改成hadoop01、hadoop02和hadoop03。


    修改主机名.png

    修改/etc/hostname文件,修改主机名后重启

    1.2配置内网映射

    修改/etc/hosts文件,配置各个主机间的ip和主机名。以hadoop01这台机器为例:


    配置内网映射.png

    配置完成后测试能不能通过主机名ping通。


    测试ping.png

    1.3关闭防火墙/关闭 Selinux

    防火墙操作相关:
    查看防火墙状态:service iptables status
    关闭防火墙:service iptables stop
    开启防火墙:service iptables start
    重启防火墙:service iptables restart
    关闭防火墙开机启动:chkconfig iptables off
    开启防火墙开机启动:chkconfig iptables on
    注意:centos7的命令稍有不同,例如关闭防火墙是 systemctl stop iptables.service,具体的命令请自行百度

    关闭 Selinux:具体做法是修改/etc/selinux/config 配置文件中的 SELINUX=disabled

    1.4新建用户并赋权

    新建一个hadoop用户,命令是adduser hadoop。
    以root用户身份为hadoop用户赋权,在 root 账号下,命令终端输入:vi /etc/sudoers
    找到
    root ALL=(ALL) ALL
    这一行,然后在他下面添加一行:
    hadoop ALL=(ALL) ALL
    保存,退出

    修改hadoop用户权限.png
    注意:如果保存的时候提示文件为只读,保存的时候加个感叹号即可。例如:wq!

    2.安装jdk

    上传jdk安装包,可以从网络下载的方式,也可以从本地上传。本文采用第二种方式,先将安装包下载到本地电脑,然后通过FileZilla软件上传到虚拟机中。只需上传到一台虚拟机即可,之后通过scp拷贝。


    上传jdk安装包.png

    解压到/usr/local下
    tar -zxvf jdk-8u73-linux-x64.tar.gz -C /usr/local
    配置环境变量

    1. vi /etc/profile
    2. 在最后加入两行:
      export JAVA_HOME=/usr/local/jdk1.8.0_73
      export PATH=$PATH:$JAVA_HOME/bin

    3.重新加载环境变量 source /etc/profile
    4.最后检测是否安装成功,输入命:java -version

    3.同步服务器时间

    Linux服务器的时间不对的时候,可以使用ntpdate工具来校正时间。
    210.72.145.44 中国(国家授时中心)
    ntpdate 210.72.145.44

    4.配置免密登录

    这一步是为了配置各个服务器间hadoop用户的免密登录(密钥方式登录)。这一步操作时记得切换至hadoop用户。
    1)在 hadoop 登录状态下,输入命令 ssh-keygen 或者 ssh-keygen -t rsa,一直按回车即可。


    生成公钥.png

    2)之后你会发现,在/home/hadoop/.ssh 目录下生成了公钥文件

    查看公钥文件.png
    3)使用ssh-copy-id命令与其他主机建立免密连接,其实就是将自己的公钥拷贝至其他主机的authorized_keys文件中。
    例如 建立 hadoop01 到 hadoop02 的免密登录
    在hadoop01机器上,用hadoop用户执行命令 ssh-copy-id hadoop02,接下来会让输入hadoop02的密码,输入完之后就建立成功。使用ssh命令验证,在hadoop01下用hadoop用户执行 ssh hadoop@hadoop02,执行完之后可以看到主机名变成了hadoop02,说明免密登录配置成功。
    免密登录png
    还需要配置自己登陆自己的免密登录

    4)在另外两台机器上重复以上步骤,保证3台机器中两两能够互相免密登录即可。

    5. hadoop 分布式集群安装

    5.1拷贝并解压hadoop安装包

    从hadoop官网下载安装包,本文安装的是2.9版本。上传至/usr/src目录下,解压至home/hadoop/apps目录下
    命令:tar -zxvf hadoop-2.9.2.tar.gz -C /home/hadoop/apps

    5.2修改hadoop配置文件

    进入hadoop安装目录
    cd /home/hadoop/apps/hadoop-2.9.2
    核心配置文件在etc/hadoop下
    1)修改hadoop-env.sh,指定JAVA_HOME目录
    export JAVA_HOME=/usr/local/jdk1.8.0_73


    指定JAVA_HOME

    2)修改 core-site.xml
    在<configuration>标签中增加以下内容
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop02:9000</value>
    </property>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/hadoop/hadoopdata</value>
    </property>

    配置core-site.xml

    其中fs.defaultFS配置的是namenode的节点ip和端口,hadoop.tmp.dir配置的是hadoop数据存储目录。

    3)修改 hdfs-site.xml
    在<configuration>标签中增加以下内容
    <property>
    <name>dfs.namenode.name.dir</name>
    <value>/home/hadoop/hadoopdata/name</value>
    <description>为了保证元数据的安全一般配置多个不同目录</description>
    </property>
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>/home/hadoop/hadoopdata/data</value>
    <description>datanode 的数据存储目录</description>
    </property>
    <property>
    <name>dfs.replication</name>
    <value>2</value>
    <description>HDFS 的数据块的副本存储个数</description>
    </property>
    <property>
    <name>dfs.secondary.http.address</name>
    <value>hadoop03:50090</value>
    <description>secondarynamenode 运行节点的信息,和 namenode 不同节点</description>
    </property>


    配置 hdfs-site.xml

    其中每个配置项的说明在description标签中已标明

    4)修改 mapred-site.xml(集群只有 mapred-site.xml.template,可以从这个文件进行复
    制,或者直接改名也可)
    在<configuration>标签中增加以下内容
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>


    配置mapred-site.xml

    配置采用yarn作为资源调度框架

    5)修改 yarn-site.xml
    在<configuration>标签中增加以下内容
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop01</value>
    </property>
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    <description>YARN 集群为 MapReduce 程序提供的 shuffle 服务</description>
    </property>


    配置 yarn-site.xml

    yarn.resourcemanager.hostname配置resourcemanager节点

    6)修改 slaves 文件
    添加以下内容,该内容是从节点列表
    hadoop01
    hadoop02
    hadoop03

    5.3分发安装包到各个节点

    采用scp命令将hadoop安装目录拷贝至另外两个节点
    scp -r hadoop-2.9.2/ hadoop@hadoop02:/home/hadoop/apps
    scp -r hadoop-2.9.2/ hadoop@hadoop03:/home/hadoop/apps

    在各个节点配置hadoop环境变量
    修改/etc/profile 添加以下内容
    export HADOOP_HOME=/home/hadoop/apps/hadoop-2.9.2
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

    重新加载环境变量
    source /etc/profile
    执行hadoop --help命令测试环境变量是否配置成功

    5.4初始化namenode

    在 HDFS 主节点(core-site.xml中配置的fs.defaultFS)上执行命令进行初始化 namenode
    在namenode节点执行命令
    hadoop namenode -format

    初始化namenode
    当看到图中红框的 successfully formatted时,即是初始化成功。
    如果初始化没有成功,查找报错信息,重新执行初始化命令,直至成功为止。
    注意,初始化操作只需要执行一次,初始化成功之后可以在之前配置的hadoop数据存储目录(hdfs-site.xml文件中配置的dfs.datanode.data.dir)看到hadoopdate目录,如果需要重新初始化,就删除每个节点的这个文件夹,重新执行hadoop namenode -formate命令
    hadoop数据存储目录

    6.启动集群

    6.1启动hdfs,在任意一个节点执行start-dfs.sh命令。

    启动hdfs

    可以看到hdfs在各个节点启动的过程以及日志输出。
    启动完之后,在各个节点执行jps命令查看java进程。


    hadoop02的进程

    可以看到hadoop02上启动了一个namenode进程和一个DataNode进程。因为我们配置的hdfs主节点在hadoop02 上,所以namenode进程就在hadoop02上。


    hadoop03的进程
    hadoop03上启动了一个DataNode进程和一个SecondaryNameNode进程。
    hadoop01上的进程

    6.2启动yarn

    在 YARN 主节点启动 YARN,要求在 YARN 主节点进行启动,否则 ResourceManager 主进
    程会启动不成功,需要额外手动启动。
    启动yarn的命令为:start-yarn.sh
    因为我配置的yarn主节点在hadoop01机器上,所以在hadoop01上启动yarn。


    启动yarn

    用JPS查看进程
    结果:在主节点启动了 resourcemanager 守护进程
    在从节点启动了 nodemanager 守护进程

    6.3检查hdfs是否启动成功

    在任意节点上执行 hadoop fs -ls /
    上传一份文本文件 hadoop fs -put /in /
    访问HDFS的web控制台,地址是NameNode节点的50070端口,例如:http://192.168.1.107:50070/

    HDFS的web控制台

    在这个页面可以下载HDFS上的文件,不过默认的下载地址是主机名,如果windows没有配置过NDS解析,那么就需要将主机名改成对应的ip,也可以直接修改hosts文件(文件位于C:\Windows\System32\drivers\etc下,记得用管理员身份打开,或者复制到桌面修改完之后再覆盖原文件)
    如果能成功的上传或者下载,就说明HDFS启动成功。

    6.3检查yarn是否启动成功

    hadoop安装包里有一些程序实例,可以用hadoop jar命令执行,我们可以用经典的wordcount程序测试下yarn是否启动成功。
    首先上传一份文本文件到hdfs,文本中随便写一些单词,以回车符分割。
    然后进入/home/hadoop/apps/hadoop-2.9.2/share/hadoop/mapreduce目录,执行以下命令
    hadoop jar hadoop-mapreduce-examples-2.9.2.jar wordcount /test/test /test/wcout
    执行完之后到HDFS的/test/wcout下就会看到输出的结果文件。至此,hadoop的伪分布式集群环境搭建完成。

    7.搭建过程中一些可能出现的问题

    7.1HDFS监听的9000端口默认绑定127.0.0.1地址问题

    启动hdfs之后,发现只有namenode节点可以访问hdfs,其他节点访问不到,使用netstat -ano|grep 9000命令查看9000端口的监听情况,发现监听的是127.0.0.1地址。
    出现这个问题的原因是hosts文件配置错误,解决办法是修改hosts文件,127.0.0.1和::1两个地址不要绑定主机名,主机名绑定内网地址即可。如图:


    image.png

    7.2启动的时候提示要输入从节点的密码

    执行start-dfs.sh或者start-all.sh的时候提示要输入密码,如图:


    image.png

    问题原因:用root用户启动的命令,而root用户没有配置过免密登录,所以需要密码。
    解决办法:切换到hadoop用户,再执行启动命令。这个每次关机重启后经常会忘记。

    7.3连接拒绝问题

    访问hdfs文件或者执行mr程序的时候会出现connection refused的错误,这时候检查一下节点的防火墙设置。
    CentOS 7.0默认使用的是firewall作为防火墙
    查看防火墙状态
    firewall-cmd --state
    停止firewall
    systemctl stop firewalld.service
    禁止firewall开机启动
    systemctl disable firewalld.service

    相关文章

      网友评论

        本文标题:搭建本地hadoop集群(虚拟机)

        本文链接:https://www.haomeiwen.com/subject/qqzanqtx.html