1. 准备阿里云ECS

  • 我使用的是Mac OS X 10.13,在终端中可以进行:
    • ssh连接远程服务器,
    • scp上传/下载远程服务器文件
  • 云服务器ECS * 3 共享基本型 - 1vCPU - 1Gib
  • PS:3个ECS需要在同一个地域,如华东1。因为不同地域的实例之间内网互不相通
  • 操作系统:CentOS 7.3 64位

  • 分配公网IPv4地址:理论上只需要1个ECS分配公网IP即可,3个ECS使用内网互通。之后需要进行设置内网互通,免费

    如果是3个不同账号/跨地域的ECS,也可以搭建

  • ESC设置内网互通,参考:阿里云帮助-同账号同地域VPC和VBR互通

2. SSH免密码登录

  • 关闭防火墙 3个ECS

    1
    2
    3
    4
    5
    #关闭防火墙
    systemctl stop firewalld.service
    #开机禁止启动
    systemctl disable firewalld.service
    firewall-cmd --state
  • 修改主机名称:此处我将3个ECS的主机名分别修改为hadoop01hadoop02hadoop03

    1
    2
    3
    4
    #将该文件中的内容修改为新的主机名
    sudo vim /etc/hostname
    #重启服务器生效
    reboot
  • 配置主机映射:由于内网互通,所以均填写的为ecs的内网IP。

    如果内网不互通,则自己主机的IP填写为内网IP,其他主机的IP填写为公网IP。

    1
    2
    3
    4
    5
    #在该文件内加入新的主机映射 内网ip 主机名
    vi /etc/hosts
    172.16.119.x hadoop01
    172.16.119.y hadoop02
    172.16.238.z hadoop03
  • 此时,ECS 之间ping对方的内网IP可以ping通。

    事实上我设置了阿里云的ECS内网互通之后就可以ping通内网IP了。

  • SSH免密码登录设置

    1
    2
    3
    4
    5
    ssh-keygen 					 #回车完成操作
    ssh-copy-id hadoop01 #拷贝公钥到需要免密码登录的目标服务器上
    ssh-copy-id hadoop02
    ssh-copy-id hadoop03
    ssh hadoop0x #使用`ssh 主机名`免密码登录目标服务器
  • ~/.ssh/下的文件功能

    1
    2
    3
    4
    5
    6
    7
    8
    cd ~/.ssh
    ls
    authorized_keys id_rsa id_rsa.pub known_hosts
    #~/.ssh的4个文件
    # known_hosts :记录ssh访问过计算机的公钥(public key)
    # id_rsa :生成的私钥
    # id_rsa.pub :生成的公钥
    # authorized_keys :存放授权过得无秘登录服务器公钥

3. 安装JDK与Hadoop

  • 在root用户下的opt文件夹中创建modulesoftware文件夹

    1
    2
    3
    cd /opt
    mkdir module #安装的JDK与Hadoop的位置
    mkdir software #安装包的存储位置
  • way1:将本地的JDK和Hadoop安装包上传到服务器

    1
    2
    3
    4
    #在mac os的本地用户的终端下使用scp上传安装包
    #scp 本地安装包路径 root@公网ip:存放文件夹路径
    scp /users/yi/Downloads/jdk-8u131-linux-x64.tar.gz root@123.56.135.146:/opt/software
    scp /users/yi/Downloads/hadoop-2.7.2.tar.gz root@123.56.135.146:/opt/software
  • way2:在ECS用户下使用wget下载安装包

    1
    2
    3
    4
    5
    6
    #wget 下载链接
    #我使用的是Hadoop2.7.2 与 Java 1.8.0_131
    #Hadoop2.x 与 Hadoop3.x 有区别
    cd /opt/software #下载的安装包的存放位置
    wget JDK‘s URL
    wget Hadoop‘s URL
  • /opt/module安装Hadoop与JDK

    1
    2
    3
    4
    cd /opt/software #安装包的位置
    # tar -zxvf 压缩包名称 -C 解压文件存放位置
    tar -zxvf jdk-8u131-linux-x64.tar.gz -C /opt/module/
    tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/
  • 配置hadoop中的hadoop-env.sh

    1
    2
    3
    4
    cd /opt/module/hadoop-2.7.2/etc/hadoop
    vi hadoop-env.sh
    #修改JAVA_HOME的值为/opt/module/jdk1.8.0_131
    export JAVA_HOME=/opt/module/jdk1.8.0_131
  • 配置Hadoop与JDK的环境变量

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    vi /etc/profile #在profile中加入以下环境变量

    ##JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_131
    export PATH=$JAVA_HOME/bin:$PATH
    ##HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop-2.7.2
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin

    source /etc/profile #让修改后的profile生效
    java -version #查询Java版本可以正确显示结果
    hadoop #显示Hadoop的使用方式

    如果不能查询Java版本和Hadoop指令,可以使用reboot重启服务器再进行尝试。

4. Hadoop完全分布式集群搭建

  • 修改/opt/module/hadoop-2.7.2/etc/hadoop文件夹中的配置文件

  • core-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <configuration>
    <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>
    </configuration>
  • hdfs-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <configuration>
    <property>
    <name>dfs.replication</name>
    <value>3</value>
    </property>
    <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop03:50090</value>
    </property>
    </configuration>
  • slaves

    1
    2
    3
    4
    #删掉了localhost,加入以下内容
    hadoop01
    hadoop02
    hadoop03
  • yarn-env.sh

    1
    2
    # 修改JAVA_HOME的值并取消注释#
    export JAVA_HOME=/opt/module/jdk1.8.0_131
  • yarn-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!-- 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>
  • mapred-env.sh

    1
    2
    # 修改JAVA_HOME的值并取消注释#
    export JAVA_HOME=/opt/module/jdk1.8.0_131
  • mapred-site.xml(原本不存在这个文件)

    1
    2
    3
    4
    5
    6
    7
    <configuration>
    <!-- 指定mr运行在yarn上 -->
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    </configuration>
  • 分发以上修改的文件到另外2个ECS

    1
    2
    scp -r /opt/module/hadoop-2.7.2/etc/hadoop hadoop02:/opt/module/hadoop-2.7.2/etc/
    scp -r /opt/module/hadoop-2.7.2/etc/hadoop hadoop03:/opt/module/hadoop-2.7.2/etc/

5. Hadoop集群启动

  • 首次启动集群,需要格式化namenode

    1
    bin/hdfs namenode -format
  • 在Hadoop01中启动HDFS

    1
    sbin/start-dfs.sh
  • 使用jps查看Hadoop进程

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [root@hadoop01 hadoop-2.7.2]# jps
    6649 Jps
    6316 NameNode
    6446 DataNode
    [root@hadoop01 hadoop-2.7.2]# ssh hadoop02
    [root@hadoop02 ~]# jps
    14206 Jps
    14111 DataNode
    [root@hadoop02 ~]# ssh hadoop 03
    [root@hadoop03 ~]# jps
    5091 DataNode
    5192 SecondaryNameNode
    5260 Jps
  • 在阿里云ECS控制台中将Hadoop01服务器的安全组规则中开放50070端口

    50070为hadoop2.x中namenode的默认web访问端口

  • 在HDFS启动的时候,访问http://hadoop01's公网IP:50070

  • 启动与关闭HDFS

    1
    2
    sbin/start-dfs.sh
    sbin/stop-dfs.sh
  • 启动与关闭yarn

    1
    2
    sbin/start-yarn.sh
    sbin/stop-yarn.sh
  • 全部启动与关闭

    1
    2
    start-all.sh
    stop-all.sh
  • 上传文件到集群

    1
    2
    3
    4
    5
    6
    #创建上传的文件所在目录
    bin/hdfs dfs -mkdir -p /user/root/tmp/conf
    #上传文件到HDFS
    bin/hdfs dfs -put etc/hadoop/*-site.xml /user/root/tmp/conf
    #下载HDFS中的文件
    bin/hadoop fs -get /user/root/input/workcount.txt

6. 使用eclipse远程连接hadoop集群

  • 本地安装eclipse与Java环境(JDK版本不需要与服务器一致)

  • 下载hadoop-eclipse-plugin-2.7.3.jar(没找到2.7.2版本的,2.7.3能用)

  • hadoop-eclipse-plugin-2.7.3.jar放在eclipse - contents - eclipse - plugins文件夹中

  • 打开eclipse 添加插件 - Map