Hadoop是一个开源的大数据框架;
Hadoop是分布式计算的解决方案;
Hadoop = HDFS(分布式文件系统) (存储)+ MapReduce(分布式计算)
HDFS总结:
普通的成百上千台机器;TB甚至PB为单位的大量的数据;简单便捷的文件获取;
HDFS概念:
1.数据块
数据块是抽象块,而非整个文件作为存储单元;默认大小为64M,一般设置128M,备份3个;
2.NameNode
管理文件系统的命名空间,存放文件元数据;维护着文件系统的所有文件和目录,文件与数据块的映射;记录每个文件中各个块所在数据节点的信息;
3.DataNode
存储并检索数据块;向NameNode更新所存储块的列表;
HDFS优点:
适合大文件存储,支持TB、PB级别的数据存储,并有副本策略;可以构建在廉价的机器上,并有一定的容错和恢复机制;支持流式数据访问,一次写入,多次读取最高效;
HDFS缺点:
不支持大量小文件的存储;不适合并发写入,不支持文件随机修改;不支持随机读等低延时的访问方式;
1. 数据块 不宜太大,也不宜太小;
太小了,会分割为多个数据块,减低效率,加大了namenode的内存消耗;
太大了会对于并行支持不够,重启需要重新加载数据,数据块过大时间过长;
2. hadoop2 HA高可用集群,避免了namenode挂掉的情况;
./hdfs dfs -help 查看帮助文档
查看hdfs 根目录: hdfs dfs -ls /
hdfs dfs -mkdir /test
hdfs dfs -copyFromLocal /xx.txt /test/
hsfs dfs -cat /test/xx.txt
python 操作 hdfs 引入hdfs3模块
YARN(Haoop2之后的资源管理器)概念
1.ResourceManager:分配和调度资源;启动并监控ApplicationMaster; 监控NodeManager
2.ApplicatonMaster:为MR类型的程序申请资源,并分配给内部任务;负责数据的切分;监控任务的执行及容错;
3.NodeManager:管理单个节点的资源;处理来自ResourceManager的命令;处理来自ApplicationMaster的命令
MapReduce是一种编程模型,是一种编程方法,是抽象的理论;
MapReduce编程模型
输入一个大文件,通过Split之后,将其分为多个分片;每个文件分片由单独的机器去处理,这就是Map方法 ;将各个机器计算的结果进行汇总并得到最终的结果,这就是Reduce方法;
python mapreduce实例
map.py