写在前面的废话

现在我们要开始搭建Hadoop集群了,Hadoop包含如下两部分:

  • HDFS, 即Hadoop分布式文件系统
  • YARN, 即第二代的MapReduce(MR2),解决了第一代MR的诸多问题,例如集群扩展困难(最多三四千台机器),单点故障,资源调度不灵活等.第一代MR只能实现MR算法,而YARN真正成为了一个计算平台,例如Spark也可以基于YARN运行

好了,Hadoop的资料以及最新发展情况,还是自己网上搜索学习吧.
重要说明
Hadoop默认是将一份数据复制两份存储在另外两台机器上,所以,一份数据在集群中存在三份,那么对集群内机器数量的要求就是五台:

  • 一台主NameNode,存储集群的元数据
  • 一台备NameNode,存储集群的元数据
  • 三台DataNode,存储数据

可是我们在自己的台式机或笔记本上,在实在难以搭建和运行如此多的虚拟机,所以,我依然使用了三台虚拟机,把DataNode改为了一台.在Hadoop的配置中,也会有所体现,需要修改一个参数,使之默认数据备份数量为1.

开始

准备

要求集群内的每台机器都要

  • 安装了JDK,并配置好了环境变量
  • 具有内容一致的/etc/hosts文件(IP地址与主机名的映射)
  • 安装了ZooKeeper,并已做好配置,可以正常启动
  • 已下载了Hadoop软件包(本文使用hadoop-2.9.0.tar.gz这个包)

集群规划

主机名 IP地址 安装软件 运行进程
bd-1 192.168.206.132 JDK,Hadoop,ZooKeeper NameNode(Active),DFSZKFailoverController(zkfc),ResouceManager(Standby),QuorumPeerMain(ZooKeeper)
bd-2 192.168.206.133 JDK,Hadoop,ZooKeeper NameNode(Standby),DFSZKFailoverController(zkfc),ResouceManager(Active),QuorumPeerMain(ZooKeeper),Jobhistory
bd-1 192.168.206.134 JDK,Hadoop,ZooKeeper DataNode,NodeManager,JournalNode,QuorumPeerMain(ZooKeeper)

安装(如无特殊说明,每台虚拟机均需做完下面的操作)

1. 在每台机器上解压和安装Hadoop软件包

在官网下载的hadoop-2.9.0.tar.gz文件依然放在每个libing用户家目录下的softwares目录下

[libing@bd-1 ~]$ ll softwares/
-rw-rw-r--. 1 libing libing 366744329 12月 11 22:49 hadoop-2.9.0.tar.gz

解压

[libing@bd-1 ~]$ tar -xzf softwares/hadoop-2.9.0.tar.gz -C /home/libing/
[libing@bd-1 ~]$ ll
总用量 36
drwxr-xr-x   9 libing libing   149 11月 14 07:28 hadoop-2.9.0
drwxr-xr-x.  8 libing libing   255 9月  14 17:27 jdk1.8.0_152
drwxrwxr-x.  2 libing libing   148 12月 20 20:09 softwares
-rwxrw-r--   1 libing libing   151 12月 21 22:29 zkStartAll.sh
-rwxrw-r--   1 libing libing   149 12月 21 22:37 zkStopAll.sh
drwxr-xr-x  12 libing libing  4096 12月 21 21:51 zookeeper-3.4.10
-rw-rw-r--   1 libing libing 17810 12月 21 22:31 zookeeper.out
[libing@bd-1 ~]$ ll hadoop-2.9.0/
总用量 128
drwxr-xr-x 2 libing libing    194 11月 14 07:28 bin
drwxr-xr-x 3 libing libing     20 11月 14 07:28 etc
drwxr-xr-x 2 libing libing    106 11月 14 07:28 include
drwxr-xr-x 3 libing libing     20 11月 14 07:28 lib
drwxr-xr-x 2 libing libing    239 11月 14 07:28 libexec
-rw-r--r-- 1 libing libing 106210 11月 14 07:28 LICENSE.txt
-rw-r--r-- 1 libing libing  15915 11月 14 07:28 NOTICE.txt
-rw-r--r-- 1 libing libing   1366 11月 14 07:28 README.txt
drwxr-xr-x 3 libing libing   4096 11月 14 07:28 sbin
drwxr-xr-x 4 libing libing     31 11月 14 07:28 share
2. 配置系统环境变量

编辑/etc/profile文件

[libing@bd-1 ~]$ sudo vi /etc/profile
[sudo] libing 的密码:

添加如下内容

# Added for Hadoop
HADOOP_HOME=/home/libing/hadoop-2.9.0
export HADOOP_HOME
HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_CONF_DIR
YARN_HOME=${HADOOP_HOME}
export YARN_HOME
YARN_CONF_DIR=${HADOOP_CONF_DIR}
export YARN_CONF_DIR
PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
export PATH

使之马上生效

[libing@bd-1 ~]$ source /etc/profile

检查验证

[libing@bd-1 ~]$ env | grep HADOOP
HADOOP_HOME=/home/libing/hadoop-2.9.0/
HADOOP_CONF_DIR=/home/libing/hadoop-2.9.0/etc/hadoop
[libing@bd-1 ~]$ env | grep YARN
YARN_HOME=/home/libing/hadoop-2.9.0/
YARN_CONF_DIR=/home/libing/hadoop-2.9.0/etc/hadoop
[libing@bd-1 ~]$ echo $PATH
/home/libing/zookeeper-3.4.10/bin:/usr/local/jdk//bin:/home/libing/zookeeper-3.4.10/bin:/usr/local/jdk//bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/libing/.local/bin:/home/libing/bin:/home/libing/hadoop-2.9.0/bin:/home/libing/hadoop-2.9.0/sbin

配置HDFS

1. 配置环境变量设置脚本

进入Hadoop的配置文件路径,并修改hadoop-env.sh文件

[libing@bd-1 ~]$ cd ~/hadoop-2.9.0/etc/hadoop/
[libing@bd-1 hadoop]$ vi hadoop-env.sh

将该行

export JAVA_HOME=${JAVA_HOME}

改为

export JAVA_HOME=/usr/local/jdk/

个人认为其实这里不改也行,毕竟我们以前都设置好JAVA_HOME环境变量了.

2. 修改core-site.xml

继续修改core-site.xml文件,在<configuration></configuration>之间填入如下内容

<configuration>
    <!-- 指定hdfs的nameservice名称空间为ns -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ns</value>
    </property>
    <!-- 指定hadoop临时目录,默认在/tmp/{$user}目录下,不安全,每次开机都会被清空-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/libing/hadoop-2.9.0/hdpdata/</value>
        <description>需要手动创建hdpdata目录</description>
    </property>
    <!-- 指定ZooKeeper地址 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>bd-1:2181,bd-2:2181,bd-3:2181</value>
        <description>ZooKeeper地址,用逗号隔开</description>
    </property>
</configuration>

保存并退出vi

3. 修改hdfs-site.xml

继续修改hdfs-site.xml文件,在<configuration></configuration>之间填入如下内容

<configuration>
    <!-- NameNode HA配置 -->
    <property>
        <name>dfs.nameservices</name>
        <value>ns</value>
        <description>指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致</description>
    </property>
    <property>
        <name>dfs.ha.namenodes.ns</name>
        <value>nn1,nn2</value>
        <description>ns命名空间下有两个NameNode,逻辑代号,随便起名字,分别是nn1,nn2</description>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.ns.nn1</name>
        <value>bd-1:9000</value>
        <description>nn1的RPC通信地址</description>
    </property>
    <property>
        <name>dfs.namenode.http-address.ns.nn1</name>
        <value>bd-1:50070</value>
        <description>nn1的http通信地址</description>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.ns.nn2</name>
        <value>bd-2:9000</value>
        <description>nn2的RPC通信地址</description>
    </property>
    <property>
        <name>dfs.namenode.http-address.ns.nn2</name>
        <value>bd-2:50070</value>
        <description>nn2的http通信地址</description>
    </property>
    <!--JournalNode配置 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://bd-3:8485/ns</value>
        <description>指定NameNode的edits元数据在JournalNode上的存放位置</description>
    </property>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/home/libing/hadoop-2.9.0/journaldata
版权声明:本文为shenzhenhuaya原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/shenzhenhuaya/p/gfbrfbf.html