HADOOP安装

单机版本安装

操作系统:ubuntu-16.04 jdk版本:jdk-8u191-linux-x64.tar.gz hadoop版本:2.7.7 关于hadoop与jdk之间的关系,可以参考(https://wiki.apache.org/hadoop/HadoopJavaVersions

创建hadoop用户

使用root登陆系统,创建用户组:hadoop,然后在此用户组下创建hadoop用户。可在安装系统的时候创建,也可以在安装好之后用如下命令创建:

添加用户:# sudo useradd -m hadoop -s /bin/bash
设置密码:# passwd hadoop
设置root权限:# sudo adduser hadoop sudo。

java安装

1. 下载jdk软件包。jdk下载地址为:(https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) 选择所需要的软件包,本次安装环境为ubuntu1604,选择软件包版本为:jdk-8u191-linux-x64.tar.gz

jdk-choose
  1. 将下载的压缩包,传输至安装环境。解压。
# tar -xzvf jdk-8u191-linux-x64.tar.gz 解压
# mv jdk1.8.0_191/ /usr/lib/jdk 将解压文件移动至/usr/lib/jdk,作为jdk安装目录。
  1. 配置环境变量。
# vi /etc/profile 配置全局环境变量
写入:
# set java environment
export JAVA_HOME=/usr/lib/jdk
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=.:$JAVA_HOME/bin:$PATH
  1. 测试验证。
# java -version 测试
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

NOTE: 切换到hadoop 用户,测试java是否正常,直接执行java -version 提示需要安装java,需要执行 source /etc/profile 即可。
在不执行 /etc/profile 情况下,hadoop不能读取环境变量,该情况下,修改/home/hadoop/.bashrc文件,追加上述环境变量,source /home/hadoop/.bashrc 即可在hadoop用户下永久生效。
如果只允许某个用户使用java,则只需要在该用户的主目录下,修改.bashrc,在文件末尾追加上述环境变量即可。

至此,java安装完毕。

hadoop 单机伪分布式安装

  1. 软件包下载.

软件包下载:软件下载地址为 (http://mirrors.shu.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz)

  1. 解压缩文件.

解压到安装目录(root 用户),安装软件。

# tar -xzvf hadoop-2.7.7.tar.gz -C /opt
# cd /opt
# chown -R hadoop:hadoop hadoop-2.7.7
Hadoop 解压后即可使用。输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
# cd /opt/hadoop-2.7.7
# ./bin/hadoop version
  1. 配置hadoop环境变量
vi /home/hadoop/.bashrc
追加 export PATH=$PATH:/opt/hadoop-2.7.7/sbin:/opt/hadoop-2.7.7/bin
使配置生效:
# source /home/hadoop/.bashrc
  1. 配置hadoop 配置文件

Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。

Hadoop 的配置文件位于 /opt/hadoop-2.7.7/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。

修改 core-site.xml
修改配置文件 core-site.xml (通过 vi 编辑会比较方便: vi ./etc/hadoop/core-site.xml),将当中的
<configuration>
</configuration>
XML
修改为下面配置:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/hadoop-2.7.7/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
XML
同样的,修改配置文件 hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop-2.7.7/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop-2.7.7/tmp/dfs/data</value>
</property>
</configuration>
修改
./etc/hadoop/hadoop-env.sh 中设置 JAVA_HOME 变量,即在该文件中找到:
export JAVA_HOME=${JAVA_HOME}
将这一行改为JAVA安装位置:
export JAVA_HOME=/usr/lib/jdk
  1. 测试验证。

配置完成后,执行 NameNode 的格式化:

# ./bin/hdfs namenode -format
jdk-choose

启动NameNode和DataNode守护进程。启动时,提示输入密码,输入hadoop密码即可。

# ./sbin/start-dfs.sh
# jsp
# 可以看到 namenode datanode secondnamenode 均正常启动。

成功启动后,可以访问 Web 界面 http://ip:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。

  1. 配置免密码登录。

上述启动过程中,需要输入密码,可配置免密码登录,即可避免输入密码。

以hadoop用户登录,
cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa # 会有提示,都按回车就可以
cat ./id_rsa.pub >> ./authorized_keys # 加入授权
这样下次启动时,则不需要再次输入密码启动hadoop.
  1. 运行Hadoop伪分布式实例
要使用 HDFS,首先需要在 HDFS 中创建用户目录:
./bin/hdfs dfs -mkdir -p  /user/hadoop
Shell 命令
接着将 ./etc/hadoop 中的 xml 文件作为输入文件复制到分布式文件系统中,即将 /usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/hadoop/input 中。我们使用的是 hadoop 用户,并且已创建相应的用户目录 /user/hadoop ,因此在命令中就可以使用相对路径如 input,其对应的绝对路径就是 /user/hadoop/input:
./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input
Shell 命令
复制完成后,可以通过如下命令查看文件列表:
./bin/hdfs dfs -ls input
Shell 命令
伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件(可以将单机步骤中创建的本地 input 文件夹,输出结果 output 文件夹都删掉来验证这一点)。
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
Shell 命令
查看运行结果的命令(查看的是位于 HDFS 中的输出结果):
./bin/hdfs dfs -cat output/*
  1. 启动YARN
启动YARN
(伪分布式不启动 YARN 也可以,一般不会影响程序执行)
有的读者可能会疑惑,怎么启动 Hadoop 后,见不到书上所说的 JobTracker 和 TaskTracker,这是因为新版的 Hadoop 使用了新的 MapReduce 框架(MapReduce V2,也称为 YARN,Yet Another Resource Negotiator)。
YARN 是从 MapReduce 中分离出来的,负责资源管理与任务调度。YARN 运行于 MapReduce 之上,提供了高可用性、高扩展性,YARN 的更多介绍在此不展开,有兴趣的可查阅相关资料。
上述通过 ./sbin/start-dfs.sh 启动 Hadoop,仅仅是启动了 MapReduce 环境,我们可以启动 YARN ,让 YARN 来负责资源管理与任务调度。
首先修改配置文件 mapred-site.xml,这边需要先进行重命名:
mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml
Shell 命令
然后再进行编辑,同样使用 gedit 编辑会比较方便些 gedit ./etc/hadoop/mapred-site.xml :
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
XML
接着修改配置文件 yarn-site.xml:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
XML
然后就可以启动 YARN 了(需要先执行过 ./sbin/start-dfs.sh):
./sbin/start-yarn.sh      # 启动YARN
./sbin/mr-jobhistory-daemon.sh start historyserver  # 开启历史服务器,才能在Web中查看任务运行情况
Shell 命令
开启后通过 jps 查看,可以看到多了 NodeManager 和 ResourceManager 两个后台进程

启动 YARN 之后,运行实例的方法还是一样的,仅仅是资源管理方式、任务调度不同。观察日志信息可以发现,不启用 YARN 时,是 “mapred.LocalJobRunner”在跑任务,启用 YARN 之后,是”mapred.YARNRunner”在跑任务。启动 YARN 有个好处是可以通过 Web 界面查看任务的运行情况:http://ip:8088/cluster

分布式版本安装

环境准备

操作系统版本:ubuntu-16.04 (操作系统安装过程中默认安装sshserver) jdk版本:jdk-8u191-linux-x64.tar.gz hadoop版本:2.7.7 关于hadoop与jdk之间的关系,可以参考(https://wiki.apache.org/hadoop/HadoopJavaVersions) 物理主机3台,其中1台充当集群master角色,2台充当slaver角色。

服务器基本配置

1、在各节点上配置网络。

    # vi  /etc/network/interface
    auto eth0
  iface eth0 inet static
  address 17.17.17.2
  gateway 17.17.17.1
  netmask 255.255.255.0
  dns-nameservers 114.114.114.114
# ifup eth0 # 使配置生效;
    # ping 17.17.17.2 # 并检测网络配置;

同理,配置其他节点,满足如下IP配置。

master    17.17.17.2
slaver-1  17.17.17.4
slaver-2  17.17.17.5

2、为方便使用,配置节点名称与IP对应关系,三台配置如下:

root@bignode1:/home/ubuntu# vi /etc/hosts

127.0.0.1       localhost
17.17.17.2      master
17.17.17.4      slaver-1
17.17.17.5      slaver-2


root@bignode1:/home/ubuntu# ping master
PING master (17.17.17.2) 56(84) bytes of data.
64 bytes from master (17.17.17.2): icmp_seq=1 ttl=64 time=0.025 ms
# 说明映射成功。
修改各个节点的主机名。
vi /etc/hostname
修改为与上述配置一致,后重启。
  1. 安装NTP时钟,并配置时钟同步。确保服务器之间的时钟同步。关于NTP同步的知识可以参考此链接。(http://linux.vbird.org/linux_server/0440ntp.php
apt-get install ntp ntpdate

配置ntp时钟,使slaver-1,slaver-2与 master 同步。master配置不变,修改slaver-1,slaver-2的配置如下:

vi /etc/ntp.conf # 删除原有配置,设置新配置如下:

     server 210.72.145.44
     server master
     server 127.127.1.0
     fudge 127.127.1.0 stratum 10

重启修改配置服务器的ntp服务。

 root@slaver-1:/home/ubuntu# /etc/init.d/ntp restart
[ ok ] Restarting ntp (via systemctl): ntp.service.

slaver节点同步时钟。

root@slaver-1:/home/ubuntu# /etc/init.d/ntp stop
[ ok ] Stopping ntp (via systemctl): ntp.service.
root@bignode3:/home/ubuntu# ntpdate master
24 Jan 16:37:51 ntpdate[25729]: adjust time server 17.17.17.2 offset -0.012206 sec
root@bignode3:/home/ubuntu# /etc/init.d/ntp start
[ ok ] Starting ntp (via systemctl): ntp.service.

创建hadoop用户

在各个节点上,使用root登陆系统,创建用户组:hadoop,然后在此用户组下创建hadoop用户。可在安装系统的时候创建,也可以在安装好之后用如下命令创建:

添加用户:# sudo useradd -m hadoop -s /bin/bash
设置密码:# passwd hadoop
设置root权限:# sudo adduser hadoop sudo。

配置master-slaver hadoop用户免密码登录

  1. 在各个节点上,配置本机hadoop用户免密码登录。
hadoop@master:~$ ssh-keygen -t rsa #过程中直接Enter即可。注意使用hadoop用户执行。
cd /home/hadoop/
hadoop@master:~$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
cat .ssh/id_rsa.pub >> .ssh/authorized_keys
hadoop@master:~$ ssh localhost #不需要输入密码即免密码登录设置成功。

.. end
  1. 配置master-> slaver之间的免密码登录。

java安装

各个节点均需安如下步骤操作。 1. 下载jdk软件包。jdk下载地址为:(https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) 选择所需要的软件包,本次安装环境为ubuntu1604,选择软件包版本为:jdk-8u191-linux-x64.tar.gz

jdk-choose
  1. 将下载的压缩包,传输至安装环境。解压。
# tar -xzvf jdk-8u191-linux-x64.tar.gz 解压
# mv jdk1.8.0_191/ /usr/lib/jdk 将解压文件移动至/usr/lib/jdk,作为jdk安装目录。
  1. 配置环境变量。
# vi /etc/profile 配置全局环境变量
写入:
# set java environment
export JAVA_HOME=/usr/lib/jdk
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=.:$JAVA_HOME/bin:$PATH
  1. 测试验证。
# java -version 测试
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

NOTE: 切换到hadoop 用户,测试java是否正常,直接执行java -version 提示需要安装java,需要执行 source /etc/profile 即可。
在不执行 /etc/profile 情况下,hadoop不能读取环境变量,该情况下,修改/home/hadoop/.bashrc文件,追加上述环境变量,source /home/hadoop/.bashrc 即可在hadoop用户下永久生效。
如果只允许某个用户使用java,则只需要在该用户的主目录下,修改.bashrc,在文件末尾追加上述环境变量即可。

至此,java安装完毕。

hadoop 完全分布式安装

软件包下载

软件包下载:软件下载地址为 (http://mirrors.shu.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz)

master节点安装hadoop

  1. 解压缩文件.安装并解压到安装目录(root 用户),安装软件。
# tar -xzvf hadoop-2.7.7.tar.gz -C /opt # 解压到安装目录
# cd /opt
# chown -R hadoop:hadoop hadoop-2.7.7 # 调整文件权限
Hadoop 解压后即可使用。输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
# cd /opt/hadoop-2.7.7
# ./bin/hadoop version
  1. 配置master hadoop相关配置文件。

2.1 配置slave信息。

# root@master:/opt/hadoop-2.7.7/etc/hadoop# vi slaves # 将slaves 节点信息写入slaves文件

      root@master:/opt/hadoop-2.7.7/etc/hadoop# echo "" > slaves
      root@master:/opt/hadoop-2.7.7/etc/hadoop# vi slaves
      root@master:/opt/hadoop-2.7.7/etc/hadoop# echo "slaver-1"  >> slaves
      root@master:/opt/hadoop-2.7.7/etc/hadoop# echo "slaver-2"  >> slaves

2.2 配置core-site.xml文件。

root@master:/opt/hadoop-2.7.7/etc/hadoop# vi core-site.xml
<configuration>
          <property>
                  <name>hadoop.tmp.dir</name>
                  <value>file:/opt/hadoop-2.7.7/tmp</value>
                  <description>Abase for other temporary directories.</description>
          </property>
          <property>
                  <name>fs.defaultFS</name>
                  <value>hdfs://master:9000</value>
          </property>
  </configuration>

2.3 配置hdfs-site.xml文件。

    root@master:/opt/hadoop-2.7.7/etc/hadoop# vi hdfs-site.xml

    <configuration>
<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>
    <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:/opt/hadoop-2.7.7/tmp/dfs/name</value>
    </property>
    <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:/opt/hadoop-2.7.7/tmp/dfs/data</value>
    </property>
    </configuration>

2.4 配置mapred-site.xml文件。

root@master:/opt/hadoop-2.7.7/etc/hadoop# cp mapred-site.xml.template mapred-site.xml
root@master:/opt/hadoop-2.7.7/etc/hadoop# vi mapred-site.xml

      <configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
      </configuration>

2.5 配置yarn-site.xml文件。

root@master:/opt/hadoop-2.7.7/etc/hadoop# vi yarn-site.xml

<configuration>
  <!-- Site specific YARN configuration properties -->
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>master</value>
        </property>
</configuration>

2.6 配置hadoop-env.sh、mapred-env.sh。在这两个文件中添加JAVA_HOME路径:

root@master:/opt/hadoop-2.7.7/etc/hadoop# vi hadoop-env.sh
root@master:/opt/hadoop-2.7.7/etc/hadoop# vi mapred-env.sh
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jdk

2.7 配置hadoop 环境变量。

vi /home/hadoop/.bashrc
追加 export PATH=$PATH:/opt/hadoop-2.7.7/sbin:/opt/hadoop-2.7.7/bin
使配置生效:
# source /home/hadoop/.bashrc

slaver节点安装hadoop

  1. 将master hadoop安装目录拷贝到slaver-1,slaver-2 与master同步安装目录下即可。

Note

注意scp传输后,hadoop 安装目录的权限。

启动hadoop集群

  1. 在hadoop master节点,使用hadoop用户执行格式化命令。
# hdfs namenode -format
       19/01/25 14:34:55 INFO common.Storage: Storage directory /opt/hadoop-2.7.7/tmp/dfs/name has been successfully formatted.
       19/01/25 14:34:55 INFO namenode.FSImageFormatProtobuf: Saving image file /opt/hadoop-2.7.7/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
       19/01/25 14:34:55 INFO namenode.FSImageFormatProtobuf: Image file /opt/hadoop-2.7.7/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 322 bytes saved in 0 seconds.
       19/01/25 14:34:55 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
       19/01/25 14:34:55 INFO util.ExitUtil: Exiting with status 0
       19/01/25 14:34:55 INFO namenode.NameNode: SHUTDOWN_MSG:
       /************************************************************
       SHUTDOWN_MSG: Shutting down NameNode at master/17.17.17.2
       ************************************************************/
  1. 启动集群。
hadoop@master:/opt/hadoop-2.7.7$ ./sbin/start-all.sh
  1. 查看集群状态。

# master 节点 hadoop 用户。

hadoop@master:/opt/hadoop-2.7.7$ jps
9681 Jps
9188 ResourceManager
8799 NameNode
9023 SecondaryNameNode

# slaver 节点 hadoop 用户。

hadoop@slaver-1:/opt/hadoop-2.7.7/etc/hadoop$ jps
4036 DataNode
4329 Jps
4174 NodeManager

可以访问 http:masterip:50070 查看集群状态。

  1. 验证。
HDFS,首先需要在 HDFS 中创建用户目录:
       ./bin/hdfs dfs -mkdir -p  /user/hadoop
       接着将 ./etc/hadoop 中的 xml 文件作为输入文件复制到分布式文件系统中,即将 /usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/hadoop/input 中。我们使用的是 hadoop 用户,并且已创建相应的用户目录 /user/hadoop ,因此在命令中就可以使用相对路径如 input,其对应的绝对路径就是 /user/hadoop/input:
       ./bin/hdfs dfs -mkdir input
       ./bin/hdfs dfs -put ./etc/hadoop/*.xml input
       Shell 命令
       复制完成后,可以通过如下命令查看文件列表:
       ./bin/hdfs dfs -ls input

Shell 命令

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-.jar grep input output ‘dfs[a-z.]+’ Shell 命令 查看运行结果的命令(查看的是位于 HDFS 中的输出结果): ./bin/hdfs dfs -cat output/
hadoop@master:/opt/hadoop-2.7.7$ hdfs dfs -cat output/*
1      dfsadmin
1      dfs.replication
1      dfs.namenode.name.dir
1      dfs.datanode.data.dir

可以在slaver节点上使用grep命令搜索的上传的特殊字符串。均可查看到响应的文件。 至此,分布式环境搭建完毕。

扩展hadoop集群

操作系统安装–>修改主机名–>配置host.dns–>创建hadoop组–>安装NTP并配置–>安装java并配置–>配置slaver-3->slaver-3,master->slaver-3免密登录–>安装hadoop–>配置slaver环境变量–>master节点修改配置–>安装时钟同步软件–>master节点重启服务并验证。

1、安装操作系统。

2、修改host主机名,也可在安装操作系统时进行设定。建议安装集群前统一规划规范主机名命名规范。

root@ubuntu:/home/ubuntu# vi /etc/hostname  #修改为 slaver-3,重启生效。

3、修改host域名解析。

# 在slaver-3上添加域名解析.
root@ubuntu:/home/ubuntu# vi /etc/hosts # 仅添加master及本机域名解析即可。

        17.17.17.2      master
        17.17.17.6      slaver-3
# 在master上添加域名解析。
root@master:/home/ubuntu# vi /etc/hosts # 添加slaver-3域名解析。
#

4、创建hadoop 用户和组。

使用root登陆系统,创建用户组:hadoop,然后在此用户组下创建hadoop用户。可在安装系统的时候创建,也可以在安装好之后用如下命令创建:

添加用户:# sudo useradd -m hadoop -s /bin/bash
设置密码:# passwd hadoop
设置root权限:# sudo adduser hadoop sudo。

5、java安装

5.1. 下载jdk软件包。jdk下载地址为:(https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) 选择所需要的软件包,本次安装环境为ubuntu1604,选择软件包版本为:jdk-8u191-linux-x64.tar.gz

jdk-choose

5.2. 将下载的压缩包,传输至安装环境。解压。

# tar -xzvf jdk-8u191-linux-x64.tar.gz 解压
# mv jdk1.8.0_191/ /usr/lib/jdk 将解压文件移动至/usr/lib/jdk,作为jdk安装目录。

5.3. 配置环境变量。

# vi /etc/profile 配置全局环境变量
写入:
# set java environment
export JAVA_HOME=/usr/lib/jdk
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=.:$JAVA_HOME/bin:$PATH

5.4. 测试验证。

# java -version 测试
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

NOTE: 切换到hadoop 用户,测试java是否正常,直接执行java -version 提示需要安装java,需要执行 source /etc/profile 即可。
在不执行 /etc/profile 情况下,hadoop不能读取环境变量,该情况下,修改/home/hadoop/.bashrc文件,追加上述环境变量,source /home/hadoop/.bashrc 即可在hadoop用户下永久生效。
如果只允许某个用户使用java,则只需要在该用户的主目录下,修改.bashrc,在文件末尾追加上述环境变量即可。

至此,java安装完毕。

6、配置slaver-3->slaver-3,master->slaver-3免密码登录。

6.1 配置本机免密码登录。

# 配置本机免密码登录。
hadoop@slaver-3:~$ ssh-keygen -t rsa #过程中直接Enter即可。注意使用hadoop用户执行。
cd /home/hadoop/
hadoop@master:~$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys

hadoop@master:~$ ssh localhost #首次登录需要输入密码,第二次登录不需要输入密码即免密码登录设置成功。

6.2 配置master->slaver-3免密码登录。

# 将主机master 上hadoop 用户 id_rsa.pub传输至slaver-3。
hadoop@master:~$ scp id_rsa.pub  ubuntu@17.17.17.6:/home/ubuntu
ubuntu@17.17.17.6's password:
id_rsa.pub            100%  395     0.4KB/s   00:00
#将 id_rsa.pub 写入 slaver-3 hadoop用户授权key.
hadoop@slaver-3:~$ cat id_rsa.pub >> .ssh/authorized_keys
# 验证。
# hadoop@master:~$ ssh hadoop@slaver-3 # 注意是使用hadoop验证。首次需要输入,第二次后免密登录生效。

7、复制hadoop至新节点.

将master hadoop 目录拷贝到slaver-3,注意,不要将 logs文件及数据文件拷贝到slaver-3,同时注意文件权限.

root@slaver-3:/opt# chown -R hadoop:hadoop hadoop-2.7.7/

8、slaver-3节点配置hadoop环境变量。

export JAVA_HOME=/usr/lib/jdk
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=.:$JAVA_HOME/bin:$PATH

# set hadoop environment
export PATH=$PATH:/opt/hadoop-2.7.7/sbin:/opt/hadoop-2.7.7/bin

9、在master节点修改slaver配置文件。

hadoop@master:/opt/hadoop-2.7.7/etc/hadoop$ vi slaves
slaver-1
slaver-2
slaver-3

10、安装并配置时钟。

root@slaver-3:/home/ubuntu# apt-get install  ntp ntpdate

root@slaver-3:/home/ubuntu# /etc/init.d/ntp stop
[ ok ] Stopping ntp (via systemctl): ntp.service.
root@slaver-3:/home/ubuntu# ntpdate master
28 Jan 13:30:15 ntpdate[2923]: adjust time server 17.17.17.2 offset 0.021848 sec
root@slaver-3:/home/ubuntu# /etc/init.d/start
bash: /etc/init.d/start: No such file or directory
root@slaver-3:/home/ubuntu# /etc/init.d/ntp start
[ ok ] Starting ntp (via systemctl): ntp.service.

11、master节点重启服务。

hadoop@master:/opt/hadoop-2.7.7$ ./sbin/start-all.sh
# 查看slaver-3节点服务状态。
hadoop@master:/opt/hadoop-2.7.7$ jps
13444 NameNode
13670 SecondaryNameNode
3501 Jps
13837 ResourceManager

hadoop HA完全分布式安装

部署情况如下,master,master-0节点做HA。

17.17.17.2      master    # namenode master节点     jdk1.8+hadoop2.7                  namenode+resourcemanager+DFSZKFailoverController(zkfc)
17.17.17.7      master-0  # namenode master节点     jdk1.8+hadoop2.7                  namenode+resourcemanager+DFSZKFailoverController(zkfc)
17.17.17.4      slaver-1  # DataNode slaver节点     jdk1.8+hadoop2.7+zookeeper3.4.12  DataNode+NodeManager+JournalNode+QuorumPeerMain
17.17.17.5      slaver-2  # Datanode slaver节点     jdk1.8+hadoop2.7+zookeeper3.4.12  DataNode+NodeManager+JournalNode+QuorumPeerMain
17.17.17.6      slaver-3  # DataNode slaver节点     jdk1.8+hadoop2.7+zookeeper3.4.12  DataNode+NodeManager+JournalNode+QuorumPeerMain

前置条件(可根据上述章节完成配置):

1、所有的机器上增加hadoop用户;

2、安装java;

3、配置master->slaver-,master-0–>slaver-,master<–>master-0节点及各自节点hadoop用户的免密码登录;

4、同步ntp时钟;

5、修改ip域名解析;

slaver节点安装zookeeper

slaver-1,slaver-2,slaver-3节点上安装zookeeper(下载地址为https://zookeeper.apache.org/releases.html),版本兼容性较好,可选择最新版本。

1、解压安装包

在slaver-1节点上执行:

root@slaver-1:/home/hadoop# tar -xzvf zookeeper-3.4.12.tar.gz
root@slaver-1:/home/hadoop# mv zookeeper-3.4.12 /opt/

2、配置slaver-1 zookeeper 环境变量

root@slaver-1:/opt/zookeeper-3.4.12/conf# vi /home/hadoop/.bashrc
    # 追加
    # set zookeeper environment
    export ZOOKEEPER_HOME=/opt/zookeeper-3.4.12
    export PATH=$PATH:$ZOOKEEPER_HOME/bin

3、 配置slaver-1 zookeeper配置文件。

root@slaver-1:/opt/zookeeper-3.4.12/conf# cp zoo_sample.cfg  zoo.cfg
root@slaver-1:/opt/zookeeper-3.4.12/conf# vi zoo.cfg
root@slaver-1:/opt/zookeeper-3.4.12/conf# grep -vE  '^#|^$'  zoo.cfg
      tickTime=2000 # 服务器与客户端之间交互的基本时间单元(ms)
      initLimit=10  # zookeeper所能接受的客户端数量
      syncLimit=5   # 服务器与客户端之间请求和应答的时间间隔
      dataDir=/opt/zookeeper-3.4.12/zookeeperdata # 存放数据文件
      LogDir=/opt/zookeeper-3.4.12/dataLogDir # 存放日志文件
      clientPort=2181 # 客户端与zookeeper相互交互的端口
      server.1=slaver-1:2888:3888
      server.2=slaver-2:2888:3888
      server.3=slaver-3:2888:3888
      #server.A=B:C:D  其中A是一个数字,代表这是第几号服务器;B是服务器的IP地址或域名解析地址;C表示服务器与群集中的“领导者”交换信息的端口;当领导者失效后,D表示用来执行选举时服务器相互通信的端口。
      root@slaver-1:/opt/zookeeper-3.4.12# mkdir zookeeperdata dataLogDir # 创建相应文件,验证环境,正式环境建议将数据文件目录与安装文件目录分离。

4、将slaver-1 zookeeper安装及配置文件复制到slaver-2和slaver-3节点上。

# slaver-1执行
root@slaver-1:/opt# scp -r zookeeper-3.4.12/ ubuntu@slaver-2:/home/ubuntu
root@slaver-1:/opt# scp -r zookeeper-3.4.12/ ubuntu@slaver-3:/home/ubuntu
# slaver-2执行
root@slaver-2:/home/hadoop# mv /home/ubuntu/zookeeper-3.4.12 /opt/     # 安装到指定目录。
root@slaver-2:/opt/zookeeper-3.4.12/zookeeperdata# echo 2 > myid
# slaver-3执行
root@slaver-3:/home/hadoop# mv /home/ubuntu/zookeeper-3.4.12 /opt/     # 安装到指定目录。
root@slaver-3:/opt/zookeeper-3.4.12/zookeeperdata# echo 3 > myid

5、验证zookeeper是否安装及配置成功,启动和关闭zookeeper服务。分别在slaver-1,slaver-2,slaver-3节点执行:

root@slaver-1:/opt/zookeeper-3.4.12/bin# ./zkServer.sh start #执行启动脚本
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.12/bin/../conf/zoo.cfg
Starting zookeeper ... already running as process 23444.
root@slaver-1:/opt/zookeeper-3.4.12/bin# jps #检查是否启动成功
25235 Jps
23444 QuorumPeerMain #启动成功 可通过/opt/zookeeper-3.4.12/bin/zookeeper.out 文件查看启动日志。
# slaver-1
root@slaver-1:/opt/zookeeper-3.4.12/bin# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower
# slaver-2
root@slaver-2:/opt/zookeeper-3.4.12# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: leader
# slaver-3
root@slaver-3:/opt/zookeeper-3.4.12# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: follower

6、注意事项。zookeeper没有限制系统用户,但如果使用root用户执行该脚本,需要让root用户拥有java执行权限,即需要在root用户bashrc文件下配置java环境变量。

各节点安装hadoop

安装过程跟上述章节一致,不同的是需要修改相应的配置文件,各个具体配置如下:

6.1 首先需要在各个节点上先创建相关文件:

root@master:/opt/hadoop-2.7.7# mkdir -p ./data/dfs/name
root@master:/opt/hadoop-2.7.7# mkdir -p ./data/dfs/name
root@master:/opt/hadoop-2.7.7# mkdir -p ./data/dfs/data
root@master:/opt/hadoop-2.7.7# mkdir -p ./data/yarn/local
root@master:/opt/hadoop-2.7.7# mkdir -p ./log/yarn
# 修改创建文件权限
root@master:/opt/hadoop-2.7.7# chown -R hadoop:hadoop log
root@master:/opt/hadoop-2.7.7# chown -R hadoop:hadoop data

6.2 core-site.xml 配置文件如下:

root@master:/opt/hadoop-2.7.7/etc/hadoop# vi core-site.xml
       <configuration>
     <property>
         <name>hadoop.tmp.dir</name>
         <value>file:/opt/hadoop-2.7.7/tmp</value>
         <description>Abase for other temporary directories.</description>
     </property>
     <property>
         <name>fs.defaultFS</name>
         <value>hdfs://cluster1</value>
     </property>
     <property>
       <name>ha.zookeeper.quorum</name>
       <value>slaver-1:2181,slaver-2:2181,slaver-3:2181</value>
   </property>
 </configuration>

6.2 配置hdfs-site.xml文件。

<configuration>
        <property>
                <name>dfs.nameservices</name>
                <value>cluster1</value>
        </property>
        <property>
                <name>dfs.ha.namenodes.cluster1</name>
                <value>master,master-0</value>
        </property>
        <property>
                <name>dfs.namenode.rpc-address.cluster1.master</name>
                <value>master:9000</value>
        </property>
        <property>
                <name>dfs.namenode.rpc-address.cluster1.master-0</name>
                <value>master-0:9000</value>
        </property>

        <property>
                <name>dfs.namenode.http-address.cluster1.master</name>
                <value>master:50070</value>
        </property>

        <property>
                <name>dfs.namenode.http-address.cluster1.master-0</name>
                <value>master-0:50070</value>
        </property>
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://slaver-1:8485;slaver-2:8485;slaver-3:8485/cluster1</value>
        </property>

        <property>
                <name>dfs.client.failover.proxy.provider.cluster1</name>
                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
        <property>
                <name>dfs.ha.fencing.methods</name>
                <value>sshfence</value>
        </property>
        <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/home/hadoop/.ssh/id_rsa</value>
        </property>
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/opt/hadoop-2.7.7/data/tmp/journal</value>
        </property>
        <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/opt/hadoop-2.7.7/data/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/opt/hadoop-2.7.7/data/dfs/data</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
        <property>
                <name>dfs.webhdfs.enabled</name>
                <value>true</value>
        </property>

        <property>
                <name>dfs.journalnode.http-address</name>
                <value>0.0.0.0:8480</value>
        </property>
        <property>
                <name>dfs.journalnode.rpc-address</name>
                <value>0.0.0.0:8485</value>
        </property>
        <property>
                <name>ha.zookeeper.quorum</name>
                <value>slaver-1:2181,slaver-2:2181,slaver-3:2181</value>
        </property>

</configuration>

6.3 配置map-site.xml文件。

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>

6.4 配置yarn-site.xml文件。

<configuration>
   <property>
       <name>yarn.resourcemanager.connect.retry-interval.ms</name>
       <value>2000</value>
   </property>
       <value>true</value>
   </property>
   <property>
       <name>yarn.resourcemanager.ha.rm-ids</name>
       <value>rm1,rm2</value>
   </property>
   <property>
       <name>ha.zookeeper.quorum</name>
       <value>slaver-1:2181,slaver-2:2181,slaver-3:2181</value>
   </property>

   <property>
       <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
       <value>true</value>
   </property>
   <property>
       <name>yarn.resourcemanager.hostname.rm1</name>
       <value>master</value>
   </property>

   <property>
       <name>yarn.resourcemanager.hostname.rm2</name>
       <value>master-0</value>
   </property>
   <!--开启自动恢复功能 -->
   <property>
       <name>yarn.resourcemanager.recovery.enabled</name>
       <value>true</value>
   </property>
   <!--配置与zookeeper的连接地址 -->
   <property>
       <name>yarn.resourcemanager.zk-state-store.address</name>
       <value>slaver-1:2181,slaver-2:2181,slaver-3:2181</value>
   </property>
   <property>
       <name>yarn.resourcemanager.store.class</name>
       <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
   </property>
   <property>
       <name>yarn.resourcemanager.zk-address</name>
       <value>slaver-1:2181,slaver-2:2181,slaver-3:2181</value>
   </property>
   <property>
       <name>yarn.resourcemanager.cluster-id</name>
       <value>cluster-cecgw</value>
   </property>
   <!--schelduler失联等待连接时间 -->
   <property>
       <name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
       <value>5000</value>
   </property>
   <!--配置rm1 -->
   <property>
       <name>yarn.resourcemanager.webapp.address.rm1</name>
       <value>master:8088</value>
   </property>
   <!--配置rm2 -->
   <property>
       <name>yarn.resourcemanager.webapp.address.rm2</name>
       <value>master-0:8088</value>
   </property>
   <property>
       <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
   </property>
   <property>
       <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
       <value>org.apache.hadoop.mapred.ShuffleHandler</value>
   </property>
   <property>
       <name>yarn.nodemanager.local-dirs</name>
       <value>/opt/hadoop-2.7.7/data/yarn/local</value>
   </property>
   <property>
       <name>yarn.nodemanager.log-dirs</name>
       <value>/opt/hadoop-2.7.7/data/log/yarn</value>
   </property>
   <property>
       <name>mapreduce.shuffle.port</name>
       <value>23080</value>
   </property>
   <!--故障处理类 -->
   <property>
       <name>yarn.client.failover-proxy-provider</name>
       <value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value>
   </property>
   <property>
       <name>yarn.resourcemanager.ha.automatic-failover.zk-base-path</name>
       <value>/yarn-leader-election</value>
   </property>
</configuration>

6.5 按照原来章节配置hadoop-env.sh、yarn-env.sh以及slave。

6.6 将配置文件复制到各个节点。

6.7 启动命令。

启动命令(hdfs和yarn的相关命令)

6.7.1 在各个datanode节点上启动zk服务。启动命令为 zkServer.sh start,可以输入zkServer.sh status查看启动状态, 本次我们配置了三个DN节点,会出现一个leader和两个follower。输入jps,会显示启动进程:QuorumPeerMain

6.7.2 在namenode节点,我们选在master节点,启动启动journalnode服务,命令如下:hadoop-daemons.sh start journalnode。或者单独进入到每个DN输入启动命令:hadoop-daemon.sh start journalnode。输入jps显示启动进程:JournalNode。

6.7.3 在master节点格式化ZK,命令如下:hdfs zkfc -formatZK。

6.7.4 在master节点格式化HDFS,命令如下:hadoop namenode -format。

6.7.5 在master节点启动hdfs和yarn,命令如下:start-dfs.sh和start-yarn.sh,在master-0节点启动namenode和ResourceManager进程,命令如下:hadoop-daemon.sh start namenode和yarn-daemon.sh start resourcemanager。

6.7.6 同步数据,在master-0节点同步命令,命令如下:hdfs namenode -bootstrapStandby,同步后master和master-1节点/opt/hadoop-2.7.7/data/dfs/name/current 下version数据应该一致。

6.8 HA测试验证。直接将master节点断网处置,master-0状态由standby,变为active。

6.9 hadoop 集群存储及计算验证。

要使用 HDFS,首先需要在 HDFS 中创建用户目录:
./bin/hdfs dfs -mkdir -p  /user/hadoop
Shell 命令
接着将 ./etc/hadoop 中的 xml 文件作为输入文件复制到分布式文件系统中,即将 /usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/hadoop/input 中。我们使用的是 hadoop 用户,并且已创建相应的用户目录 /user/hadoop ,因此在命令中就可以使用相对路径如 input,其对应的绝对路径就是 /user/hadoop/input:
./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input
Shell 命令
复制完成后,可以通过如下命令查看文件列表:
./bin/hdfs dfs -ls input
Shell 命令
伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件(可以将单机步骤中创建的本地 input 文件夹,输出结果 output 文件夹都删掉来验证这一点)。
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
Shell 命令
查看运行结果的命令(查看的是位于 HDFS 中的输出结果):
./bin/hdfs dfs -cat output/*

至此,hadoop HA 分布式环境搭建完毕。

参考:

https://www.cnblogs.com/smartloli/p/4298430.html