前言

hadoop是其他大数据框架的基础运行环境,尤其是hdfs,是其他大数据框架的基础存储载体,因此学习和掌握hadoop对学习大数据很有必要

haddop常用的3种运行模式包括:

  • 本地模式 ,单机运行,只是用来演示一下官方案例。生产环境不用
  • 伪分布式模式,也是单机运行,但具备Hadoop集群所有功能,一台服务器模拟一个分布式的环境
  • 完全分布式模式:多台服务器组成分布式环境。生产环境使用

本篇将基于centos7系统,在腾讯云环境快速搭建一个单节点的haddop运行环境

前置准备

  • 一台配置好网络连接(可ping通宿主机和外网)的CentOS 7系统的虚拟机 【本篇使用腾讯云服务器】
  • 连接宿主机和虚拟机的Xftp
  • JDK 1.8版本或1.8版本以上的安装包
  • hadoop 3.1.3 版本的安装包,hadoop: http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-3.0.0/

一、安装JDK

这个想必大家都会吧,将下载好的linux版的JDK上传到服务器的指定的目录下,解压,然后配置下即可

在centos7上安装mysql 在centos7上安装hadoop_hadoop


配置到 profile文件中即可

vi /etc/profile

export JAVA_HOME=/usr/local/bigdata/java/jdk1.8.0_241
export PATH=$PATH:$JAVA_HOME/bin

保存并退出之后,执行下: source /etc/profile ,最后再使用: java -version 查看下安装的JDK

在centos7上安装mysql 在centos7上安装hadoop_java_02

二、配置hadoop前置准备环境

1、更新yum源

sudo yum -y update

2、配置主机IP的映射

在搭建完全分布式集群时,这一步一定而且是必不可少的,执行命令 : vi /etc/hosts ,做一下IP和主机名称的映射

在centos7上安装mysql 在centos7上安装hadoop_后端_03


然后执行命令, service network restart ,重启下网络

3、 创建 hadoop 用户

通常来说,安装软件时,登录使用的多数是 root 用户,但这样并不安全。因此,在安装Hadoop前,我们最好创建一个 指定的用户,比如这里就创建一个名为 "hadoop"的用户【也可以自定义其他名字】 ;

关于这一点,本人在一开始安装的时候直接使用 root用户安装,在后续安装启动过程中一堆的报错,然后四处找解决方案,甚是麻烦,所以有必要提醒各位安装的同学,最好使用一个新用户

以root用户登录,然后打开一个终端,输入以下命令创建 hadoop 用户并设置密码

useradd hadoop 		# 创建hadoop用户
passwd hadoop 		# 设置hadoop用户的密码,按提示输入两次密码

注意:密码需输两次,若提示无效,说明设置的密码等级过低不安全,但你不想换密码的话,也可以继续输入密码进行确定

4、修改 第一步中“hadoop” 用户权限

hadoop 用户是普通用户,系统为了安全,对普通用户的一些操作权限做了限制,这样一来,我们在做配置环境的时候就不是很方便,因此需要为 hadoop 用户添加管理员的权限

  • 以root用户登录打开一个终端窗口,输入以下命令为hadoop用户增加管理员的权限
    vi /etc/sudoers

找到root ALL=(ALL) 这一行,然后复制一个一模一样的行,名字改为hadoop即可

在centos7上安装mysql 在centos7上安装hadoop_xml_04


退出关闭时,使用 wq! 强制保存并退出,否则会提示 E45:‘readonly’ option is set(add ! to override)

5、检查并配置ssh

集群、单机模式都需要用到 SSH 登陆,甚至在集群模式下不同机器之间需要互相拷贝文件,以及通过网络传输文件,假如不配置ssh免密登录的话,每次都要输入对方的登录密码,甚是麻烦,为方便期间,这里还是配置一下

首先通过下面命令检查一下ssh是否安装

yum list installed | grep openssh-server

在centos7上安装mysql 在centos7上安装hadoop_后端_05

如果尚未安装,则执行下面的命令安装即可

sudo yum install openssh-server

确定 openssh-server 已安装后,就可以使用 SSH了,输入 ssh localhost 命令登陆本机,但是每次登陆都需要输入密码,很不方便,因此我们需要配置成SSH无密码登陆,更方便一点。具体操作如下:

exit                           # 退出之前的 ssh localhost
cd ~/.ssh/                     # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa              # 会有提示,一直按回车即可
cat ./id_rsa.pub >> ./authorized_keys  # 加入授权
chmod 600 authorized_keys      # 更改文件权限

之后再输入 ssh localhost 命令登陆时,就无需再输入密码,如下所示:

在centos7上安装mysql 在centos7上安装hadoop_java_06

以上为安装hadoop的前置准备工作,这些准备工作必不可少,否则会在后面配置完毕所有的文件启动时,出现各种意想不到的错误

二、配置 Hadoop 3.1.3

1、上传hadoop 3.1.3安装包

在centos7上安装mysql 在centos7上安装hadoop_xml_07


2、解压文件

tar -zxvf hadoop-3.1.3.tar.gz  #解压文件
mv hadoop-3.1.3 hadoop       #重命名文件目录

3、创建两个目录,保存namenode和datanode的数据

进入hadoop目录,创建 name 和 data 两个文件目录,用于保存namenode和datanode的数据

在centos7上安装mysql 在centos7上安装hadoop_hadoop_08


4、进入 etc/hadoop目录,对以下几个关键的配置文件进行配置

  • core-site.xml
  • hdfs-site.xml
  • mapred-site.xml
  • yarn-site.xml
  • hadoop-env.sh

hadoop的环境搭建关键也就在这几个核心的配置文件,下面按照上面的顺序,依次贴出各个配置文件的内容

core-site.xml

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/bigdata/hadoop/hadoop/tmp</value>
    </property>

    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://公网IP:9000</value>
    </property>
</configuration>

hdfs-site.xml

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/bigdata/hadoop/hadoop/tmp/dfs/name</value>
    </property>

    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/bigdata/hadoop/hadoop/tmp/dfs/data</value>
    </property>
</configuration>

mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

yarn-site.xml

<configuration>

	<!-- 设置 resourcemanager 在哪个节点-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>公网IP或主机名</value>
    </property>

    <!-- reducer取数据的方式是mapreduce_shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <property>
         <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
         <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
</configuration>

hadoop-env.sh

这个主要是配置 JDK的路径即可,和上文配置的JDK路径保持一致

在centos7上安装mysql 在centos7上安装hadoop_hadoop_09


以上的配置文件基本上就OK了,由于是伪分布式模式,这样的配置就可以使用了,完全分布式环境的配置相对复杂点

5、初始化namenode

进入hadoop的文件主目录,执行:./bin/hdfs namenode -format ,看到如下信息即可

在centos7上安装mysql 在centos7上安装hadoop_在centos7上安装mysql_10


6、启动 NameNode 和 DataNode

cd sbin   			#进入主目录下的sbin目录
./start-dfs.sh	#启动脚本

启动后,通过jps观察是否启动成功,正常情况下,会看到 3 个进程存在

在centos7上安装mysql 在centos7上安装hadoop_java_11

7、开启防火墙或者安全组策略中开启特定的访问端口

浏览器访问内:http://公网IP:9870 ,看到下面的界面后,接下来就可以愉快的使用hadoop了

在centos7上安装mysql 在centos7上安装hadoop_xml_12

分享安装过程中的几个坑

1、使用root用户安装,出现下面的报错信息,经过网上不少参考资料,但基本上都是拆东墙补西墙

在centos7上安装mysql 在centos7上安装hadoop_xml_13


2、未安装ssh和配置免密登录,hadoop启动过程中,在上面的几个配置文件中,需要通过公网IP和文件目录数据打交道,因此如果不配置ssh肯定会有问题

在centos7上安装mysql 在centos7上安装hadoop_后端_14


3、namenode和datanode的目录没有配置在hadoop的主目录下时,启动hadoop的时候一致报下的错误:

hadoop03: ERROR: Cannot set priority of datanode process 2518错误解决

忘了截图,到网上找了一张基本上一样错误的图做说明

在centos7上安装mysql 在centos7上安装hadoop_xml_15


关于这个错误,基本上网上没有一个解决办法可以用,一开始我的namenode和datanode是放在hadoop的主目录之外,出现这个问题后,首先是想到的给namenode和datanode的文件目录授权

但是授权之后,namenode和SecondaryNameNode进程可以启动,但是datanode始终起不来,仍然是报上面的这个错,后来我就将namenode和datanode转移到hadoop的主目录下

但是转移目录之后,需要重新设置上面4个配置文件中的namenode和datanode的位置,然后重新执行初始化命令即可