hadoop真分布式集群搭建(高可用性)

hadoop完全分布式集群搭建(高可用性)

搭建过程:
  • 1.准备三台虚拟机

    • 第一台:作为NameNode

      • 负责文件元数据的操作,全权管理数据库的复制
    • 第二台:作为DataNode

      • 负责处理文件内容的读写请求,数据流不经过NameNode
    • 第三台:作为SecondNameNode

      • 作用同NameNode

      • 高可用性体现:当NameNode失效后,DataNode自动

        将NameNode变为SecondNameNode

  • 2.配置三台虚拟机之间免密登录(保证通信的便捷性)

    • 确保三台虚拟机都已经生成公钥(三台同理)
    • 如果没有:
    • ssh-keygen -t rsa 设置公钥
    • cat id_rsa.pub >> authorized_keys 捕捉
    • chmod 600 authorized_keys 设置读写权限
    • 然后三台虚拟机之间必须保证两两免密通信
    • scp ~/.ssh/authorized_keys root@192.168.10.197:~/.ssh/
    • ssh-copy-id ip地址
    • ip设置成另一台虚拟机的ip
    • 言下之意要做六次免密配置
  • 3.我这里准备三台虚拟机

    • ip分别如下:
  • NameNode:192.168.10.126

  • DataNode:192.168.10.131

  • SecondNameNode:192.168.10.192

    • 修改hosts文件中信息为
  • 192.168.10.126 master

  • 192.168.10.131 slave

  • 192.168.10.192 secondmaster

  • 4.修改core-site.xml文件

    • 在这里插入图片描述
    • 三台保证一致
  • 5.修改hdfs文件系统配置文件(hdfs-site.xml)

    • <configuration>
      	<property>
      	  <name>dfs.replication</name>
      	  <value>3</value>
      	</property>
       	<property>
      	  <name>dfs.namenode.secondary.http-address</name>
      	  <value>secondmaster:50090</value>
      	</property>
      </configuration>
      
    • dfs.replication = 3 表示集群中服务器个数

    • dfs.namenode.secondary.http-address = 192.168.10.192:50090 这里表示当NameNode失效之后,自动启用的SecondNameNode的ip以及对应的端口映射,50090代表其运行时,不占用已经有问题的50070服务端口

  • 6.修改slaves文件

    • 修改内容如下:
    • master
      secondmaster
      slave
  • 注意修改内容中默认是localhost,原因是之前搭建的是伪分布式集群,所以三个节点都是自己一台虚拟机

  • 7.在启动hadoop之前

    • 首先应该进行名节点文件夹的格式化
    • 命令:hdfs namenode -format
测试1:
  • 1.由于三台虚拟机全部安装在一台计算机上
    • 注意:resourceManager在哪台机器上就在哪儿启动,否则会出错,这里我们默认的是namenode
    • start-all.sh
    • 即可启动集群
    • 输入jps查看已经运行的服务
    • ps:多次输入密码启动各种服务
    • 这里存在一个问题:如果配置过的公钥更换ip就会无法打开NameNode在这里插入图片描述
  • 结果如下:
    • 192.168.10.126 (NameNode运行的服务信息)
      -在这里插入图片描述

    • 192.168.10.131(DataNode运行的服务信息)

    • 在这里插入图片描述

    • 192.168.10.192(SecondNodeName运行的服务信息)

    • 在这里插入图片描述

  • 出现结果如上:说明集群已经成功配置并且启动!
测试2
  • 我们新建一个txt文件,存放如下内容用于测试

  • 在这里插入图片描述

  • Dear friends,
    
    On behalf of the Students’ Union, I am writing to extend my warm welcome to all the international students that are coming to our university. I firmly believe that your entering our university will bring us new ideas from different cultures and promote communication.                                                         
    
    Also, we have some suggestions before you come to our university. As you all know, we have a great much free time in college and the teachers don’t oversee us strictly. Therefore, it is recommended that you can arrange your time properly and avoid being indulged in computer games, etc. Moreover, in order to make yourselves quickly adjusted to our campus life, it would be of great help if you can learn Chinese as well as you can. Last but not the least, it is necessary to take part in some activities so that you can improve your communication abilities and expand horizon.
    
    We are looking forward to seeing you soon and wish everything goes well.
    
    Yours sincerely
    
    Li Ming
    

-在这里插入图片描述

  • 将文件拖入/root目录下

  • hadoop fs -ls -R / 查看hadoop文件系统下的全部目录名

  • 新建input输入目录

    • hadoop fs -mkdir -p /input
  • 将测试文件didid拷入hadoop文件系统的input目录下

    • hadoop fs -put /root/didid.txt /input
  • 进入hadoop中MapReduce自带的jar包目录下

    • cd /usr/soft/hadoop-2.7.3/share/hadoop/mapreduce/
  • 我们使用的包是封装好的mapreduce包(测试用例)

  • 测试用例就是之前写过的单词统计

    • 该实例就相当于java的helloworld
  • 这里使用敲入如下命令,可以自动生成(tab键)

    • hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /input/didid.txt /usr/soft/out

    • 结果存放在 /usr/soft/out/目录 ,out目录是我自己手动建的无所谓,仅用于存放结果

    • 在这里插入图片描述

    • 出现如下结果代表已经分析成功

  • 输入命令:hadoop fs -ls /usr/soft/out/

  • 查看该目录下的文件结果

  • 在这里插入图片描述

  • 发现已经生成了part-r-00000文件

  • 输入命令:hadoop fs -text /usr/soft/out/part-r-00000

  • 在这里插入图片描述

  • 即可查看到已经成功分词的结果

测试原理(简单的MapReduce实例)

1、Hadoop四大组件
HDFS:分布式存储系统
MapReduce:分布式计算系统
Yarn:Hadoop的资源调度系统
Common:以上三大组件的公共基础部分,用于提供工具包和RPC框架等。
(注:RPC:远程过程调用,RPC能够让本地应用简单、高效地调用服务器中的过程(服务))
2、什么是MapReduce?
MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。
在上面的MapReduce定义里可以找出几个关键点:
一是软件框架,二是并行处理,三是可靠且容错,四是大规模集群,五是海量数据集。
MapReduce主要思想: 分久必合
MapReduce核心思想: 相同”的key为一组,调用一次reduce方法,方法内迭代这一组数据进行计算

3、为什么使用MapReduce
MapReduce致力于解决大规模数据处理的问题,利用局部性原理将整个问题分而治之。在处理之前,将数据集分布至各个节点。处理时,每个节点就近读取本地存储的数据处理(Map),将处理后的数据进行合并(Combine)、排序(Shuffle and Sort)后再分发至(Reduce节点),避免了大量数据的传输,提高了处理效率。

4、MapReduce原理

在这里插入图片描述

4.1、map task
     首先,map task将处理后的每一条数据打上标签
    (打标签的目的:让这一条数据知道将来被哪一个reduce mask处理。打标签的作用:分区)
    (分区是由分区器完成的,默认分区器为:HashPartitioner。分区策略为:根据key的hashcode和map reduce的数量取模)
    mask task将数据一条条的读到内存中(进入buffer后的每一条数据由三部分组成:分区号、key、value。),当内存中的数据满80M后,会将这80M内存封锁,之后对这80M数据进行一个小聚合(combiner)。在进行聚合时,会同时对这些数据进行排序(排序依据:分区号,key)。将相同分区的数据放在一起,并且分区内根据key排序。
    当conbiner和sort完毕后,就可以了溢写数据到磁盘上。此时的形成的磁盘文件就是已经分好区的并且内部有序的文件。每进行一次溢写都会产生一个磁盘小文件。
    map task计算完毕后,会将磁盘上的小文件合并成一个大文件。在合并的时候利用归并排序算法,将一个个的小文件整合成一个有序的大文件。
    每一个map task都会进行刚才所进行的一切过程,也就是说每一个map task都会产生一个有分区的并且分区内部有序的大文件。

4.2、reduce task
    去map task读取响应的分区数据,将读取到的分区数据写入到内存中,内存满了就会封锁该分区,进行小聚合并且排序,然后溢写成一个小文件,当所有文件读取完毕,会通过归并排序将这些小文件combiner成一个有序的大文件。
    (为什么要产生一个大文件?为了提高分组效率。归根结底,这四次排序都是为了提高分组效率)
    每一组数据都会调用reduce函数,产生一个结果(相同key的数据为一组)。

至此,又可以快乐进行大数据的学习了!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值