搭建hadoop环境

 

1、解压Hadoop的安装包,解压到modules文件夹中。(安装包下载地址:http://archive.apache.org/dist/hadoop/core/hadoop-2.7.2/
  $ tar -zxf /softwares/installations/hadoop-2.7.2.tar.gz -C /modules/
  查看hadoop是不是64位:
  在hadoop-2.7.2/lib/native 下,执行file libhadoop.so.1.0.0


2、删除/home/admin/modules/hadoop-2.7.2/etc/hadoop目录下,cmd文件
  $ rm -rf *.cmd
  重命名文件
  $ mv mapred-site.xml.template mapred-site.xml


3、配置文件:/home/admin/modules/hadoop-2.7.2/etc/hadoop
  配置结果:
  Linux01 : namenode、datanode、nodeManager
  Linux02 : resourceManager、datanode、nodeManager
  Linux03 : datanode、nodeManager

  evn文件:把JAVA_HOME 环境变量改为,实际路径
    hadoop-env.sh
      修改# export JAVA_HOME=$JAVA_HOME
      为:export JAVA_HOME=/home/admin/modules/jdk1.8.0_191
    mapred-env.sh
      修改# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
      为:export JAVA_HOME=/home/admin/modules/jdk1.8.0_191
    yarn-env.sh
      修改# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
      为:export JAVA_HOME=/home/admin/modules/jdk1.8.0_191
  site文件:(参考官网文档:https://hadoop.apache.org/docs/r2.7.2/
    core-site.xml
      在https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/core-default.xml中,
      fs.defaultFS 是用来配置namenode的路径的,是namenodeRPC通信地址。value:hadf://linux01:8020
      RPC是跨进程通信协议
      hadoop.tmp.dir是用来配置文件最终存储位置。value:haoop根目录/hoadoop-data
      <configuration>
        <property>
          <name>fs.defaultFS</name>
          <value>hdfs://linux01:8020</value>
        </property>
        <property>
          <name>hadoop.tmp.dir</name>
          <value>/home/admin/modules/hadoop-2.7.2/hadoop-data</value>
        </property>
      </configuration>
    hdfs-site.xml
      <configuration>
        <!-- 指定数据冗余份数,默认3份,会占用磁盘空间 -->
        <property>
          <name>dfs.replication</name>
          <value>1</value>
        </property>
        <!-- 关闭权限检查,非hadoop用户不可以操作hadoop集群 -->
        <property>
          <name>dfs.permissions.enabled</name>
          <value>false</value>
        </property>
        <!-- 配置namenode,减少namenode的压力 -->
        <property>
          <name>dfs.namenode.secondary.http-address</name>
          <value>linux03:50090</value>
        </property>
        <!-- namenode网页地址 -->
        <property>
          <name>dfs.namenode.http-address</name>
          <value>linux01:50070</value>
        </property>
        <!-- 浏览hdfs的方式,一种是webhdfs,一种格式https -->
        <property>
          <name>dfs.webhdfs.enabled</name>
          <value>true</value>
        </property>
    </configuration>
  mapred-site.xml
    <configuration>
      <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
      </property>
      <!-- 配置mapreduce的历史服务端口,产生的日志服务 -->
      <property>
        <name>mapreduce.jobhistory.address</name>
        <value>linux01:10020</value>
      </property>
      <!-- 配置mapreduce的历史服务页面端口,产生的日志服务 -->
      <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>linux01:19888</value>
      </property>
    </configuration>
  yarn-site.xml
    <configuration>
      <!-- 是否允许调度mapreduce的shuffle过程 -->
      <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
      </property>
      <!-- 配置mapreduce到linux02 -->
      <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>linux02</value>
      </property>
      <!-- -->
      <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
      </property>
      <!-- -->
      <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>86400</value>
      </property>
      <!-- -->
      <property>
        <name>yarn.log.server.url</name>
        <value>http://linux01:19888/jobhistory/logs/</value>
      </property>
    </configuration>
  slaves文件:配置三台从节点,配置三台虚拟机的名称

    linux01
    linux02
    linux03

    配置datanode和nodeManager从节点

4、分发,将hadoop安装包,分发到linux02、Linux03(在modules目录,执行

  scp -r hadoop-2.7.2/ linux02:/home/admin/modules
  scp -r hadoop-2.7.2/ linux03:/home/admin/modules
    说明:scp 命令是跨服务器复制文件。


5、格式化namenode (在hadoop的根目录下执行)
  linux01: bin/hdfs namenode -format


6、启动服务,(在hadoop根目录执行
  HDFS:
    linux01:$ sbin/start-dfs.sh
    相当于:
    $ sbin/hadoop-daemon.sh start namenode 开namenode的命令
    $ sbin/hadoop-daemon.sh start datanode 开namenode的命令
  YARN: (在resourceManager所在的机器上启动)
    linux02:$ sbin/start-yarn.sh
  JobHistory:
    linux01:$ sbin/mr-jobhistory-daemon.sh start historyserver

  如果因为断电关系,造成启动过程中,发现NameNode已启动的提示。

    处理方式:删除/tmp下namenode对应的pid文件,rm -rf /tmp/hadoop-namenode.pid


7、启动检测(如果无法访问,请在windows的hosts文件中,配置虚拟机名称及对应的ip)
  浏览器访问:http://linux01:50070
    检查概览overview下的安全模式safemode一定要关闭,如果是打开的,说明有问题,安全模式数据只能读取,不能写入。
    datenode节点有三台服务器
    utilties中输入hdfs根目录/

  浏览器访问:http://linux02:8088

    8088是默认端口。点击左侧Notes选项,查看三台服务器的noteManager是否已经是Running状态,在判断资源是否不足。

  判断集群是否开启正确,输入命令 jps
    说明:jps是查看所有java进程的命令

 

8、测试成功后,配置工具脚本

  系统变量与用户变量

    使用xshell开启一个远程回话时,linux01 SSH linux02 默认加载用户变量配置文件,不会加载系统变量。

      /etc/profile (系统变量)

      /home/admin/.bash_profile (用户变量)

      /home/admin/.bashrc (用户变量)

    执行命令,配置系统变量中的环境变量到用户变量配置文件中:(三台linux都执行)

      $ cat /etc/profile >> .bashrc (在/home/admin下执行,把profile中内容,追加到.bashrc)

  编写shell脚本,查看三台服务器的jsp状态:

    #!/bin/bash

    # admin为用户名。
    for i in admin@linux01 admin@linux02 admin@linux03
    do
      echo "=============$i================"
      ssh $i 'jps'
    done

  编写shell脚本,在第一台及其执行脚本,启动hadoop所有节点:

    #!/bin/bash

    #HDFS
    modules/hadoop-2.7.2/sbin/start-dfs.sh

    #YARN
    ssh admin@linux02 modules/hadoop-2.7.2/sbin/start-yarn.sh

    #JobHistory
    modules/hadoop-2.7.2/sbin//mr-jobhistory-daemon.sh start historyserver