- Hadoop Ecosystem囊括的方向:
- 要了解更多关于这些工具,请访问大数据对基本的Hadoop工具的Edureka博客:http://www.edureka.co/blog/essential-hadoop-tools-for-big-data
- 存储,海量的数据怎样有效的存储?主要包括hdfs、Kafka;
- 计算,海量的数据怎样快速计算?主要包括MapReduce、Spark、Flink等;
- 查询,海量数据怎样快速查询?主要为Nosql和Olap(Online analytical processing),Nosql主要包括Hbase、 Cassandra 等,其中olap包括kylin、impla等,其中Nosql主要解决随机查询,Olap技术主要解决关联查询;
- 挖掘,海量数据怎样挖掘出隐藏的知识?也就是当前火热的机器学习和深度学习等技术,包括TensorFlow、caffe、mahout等;
文章目录
-
- 一、Hadoop = HDFS + Yarn + MR
- 二、HDFS【data storage】【written in Java】
-
- 1. 基本特点
- 2. 什么是“HDFS块”和“输入分片/分割”之间的区别?
- 3. 为什么最佳分片大小应该和块(block)大小(64/128MB)相同?
- 4. 为什么HDFS不适合存储小文件?
- 5. 为什么HDFS中的块如此之大的好处和坏处(64 /128 MB)?
- 6. HDFS文件压缩的好处?
- 7. 当两个客户端尝试访问对HDFS相同的文件,会发生什么?
- 8. 如何写入HDFS?【Write to HDFS】
- 9. Replication Management
- 10. NameNode的地位/重要性?HDFS如何管理数据复制?
- 11. 是否可以在不同集群之间复制文件?如果是的话,怎么能做到这一点?
- 12. 当NameNode关闭时会发生什么?
- 13. 添加新datanode后,作为Hadoop管理员需要做什么?
- 14. 为什么我们有时会得到一个“文件只能被复制到0节点,而不是1”的错误?
- 15. Client (C) read HDFS files——Client如何读HDFS文件?
- 16. 为什么要用flume导入hdfs,hdfs的构架是怎样的
- 17. HDFS常用命令
- 18. Hadoop为namenode容错提供的两套机制?
- **19. 解释HDFS索引过程**
- 20. 为什么在HDFS,“读”是并行的,但“写”不是?
- 21. 如果您在尝试访问HDFS或者其相应的文件得到一个“连接被拒绝Java异常'的错误会发生什么?
- 三、MapReduce programming model 【large scale data processing】
-
- 1. MapReduce设计的一个理念
- 2.MapReduce在三个层面上的构思
- 3. MapReduce runtime system三大特色
- 4. MR程序组成【按顺序】
- 5. Combiner的作用是什么?
- 6. MapReduce 计算模式与一般的并行计算、分布式计算的异同:
- 7. Map任务将其输出写入本地磁盘local disk,而非HDFS,为什么?
- 8. Reducer怎么知道要从哪台机器上取得map输出呢?
- 9. Reducer之间如何互相沟通?
- 10. 什么是MapReduce的分区(partition)?
- 11. Mapreduce中溢写Spilling发生在什么时候?
- 12. MR工作timeline?若第一个提前开始reducer完成那个cpu的reduce工作, 它可以在提前结束这个reducer全部的reduce工作吗?
- 13. **‘mapreduce.job.reduce.slowstart.completed.maps’ When to Start Reducers?**
- 14. MapReduce中的失败怎么应对?【Fault-Tolerance特性的体现】
- 15. Map数量上升,是否performance就会上升?
- 16. 1000 files * 3M/file (block size 128MB) will create how many map works?
- 17. Mapreduce程序性能调优的方法?MR架构中,用户需要指定哪些参数?
- 18. 如何选择reducer的个数?Map的个数呢?
- 19. Reduce过程是怎样的?
- 20. 运行mapreduce的两种方法?运行“MapReduce的”程序的语法?
- 21. 如何调试Hadoop的代码?
- 22. 什么是“MapReduce的”默认的输入类型/格式?
- 23. 你知道什么关于“SequenceFileInputFormat”?
- 24. 在“MapReduce框架”解释“分布式缓存”
- 25. 如何用hadoop产生 一个全局排序的文件?
- 四、Yarn【OS of Hadoop】【cluster resource management and task scheduling】
- 五、HBase
- 六、分布式数据库NoSQL
- 七、其他
- 参考资料
一、Hadoop = HDFS + Yarn + MR
1. Hadoop 概念了解
Apache开源组织的一个分布式计算开源框架,用于存储大量数据,并发处理/查询在具有多个商用/低成本硬件节点的集群上的那些数据;提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的基础软件架构
-
开发语言:基于Java语言开发的,具有很好的跨平台性
-
**特点:**高可靠性、高效性、高可扩展性、成本低、运行在Linux平台上、支持多种编程语言
-
版本对比:2.0的others就是HBase、Hive
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OohOokNd-1583658203655)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/67e34fa4-f16e-48d3-ae1a-067759a460c9/Untitled.png)]
-
核心技术:
- **HDFS:**分布式文件系统
- 可以运行在廉价商用服务器集群上、低成本高可靠性、很高的吞吐率
- HDFS 允许你以一种分布式和冗余的方式存储大量数据。
- 例如,1 GB(即 1024 MB)文本文件可以拆分为 16 * 128MB 文件,并存储在 Hadoop 集群中的 8 个不同节点上。每个分裂可以复制 3 次,以实现容错,以便如果 1 个节点故障的话,也有备份。
- HDFS 适用于顺序的“一次写入、多次读取”的类型访问
- MapReduce(分布式、并行程序)
- 一个计算框架。它以分布式和并行的方式处理大量的数据。
- 当你对所有年龄>18 的用户在上述 1 GB 文件上执行查询时,将会有“8 个Map映射”函数并行运行,以在其 128 MB 拆分文件中提取年龄> 18 的用户,然后“reduce”函数将运行以将所有单独的输出组合成单个最终结果
- ~~Hbase(提供高可靠性、高性能、可伸缩、实时读写、分布式的列式数据库)~~
- **HDFS:**分布式文件系统
2. SSH登录 & Hadoop安装方式
-
登录:
- 对于Hadoop的伪分布式和全分布而言,Hadop名称节点(NameNode)需要启动集群中所有机器的Hadoop守护程序,这个过程可以通过SSH登录来实现。(Hadoop没有提供SSH输入密码登录的形式,为了顺利登录每台机器,需要将所有机器配置为名称节点可以无密码登录它们)
-
安装方式:
一、 配置hosts文件
二、 建立hadoop运行帐号
三、 配置ssh免密码连入
四、 下载并解压hadoop安装包
五、 配置namenode,修改site文件(core-site.xml,hdfs-site.xml, mapred-site.xml)
六、 配置hadoop-env.sh文件(JDK)
七、 配置masters和slaves文件
八、 向各节点复制hadoop
九、 格式化namenode
十、 启动hadoop
十一、 用jps检验各后台进程是否成功启动
十二、 通过网站查看集群情况
主要修改配置文件为:core-site.xml, hdfs-site.xml,mapred-site.xml。
3. Hadoop可以运行在哪三种模式
- 非分布式 / 本地 / 独立 / 单机模式:【Hadoop默认模式】无需进行其他配置即可运行,单Java进程,方便进行调试
- 伪分布式模式:Hadoop可以在单节点以上为分布式的方式运行,hadoop进程以分离的Java进程来运行,节点既作为NameNode也作为DataNode,同时读取HDFS中的文件
- 完全分布式模式:在生产环境中使用,使用多个节点构成集群环境来运行Hadoop
- 特点:在该模式下有形成Hadoop集群的机器’N’号。 Hadoop守护进程在计算机集群上运行。有一些“的Namenode”运行一台主机,另一台主机上“Datanode”运行,然后有一些“NodeManager”运行的机器。我们有独立的主机和从机在这种分布的
4. 请列出正常工作的hadoop集群【cluster】中hadoop都需要启动哪些进程,他们的作用分别是什么?
HDFS:1 NN + N DN; YARN:1 RM + N NM
-
HDFS架构:存储数据
- NameNode @ Master Node: HDFS的守护进程,运行在Master节点上,负责存储的文件和目录所有元数据【metadata (file names, block locations)】。负责记录文件是如何分割成数据块,管理文件的块信息,以及块在集群中分布的信息【分别被存储到那些数据节点上】;它的主要功能是对内存及IO进行集中管理
- Secondary NameNode:辅助后台程序,与NN进行通信,以便定期【hourly backup】通过Editlog合并NameNode的变化,保存HDFS元数据的快照;从而它的日志不会过大,可以在NN故障的情况下做为副本使用
- DataNode @ each Slave Node:存储实际disk数据;负责把HDFS数据块读写到本地文件系统
- DataNode定期/周期性向NameNode上报心跳&本节点上块的信息【Heartbeats & Blk report】
- NameNode通过响应心跳来控制DataNode。如果 namenode 没有接收到 datanode 的心跳包,就说明 datanode 已经宕机了,不对它发送任何 IO 请求。
-
YARN架构:资源管理平台
- ResourceManager(Hadoop的2.X):负责YARN上运行的资源和调度
- NodeManager(Hadoop的2.X):可以运行在Slave节点,并负责启动应用程序的容器,监测他们的资源使用情况(CPU,内存,磁盘,网络),并报告这些到ResourceManager
- Container:资源对象封装
- Application Master:当前job的管理者
- Note: 【Hadoop 1.x中】JobTracker split into ResourceManager and ApplicationMaster; TaskTracker turns into NodeManager
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rTCrR6Y2-1583658203657)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/de3c6317-2f06-44ee-9f1a-d91690d03e8f/Untitled.png)]
-
JobHistoryServer(Hadoop的2.X):它维护有关的MapReduce工作中的应用终止后的信息
-
hadoop 1.X: JobTracker:运行在Namenode上,负责提交和跟踪MapReduce Job的守护程序。它会负责向Tasktracker分配task,并监控所有运行的task -
~~TaskTracker:Datanode上运行的守护进程。它在Slave节点上负责执行具体的task,并与JobTracker进行交互~~
5. 列出的Hadoop 1和2之间的差异。什么是主动和被动的 “Namenodes”?
- 在Hadoop的1.x中,“Namenode”有单r点问题。在Hadoop的2.x中,我们有主动和被动“Namenodes”
- 主动“Namenode”是在集群中运行的Namenode。被动“的Namenode”是一个备用“的Namenode”,里面有主动“的Namenode”的数据。当主动“Namenode”失败,则被动“Namenode”集群中替换主动“Namenode”。因此,集群是从来不会没有“Namenode”,所以它永远不会失败。正因为如此,高可用性可以Hadoop中2.x中来实现
- 在Hadoop的2.X,YARN提供了一个中央资源管理器。通过YARN,你现在可以在Hadoop中运行多个应用程序,共享公共资源。 MR2是一种特殊类型的运行于YARN MapReduce框架之上的分布式应用。其他工具也可以通过YARN执行数据处理。
6. 为什么说hadoop适合处理少量的大文件?(不适合大量的(小)文件)
- 一个原因是FileInputFormat生成的分块是一个文件或该文件的一部分。如果该文件小(意思是比hdfs的块小很多),并且文件数量很多,那么每次map任务只处理很少的输入数据,(一个文件)就会有很多map任务,每次map任务都会造成额外的开销。
- 比如1GB文件分割成16个64MB和100kB的10000个块,**10000个文件每次都需要一个map操作,**作业时间比一个文件上16个map操作慢几十甚至几百倍。
7. 为什么hadoop不适合在非Unix平台上运行?
- hadoop的主体是java语言写成,能够在任意一个安装了JVM的平台上运行。但由于仍然有部分代码(如控制脚本)需要在Unix环境下执行,因而hadoop并不适宜以最终产品的形态运行在非Unix平台上。
8. 什么是传统的关系型数据库和Hadoop之间的基本区别?
- 传统的RDBMS是用于事务性交易系统报告和存档数据,而Hadoop是存储和处理的分布式文件系统的海量数据的方法。如果数据库系统有大量的数据更新,B-Tree的效率就明显落后于MapReduce,因为它需要使用”排序||合并”(sort/merge)来重建数据库。在许多情况下,可以将MapReduce视为关系数据库管理系统的补充。两个系统之间的差异如下图所示:
9. 在hadoop集群中添加新的节点和删除节点的步骤?
-
添加节点:
-
将节点的网络地址添加到include文件中
-
运行以下指令:hadoop dfsadmin –refreshNodes
-
运行以下命令,将经过审核的一些列datanode信息更新至namenode, hadoop mradmin –refreshNodes
-
以新节点更新slaves文件
-
启动新的datanode和namenode
-
检查新的datanode是否出现在网页中
-
-
删除节点:
-
将待解除的节点添加到exclude文件中,不断更新include文件。
-
执行命令:hadoop dfsadmin –refreshNodes。
-
使用一组新的审核过的datanode来更新 namenode设置:hadoop mradmin –refreshNode
-
转到网页界面查看待解除datanode的管理状态是否已经变为“正在解除”,因为此时datanode正在解除的过程中。这些datanode会把它们的快复制到其他的datanode上
-
当所有的datanode的状态变味“解除完毕”之后,表明所有的块已复制完成。关闭已经解除的节点
-
从include文件中移除这些节点,并运行命令:hadoop dfsadmin –refreshNodes;hadoop mradmin –refreshNodes.
-
从slaves文件中移除节点
-
10、Hadoop性能调优?
- 调优可以通过系统配置、程序编写和作业调度算法来进行
- hdfs的block.size可以调到128/256(网络很好的情况下,默认为64)
- 调优的大头:
- mapred.map.tasks、mapred.reduce.tasks设置mr任务数(默认都是1
- 每台机器上的最大map任务数、最大reduce任务数
- mapred.reduce.slowstart.completed.maps配置reduce任务
- 在map任务完成到百分之几的时候开始进入这个几个参数要看实际节点的情况进行配置,reduce任务是在33%的时候完成copy,要在这之前完成map任务(map可以提前完成)
- mapred.com