大数据开发从小白到大神(三)——Hadoop完全分布式

上一篇文章给大家介绍了Hadoop的伪分布式系统,但是当电脑重启后,数据就是丢失,这是因为Hadoop的伪分布模式是把文件存放在临时文件夹中(/tmp/hadoop/),当进程关闭后,文件也就不存在了,所以我们今天来配置Hadoop的完全分布式。

首先我们需要搞清楚几个问题,Hadoop的完全分布式中,一共有5个进程,分别是名称节点(NameNode),数据节点(dataNode),辅助名称节点(secondaryNameNode),资源管理器(ResourceManager)和节点管理器(NodeManager)。我们现在一共有5台虚拟机,主机名分别是s201,s202,s203,s204,s205,我们这样来配置分布式集群:

s201 -> 名称节点+资源管理器节点

s202 -> 数据节点+节点管理器

s203 -> 数据节点+节点管理器

s204 -> 数据节点+节点管理器

s205 ->辅助名称节点

  • 准备工作——ssh root用户

我们一共配置5台虚拟机,一台名称节点(最关键的节点,需要备份),三台数据节点和一台辅助节点。之后我们还需要做一些

辅助的工作。上一篇中说道,我们可以通过ssh,使用s201来分别登录其他4个主机,但是这个只是ubuntu用户可以这样登录,root用

户就不可以了,因为ubuntu用户和root是不同的密钥系统,因此我们还需要使用root用户登录s201主机,然后在~/.ssh中生成公钥和私钥

然后把s201的公钥使用scp或者nc分别发送到其他4台主机,这样s201就可以无秘登录其他4台主机了,这些操作跟ubuntu用户是一样的,

这里不再多说。

  • 准备工作——xcall和xsync

下面我们需要新建两个可执行文件,用来批量处理。分别叫xsync和xcall,名字自己可以随意起。其中xsync可以分别给其他4台

设备发送数据,xcall则可以同时对5台设备进行相同的操作。这两个文件都放在/usr/local/bin目录下

$>cd /usr/local/bin

注意这两个文件在新建时是ubuntu用户,需要手动修改owner成root用户

$>sudo chown root:root xsync //修改xsync文件的所有者

$>sudo chmod a+x xsync //添加执行权限

$>sudo chown root:root xcall //修改xcall文件的所有者

$>sudo chmod a+x xcall //添加执行权限

这两个文件的内容分别是

涉及shell编程的东西,那又是另一个方向了,shell编程的东西很多,大家可以自己学习。

有了这两个文件(命令),我们就可以方便的进行集群的配置。

  • 准备工作——分发jdk,hadoop和环境变量
上一篇文章中我们已经准备好jdk和hadoop的tar包还有环境变量,现在我们就用rsync命令把这几个东西都发给其他4台设备

$>cd /soft

$>xsync /soft //分发jdk和hadoop包

$>xsync /etc/environment //分发环境变量

$>xcall source /etc/enviroment //立即生效所有节点的环境变量配置

  • 配置完全分布式文件
要完成完全分布式系统的搭建需要配置一下几个文件:
请大家按照图片的提示自己完成几个文件的配置
hdfs-site.xml


core-site.xml


yarn-site.xml


slaves


mapred-site.xml


这几个文件配置完成后,我们来分发这几个文件到其他4台主机上

$>xsync /soft/hadoop/etc/hadoop core-site.xml //分发文件

$>xsync /soft/hadoop/etc/hadoop hdfs-site.xml //分发文件

$>xsync /soft/hadoop/etc/hadoop yarn-site.xml //分发文件

$>xsync /soft/hadoop/etc/hadoop mapred-site.xml //分发文件

$>xsync /soft/hadoop/etc/hadoop slaves //分发文件

注意core-site.xml这个文件,我们修改了本地文件的存储地址,这样重启电脑后,我们的数据就不会丢失了。

$>hadoop namenode -format //格式化hadoop文件系统

$>start-all.sh //启动所有进程

$>xcall jps //查看所有节点的进程


出现上面的图片,说明5个进程和节点都已经启动完成。分别对应我们之前设置的

s201 -> 名称节点+资源管理器节点

s202 -> 数据节点+节点管理器

s203 -> 数据节点+节点管理器

s204 -> 数据节点+节点管理器

s205 ->辅助名称节点

启动后我们也可以通过webui来查看整个集群的情况。

打开虚拟机的火狐浏览器->网址输入http://s201:50070//查看名称节点



打开虚拟机的火狐浏览器->网址输入http://s202:50075//查看数据节点

打开虚拟机的火狐浏览器->网址输入http://s203:50075//查看数据节点

打开虚拟机的火狐浏览器->网址输入http://s204:50075//查看数据节点

打开虚拟机的火狐浏览器->网址输入http://s205:50090//查看辅助名称节点

我就不再截图了,大家可以自己看看。

好了,现在我们回到s201,建立hadoop的文件系统

$>hadoop fs -mkdir -p /user/ubuntu/data //新建hadoop的文件系统

$>cd ~ //

$>hadoop fs -put hello.txt /user/ubuntu/data //上传hello.txt文件到data目录下

$>hadoop fs -ls -R / //查看所有文件的详细信息


可以看到我们的hello.txt已经在文件系统中了。我们也可以在webui中看到。

打开虚拟机的火狐浏览器->网址输入http://s202:50075//查看数据节点

选择Utilities->Browse the file system//


可以看到hello.txt的大小是11B,block size是128MB,就是说这个block的大小是128MB,当文件大于128MB后,就需要分割文件,把文件放在几个块

中,这个工作由hadoop在底层已经给我们做好了。副本数是3,我们可以查看数据节点的情况

选择Datanodes


每个节点上都放上了文件的一个副本。我们可以实际上看看文件具体存放在哪里了,我们的数据实际上是放在数据节点上的,因此需要切换到s202,

或者s203,或者s204

$>ssh s202 //登录s202(数据节点)

$>cat hadoop/dfs/data/current/BP-377304219-192.168.37.201-1520345495424/current/finalized/subdir0/subdir0/blk_1073741827


下面我们来看看一个比较大的文件是怎么存放的

$>exit //退出

$>cd /Downloads //

$>ls -alh //查看所有文件的详细信息


我们来上传hadoop-2,7.2.tar.gz这个文件,超过128M

$>hadoop fs -put hadoop-2.7.2.tar.gz data/ //上传hadoop-2.7.2.tar.gz到

$>fs -ls -R / //递归查看文件


我们在webui中查看


查看块信息



我们发现hadoop-2.7.2.tar.gz这个文件被分割成了两个块:

Block 0:

ID:1073741828

size:134217728(byte)

Block 1:

ID:1073741829

size:77829646(byte)

这两个块的大小加起来刚好是hadoop-2.7.2.tar.gz的大小203MB。我们到实际的数据节点去查看。

$>ssh s202 //切换到数据节点s202

$>cd hadoop/dfs/data/current/BP-377304219-192.168.37.201-1520345495424/current/finalized/subdir0/subdir0/ //进入文件夹

$>ls -al //查看文件信息


我们发现了有blk_1073741827,blk_1073741828,blk_1073741828。其中blk_1073741827是hello.txt,blk_1073741828和blk_1073741829是tar包.我们

也可以切换到s203和s204来查看,结果都是一样的,因为我们设置了3个副本,因此在3个节点上存储的东西都是一样的。

以上就是今天的全部内容。

与您共勉



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值