hadoop部署(伪分布式,分布式)

hadoop由三种模型:
一、单机模型:测试使用
二、伪分布式模型:运行于单机
三、分布式模型:real集群模型java

1、伪分布式

hadoop基于java语言;
hadoop-2.6 —– jdk 1.6+
hadoop-2.7 —– jdk1.7+node

一、安装hadoop并设置其所需的环境变量

解压安装包至以下目录
[root@server2 ~]# mkdir /bdapps
[root@server2 bdapps]# tar zxf jdk-7u79-linux-x64.tar.gz 
[root@server2 bdapps]# ln -sv hadoop-2.7.3/ hadoop
[root@server2 bdapps]# tar zxf jdk-7u79-linux-x64.tar.gz 
[root@server2 bdapps]# ln -sv jdk1.7.0_79/ jdk
/etc/profie.d/hadoop.sh里面设置环境变量,设定hadoop的运行环境:

这里写图片描述

设置java运行环境:

这里写图片描述
这里写图片描述
这里写图片描述

二、建立hadoop进程的用户及相关目录

出于安全考虑,通常用特定用户来运行hadoop的不一样守护进程,分别用yarn,hdfs,mapred来运行其相应进程。

这里写图片描述

建立数据目录和日志目录:

这里写图片描述

在安装目录下建立logs目录,并修改hadoop全部文件的属主属组。

这里写图片描述
这里写图片描述

三、配置hadoop

etc/hadoop/core-site.xml文件包含了NameNode主机地址,监听端口等信息,对于伪分布式模型来讲,其主机地址为localhost,NameNode默认使用的端口为8020。
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:8020</value>
        <final>true</final>
    </property>
</configuration>
etc/hadoop/hdfs-site.xml用于配置/HDFS的相关属性,例如数据块的副本参数,NN和DN用于存储数据的目录,=。数据块的副本对于伪分布式来讲应该为1,而NN和DN用于存储数据的目录为前面专门为其建立的路径,前面的步骤也为SNN建立了相关目录,这里也一并设置其为启用状态。
```
<configuration>
 <property>
      <name>dfs.replication</name>
      <value>1</value>
 </property>
 <property>
       <name>dfs.namenode.name.dir</name>
       <value>file:///data/hadoop/hdfs/nn</value>
 </property>
 <property>
       <name>dfs.datanode.data.dir</name>
       <value>file:///data/hadoop/hdfs/dn</value>
 </property>
 <property>
       <name>fs.checkpoint.data.dir</name>
       <value>file:///data/hadoop/hdfs/snn</value>
 </property>
 <property>
       <name>fs.checkpoint.edits.dir</name>
       <value>file:///data/hadoop/hdfs/snn</value>
 </property>
</configuration>
etc/hadoop/mapred-site.xml文件用于配置集群的MapReduce,framework,此处应该使用yarn,另外可以使用的值还有local和classic,mapred-site.xml默认不存在,但有模块文件mapred-site.xml.template,将其复制成mapred-site.xml便可
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>
etc/hadoop/yarn-site.xml用于配置YARN进程及YARN相关属性。首先要指明ResourceManager守护进程的主机和监听的端口,对于伪分布式模型来说。其主机为localhost,默认端口为8032,其次须要指定ResourceManager使用的scheduler,一及NodeManager的辅助服务。
<configuration>
        <property>
                <name>yarn.resourcemanager.address</name>
                <value>localhost:8032</value>
        </property>

        <property>
                <name>yarn.resourcemanager.scheduler.address</name>
                <value>localhost:8030</value>
        </property>
        <property>
                <name>yarn.resourcemanager.resource-tracker.address</name>
                <value>localhost:8031</value>
        </property>
        <property>
                <name>yarn.resourcemanager.admin.address</name>
                <value>localhost:8033</value>
        </property>
        <property>
                <name>yarn.resourcemanager.webapp.address</name>
                <value>localhost:8088</value>
       </property>     
       <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.scheduler.class</name>
                <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
        </property>
</configuration>
Hadoop的各守护进程依赖与JAVA_HOME环境,可经过前面的/etc/profile.d/java.sh来进行全局配置定义的JAVA_HOME变量便可,不过,若是向为Hadoop定义特色的JAVA环境,则须要编辑etc/hadoop/hadoop-env.shetc/hadoop/yarn-env.sh,将其JAVA_HOME配置成合适的值便可。若是须要堆内存值,也能够修改这两个文件。
slave文件:存储当前集群全部slave节点的列表,对于伪分布式来讲,其值应为localhost。

四、格式化HDFS

在HDFS的NN启动以前须要先初始化其用于存储数据目录,若是hdfs-site.xml中dfs.namenode.name.dir属性指定的目录不存在,格式化命令会自动建立之;若是存在,请确保其权限设置正确,此时格式操做会清除其内部全部的数据并从新创建一个新的文件系统。

hdfs命令对于不一样身份的用户来讲可以使用的命令不一样linux

User Commands
    dfs
    fetchdt
    fsck
    version
Administration Commands
    balancer
    datanode
    dfsadmin
    mover
    namenode
    secondarynamenode
须要以hdfs用户的身份执行以下命令
[root@server2 hadoop]# su - hdfs
[hdfs@server2 ~]$ hdfs namenode -format

在屏幕上输出这样一句话表示格式化成功
这里写图片描述
在咱们nn目录下也会出现映像文件(fsimage),用于将数据持久化
这里写图片描述web

五、启动hadoop

hadoop2的启动可经过操做位于sbin路径下的专用脚本进行:apache

NameNode:sbin/hadoop-daemon.sh (start|stop) namenode
DataNode: sbin/hadoop-daemon.sh (start|stop) datanode
Secondary NameNode: sbin/hadoop-daemon.sh (start|stop) secondarynamenode
ResourceManager: sbin/yarn-daemon.sh (start|stop) resourcemanager
NodeManager: sbin/yarn-daemon.sh (start|stop) nodemanager
启动HDFS服务

HDFS有三个守护进程,nameNode,dataNode,secondarynamenode,它们均可以经过sbin/hadoop-daemon.sh 脚原本启动或中止。以hdfs用户身份执行便可
这里写图片描述
这里写图片描述vim

这里写图片描述
这里写图片描述

如今咱们就以上传文件了
这里写图片描述安全

能够看到,这里新建的目录属组为supergroup,并非hadoop组,意味者咱们以前加入hadoop组的用户对此目录没有写权限。要想其余用户对hdfs有写权限,则须要在hdfs-site.xml添加一项属性定义ruby

<property>
    <name>dfs.permissions</name>
    <value>false</value>
</property>

递归显示目录
这里写图片描述
这里写图片描述bash

上传完文件咱们就能够在dn目录下看到数据了,这是在本地文件系统路径下查看
这里写图片描述app

使用dfs访问接口查看
这里写图片描述

由此能够说明任何分布式文件系统最终都应存储与本地文件系统路径上。

能够看到nn,snn下面出现了一些fsimage文件和edits文件
snn的功能是将fsimage文件从nn上拿出来放再本地,再将当前的EditLog取出来放在本地,而后将edits中的内容合并成为一个新的fsimage,再将这个新的fsimage发送给nn,将原来的fsimage覆盖掉。
这里写图片描述

启动YARN集群
这里写图片描述

六、WEB UI浏览
HDFS和YARN ResourceManager各自提供了web接口,经过这些接口可查看HDFS集群和YARN集群的状态信息,访问方式:

HDFS-NameNode  :http://<NameNodeHost>:50070
YARN-ResourceManager : http://<ResourceManagerHost>:8088

注意:yran-site.xml文件若是yarn.resourcemanager.webapp.address属性的值若是定义成“localhost:8088“,则其只监听在127.0.0.1地址的8088端口上
我这里就设置的是localhost
这里写图片描述
因此能够看到8088端口监听在127.0.0.1上
这里写图片描述
将localhost修改成本地ip,重启resourcemanager就能够了
这里写图片描述
这里写图片描述

这里写图片描述

七、给hadoop提交程序并运行。
Hadoop-YARN自带了许多样程序示例,他们位于hadoop/share/hadoop/mapreduce目录里,其中 hadoop-mapreduce-examples-2.7.3.jar能够做为maoreduce程序测试。

[root@server2 mapreduce]# su - hdfs #由于运行程序时须要对dn节点进行操做,所于切换至hdfs用户
[hdfs@server2 ~]$ yarn jar /bdapps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar

咱们能够经过此程序 作以下任务
这里写图片描述

例如:对/test/fstab 中的文件进行单词统计,将统计结果放在/test/fstab1下

[hdfs@server2 ~]$ yarn jar /bdapps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /test/fstab /test/fstab1

最后由这样的字样输出就算是统计成功
这里写图片描述
能够看到统计结果
这里写图片描述

分布式:

dn磁盘无需工做于raid模式,自身就 存在repication机制。
snn与nn应该分开位于不一样的节点上,不然没意义。
dn节点:datanode进程,nodemanager进程。
nn节点:namenode进程
snn节点:snn进程。
resourcemanager节点:resourcemanager进程

咱们接下来配置有一个主节点和三个从节点的Hadoop-YARN集群,集群中的全部节点必须拥有惟一的主机名和IP地址,而且可以基于主机互相通讯。

经过/etc/hosts文件进行解析 ,server3为主节点(NN,SNN,RM),有一个master别名名,server4(DN,NM),server5,server6为从节点

一、在每一个节点的/etc/hosts文件上都进行以下的配置:

172.25.44.3  server3  master
172.25.44.4  server4
172.25.44.5 server5
172.25.44.6 server6

二、若是须要 master可以启动或中止整个集群,还需在master上配置用于运行各服务的用户(yarn,hdfs)能以密钥认证(passwordless)的方式经过ssh远程链接至各从节点。这里咱们全部的节点上的全部进程都以hadoop身份运行。

在每个节点上都建立hadoop用户

~]# useradd hadoop
 ~]# echo hadoop | passwd --stdin hadoop

在master节点上:

[root@server3 ~]# su - hadoop
[hadoop@server3 ~]$ ssh-keygen -t rsa -P ''
[hadoop@server3 ~]$ for i in 4 5 6;do ssh-copy-id -i ./.ssh/id_rsa.pub hadoop@server${i};done

三、设置各节点时间同步
各节点安装ntp包

~]# yum install ntp -y

server3:

server 172.25.44.250 iburst

其余节点:

vim /etc/ntp.conf 
server 172.25.44.3

在serevr3上启动服务:

[root@server3 ~]# /etc/init.d/ntpd start

其它节点查看同步信息

~]# ntpdate server3
 4 Sep 16:35:38 ntpdate[1498]: step time server 172.25.44.3 offset 0.549639 sec

四、在各节点安装hadoop并配置所需的环境变量
这里写图片描述

配置hadoop运行环境

[root@server3 hadoop]# vim /etc/profile.d/hadoop.sh
export HADOOP_PREFIX=/bdapps/hadoop
export PATH=$PATH:${HADOOP_PREFIX}/bin:${HADOOP_PREFIX}/sbin
export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
export HADOOP_YARN_HOME=${HADOOP_PREFIX}
export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
export HADOOP_MAPRED_HOME=${HADOOP_PREFIX}
[root@server3 hadoop]# . /etc/profile.d/hadoop.sh

配置java运行环境

[root@server3 bdapps]# vim /etc/profile.d/java.sh
export JAVA_HOME=/bdapps/jdk
export PATH=${PATH}:${JAVA_HOME}/bin:${JAVA_HOME}:/sbin
[root@server3 bdapps]# . /etc/profile.d/java.sh

这里写图片描述

建立存放数据目录,并修改其属性信息
主节点
这里写图片描述
从节点
这里写图片描述

在全部节点的安装目录下建立logs目录,修改logs目录的权限,并修改hadoop全部文件的属主属组。

[root@server3 bdapps]# cd hadoop
[root@server3 hadoop]# ls
bin  etc  include  lib  libexec  LICENSE.txt  NOTICE.txt  README.txt  sbin  share
[root@server3 hadoop]# mkdir logs
[root@server3 hadoop]# chown -R hadoop.hadoop ./*
[root@server3 hadoop]# chmod g+w logs/

配置hadoop
配置主节点:

配置core-site.xml ,指定nn的位置。
这里写图片描述
配置yarn-site.xml,指定ResourceManager的位置

<configuration>
        <property>
         <name>yarn.resourcemanager.address</name>
         <value>master:8032</value>
         </property>
        <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master:8030</value>
        </property>
        <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master:8031</value>
        </property>
        <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>master:8033</value>
        </property>
        <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master:8088</value>
        </property>
        <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.scheduler.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
        </property>
</configuration>

配置hdfs-site.xml

<configuration>
 <property>
 <name>dfs.replication</name>
 <value>2</value>   #这里咱们定义两个副本
 </property>
 <property>
 <name>dfs.namenode.name.dir</name>
 <value>file:///data/hadoop/hdfs/nn</value>
 </property>
 <property>
 <name>fs.checkpoint.data.dir</name>
 <value>file:///data/hadoop/hdfs/snn</value>
 </property>
 <property>
 <name>fs.checkpoint.edits.dir</name>
 <value>file:///data/hadoop/hdfs/snn</value>
 </property>
</configuration>

配置mapred-site.xml

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

配置slave
这里写图片描述

配置从节点:
从节点只需配置hdfs-site.xml文件,其余的配置与主节点一致。

<configuration>
 <property>
 <name>dfs.replication</name>
 <value>2</value>
 </property>
 <property>
 <name>dfs.datanode.data.dir</name>
 <value>file:///data/hadoop/hdfs/dn</value>
 </property>
</configuration>

三、格式化HDFS
主节点

[root@server3 hadoop]# su - hadoop
[hadoop@server3 ~]$ hdfs namenode -format

显示Storage directory /data/hadoop/hdfs/nn has been successfully formatted.表示成功
这时nn目录下已经有数据了
这里写图片描述
四、启动Hadoop进程
启动Hadoop-YARN集群有两种方法:1、在各节点分别启动须要启动的服务,2、在master上启动整个集群。
(1)分别启动
master节点须要启动HDFS的NameNode服务,以及YARN的ResourceManager服务,启动hdfs须要以hdfs身份进行,启动yarn须要以yarn身份进行,这里咱们全部的进程都是以hadoop身份运行的。

[root@server3 ~]$ su - hadoop -c 'hadoop-daemon.sh start namenode'
[root@server3 ~]$ su - hadoop -c 'yarn-daemon.sh start resourcemanager'

各slave节点须要启动DataNode服务(hdfs身份)和NodeManager(yarn身份)服务

[root@server4 hadoop]# su - hadoop -c 'hadoop-daemon.sh start datanode'
[root@server4 hadoop]# su - hadoop -c 'yarn-daemon.sh start nodemanager'

(2)在master节点上控制整个集群
集群规模较大时,分别在各个节点上启动服务太过于繁琐和低效,为此,hadoop专门提供了start-dfs.sh和stop-dfs.sh来启动和中止整个hdfs集群,以及start-yarn.sh和stop-yarn.sh来启动和中止整个yarn集群。
在master节点上

[root@server3 ~]$ su - hadoop -c 'start-dfs.sh'
[root@server3 ~]$ su - hadoop -c 'start-yarn.sh'

启动完成后就能够jps查看了
这里写图片描述
这里写图片描述

五、上传文件
这里写图片描述

在从节点上能够看到数据,由于以前定义了副本数为2,因此只有两个从节点上有数据,具体在哪一个节点上由hadoop自行决定。
这里写图片描述
这里写图片描述
这里写图片描述
六、WEB UI浏览
能够看到50070和8088端口都已经监听。
这里写图片描述

这里写图片描述

查看Live Nodes,能够看待server4,server5上有数据,server6上没数据
这里写图片描述

当前Apps Subimitted为0
这里写图片描述

七、运行程序

[hadoop@server3 ~]$ yarn jar /bdapps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /test/fstab1 /test/haha

这里写图片描述

任务运行完成后
这里写图片描述

分布式Hadoop已经部署完成