hadoop入门介绍

552 阅读5分钟

1. hadoop作用

利用集群的方式,实现海量数据的存储和计算的平台。

2. hadoop组成

  • common:(基础功能组件)(工具包, RPC 框架) JNDI 和 RPC
  • hdfs:Hadoop Distributed File System 分布式文件系统
  • mapreduce:(Map 和 Reduce 分布式运算编程框架)
  • yarn:Yet Another Resources Negotiator 运算资源调度系统)

3. hdfs

3.1. hdfs介绍

分布式文件系统,用来解决海量数据的存储问题。

3.2. hdfs核心思想

分而治之:将大文件,大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析;

1、大文件被切割成小文件,使用分而治之的思想让很多服务器对同一个文件进行联合管理

2、每个小文件做冗余备份,并且分散存放在不同服务器,做到高可靠不丢失

3.3. hdfs架构

  • 主节点namenode:集群老大,掌管文件系统目录树,处理客户端读写请求
  • secondarynamenode:严格说并不是namenode备份节点,主要给namenode分担压力之用
  • 从节点datanode:存储整个集群所有的数据块,处理真正的数据读写

3.4. hdfs实现shell操作

安装包:

bin:可执行的二进制文件

etc:所有的配置

logs:记录的日志信息

sbin:启动和关闭集群等

实现对hdfs集群操作:

1、查看整个hdfs集群的文件:

      hdfs dfs -ls   hdfs集群的目录

      hdfs dfs -ls  /  hdfs集群根目录内容

      hdfs dfs -ls  R 递归展示根目录下内容

2、上传文件到hdfs中:

      -put                      hdfs dfs -put /aaa/jdk.tar.gz /bb

      -copyFromLocal   hdfs dfs -copyFromLocal /aaa/jdk.tar.gz /bb

从当前aaa文件夹上传到bb文件夹

3、下载文件到本地:

      -get                      hdfs dfs -get /aaa/jdk.tar.gz /bb

      -copyToLocal       hdfs dfs -copyToLocal /aaa/jdk.tar.gz /bb

从hdfs 的aaa文件夹下载到当前bb文件夹

     -getmerge            hdfs dfs -getmerge /aa/*.txt /bb.txt

将hdfs的aa文件夹中的所有txt文件下载合并到当前bb.txt中

4、复制及移动

     -cp                         hdfs dfs -cp /aaa/jdk.tar.gz /bb/jdk.tar.gz

在复制aaa下的jdk.tar.gz文件到bb中

     -moveFromLocal    hdfs fs - moveFromLocal /home/hadoop/a.txt /aa

从本地剪切到aa中

5、删除

    -rm                           hdfs dfs -rm    /aa/a.txt

                                     hdfs dfs -rm -r   /aa

删除aa下的a.txt,删除aa文件夹

6、查看文件内容

   -cat                           hdfs fs -cat /hello.txt    显示文件内容

   -text                          hadoop fs -text /hello.txt   以字符形式打印文件内容

4. hdfs核心设计

4.1. 心跳机制

hadoop是Master/Slave结构, Namenode是master,datanode是slave

master启动时会启动一个ipc(inter-process communication,进程间通信)server服务等待slave的链接

slave启动时,会主动链接master的ipc server服务, 并且每隔3秒连接一次master(这个间隔时间是可以调整的),我们形象的称为心跳。slave通过心跳汇报自己的信息给master,master也通过心跳得知datanode的状态。

如果 master 长时间都没有收到 slave 的心跳,就认为该 slave 挂掉了。

hdfs默认的超时时间为10分+30秒。

4.2. 安全模式

safemode是namenode的一种状态,

  • active活跃
  • standby热备
  • safemode安全模式

safemode是hadoop的一种自我保护状态,在该状态下不允许上传文件;

namenode进入安全模式原理:

namenode发现集群的block块丢失率达到0.1%,namenode就会进入安全模式,在安全模式下,客户端不会对任何数据进行操作,只能查看元数据信息;这个丢失率也是可以配置的

如何退出安全模式:

1、找到问题所在,进行修复(比如修复宕机的datanode);

2、或者可以手动强行退出安全模式(但是并没有整整解决问题);

安全模式常见命令:

hdfs dfsadmin -safemode get      //查看安全模式状态

hdfs dfsadmin -safemode wait    //等待,一直到安全模式结束

hdfs dfsadmin -safemode enter   //进入安全模式

hdfs dfsadmin -safemode leave   //退出安全模式

4.3. 副本存放策略

作用:数据分块存储和副本的存放,是保证高可靠和高性能的关键;

方法:将每个文件的数据进行分块存储,每个数据块由保存有多个副本,这些数据块副本分布在不同的机器节点上

存放说明(默认存放策略):

①第一个副本放在和客户端启动的同一个节点里(如果 不在集群范围内,则这第一个 是随机选取的,系统会尝试不选择哪些太满或者太忙的 )。

②第二个副本放置在与第一个节点不同的机架中(近乎随机选择,系统会尝试不选 择哪些太满或者太忙的 )。

③第三个副本和第一个在同个机架,随即放在不同节点

4.4. 负载均衡

机器和机器间磁盘利用率不平衡是hdfs集群非常容易出现的问题,尤其是namenode出现故障或现有的集群上添加新的datanode的时候。

命令:

sbin/start-balancer.sh 

sbin/start-balancer.sh -threshold 5 

sbin/start-balancer.sh -t 10% 

机器容量最高的那个值 和 最低的那个值得差距 不能超过 10%

自动进行均衡非常慢, 一天能移动的数据量在 10G-10T 的级别,很难满足超大集群的需求 原因: HDFS 集群默认不允许 balance 操作占用很大的网络带宽,这个带宽是可以调整的。

hdfs-site.xml 配置文件中进行设置 

<property> 

        <name>dfs.balance.bandwidthPerSec</name> 

        <value>10485760</value> 

</property>