hadoop(一)

hadoop的核心项目:HDFS(分布式文件系统)和MapReduce(并行计算框架)

hadoop的集群是:


传统是把数据传输到计算节点:数据量越大网络传输延迟就越长,不能满足企业化的要求。

现在是把计算程序传输到数据节点:(计算程序一般不大)让数据节点变成计算节点,就地取数据,只需要考虑I/O问题,然后把每个计算节点的结果汇总起来。

所以Map - Reduce即可理解为:

第一步:把计算程序分到个个存储节点,分别运行分别计算个个数据。

第二步:个个节点的计算结果汇总起来作为最终结果给用户。

这样子就可以减少了网络带宽的延迟时间节省了网络的带宽。

MapReduce处理的是离线数据



HDFS分布式文件系统(Distributed File System)

数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 。

是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。

通透性。让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般。

容错。即使系统中有某些节点脱机,整体来说系统仍然可以持续运作而不会有数据损失。

分布式文件管理系统很多,hdfs只是其中一种。适用于一次写入多次查询的情况,不支持并发写情况,小文件不合适。


HDFS主要对I/O操作,但是实际开发当中主要用封装好的框架去操作。

主要使用shell和java操作。

应该使用bin/hadoop fs的形式

所有的FS shell命令都是使用路径作为参数的


bin/hdfs dfs ......

-help [cmd] //显示命令的帮助信息

-ls(r) <path> //显示当前目录下所有文件

-du(s) <path> //显示目录中所有文件大小

-count[-q] <path> //显示目录中文件数量

-mv <src> <dst> //移动多个文件到目标目录

-cp <src> <dst> //复制多个文件到目标目录

-rm(r) //删除文件(夹)

-put <localsrc> <dst> //本地文件复制到hdfs

-copyFromLocal //同put

-moveFromLocal //从本地文件移动到hdfs

-get [-ignoreCrc] <src> <localdst> //复制文件到本地,可以忽略crc校验

-getmerge <src> <localdst> //将源目录中的所有文件排序合并到一个文件中

-cat <src> //在终端显示文件内容

-text <src> //在终端显示文件内容

-copyToLocal [-ignoreCrc] <src> <localdst> //复制到本地

-moveToLocal <src> <localdst>

-mkdir <path> //创建文件夹

-touchz <path> //创建一个空文件


体系结构:

Namenode:整个文件的管理节点。它维护着整个文件系统的文件目录树。

Datanode:block文件块就是最基本的存储单位。HDFS默认block的大小就是128MB.以一个256MB文件

  共有两个block.存储的时候会有Replication即副本。容错性体现,会存放在不同的节点上。

   用空间换取高容错。


namenode实现高可靠:HA的自动failover(hadoop2中体现)


namenode作为管理的节点是要HA必须要让数据成为共享,一个集群中存在两个NameNode,分别运行在独立的物理节点上。在任何时间点,只有一个NameNodes是处于Active状态,另一种是在Standby状态。 Active NameNode负责所有的客户端的操作,而Standby NameNode用来同步Active NameNode的状态信息,以提供快速的故障恢复能力。两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步了,对于HA集群而言,确保同一时刻只有一个NameNode处于active状态是至关重要的。否则,两个NameNode的数据状态就会产生分歧,可能丢失数据,或者产生错误的结果。为了保证这点,JNs必须确保同一时刻只有一个NameNode可以向自己写数据。 JournalNodes部署的节点必须是单数例如,3,5,7,9等。当运行N个节点时,系统可以容忍至少(N-1)/2个节点失败而不影响正常运行。 


HDFS2的federation(解决单一命名空间的问题).

首先datanode是给所有的namenode共享的。

Namenode上面多了一层NameService.

NameService会实现不同命名空间的一个隔离,会组成一个联盟它对于用户来说是透明的。用户要访问NameService就要通过挂载表的方式来访问。


用java控制HDFS,有一个很重要的接口就是filesystem.






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值