Hadoop初识

一、JDK安装和Hadoop安装

    · 将我们的开发工具加压进去,配置环境

    Hadoop初识

    修改之后需要进行 source /etc/profile

    出现下面两个才算正常

    Hadoop初识

二、Hadoop的三种运行模式

    1、本地模式

    2、伪分布式运行模式

    3、完全分布式运行模式(开发重点)

三、完全分布式运行模式

    1、集群分发脚本

        1)scp(secure copy)安全拷贝、

            · scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)

            · scp -r $pdir/$fname  [email protected]$host:$pdir/$fname

            Hadoop初识

        2)rsync 远程同步工具

            · rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

            · rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

            · rsync  -av  $pdir/$fname   [email protected]$host:$pdir/$fname

                -a 归档拷贝

                -v 显示复制过程

            · xsync集群分发脚本

                需求:循环复制文件到所有的节点相同的目录下

#!/bin/bash

#1 获取输入参数个数,如果没有参数,直接退出

pcount=$#

if ((pcount==0)); then

echo no args;

exit;

fi

#2 获取文件名称

p1=$1

fname=`basename $p1`

echo fname=$fname

#3 获取上级目录到绝对路径

pdir=`cd -P $(dirname $p1); pwd`

echo pdir=$pdir

#4 获取当前用户名称

user=`whoami`

#5 循环

for((host=101; host<104; host++)); do

        echo ------------------- hadoop$host --------------

        rsync -av $pdir/$fname [email protected]$host:$pdir

done

        · 写完后修改该脚本具有可执行的权限

          chmod +x xsync

四、集群开始搭建

    1、虚拟机准备:hadoop101,hadoop102,hadoop103

    2、hadoop101作为我们的NameNode , hadoop101,102,103同时作为DataNode

    3、在hadoop101上做配置。修改7个配置文件。源文件中没有mapred-site.xml文件,但是有mapred-site.xml.template文件。我们修改这个文件的文件名。

    Hadoop初识

 

     配置内容如下:

    core-site.xml

        <!-- 指定HDFS中NameNode的地址 -->

        <property>

            <name>fs.defaultFS</name>

            <value>hdfs://hadoop101:9000</value>

        </property>

        <!-- 指定Hadoop运行时产生文件的存储目录 -->

        <property>

            <name>hadoop.tmp.dir</name>

            <value>/opt/module/hadoop-2.7.2/data/tmp</value>

        </property>

    hdfs-site.xml       

 <!-- 数据的副本数量 -->

        <property>

            <name>dfs.replication</name>

            <value>3</value>

        </property>

        <!-- 指定Hadoop辅助名称节点主机配置 -->

        <property>

              <name>dfs.namenode.secondary.http-address</name>

              <value>hadoop102:50090</value>

        </property>

    yarn-site.xml      

 <!-- Reducer获取数据的方式 -->

        <property>

                <name>yarn.nodemanager.aux-services</name>

                <value>mapreduce_shuffle</value>

        </property>

        <!-- 指定YARN的ResourceManager的地址 -->

        <property>

            <name>yarn.resourcemanager.hostname</name>

            <value>hadoop103</value>

        </property>

        <!-- 日志聚集功能使能 -->

        <property>

            <name>yarn.log-aggregation-enable</name>

            <value>true</value>

        </property>

        <!-- 日志保留时间设置7天 -->

        <property>

            <name>yarn.log-aggregation.retain-seconds</name>

            <value>604800</value>

        </property>

    mapred-site.xml    

<property>

        <name>mapreduce.framework.name</name>

        <value>yarn</value>

    </property>

    <!-- 历史服务器端地址 -->

    <property>

        <name>mapreduce.jobhistory.address</name>

        <value>hadoop102:10020</value>

    </property>

    <!-- 历史服务器web端地址 -->

    <property>

        <name>mapreduce.jobhistory.webapp.address</name>

        <value>hadoop102:19888</value>

    </property>

    在其他的*-env.sh文件中,添加JAVA_HOME的绝对路径。因为在进行免密操作时,系统无法加载 /etc/profile文件。也就找不到Java的bin文件。

export JAVA_HOME=/opt/module/jdk1.8.0_201

4、当我们的配置文件配置好以后,我们主要对主机(NameNode)做格式化操作

hdfs namenode -format

然后,他会出现一堆的信息,都不管。看到这个

Hadoop初识

看到这个就好了。这个 successfully很厉害的。

注意:我们只能做一次初始化操作,如果后面又做了一次,就请删除每个机器的hadoop文件下的logs,data文件,再次执行初始化操作。

5、要想同时启动三个从机,还需要配置一下slaves

hadoop101

hadoop102

hadoop103

6、将我们的配置好的文件-etc发布到我们的集群从机中。

xsync etc

如果出现:

Hadoop初识

说明我们目标文件夹权限或者用户不对。修改文件的用户属性

sudo chown -R atguigu:atguigu *

在查看下文件属性

Hadoop初识

和我们的源文件保持一致即可。

7、集群启动

在Hadoop101上启动hdfs

start-dfs.sh

在配置了Resourcemanager机器上执行Hadoop103

start-yarn.sh

在hadoop102上启动我们的历史服务器

mr-jobhistory-daemon.sh start historyserver

在hadoop101中的hadoop文件目录中,创建一个input,并添加内容

mkdir input

vim input/inputcd 

abc

def efg

asd

将创建的文件进行上传

hadoop fs -put input /

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output

集群的关闭指令

关 stop-dfs.sh stop-yarn.sh

hadoop-daemon.sh start namenode或datanode

yarn-daemon.sh start resourcemanager或nodemanager

如果集群出了问题

stop-dfs.sh

stop-yarn.sh

cd $HADOOP_HOME

rm -rf data logs

然后,在重来。

8、看效果

    Hadoop集群的搭建效果

Hadoop初识

    文件夹浏览

Hadoop初识

 

9、至此,我们的Hadoop的集群环境便搭建好了

10、那些年集群搭建遇见的坑

    1)当hadoop101再次执行namenode的格式化操作后,会导致namenode的clusterID与datanode的clusterID不匹配。因而导致datanode自杀。因此,

    namenode只能格式化一次。

        · 简单粗暴的方法,把三台机子的data和logs删除

        · 

    2)当进行同步整个hadoop文件夹时,会出现:明明启动了三个hadoop,可是却只有两个hadoop可看到,并且这两个hadoop看运气更换。即三个hadoop中的任两个。

    这是因为三个文件的VERSION版本是一样的。有冲突的时候可能会出现UID冲突,导致机器挂掉。

11、集群时间同步

    1)先关闭主机的hadoop101的ntp服务。修改文件如下

    sudo vim /etc/ntp.conf

    修改内容如下

        a)修改1(授权192.168.1.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间)

        #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap为

        restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

        b)修改2(集群在局域网中,不使用其他互联网上的时间)

        server 0.centos.pool.ntp.org iburst

        server 1.centos.pool.ntp.org iburst

        server 2.centos.pool.ntp.org iburst

        server 3.centos.pool.ntp.org iburst为

        #server 0.centos.pool.ntp.org iburst

        #server 1.centos.pool.ntp.org iburst

        #server 2.centos.pool.ntp.org iburst

        #server 3.centos.pool.ntp.org iburst

        c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)

        server 127.127.1.0

        fudge 127.127.1.0 stratum 10

    sudo vim /etc/sysconfig/ntpd

    增加内容如下(让硬件时间与系统时间一起同步)

    SYNC_HWCLOCK=yes

    重新启动ntpd服务,并设置开机自启。

    2)配置其他从机

    sudo crontab -e

    如果出现同步不成功给的情况,请记住,没有事重启解决不了的。如果解决不了,那就在重启一次。