Hadoop学习——其它(集群,MR调优,数据倾斜等)

1、Hadoop2.0的高可用

有两个NameNode节点,一个active,一个standby时刻同步active的数据),从而实现高可用。

两个NameNode之间通过JournalNodes的独立进程进行通信,当active中的NameNode的命名空间有任何改变时,便会通知大部分的JournalNode进程。standby的NameNode有能力读取JN中的变更信息,并且一直观察edit log的变化,会将变化的信息读取到自己的命名空间,从而达到了同步的状态。

当active故障后,可以借助于ZooKeeper进行切换

2、Hadoop集群搭建大致步骤

1)永久关闭防火墙;

2)配置主机名和host文件,方便通信;

3)机器之间免密互通;

4)安装JDK,安装Zookeeper集群;

5)配置conf/下的文件,例如hadoop-env.sh、core-site.xml、hdfs-side.xml、mapred-side.xml、yarn-site.xml、slaves;

6)每台机器配置基本相同,通过scp发送即可,记得要修改的配置文件。

3、MR调优策略

减少数据量的传输;

尽量使用内存;

减少与磁盘IO交互的次数;

增大任务并行数;

4、Hadoop处理小文件的方法

开启Hadoop的JVM重用机制(uber模式),避免海量文件频繁的启停JVM;

利用Hadoop提供的HAR技术(针对已存在的大量小文件);

map side join,将多个小文件合成一个或少量文件 – CombineTextInputFormat

5、为什么HDFS不适合存储大量的小文件?

由于在HDFS有NameNode存储文件位置信息的,使用的是内存,若存在大量的小文件,维护信息会导致NameNode的大部分内存用于存储,不利于NameNode处理。

6、数据倾斜

在MapReduce中,经常会出现数据倾斜的情况,例如订单-商品的业务中,热销产品与冷销产品之间,此时可以利用Map Side Join,就是DistributedCache(Hadoop内置的分布式缓存机制)实现。

或者说单词统计时造成数据倾斜,可以在map端的key后面添加一个随机数,这样可以将一个高频词汇拆分,之后在进行合并。

======================================================================

扩展:Reduce中底层使用了一个地址复用技术,即在迭代values时,取出的值有变化但是地址值不变,也就是不能直接添加取出的值(对象),此时可以使用克隆(clone())

你可能感兴趣的:(Hadoop学习,Hadoop,集群,MR调优,小文件问题,数据倾斜)