Hadoop经过多年的发展,已经在大数据行业非常的成熟了和占据很高的地位,同时也发展到第三代大版本的更新,目前还是在存储占据主流的地位,对于学习和小项目的实施还是喜欢用原生轻量的方式来使用Hadoop。

环境

  1. CentOS7

  2. 三台服务器

    1. 172.25.10.31 hadoop01 主节点
    2. 172.26.10.34 hadoop02 从节点
    3. 172.26.10.33 hadoop03 从节点
  3. Java1.8+

  4. 服务器间的免密操作

  5. 配置/etc/profile

    1
    2
    3
    4
    5
    6
    
    #hadoop
    export HADOOP_HOME=/usr/local/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
    export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export HADOOP_CLASSPATH=`hadoop classpath`
    
  6. 拷贝/etc/hosts 和 /etc/profile 到服务器hadoop02 , hadoop03

安装

  • 官方下载安装包

    • https://hadoop.apache.org/releases.html
    • 根据自己的需求下载指定的安装包
    • ![image-20210609205049684](/Users/tangfei/Library/Application Support/typora-user-images/image-20210609205049684.png)
  • 上传hadoop01的服务器上解压

    • tar -xvf hadoop-3.2.2.tar.gz

    • 创建些文件夹

      1
      2
      3
      4
      5
      
      sudo mkdir -p /usr/local/hadoop
      sudo mkdir -p /usr/local/data/hadoop/name #NameNode 数据存放目录
      sudo mkdir -p /usr/local/data/hadoop/secondary #sudo mkdir -p /usr/local/data/hadoop/secondary
      sudo mkdir -p /usr/local/data/hadoop/data #DataNode 数据存放目录
      sudo mkdir -p /usr/local/data/hadoop/tmp #临时数据存放目录
      
    • 拷贝解压后的所有文件到/usr/local/hadoop

      • mv /home/admin/hadoop-3.2.2/* /usr/local/hadoop/
  • 配置/usr/local/hadoop/etc/hadoop/hadoop-env.sh

    1
    2
    3
    4
    5
    6
    7
    
    export JAVA_HOME= 自己java的安装目录
      
    export HDFS_NAMENODE_USER="root"
    export HDFS_DATANODE_USER="root"
    export HDFS_SECONDARYNAMENODE_USER="root"
    export YARN_RESOURCEMANAGER_USER="root"
    export YARN_NODEMANAGER_USER="root"
    
  • 配置/usr/local/hadoop/etc/hadoop/core-site.xml

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    
    <configuration>
        <property>
            <name>fs.default.name</name>
            <value>hdfs://hadoop01:8020</value>
            <description>指定默认的访问地址以及端口号</description>
        </property>
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/usr/local/hadoop/data/</value>
            <description>其它临时目录的父目录,会被其它临时目录用到</description>
        </property>
        <property>
             <name>io.file.buffer.size</name>
             <value>131072</value>
            <description>在序列中使用的缓冲区大小</description>
        </property>
    </configuration>
    
  • 配置/usr/local/hadoop/etc/hadoop/hdfs-site.xml

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>3</value>
            <description>副本数,HDFS存储时的备份数量</description>
        </property>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>/usr/local/data/hadoop/name</value>
            <description>namenode临时文件所存放的目录</description>
        </property>
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>/usr/local/data/hadoop/data</value>
            <description>datanode临时文件所存放的目录</description>
        </property>
        <property>
            <name>dfs.namenode.http-address</name>
            <value>hadoop01:50070</value> 
            <description>hdfs web 地址</description>
        </property>
    </configuration>
    
  • 配置/usr/local/hadoop/etc/hadoop/yarn-site.xml

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    <configuration>
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
            <description>nomenodeManager获取数据的方式是shuffle</description>
        </property>
        <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>master</value>
            <description>指定Yarn的老大(ResourceManager)的地址</description>
        </property>
      
        <property>
              <name>yarn.resourcemanager.webapp.address</name>
              <value>192.168.192.164:8088</value>
            <description>配置 yarn 外部可访问,(外网IP:端口)</description>
        </property>
      
        <property>
            <name>yarn.nodemanager.env-whitelist</name>
        <value> JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ</value>
            <description>容器可能会覆盖的环境变量,而不是使用NodeManager的默认值</description>
        </property>
      
        <property>
           <name>yarn.nodemanager.vmem-check-enabled</name>
           <value>false</value>
            <description>关闭内存检测,虚拟机需要,不配会报错</description>
        </property>
      
    </configuration>
    
  • 配置/usr/local/hadoop/etc/hadoop/mapred-site.xml

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    <configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
            <description>告诉hadoop以后MR(Map/Reduce)运行在YARN上</description>
        </property>
          
       <property>
            <name>mapreduce.admin.user.env</name>
            <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
            <description>可以设置AM【AppMaster】端的环境变量,如果上面缺少配置,
            可能会造成mapreduce失败</description>
       </property>
      
       <property>
            <name>yarn.app.mapreduce.am.env</name>
            <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
            <description>可以设置AM【AppMaster】端的环境变量,如果上面缺少配置,
            可能会造成mapreduce失败</description>
       </property>
    </configuration>
    
  • 配置从节点/usr/local/hadoop/etc/hadoop/workers (hadoop3.0以后slaves更名为workers)

    1
    2
    
    hadoop02
    hadoop03
    
  • 拷贝文件/usr/local/hadoop 服务器hadoop02 , hadoop03上

    1
    2
    
    rsync -av /usr/local/hadoop hadoop02:/usr/local/hadoop
    rsync -av /usr/local/hadoop hadoop03:/usr/local/hadoop
    
  • NameNode做格式化

    1
    
    hdfs namenode -format
    
  • 启动集群

    1
    2
    3
    
    #推荐一个一个的启动,不要用全部启动
    start-dfs.sh
    start-yarn.sh
    
  • 验证

    • 访问50070端口 hdfs的UI
    • 访问8088 yarn的UI

命令

Yarn

1
2
#删除application
yarn application -kill + application id

FAQ

  1. hadoop2.0 和3.0的一些端口变化

    1
    2
    3
    
    Namenode ports: 50470 –> 9871, 50070 –> 9870, 8020 –> 9820
    Secondary NN ports: 50091 –> 9869, 50090 –> 9868
    Datanode ports: 50020 –> 9867, 50010 –> 9866, 50475 –> 9865, 50075 –> 9864
    
  2. 在页面上创建文件失败:Permission denied: user=dr.who, access=WRITE, inode=”/":root:supergroup:drwxr-xr-x

    1
    2
    
    #还可以根据实际情况给授权,这里是在要求不高的情况下执行的
    hadoop fs -chmod 777 /
    
  3. Couldn’t upload the file hadoop-3.2.2.tar.gz

    1
    2
    3
    4
    5
    
    这个可能是在远程的客户机上没有配置hosts的导致的
    需要在操作这个50070的页面的这台机器上配置下
    172.26.10.31 hadoop01
    172.26.10.32 hadoop02
    172.26.10.33 hadoop03