hadoop分布式环境搭建

369 阅读3分钟

Linux环境准备

使用的是Centos6,VMware15

关闭防火墙,禁止开机启动

sudo service iptables stop
sudo chkconfig iptables off

固定虚拟机IP

 vim /etc/sysconfig/network-scripts/ifcfg-eth0
 内容改为如下:
 DEVICE=eth0
 TYPE=Ethernet
 ONBOOT=yes
 BOOTPROTO=static
 NAME="eth0"
 IPADDR=192.168.140.128(这个要根据自己的机器而定)
 PREFIX=24
 GATEWAY=192.168.140.2(这个要根据自己的机器而定)
 DNS1=192.168.140.2(这个要根据自己的机器而定)

执行 service network restart(如果报错重启虚拟机)

修改hostname

vim /etc/sysconfig/network
改为:HOSTNAME=hadoop01

配置/etc/hosts

 vim /etc/hosts
 内容改为:
 192.168.140.128   hadoop01
 192.168.140.129   hadoop02
 192.168.140.130   hadoop03

创建一般用户hadoop,给他配置密码,sudo权限

useradd hadoop
passwd hadoop
#sudo 权限
vim /etc/sudoers
 在root    ALL=(ALL)       ALL
 添加hadoop    ALL=(ALL)       NOPASSWD:ALL
 保存时wq!强制保存

在/opt目录下创建两个文件夹module和software,并把所有权赋给hadoop

mkdir /opt/module /opt/software
chown hadoop:hadoop/opt/module /opt/software

到此一个符合我们使用的虚拟机已经完成,既然我要分布式部署hadoop所以还是准备3台为好。接下来关机克隆即可。

关机,快照,克隆

克隆后,将需要更改一下IP和hostname,参考步骤:***固定虚拟机IP***和***修改hostname***的步骤即可

编辑一个分发脚本,后面方便3台虚拟机文件的同步

cd ~
vim 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=2; host<4; host++)); do
      echo ------------------- hadoop0$host --------------
      rsync -av $pdir/$fname $user@hadoop0$host:$pdir
done

##授权
chmod +x xsync
  
sudo cp xsync /bin
  
sudo xsync /bin/xsync

配置免密登陆

  1. 生成密钥对
 ssh-keygen -t rsa #三次回车
  1. 发送公钥到本机
ssh-copy-id hadoop01 #输入一次密码
  1. 分别ssh登陆一下所有虚拟机
ssh hadoop02
exit
ssh hadoop03
exit
  1. 把/home/atguigu/.ssh 文件夹发送到集群所有服务器
xsync /home/hadoop/.ssh

Hadoop配置

在hadoop01机器上安装Java和Hadoop,并配置环境变量,并分发到集群其他机器

  1. 拷贝Java和Hadoop两个tar包文件到/opt/software,并解压到 /opt/module
tar -zxvf /opt/software/hadoop-2.7.2.tar.gz -C /opt/module/
tar -zxvf /opt/software/jdk-8u144-linux-x64.tar.gz -C /opt/module/
  1. 配置环境变量
sudo vim /etc/profile
#在文件末尾添加
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin

#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  1. 激活环境变量
source /etc/profile
  1. 分发java,Hadoop到hadoop02,hadoop03上
sudo xsync /etc/profile

#还需要在hadoop02,hadoop03上执行source /etc/profile

配置hadoop相关的xml

以下操作的hadoop相关的配置文件均在/opt/module/hadoop-2.7.2/etc/hadoop中

  1. 在hadoop-env.sh,yarn-env.sh,mapred-env.sh文件中配置Java_HOME
#在三个文件中添加
export JAVA_HOME=/opt/module/jdk1.8.0_144
  1. 配置Core-site.xml
        <!-- 指定HDFS中NameNode的地址 -->
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://hadoop01:9000</value>
        </property>

        <!-- 指定Hadoop运行时产生文件的存储目录 -->
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/opt/module/hadoop-2.7.2/data/tmp</value>
        </property>
  1. 配置hdfs-site.xml
        <!-- 数据的副本数量 -->
        <property>
            <name>dfs.replication</name>
            <value>3</value>
        </property>
        <!-- 指定Hadoop辅助名称节点主机配置 -->
        <property>
              <name>dfs.namenode.secondary.http-address</name>
              <value>hadoop03:50090</value>
        </property>
  1. 配置yarn-site.xml
        <!-- Site specific YARN configuration properties -->
        <!-- Reducer获取数据的方式 -->
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>

        <!-- 指定YARN的ResourceManager的地址 -->
        <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>hadoop02</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>

  1. 配置mapred-site.xml
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- 历史服务器端地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop03:10020</value>
    </property>
    <!-- 历史服务器web端地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop03:19888</value>
    </property>
  1. 配置Slaves
vim slaves
#内容添加
hadoop01
hadoop02
hadoop03
  1. 分发配置文件
 xsync /opt/module/hadoop-2.7.2/etc
  1. 在hadoop01上格式化Namenode ,然后启动
#通过上面的配置可以知道hadoop01为nameNode
hdfs namenode -format
sbin/start-dfs.sh
  1. 在配置了Resourcemanager机器上启动yarn
#如果是copy我的配置,则是在hadoop02上启动yarn
sbin/start-yarn.sh

可以访问http://hadoop01:50070 验证 10. 关闭

在namenode上执行(hadoop01)
 sbin/stop-dfs.sh  
 在yarn机器上执行(hadoop02)执行
 sbin/stop-yarn.sh