我爱编程

hadoop学习之hadoop简易安装配置

2018-04-06  本文已影响107人  你看见皮卡丘了吗

学习环境清单
ubuntu 16.04
windows 7
hadoop 2.9.0
jdk 8

一 下载安装hadoop

首先创建好目录,用于后续文件的归类存放,执行下述命令

sudo mkdir -p /data/software #用于存放下载的软件

接下来都用默认账户进行操作

1.下载hadoop

访问 http://hadoop.apache.org/releases.html进行下载,我学习的版本是2.9.0,选择binary文件进行下载

image.png image.png

下载完成后将hadoop-2.9.0.tar.gz文件传输到ubuntu服务器上.

也可以直接在服务器中输入下面命令直接在服务器上下载
sudo wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.9.0/hadoop-2.9.0.tar.gz -P /data/software

2.下载jdk

hadoop依赖于jdk,所以需要再下载一下jdk。
访问 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html进行下载

image.png

下载完成后,传输到服务器上。

3.配置环境变量

此时在/data/software下已经有hadoop和jdk的安装包了,下面需要配置环境变量来让他们正常工作。


image.png

先将两个文件解压
tar -zxvf jdk-8u161-linux-x64.tar.gz
tar -zxvf hadoop-2.9.0.tar.gz

解压完成后

image.png

由于目录名比较长,为两个目录建立一下软连接,以便后续好设置环境变量
ln -s hadoop-2.9.0/ hadoop
ln -s jdk1.8.0_161/ jdk

image.png

使用vim编辑/etc/environment文件sudo vim /etc/environment,在其中加入如下配置

JAVA_HOME="/data/software/jdk"
HADOOP_HOME="//data/software/hadoop" PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin"

编辑完成之后执行source /etc/environment命令

然后执行javac命令和hadoop version命令,出现如下界面,即证明环境变量安装成功

image.png image.png

不过这样当我们重启机器或者切换用户,环境变量将会丢失,需要重新source /etc/environment
可以vim编辑一下/etc/bash.bashrc这个文件sudo vim /etc/bash.bashrc,在这个文件的末尾追加一下这个命令

image.png

这个脚本是每次进入bash都会执行,就省去了我们手动source /etc/environment这个操作。

二 hadoop简单配置

1. 单机模式(本地模式)

hadoop的默认模式就是单机模式,在/data/software/hadoop/sbin下有一些用于启动的脚本文件。

image.png
先直接用start-all.sh启动一下(hadoop启动会使用ssh程序,请确保已经安装,如果没有,执行sudo apt-get install openssh-server)
image.png

因为单机模式使用的是本地文件系统,可以看到没有启动名称节点和数据节点,而启动的ResourceManager和NodeManager是用于资源调度的,所以单机模式适合用于本地调试mapreduce程序。

执行一下 hadoop fs命令可以看到如下提示

image.png

然后再执行一下hadoop fs -ls /看一下有什么文件

image.png

可以看到hadoop直接使用的就是本地文件系统。

2.伪分布式

单机模式一般只适用于编写mapreduce程序的测试运行,不适合hadoop学习和实际运用。
伪分布式是hadoop在单机环境下模拟运行一个集群,会启动hadoop的所有进程,适合用来学习hadoop的基本组件。

hadoop的主要配置文件都在/data/software/hadoop/etc/hadoop下

image.png

下面来修改这4个文件来完成伪分布式的配置
创建目录用于存放hadoop文件系统的数据
sudo mkdir -p /data/hadoop

  1. core-site.xml(hadoop的核心配置)

vim core-site.xml

image.png
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
      <property>
                <name>fs.defaultFS</name>
                <value>hdfs://localhost/</value>
       </property>
      <property>
                <name>hadoop.tmp.dir</name>
                <value>/data/hadoop</value>
       </property>
</configuration>  
  1. hdfs-site.xml(hdfs的相关配置)
    vim hdfs-site.xml
image.png
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
        <property>
                <!--配置hdfs中文件的副本数,默认为3,伪分布式下置为1-->
                <name>dfs.replication</name>
                <value>1</value>
        </property>
</configuration>
  1. mapred-site.xml(mapreduce的相关配置)
    这个文件目录下默认是没有的,执行cp mapred-site.xml.template mapred-site.xml获取,然后再编辑
    vim mapred-site.xml
    image.png
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
        <property>
                <!--配置mapreduce的框架名称-->
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>
  1. yarn-site.xml(yarn的相关配置)
    vim yarn-site.xml
image.png
<?xml version="1.0"?>
<configuration>
        <property>
                <!--配置yarn调度的主机-->
                <name>yarn.resourcemanager.hostname</name>
                <value>localhost</value>
        </property>
        <property>
                <!--NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序-->
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

配置完毕,执行hadoop namenode -format格式化一下文件系统

image.png

格式化完成后再执行一下start-all.sh

image.png

可以看到所有节点都已经启动了。

通过ifconfig获取一下服务器的ip

image.png

这时可以访问一下hdfs的webui来看一下,ip地址:50070。
我的是http://192.168.92.141:50070/

image.png

至此,伪分布式配置完成。伪分布式是属于麻雀虽小,但五脏俱全,适合去了解一下hadoop的基本操作。

3.分布式

伪分布式虽然可以满足我们的基本学习,但是在真正环境下,都是多节点协同工作的,伪分布式属于单节点,不利于我们了解多节点下hadoop的工作流程。

我使用了5个节点进行学习

一个namenode名称节点 hadoop01
一个secondeNamenode辅助名称节点 hadoop05
三个datanode数据节点 hadoop02、hadoop03、hadoop04

image.png

我根据ubuntu01 克隆了其他四台机器

1. 规划ip

首先我们得规划一下每台机器的ip,然后配置一下hosts

选择虚拟机->设置

image.png

可以看到网络为nat模式

image.png

再查看虚拟网络编辑器


image.png

配置一下子网ip和子网掩码


image.png

然后修改每台虚拟机的这个文件,配置一下ip
sudo vim /etc/network/interfaces

image.png
auto lo
iface lo inet loopback
auto ens33
iface ens33 inet static
address 192.168.92.141 #ip地址
netmask 255.255.255.0 #子网掩码
gateway 192.168.92.2 #网关
dns-nameservers 192.168.92.2 #dns服务器地址

配置完之后再修改每台主机的/etc/hosts文件,将自己配置的ip地址和自己想的域名映射上去,这样之后就可以用域名进行访问了

image.png
2. 修改hadoop配置

对伪分布式下的配置进行修改以变成分布式

  1. core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
        <property>
                <!--hadoop文件系统地址-->
                <name>fs.defaultFS</name>
                <value>hdfs://hadoop01:8020/</value>
        </property>
        <property>
                <!--hadoop文件系统文件的存放目录-->
                <name>hadoop.tmp.dir</name>
                <value>/data/hadoop</value>
        </property>
</configuration>  
  1. hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
        <property>
            <!--hadoop的文件副本数-->
             <name>dfs.replication</name>
             <value>3</value>
        </property>
        <property>
            <!--辅助名称节点的webui访问地址-->
            <name>dfs.namenode.secondary.http-address</name>
            <value>hadoop05:50090</value>
        </property>
</configuration>
  1. mapred-site.xml

不做更改

  1. yarn-site.xml
<?xml version="1.0"?>
<configuration>
    <property>
        <!--yarn的资源管理主机地址-->
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop01</value>
    </property>
    <property>
        <!--NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序-->
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
 </configuration>
  1. slaves
    这个配置文件是用来配置所有数据节点的


    image.png

将数据节点三个hadoop02、hadoop03、hadoop04写入即可

3.同步文件

修改完hadoop配置之后需要将配置同步到所有节点。

如果在每个节点中都去vim编辑修改的话,无疑是一个很让人烦躁的工作。

我们可以通过rsync这个工具把文件同步到其他节点上

在使用这个工具之前,先配置一下免密登录,以便之后不需要每次都去输入密码。我以hadoop01这台机器为主机,执行下述命令,以使hadoop01可以免密登录到hadoop02、hadoop03、hadoop04、hadoop05上

ssh-keygen -t rsa  #生成密钥
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop02 #将密钥添加到远程机器hadoop02上
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop03 #将密钥添加到远程机器hadoop03上
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop04 #将密钥添加到远程机器hadoop04上
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop05 #将密钥添加到远程机器hadoop05上
ssh hadoop02 #这样就可以不用输入密码登录到hadoop02上(第一次使用还是需要输入密码的,之后就不需要了)

免密登录配置完成之后,下面我们可以使用如下命令,将指定文件同步到其他机器上

rsync -rvl 文件路径 user@host:文件路径
rsync -rvl /data/hadoop/etc/hadoop/ hadoop@hadoop01:/data/hadoop/etc/hadoop/

我们有四个节点,同步一个文件或者目录也需要执行四次,也是比较麻烦的,根据这个命令的固定格式,我们可以写一个脚本文件,只调用一次就可以完成所有节点的同步。

可以在/usr/local/sbin下建立一个文件,命名为mysync。这个目录默认是配置在环境变量下的,在其下的可执行脚本可以在任意处执行。
sudo touch /usr/local/sbin/mysync

然后给其赋予执行权限

sudo chmod a+x /usr/local/sbin/mysync

脚本内容如下

#!/bin/bash
pcount=$#
#如果没有参数,那么给出提示
if((pcount < 1));then
 echo no args
 exit;
fi
#如果给出了路径,获取其绝对路径
p1=$1;
#获取文件名
fname=`basename $p1` 
#获取目录名
dname=`cd -P $(dirname $p1);pwd`
#获取当前用户
cuser=`whoami`;
#循环节点,同步文件,用于hadoop01节点
for((host=2;host < 6;host=host+1));do
  echo -------------  start send hadoop0$host    --------------------
  rsync -rvl $dname/$fname $cuser@hadoop0$host:$dname
  echo -------------    finished hadoop0$host    --------------------
done

这样我们只需执行一下 mysync /data/software/hadoop/etc/hadoop即可将文件同步到所有节点上了

image.png

同样的我们根据这个可以再写一个脚本,用于所有节点的命令的调用
sudo touch /usr/local/sbin/mycall
sudo chmod a+x /usr/local/sbin/mycall

脚本内容如下

#!/bin/bash
pcount=$#
if(( pcount < 1));then
   echo no args
   exit;
fi

for((host=1;host<6;host=host+1));do
  echo ------- start operate hadoop0$host  -----------
  #ssh远程执行命令
  ssh hadoop0$host $@
  echo -------   finished hadoop@$host     ------------
done

这样我们就可以看到每个节点的命令执行情况了

image.png
4.启动hadoop

所有节点文件同步完成之后

然后清空一下每台机器下的/data/hadoop目录

rm -rf /data/hadoop

因为克隆过去的时候将之前hadoop01的机器的节点信息带过去了,不删除的话可能会导致启动出错

然后再hadoop namenode -format格式化一下文件,然后start-all.sh启动hadoop

image.png

使用刚才写的脚本,看一下每一个节点启动的进程情况
mycall jps

image.png

可以看到hadoop01启动了名称节点和资源管理器节点,由hadoop01进行统一调度,hadoop02、hadoop03、hadoop04三个节点启动了数据节点和节点管理器,用于数据的存储和被调度,hadoop05启动了辅助名称节点,用于同步名称节点的数据。至此,hadoop的分布式搭建完成

可以通过webui查看节点情况


image.png

其他的webui端口
secondNamenode 50090
datanode 50075

三 hadoop的文档

可以访问http://hadoop.apache.org/docs/r2.9.0/获取hadoop 2.9.0的文档
对hdfs和mapreduce都有很好的说明

image.png

最下方有四个配置文件的所有配置项的说明。


image.png
上一篇下一篇

猜你喜欢

热点阅读