云服务器---Hadoop集群完全分布式模式

  • 1.配置环境
  • 2.创建hadoop用户
  • 3.修改主机名
  • 4.设备之间的免密登录
  • 4.1单机的免密登录
  • 4.2多服务器的免密登录
  • 5.安装jdk
  • 6.安装Hadoop

1.配置环境

  1. 操作系统:Ubuntu 16.04 LTS
  2. jdk-8u171-linux-x64.tar.gz
  3. hadoop-2.7.3.tar.gz
  4. 云服务器若干

2.创建hadoop用户

  1. 添加hadoop用户
$ sudo adduser username		#添加用户
$ ls /home		#查看添加是否成功(这里以username为例添加)

hadoop1的ha如何实现 hadoop -du_linux

  1. 输入sudo adduser (新创建的用户名) sudo,给新用户赋予管理员的权限。
$ sudo adduser hadoop sudo

效果如下图:(利用sudo su切换到新用户,如需要密码则表示成功了。)

hadoop1的ha如何实现 hadoop -du_linux_02

  1. 以下是将hadoop用户赋予了root权限(这里可以跳过直接进行下一步)
$ sudo nano /etc/sudoers

学习一下nano命令的使用,这里使用nano+文件进行编辑,步骤为Ctrl+O进行保存,然后确定路径和文件名无误后点击enter,Ctrl+X退出。

hadoop1的ha如何实现 hadoop -du_linux_03


3.修改主机名

  1. 查看主机名并修改主机名(这里我修改为:Master,其余从机同理修改为slave1和slave2…)
$ sudo nano /etc/hostname

hadoop1的ha如何实现 hadoop -du_hadoop1的ha如何实现_04

  1. 修改主机名后需要重启一下主机名才会改变。
$ sudo reboot


4.设备之间的免密登录

4.1单机的免密登录

  1. 检查是否可以进行免密登录,使用ssh命令免密码登陆自己。
$ ssh localhost     #测试是否设置过免密登录
  1. 检查是否有.ssh目录,若无则需要建立,并增加权限。
$ mkdir -p ~/.ssh		#创建目录
$ chmod 700 ~/.ssh		#修改目录的权限
  1. 创建master主机的密钥。
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa		#生成密钥对
#执行上面这条命令将会生成:私钥:id_rsa和公钥:id_rsa.pub
  1. 将密钥置入盒子(authorized_keys)里,并给它权限。
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys #将文件追加到盒子里
$ chmod 600 ~/.ssh/authorized_keys		#增加权限
  1. 需要修改目录/etc/ssh/sshd_config配置文件,部分代码如下:
# Logging
SyslogFacility AUTH
LogLevel INFO

# Authentication:
LoginGraceTime 120
PermitRootLogin prohibit-password
StrictModes yes

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile  %h/.ssh/authorized_keys  #公钥文件,根据情况去掉注释。
$ nano /etc/ssh/sshd_config
  1. 验证本地是否可以登录
$ ssh localhost		#验证是否可以免密登陆

效果如图:

hadoop1的ha如何实现 hadoop -du_hadoop1的ha如何实现_05


7. 验证成功后使用exit退出当前用户。

4.2多服务器的免密登录

  • 操作完单机的免密登录,多服务器(每一台服务器均需要执行单机免密登录的操作)需要登录上面执行单击免密登录的操作。建议每台服务器做完单机免密登录再继续分发公钥。
  1. 发送公钥:id_rsa.pub
$ scp ~/.ssh/id_rsa.pub hadoop@slave1:~/ #分发公钥,若slave1没有修改映射需要填写真实的IP地址
  1. 追加密钥给authorized_keys,并给权限。
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

同样的操作将其他的密钥也分别发给其他服务器。
另一做法是用盒子去挨个接收密钥,接收完之后然后再分发给其他服务器。

注意:如需要是slave1的格式需要执行主机映射。

  • 修改主机映射
    操作如下:
$ sudo nano /etc/hosts		#修改映射

如果是在master上操作的话ip1 必须是master 的内网ip,同样其他slave上也是一样,自己的主机上的IP要改成内网IP,其他的要用外网IP。

效果如下:

hadoop1的ha如何实现 hadoop -du_hadoop1的ha如何实现_06


3. 验证免密登录

#1.通过localhost验证
$ ssh localhost
$ exit
 
#2.通过ip地址验证
$ ssh ip地址      #例如:$ ssh 192.168.23.105
$ exit
 
#3.通过主机名称验证
$ ssh 主机名称    #例如:$ ssh master
$ exit


5.安装jdk

  • 以下操作均是基于hadoop用户下的操作。
  • jdk版本:云盘下载 提取码:yn1e
  • 通过xftp、winscp等上传文件到云服务器。
  • ubuntu 16.04
  1. 创建一个soft目录,将文件上传到该目录下面。
$ mkdir -p ~/soft	#创建soft目录
$ ls ~/soft		#查看目录

以下操作是基于你将这些文件存放到~/soft的操作

  1. 解压到当前文件夹并创建软链接方便后面使用。
$ tar -zxvf jdk-8u171-linux-x64.tar.gz
$ ln -s jdk1.8.0_171 jdk #创建软链接
  1. 编辑环境变量
$ nano ~/.bashrc

bashrc后面添加环境变量,并保存退出。

export JAVA_HOME=~/soft/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib 
export PATH=${JAVA_HOME}/bin:$PATH
  1. 使环境变量生效。
$ source ~/.bashrc
  1. 验证配置成功。
$ java -version #显示版本号等信息表示成功。

如下图:

hadoop1的ha如何实现 hadoop -du_linux_07


6.安装Hadoop

  • hadoop版本:hadoop-2.7.3.tar.gz 提取码:gcbh
  • 上传文件到云服务器使用xftp、winscp等。
  • ubuntu 16.04
  1. 通过xftp或者其他上传到master云服务器的~/soft目录下面。
$ ls ~/soft/
  1. 解压gz包,并创建软链接使用。
$ tar -zxvf hadoop-2.7.3.tar.gz
$ ln -s hadoop-2.7.3 hadoop

效果如下:

hadoop1的ha如何实现 hadoop -du_分布式_08

  1. 查看JAVA_HOME的路径,拷贝后进行下一步。
$ echo $JAVA_HOME 查看JAVA_HOME的绝对路径
  1. 配置hadoop-env.sh环境
export JAVA_HOME=/home/hadoop/soft/jdk
#若后面格式化的时候找不到.../java就需要添加到jre
#export JAVA_HOME=home/hadoop/soft/jdk/jre
  1. 配置文件的修改,使用cd ${HADOOP_HOME}/etc/hadoop切换到配置文件所在目录。
  • core-site.xml文件的修改
$ nano core-site.xml

在<configuration>标签中插入,修改好的代码如下:

<configuration>
         <property>
        <name>fs.defaultFS</name>
                <value>hdfs://master:8020</value>
        <!-- 以上主机名要按实际情况修改 -->
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/hadoop/soft/hadoop/tmp</value>
        </property>
</configuration>

附截图一张:

hadoop1的ha如何实现 hadoop -du_linux_09

  • hdfs-site.xml文件的修改如下:
$ nano hdfs-site.xml

在<configuration>标签中插入,修改好的代码如下:

<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>

<!-- secondarynamenode主机名 -->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>slave1:50090</value>
    </property>

<!-- namenode的web访问主机名:端口号 -->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>master:50070</value>
    </property>
</configuration>

附截图一张:

hadoop1的ha如何实现 hadoop -du_服务器_10

  • mapred-site.xml文件修改

目录下没有对应的文件夹,但是有mapred-site.xml.template,可以将其重命名使用,但是建议另外cp一下。

$ cp mapred-site.xml.template mapred-site.xml  #更名为mapred-site.xml,原有文件依然存在。
  • 配置文件的修改如下:
<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</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>
</configuration>
  • 配置yarn-site.xml文件
$ nano yarn-site.xml

配置文件的修改如下:

<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>slave2</value>
    </property>

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</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>
</configuration>

注意:以上操作都需要在hadoop文件目下才能操作。

  1. 分发文件
$ scp -r hadoop-2.7.3 slave1:$PWD
#拷贝的时间较长建议休息一下。
$ scp -r hadoop-2.7.3 slave2:$PWD
  1. 指定集群slaves配置
$ nano slaves

添加一下内容

slave1
slave2
  1. 格式化Namenode需要谨慎操作
$ hdfs namenode -format

格式化只需要进行一次,以后启动hadoop前不需要再次格式化。若后续启动有问题出现,需要执行格式化操作需要把所有服务先停止:stop-all.sh

格式成功后的界面如下:出现status 0表示成功,其他如status 1表示不成功。

hadoop1的ha如何实现 hadoop -du_hadoop1的ha如何实现_11


温馨小提示——第一次可以跳过温馨提示

多次格式化:导致启动时缺少Datanode,再格式化后导致ID不符合两个我们需要去修改CID,保证name和data的CID一致。
操作如下(具体路径需要看自己的服务器仅供参考):
1、查看后复制:nano /home/hadoop/soft/hadoop-2.7.3/tmp/dfs/name/current/VERSION
2、修改data:nano /home/hadoop/soft/hadoop-2.7.3/tmp/dfs/data/current/VERSION
将name的CID------------>data的CID

  1. 启动集群
  • master上使用如下命令启动HDFS
$ sbin/start-dfs.sh
  • 在slave2上使用如下命令启动YARN
$ sbin/start-yarn.sh

停止进程:
$ sbin/start-yarn.sh # 在slave2上使用如下命令停止YARN
$ sbin/stop-dfs.sh # 在master上使用如下命令停止HDFS

  • jps
  1. 通过web段访问端口
  • master公网IP:50070

云服务器的端口需要开放才能访问。

hadoop1的ha如何实现 hadoop -du_hadoop_12


  • slave2公网IP:8088端口
  • hadoop1的ha如何实现 hadoop -du_服务器_13

  • 快乐是码起来的!