hadoop
3. 添加新datanode后,作为Hadoop管理员需要做什么?
需要启动平衡器才能在所有节点之间重新平均分配数据,以便Hadoop集群自动查找新的datanode。
要优化集群性能,应该重新启动平衡器以在数据节点之间重新分配数据。
4. 如何在生产环境中部署Hadoop的不同组件?
需要在主节点上部署jobtracker和namenode,然后在多个从节点上部署datanode。
namenonde负责管理hdfs中文件块的元数据,响应客户端请求,管理datanode上文件block的均衡,维持副本数量。如果NameNode关闭,文件系统将脱机。
Datanode:存储数据块,负责客户端对数据块的io请求。
Jobtracker :管理任务,并将任务分配给 tasktracker。
Tasktracker: 执行JobTracker分配的任务。
5、是否可以在不同集群之间复制文件?如果是的话,怎么能做到这一点?
是的,可以在多个Hadoop集群之间复制文件,这可以使用分布式复制来完成。
6. distcp
Distcp是一个Hadoop复制工具,主要用于执行MapReduce作业来复制数据.
7.什么是投机性执行?
如果一个节点正在执行任务比较慢。那么就需要在另一个节点上冗余地执行同一个任务的一个实例。所以首先完成的任务会被接受,另一个可能会被杀死。这个过程被称为“投机执行”。
8.Hadoop Streaming和Pipes原理和实现
Hadoop提供了Streaming和Pipes编程框架和接口。
Streaming的原理:通过标准的输入/输出管道让用户的程序和Hadoop框架进行数据传输以及通信。
在Streaming中通过封装用户的可执行程序作为一个Java类充当相应的Mapper和Reducer类,其特殊之处在于用户的可执行程序可以作为独立的进程启动,Hadoop Streaming框架会将读取文件的<key,vlaue>键值对通过标准输入/输出传递给用户的可执行程序进行处理。
Hadoop系统和用户编写的可执行程序并不在一个进程空间,而是相互独立的。
Pipes原理和实现:
Hadoop Pipes接口则针对C/C++语言通过Socket让用户的C/C++程序进程空间和Hadoop的Java 框架进行交互,也就是Pipes框架使用Socket作为媒介实现用户的C++进程空间和Hadoop Java进程空间进行数据交互。
- 数据切分。在默认情况下Pipes作业和基于Java接口以及基于Streaming接口的MapReduce作业一样,都是根据用户指定的InputFormat类对数据进行切分的,每一个分块对应一个Mapper任务。
- Pipes框架会将用户的使用的Pipes接口编写的C++ Mapper程序封装形成一个Mapper任务。这个任务其实是由两个部分组成:一部分是Hadoop Java进程空间的MapTask;另一部分你是在用户C++进程空间的Mapper可执行程序类。
- Java空间的MapTask:通过调用MapReduce Java API获取每一个split的 <key,vlaue>键值对,然后通过DownwardProtocol协议将 <key,vlaue>以Socket形式发送到用户C++进程的Mapper类。
- 用户空间的C++ Mapper:以Pipes提供的Protocol类来接收数据的,然后接收的数据传输给用户的C++ Mapper,最终用户C++ 进程空间 Mapper通过Pipes框架提供的UpwardProtocol协议,以Scoket的形式传输给Hadoop框架。
- Hadoop Java框架会启动一个接收数据的线程,接收来自用户C++进程空间UpwardProtocol传来的Mapper输出数据,然后写入本地磁盘,之后直接进入Hadoop框架本身的Shuffle和sort阶段到达Reducer端。
9. mapreduce中的combine和partition的作用
combiner是发生在map的最后一个阶段,其原理也是一个小型的reducer,主要作用是减少输出到reduce的数据量,缓解网络传输瓶颈,提高reducer的执行效率。
partition的主要作用将map阶段产生的所有kv对分配给不同的reducer task处理,可以将reduce阶段的处理负载进行分摊。
10. mapreduce怎么处理数据倾斜问题
本质:让各分区的数据分布均匀
可以根据业务特点,设置合适的partition策略
如果事先根本不知道数据的分布规律,利用随机抽样器抽样后生成partition策略再处理
11. YARN和hdfs
HDFS处理分布式存储,YARN处理分布式计算资源调度。
HDFSH= 本身是完整的分布式系统,集群间通过 HDFS 的 Hadoop RPC 协议通信。 YARN 只是跑在这些 HDFS 节点上。
YARN在调度资源时,能够根据HDFS中数据的位置来采取不同的策略。最大的应用是在mapredcue中,如果yarn把mapper放在数据所在的节点,那么省去了网络传输数据的开销,直接读本地数据就可以。
YARN 是独立存在的,具有通用性,不仅可以调度 MapReduce 作业,还可以作为其他计算框架的资源管理框架,如 Spark、Storm 等可以跑在 YARN 上,它们通过 YARN 来管理计算资源,计算任务有了稳定的平台支撑,可以保证性能和稳定性,同时,这些计算框架可以方便地读取 HDFS 上的数据;
12.Hive
Hive的查询功能是由hdfs + mapreduce结合起来实现的。
Hive与mysql的关系:只是借用mysql来存储hive中的表的元数据信息,称为metastore
13.三个datanode中当有一个datanode出现错误时会怎样?
Namenode会通过心跳机制感知到datanode下线
会将这个datanode上的block块在集群中重新复制一份,恢复文件的副本数量。