安装一个多节点的Hadoop集群

为什么我们看了很多资料还是不知道hadoop 到底以什么方式工作?为什么我们按照各种版本安装部署hadoop 中途总是困难重重?

 

之前我总结了如何安装一个单节点的hadoop

但hadoop毕竟是分布式计算平台。我们新手的起码入门标尺-----应该是在多个计算机之间搭建好集群。所以我紧接着写这一篇文章。

 

  • 我们回顾一下hadoop的整体结构:

图片来源:https://blog.csdn.net/babyfish13/article/details/52527665

 

hadoop 核心就由这三部分组成,

HDFS(分布式文件存储系统)负责分布式文件存储.

YARN(资源管理系统)负责集群的统一调度.

MAPREDUCE(分布式计算框架)

 

简单介绍一下 HDFS 和 YARN:

HDFS将文件分别存储到集群中的多个节点上,并靠冗余存储来实现容错(即当某个节点出错时,仍保证数据的不丢失和计算的准确性,notice:容错是由DataNode之间自行备份的.)

HDFS架构图如下,由一个client 负责处理跟用户的交互和数据的切分,由一个NameNode记录元数据(元数据即描述数据的数据,比如文件路径,文件被分为几块?每个块在哪些DataNode上等),DataNode则真正存储着切分后的数据块.

单节点的NameNode挂了就是挂了,SecondNameNode并不是用来替换的.但是SecondNameNodeNameNode挂了重启的时候提供支持,hdfs会把操作日志记录下来,存在editlog中,当NameNode挂了重启的时候,加载editlog,回放一遍,达到重启前的状态.在回放之前,会调用SecondNameNode中的fsimage,fsimage存放过去某一个时刻的内存快照,NameNode重启时,在fsimage的基础上根据editlog达到重启前的状态.SecondNameNode会定期的将editlog读入,更新fsimage,删除旧editlog,这样就避免了长时间的日志积累,导致editlog文件过大的情况.

2.0版本的hadoop允许有多个NameNode,用来避免NameNode挂掉之后的替换,NameNode之间 用所以hadoop提供了一种叫做JournalNode技术,这项技术可以在NameNode节点间共享数据.

更多HDFS的内容,可以参考我的文章:https://blog.csdn.net/b285795298/article/details/83384534

 

YARN 的结构:

 

 

新的资源管理器ResourceManager全局管理所有应用程序计算资源的分配,每一个应用的 ApplicationMaster 负责相应的调度和协调。NodeManager 是每一台机器框架的代理,是执行应用程序的容器,监控应用程序的资源使用情况 (CPU,内存,硬盘,网络 ) 并且向调度器汇报。

更多YARN的内容,可以参考我的文章:https://blog.csdn.net/b285795298/article/details/83386522

 

  • 我们开始搭建集群

我们用四台机器,一个master, 担任HDFS的 NameNode, YARN的 ResourceManager

另外三台取名data1,data2,data3,担任HDFS的 DataNode, YARN的 NodeManager

  • 虚拟环境搭建,相互之间通信的建立

  1. 拷贝安装四个linux系统的主机(ubuntu  16.04)。可以先安装配置好一台虚拟机(比如安装jdk,hadoop,ssh等),然后拷贝四份。
  2. 四个主机相互之间已经实现ssh无密码登陆。实现方式可以参考:https://blog.csdn.net/b285795298/article/details/87795844
  3. 每台主机配置两张网卡:

网卡1:“NAT网卡” 可以通过HOST主机(windows)连接外网

网卡2:“仅主机适配器” 用于创建内部网络

  • 对四个主机进行网卡配置:
hduser@master:~$ sudo vim /etc/network/interfaces
  •  分别配置data1、data2、data3、master 的ip 为:
address 192.168.56.101
address 192.168.56.102
address 192.168.56.103
address 192.168.56.104
  • 各主机的interfaces 文件内容如下(四台主机除了ip地址不一样,其余内容全部一样)
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

#NAT interface
auto eth0
iface eth0 inet dhcp

#host only interface
auto eth1
iface eth1 inet static
address 192.168.56.104
netmask 255.255.255.0
network 192.168.56.0
broadcast 192.168.56.265
~  
  • 配置四台主机的hostname 分别为:master、data1、data2、data3
hduser@master:~$ sudo vim /etc/hostname
  • 编辑hosts文件
hduser@master:~$ sudo vim /etc/hosts
127.0.0.1       localhost
127.0.1.1       hadoop

192.168.56.104 master
192.168.56.101 data1
192.168.56.102 data2
192.168.56.103 data3



# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

完成上述步骤,以上四台主机可以通过ssh,相互访问了。

 

  • 编辑data1、data2、data3的hadoop 配置文件。

hduser@data1:~$ sudo vim /usr/local/hadoop/etc/hadoop/core-site.xml 

<configuration>
<property>
  <name>fs.default.name</name>
  <value>hdfs://master:9001</value>
</property>

</configuration>

 

hduser@data1:~$ sudo vim /usr/local/hadoop/etc/hadoop/yarn-site.xml
<configuration>
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>

</property>

<!-- resourcemanager  与 nodemanager 的连接地址-->

<property>
  <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  <value>org.apache.hadoop.mapred.ShuffleHandler</value>

</property>

<!--resourcemanager 与 applicationmaster 的连接地址 -->

<property>
                <name>yarn.resourcemanager.scheduler.address</name>
                <value>master:8030</value>
</property>

<!--resourcemanager 与client 的连接地址 -->
<property>
                <name>yarn.resourcemanager.resource-tracker.address</name>
                <value>master:8025</value>
</property>
<property>
                <name>yarn.resourcemanager.address</name>
                <value>master:8050</value>
</property>


</configuration>

 

hduser@data1:~$ sudo vim /usr/local/hadoop/etc/hadoop/mapred-site.xml 

<configuration>
<property>
  <name>mapred.job.tracker</name>
  <value>master:54311</value>

</property>

</configuration>

 

hduser@data1:~$ sudo vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml 

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

<property>
  <name>dfs.datanode.data.dir</name>
  <value>file:/usr/local/hadoop/hadoop_data/hdfs/datanode</value>
</property>

</configuration>
  • 配置master主机

  • 编辑masters 和slaves 文件,告诉hadoop 那一台服务器是NameNode 哪一台是DataNode
hduser@master:~$ sudo vim /usr/local/hadoop/etc/hadoop/masters


hduser@master:~$ sudo vim /usr/local/hadoop/etc/hadoop/slaves

  • 用master ssh 连接到slaves ,创建HDFS目录:
分别连接data1、data2、data3

先删除hdfs目录

sudo rm -rf /usr/local/hadoop/hadoop_data/hdfs

创建Datanode 目录

mkdir -p /usr/local/hadoop/hadoop_data/hdfs/datanode

将目录的所有者更改为用户

sudo chown -R hduser:hduser /usr/local/hadoop

 

  • 然后用 exit 命令回到master主机,

作同样修改,只是hdfs下创建的是namenode文件夹
 

先删除hdfs目录

sudo rm -rf /usr/local/hadoop/hadoop_data/hdfs

创建Datanode 目录

mkdir -p /usr/local/hadoop/hadoop_data/hdfs/namenode

将目录的所有者更改为用户

sudo chown -R hduser:hduser /usr/local/hadoop

红色字体加下划线的两个步骤对于namenode he datanode 的成功部署非常重要,如果部署过程中,出现节点丢失或livenode 数量不同的情况,一般是datanode/current 文件夹下 VERSION文件中的namespaceID 跟namenode/current下面的不一致.

 

hduser@master:~$  sudo vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml 
<configuration>
<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>
<property>
  <name>dfs.namenode.name.dir</name>
  <value>file:/usr/local/hadoop/hadoop_data/hdfs/namenode</value>
</property>

 

 

启动hadoop

  • 格式化namenode 
hadoop namenode -format
  • start-all.sh
  • jps 查看进程:

resourcemanager web 界面:

 HDFS web 界面:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半九拾

援助一个bug吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值