Hadoop平台的安装(完全分布式Hadoop 3.1.2)

  由于学校开了门大数据的课程,在做实验的时候踩了许多坑,所以将Hadoop安装过程以及踩坑和如何避免踩坑在这里和大家分享一下。这次Hadoop平台的搭建主要是搭建一个三台服务器的集群,采用完全分布式的方式。看本博客前需要将linux系统在虚拟机上搭建好。

一、网络配置

注:三台服务器都需要配置网络。(也可以采用克隆的方式,但要记得对其他两台机器的网络信息进行修改)还是建议大家每台都操作一遍,熟悉过程。

Host-Only模式

  虚拟机会与宿主机的虚拟网卡组成一个局域网,局域网中可使用单独的静态内部IP,只需要将网关设置为虚拟网卡的地址即可,这样,虚拟机之间可通过局域网互联,虚拟机通过网关与宿主机连接
不会多占用机房IP地址,适合上机时使用。如果对网络配置也不熟悉的朋友,可以参考我的另一篇关于网络配置的博客:https://blog.csdn.net/weixin_43800761/article/details/106742945

1.1 修改配置信息

修改IP地址要在这里修改,使用ipconfig命令不能永久修改
命令:vi /etc/sysconfig/network-scripts/ifcfg-网卡名
网卡名进入/etc/sysconfig/network-scripts/目录查看即可,CentOS7以后不再默认为eth0

IPADDR=192.168.137.150	  实际地址须与GATEWAY在同一网段
NETMASK=255.255.255.0
GATEWAY=192.168.137.1	  即VirtualBox Host-Only Network的IP地址
BOOTPROTO=static / dhcp	  static表示使用静态IP,DHCP使用动态IP
ONBOOT=yes      	  表示开机启动配置

1.2 修改DNS地址

命令:vi /etc/resolv.conf
增加配置:nameserver 114.114.114.114 或183.221.253.100、61.139.2.69
然后重启网络服务:service network restart

1.3 检验测试

命令:ping www.baidu.com ping其他域名亦可
在这里插入图片描述

1.4 修改主机名

使用hostname命令不能永久修改
命令:vi /etc/hostname
直接将主机名写入即可:node1
再执行命令:hostname 检查是否生效,若未生效,再执行命令:hostname node1临时修改一下。
还要修改host映射文件
命令:vi /etc/hosts
配置文件如下(IP地址和主机名以实际的为准):这里配置好三台的IP。
在这里插入图片描述
这样做的目的是:将IP地址和机器名相映射,这样再node和node之间通信的时候,可以直接使用主机名,也可以使用IP地址。

二、SSH免密登录

  Hadoop集群通过Linux的SSH相互之间通信,故需配置SSH免密登录,否则节点间通信将被Linux拒绝
免密登录原理:即事先将RSA非对称加密的公钥由主节点拷贝到到其他节点,只需实现主节点至其他节点的免密即可.

2.1 去掉/etc/ssh/sshd_config的两行注释

去掉/etc/ssh/sshd_config的两行注释,打开RSA非对称密钥验证,所有节点都须操作。
命令:vi /etc/ssh/sshd_config

#RSAAuthentication yes
#PubkeyAuthentication yes

2.2 生成密钥对

  1. 主节点执行(node1)
    命令:ssh-keygen -t rsa 生成key,不用输入密码,一直回车,生成密钥对放在 ~/.ssh 目录(ls -al可查看)
    在这里插入图片描述
  2. 主节点执行(node1)
    id_rsa.pub是公钥文件,将公钥文件内容复制到authorized_keys文件,并复制到其他节点的~/.ssh目录。
    命令:cd ~/.ssh 进入到.ssh目录
    命令:cat id_rsa.pub>> authorized_keys
    命令:scp -r authorized_keys root@node1:~/.ssh/authorized_keys 本机(主节点)也需要免密才行。
    命令:scp -r authorized_keys root@node2:~/.ssh/authorized_keys 将公钥文件复制到其他节点,节点名以实际的名称为准
    命令:scp -r authorized_keys root@node3:~/.ssh/authorized_keys
    在这里插入图片描述
    注意: 在第一次执行的时候,是需要输入密码的,后面再换文件就不需要再输入密码了。

2.4 关闭防火墙

为了使node之间能够通信,还需要将节点的防火墙关闭。两种方式:

  1. 即时生效,重启后失效
service iptables stop
  1. 重启后永久生效
chkconfig iptables off

命令:systemctl stop firewalld.service 停止firewall
命令:systemctl disable firewalld.service 禁止firewall开机启动
由于我遇到了上述两种方式报错的情况,所以又提供了两种方式,读者哪种好使用哪种。

2.3 检查ssh

命令:ssh node2
命令:ssh node3
执行ssh将不再需要密码,若还需要,检查并重复前面的配置过程。
在这里插入图片描述

三、安装和配置JDK

  前面已经实现了系统的安装,网络配置以及防火墙的关闭,到目前为止,多台计算机之间就可以通信了。由于Hadoop是基于Java语言环境的,所以还需要设置Java运行环境,JDK最好在1.8以上,这里使用1.8,最新的Hadoop需要下载JDK8。读者可以自行在官方下载:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

注意: 同时下载jdk-8u211-linux-x64.tar.gz和jdk-8u211-windows-x64.exe,虚拟机和宿主机要安装相同版本的JDK,以便后续学习和实验的进行(大版本相同即可)。

3.1 找到传上来的jdk文件并解压

命令:tar zxvf jdk-8u211-linux-x64.tar.gz
命令:mv jdk1.8.0_211 /home/ 将解压后的目录移动至指定目录

3.2 配置环境变量

  1. 命令:vi /etc/profile
    在profile文件下面追加写入下面信息:
#java environment
export JAVA_HOME=/usr/java/jdk1.8.0_201
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin

在这里插入图片描述

  1. 命令:source /etc/profile 使配置文件生效。

3.3 测试检验

命令:java -version 若能显示版本则JDK安装配置完成,否则检查前面的步骤是否正确。
在这里插入图片描述

四、Hadoop完全分布式安装

4.1 Hadoop下载

版本:3.1.2,2019年2月6日发布
下载页面:https://hadoop.apache.org/releases.html
文件地址:https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz

  1. 可用wget下载:
mkdir /home/hadoop
wget -P /home/hadoop https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz
  1. 也可在宿主Windows中下载了,通过工具上传到Linux。(与JDK方式一样)。

4.2 文件解压

  1. 命令:tar zxvf hadoop-3.1.2.tar.gz
    然后再将解压后的目录移动至想要放置的位置,如:/home/hadoop/hadoop-3.1.2
  2. 在/home/hadoop目录下创建数据存放的文件夹,tmp、dfs、dfs/data、dfs/name。

4.3 配置各类文件

注意:这里配置的IP全部为主节点IP,首先在主节点进行配置。
首先,进入Hadoop的配置文件目录

cd /home/hadoop/hadoop-3.1.2/etc/hadoop
  1. 配置hadoop-env.sh
    用vi编辑器打开目录/home/hadoop/hadoop-3.1.2/etc/hadoop/下的hadoop-env.sh配置文件
    找到 # export JAVA_HOME= ,大概在54行的位置,去掉该行注释并添加JDK位置
    配置前面安装jdk的位置:以实际地址为准
export JAVA_HOME=/home/jdk1.8.0_211	

在这里插入图片描述

  1. 配置core-site.xml
    用vi编辑器打开目录/home/hadoop/hadoop-3.1.2/etc/hadoop/下的core-site.xml配置文件
    配置如下:
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://192.168.137.150:9000</value>    以实际的主节点地址为准
    </property>
    <property>
        <name>hadoop.tmp.dir</name>		  原数据的目录位置
        <value>file:/home/hadoop/tmp</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131702</value>
    </property>
</configuration>

如图所示:
在这里插入图片描述

  1. 配置hdfs-site.xml
    用vi编辑器打开目录/home/hadoop/hadoop-3.1.2/etc/hadoop/下的hdfs-site.xml配置文件
<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/home/hadoop/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/home/hadoop/dfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.http.address</name>
        <value>192.168.137.150:50070</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>192.168.137.150:9001</value>
    </property>
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
</configuration>

如图所示:
在这里插入图片描述

  1. 配置mapred-site.xml
    用vi编辑器打开目录/home/hadoop/hadoop-3.1.2/etc/hadoop目录下的mapred-site.xml配置文件
    配置如下:
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>192.168.137.150:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>192.168.137.150:19888</value>
    </property>
</configuration>

如图所示:
在这里插入图片描述

  1. 配置yarn-site.xml
    用vi编辑器打开目录/home/hadoop/hadoop-3.1.2/etc/hadoop目录下的yarn-site.xml配置文件
    配置如下:
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>192.168.137.150:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>192.168.137.150:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>192.168.137.150:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>192.168.137.150:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>192.168.137.150:8088</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>1024</value>
    </property>
</configuration>

如图所示:
在这里插入图片描述

  1. 配置hadoop-env.sh、yarn-env.sh的JAVA_HOME
    配置/home/hadoop/hadoop-3.1.2/etc/hadoop目录下hadoop-env.sh、yarn-env.sh的JAVA_HOME,不设置的话,启动不了,以实际地址为准。
export JAVA_HOME=/home/jdk1.8.0_211

如图:
在这里插入图片描述

  1. 配置Hadoop命令环境变量
    命令:vi /etc/profile
    在profile文件下面追加写入下面信息:
export HADOOP_HOME=/home/hadoop/hadoop-3.1.2
export PATH=$PATH:$HADOOP_HOME/bin

如图:
在这里插入图片描述
执行命令:source /etc/profile 环境变量即生效

4.4 配置worker并启动Hadoop集群

  1. 配置worker
    配置/home/hadoop/hadoop-3.1.2/etc/hadoop目录下的workers,删除默认的localhost,增加2个从节点IP地址,以实际的为准。
    在这里插入图片描述
  2. 将JDK、profile和Hadoop复制到各个节点对应位置上,通过scp传送
scp -r /home/jdk1.8.0_211 192.168.137.151:/home/
scp -r /home/jdk1.8.0_211 192.168.137.152:/home/
scp -r /etc/profile 192.168.137.151:/etc/
scp -r /etc/profile 192.168.137.152:/etc/
scp -r /home/hadoop 192.168.137.151:/home/
scp -r /home/hadoop 192.168.137.152:/home/
  1. 初始化hadoop
    在主节点上启动hadoop,从节点会自动启动,进入/home/hadoop/hadoop-3.1.2目录。
    (1)初始化,输入命令:bin/hdfs namenode -format
    在这里插入图片描述

  2. 启动Hadoop
    全部启动:sbin/start-all.sh,也可以分开启动:sbin/start-dfs.shsbin/start-yarn.sh

    如果提示:there is no HDFS_NAMENODE_USER defined,则添加用户。
    在这里插入图片描述
    如图所示,出现了there is no HDFS_NAMENODE_USER defined,则添加用户。

vi sbin/start-dfs.sh 
vi sbin/stop-dfs.sh 

在顶部空白处添加内容:

   HDFS_DATANODE_USER=root 
   HADOOP_SECURE_DN_USER=hdfs
   HDFS_NAMENODE_USER=root 
   HDFS_SECONDARYNAMENODE_USER=root 

如果提示:ERROR: there is no YARN_RESOURCEMANAGER_USER defined.,则添加用户

   vi sbin/start-yarn.sh 
   vi sbin/stop-yarn.sh 

在顶部空白处添加内容:

   YARN_RESOURCEMANAGER_USER=root
   HADOOP_SECURE_DN_USER=yarn
   YARN_NODEMANAGER_USER=root

全部启动后:
在这里插入图片描述
停止服务,输入命令:sbin/stop-all.sh

  1. 查看进程
    输入命令,jps,可以看到相应的守护进程
    主节点:NameNode、SecondaryNameNode
    从节点:DataNode
    • 主节点
      在这里插入图片描述
    • 从节点
      在这里插入图片描述
      主节点也可同时运行NameNode和DataNode,只需要在workers文件中配置即可。
      若守护进程不全,则进入/home/hadoop/hadoop-3.1.2/logs,查看日志以找到出错之处。

四、Hadoop完全分布式平台测试

  1. Web访问
  1. 测试HDFS上传文件
  • 创建文件夹
    命令:
bin/hdfs dfs -mkdir -p /user/xu/input

如下所示:
在这里插入图片描述

  • 上传文件
    命令:
bin/hdfs dfs -put NOTICE.txt /user/xu/input

如下所示:
在这里插入图片描述

  • 执行结果
    在这里插入图片描述
    有兴趣的读者还可以尝试上传一个大文件,查看HDFS内部存储是怎样的。我在这里又进行了一些简单的测试,上传了一个大文件和一个小文件。
    在这里插入图片描述
    从这个可以看出来,小文件分别存在两个节点中。并且只有一个Block。
    在这里插入图片描述
    大文件也分别存在两个节点中,但是多了分块存储的操作。多个Block。
    在这里插入图片描述

----------------------------------------------------------纸上得来终觉浅,绝知此事要躬行---------------------------------------------------------

猜你喜欢

转载自blog.csdn.net/weixin_43800761/article/details/106748085