1.Hadoop优点:
1)高可靠性-可以传任何数据(历史数据);
2)高扩展性-可扩展至2500台左右节点(2300台就要做业务的剥离、迁移),到2700台,会出现各种奇怪的错误;
3)高效性-节点动态平衡,即动态移动数据,保证节点动态平衡,增快处理速度。
4)高容错性-默认3个副本,什么时候改这个数值?即当应用访问这份数据并发数上升的时候,可扩展副本数;(三份副本,可以供3个应用程序并发访问)
能够自动将失败的任务重新分配执行,失败4次后终止
2.Hadoop安装
1)Hadoop企业安装,建议选择版本号x.y.z,z不为0即可;0表示大版本;
jdk 1.8->hadoop->scala 2.11.x->IDEA免费版(LiteIdea为GO语言开发唯一的免费开发工具)
2)Hadoop目录
bin-指令;lib-依赖包;
sbin-启停;
etc-配置文件(hadoop-env.sh,core-site.xml,mapred-site.xml,slaves-所有dn的IP地址一行一个,hdfs-site.xml,yarn-site.xml);
查错:$hadoop_home$/logs中对应节点的日志,.out的是当下启动的日志,1...是历史的
3)CDH缺陷:配置必须要在CM页面上改(后台改很多时候是不生效的),对其他组件软件版本有限制。版本不兼容问题:XXXX类方法不存在或参数类型不匹配;buffer版本不一样;
3.HDFS的设计目标
1)理想状态:一个或几个节点失效不影响数据完整性;
2)设计原则:文件以块存储,把文件切块,每个块128M(可以把块大小调大为256M、512M、SSD甚至可以配成1G,以解决CPU等待的问题;SSD同颗粒读写次数远低于SATA盘,服务器一般只会配128G的SSD盘,其他选择SATA盘)
3)单一master(NameNode)来协调存储元数据:元数据是描述数据的数据(每一条存在内存中的大小为150byte);所以,根据hdfs的大小,可以推算出namenode该使用多少内存。
注意:单一master(nn)和slave(dn)---> M/S架构:ms架构图一定是“品”字状。nn怎样存储元数据?nn中有两个文件:edit和fsimage,当第一次启动集群时,dn会以心跳方式将一些信息汇报给nn,nn收到后会构造出拓扑图,再把当下的内存信息写到fsimage中去,即当下的内存信息就等于fsiamge;
问题:nn挂掉后如何恢复?先读出fsimage信息,再调出edit文件。正常关闭集群时,整个过程nn什么都不做,再启动时dn再重新汇报。
4)客户端对文件没有缓存机制---高版本是有缓存机制的
问题(1)当DN节点达到百台以上,当hdfs重启后,会经常出现几台节点lost的情况,甚至手动起来后又lost掉了:
DN 10分钟没有退出交换空间,在Linux机制中,当内存不够用时,就会使用交换空间(swap),此时系统会将对外提供的所有进程全部挂起,所以一般大数据架构一般禁用交换空间;
起来后又lost:NN认为你已经挂了,会列入NN的黑名单,直接启动自杀进程把这个NN杀掉。——解决办法:去黑名单把这个DN的域名删掉;
2)NN发送心跳保持给DN,是通过SSH协议做的
3)如果NN10分钟没有接到DN的心跳,则认为其lost,并copy其上的block至其他DN(找其他副本)。但不会立即拷贝(后面提到的三周时间节点会拷贝)
4)Block存放策略:副本1随机挑一台磁盘不太满,CPU不太忙的节点;副本2放在副本1不同的机架的节点上;副本3放在副本1同样的机架的不同节点上面;其他随机;
5)大量的零散文件不适合放hadoop,会撑爆NN的内存空间(每一个文件(即使未达到128M),按block,每一个block会存一个命名空间150字节)
6)DN在其文件创建后三周验证其checksum——三周是可改的
5.SNN(相当于nn的冷备)
作用:1、当nn挂了时,可以对外提供服务(Hadoop中只允许一个nn节点对外提供服务);2、定期的从nn中两个文件edit和fsimage抽取过来。
1)NN-fsimage记录正常启动时的元数据,edits是记录启动后的增量数据,即操作日志,这个文件比fsimage大,启动时最耗时间;
2)NN到SNN切换过程中,是人为干预的,切换过程中会造成数据丢失;
6.安全模式
1)系统进入安全模式的两种情况:集群启动,在收集DN的信息时;HDFS磁盘坏损30%-50%(该情况绝对有部分数据丢失,不再能找回),运维人员要手工检查,人工补回,熟悉命令fsck,并把所有参数弄会;
后一种情况发生时,不能再读了(一半可能性失败)
如果发生进入安全模式的情况,一定会出现数据丢失。
引申-当在集群第二次发送format(即不小心执行了format命令)的补救措施:format第一次运行,创建文件,并在nn上创建uuid,并把uuid发到dn上。当format第二次执行时,就在dn上把原来的uuid复制一份粘贴到nn上去。再把第一次创建的文件结构全部删掉。
2)HDFS Client:发出请求的那台node机器,不管是集群内的还是集群外的,就是客户端。
HDFS文件写入,设计写入方式是去中心化,减少clientnode的压力。
7.HDFS API
1)企业应用时:API与指令,首选应该是指令,当指令的性能解决不了的时候,用API;
2)学生应用时:应首选API,因为要对内部有了解,企业追求效率;
总结:Hadoop应用场景:超大文件;流式数据访问-一次写入,多次读取。传输时间与寻址时间;商用硬件;
Hadoop生态链比较丰富,可以弥补它的部分缺陷(缺陷:不适用与低延时的数据使用;大量小文件;多用户写入,任意修改文件;)