MapReduce的注意点

20.ResourceManager的高可用也是用ZKFC实现的?不是,ResourceManager的高可用是靠zookeeper来实现的!
   ZKFC只是在处理NameNode的高可用的时候用到了,没有在ResourceManager的高可用的时候用到!


1.writable接口:序列化和反序列化的接口!
  Comparable接口:排序的接口:排序和分组归根结底都是比较!
 
  ctrl+t快捷键:看接口的子类:接口WritableComparable接口继承了writable接口和Comparable接口!
 
  所以我们在MapReduce中的所有类型都要实现这个WritableComparable接口!
 
 
  FileInputFormat(job,path):指定我们要分析的文件在HDFS系统上的路径!
 
  FileOutputFormat(job,path):path执行之前先判断path是否存在,如果存在会出问题,所以先判断是否存在,如果存在就先删除,再创建,不存在就直接写!
 
 
2.Mapper 是Hadoop.mapreduce包下的哦,<KEYIN>是指这一行的偏移量或者下标,通常用LongWritable!
   然后覆盖里面的map方法!
   Text---->String : Text.toString()即可!
   String--->Text: new Text(String string)
 
3.导入hadoop源码的时候,jdk一定是自己的,不是Eclipse上自带的!不同之处,在本地测试,是通过windows的多线程来模拟MapReduce的,但是HDFS还是集群上的,
    所以在就是在本地运行的测试数据是不能在resourcemanager的页面查看运行信息的!

4.Hadoop中的一些组件其实都是转换成MapReduce,所以当他们出错的时候,一般我们可以看这个组件本身的信息,也可以通过在resourceManager页面查看MapReduce的运行信息!
 
6.System.setProperty("HADOOP_USER_NAME", "root");如果我们的本地电脑还不想修改用户名为root,
  然后同时还想在集群上运行hadoop程序(Linux服务器上的用户为root),那么我们就需要在我们写的主程序中加上这么一句话设置一下!
 
 
   
7.Data Sicene这个岗位非常值钱,老外就是遇到问题敢于尝试,不要怕出现问题,出现了就解决它!
  要学着设计程序,将现实问题转化成大数据代码如何实现!
 
8. 统计和二次排序问题是重点!



9.Hadoop只能对文本数据分析?
     不是的,其实是可以对其它数据进行处理的,只需要变化处理的格式就好,处理文本文件我们用的是FileInputStream,如果处理其它类型的数据,我们也会有其它类型的数据!
      
     
10. 链式MapReduce程序处理,参考如下:
     http://www.aboutyun.com/thread-14966-1-2.html
 
 
11.partition+sort+combiner+group(默认没有combiner的,需要我们自己手动实现,其它都是有默认配置的!)

12.Map端排序是不可控的吧?也是可控的!注:是可控的!也就是我们自己可以覆写排序,用自己实现的排序!

13.写排序,和二次排序(group,分组)的时候要注意,不仅要实现接口WritableComparator,还要重写compare方法,以及自己重写无参构造函数!
 
   eg:
     public class TQGroup extends WritableComparator {

        public TQGroup() {
            super(Weather.class, true);
        }

        @Override
        public int compare(WritableComparable a, WritableComparable b) {}
    }
 
   
   
14.不是可以直接一条一条处理吗?可不可以不封装成对象,也是可以的,但是这样会比较麻烦,尤其是后面我们用到排序,分组的时候,就会感觉到如果不将这一行文本封装为一个对象,你就要不断的new Text(str1+str2)封装,然后再拆分,这是很麻烦的!  
   

15.System.setProperty("HADOOP_USER_NAME", "root");如果在Windows系统下的Eclipse中运行代码同时还不想修改Windows用户的用户名为root,那么就要在程序中加入  这句话!



15.疑问:partition和group的区别?
      partition决定了reduce个数,但是同一个reduce中可以有多个分组,一个分组保证是在同一年(即一个reduce中可能会有多个分组)!partition和分组能组合吗?当然能组合!
      partition公式:默认是:key的hash值%reduce取余,决定了程序交给几个reduce来处理!(分区)
      group:(也就是二次排序)公式:默认是根据key的字典排序的!
      
       重写partition的规则:
       1.首先满足业务要求,
       2.每map输出的时候都会执行这个partition,所以这个partition越简单越好!
    

     什么时候会走comparable接口:1.没有sort、group的时候,就会找这个方法
                                 2.相当于java bean中的equals方法,可以用来比较两个对象是否相等!
    

    
16.排序,分组,都必须实现WritableComparator接口!
    分区一般情况下就实现HashPartitioner接口就可以了!
    combiner底层就是一个Reducer,但是我们要知道combiner的应用场景,combiner是在一个map内做统计相加,而reducer是针对多个map的,做优化!
 
17.比较的对象需要实现WritableComparable接口,同时要重写里面的方法!

18.Reduce端的摄入类型,和map端保持一致还是和group端一致?当然是和Map端的输出一致,以为在sort和group阶段仅仅是针对key进行了排序和分组!并没有对类型改变吧!


1.二度关系重要性远远大于三度关系,所以这里我们计算二度关系,做相关推荐======》可结合推荐项目说明实现过程!
  思路:本人对应的好友列表!  
   
   
   





   
 注意:在Eclipse代码中除了导入那些lib包之外,还必须要加入对源码的部分修改,jdk也不能使用eclipse自带的,同时要将Hadoop目录下的bin目录和sbin目录加入到path变量中!
=================================================================================================================================
 
 
1、MR执行环境有两种:本地测试环境,服务器环境
    
本地测试环境(windows):(用这个winutils.exe工具模拟多线程的方式实现的,MapReduce是运行在本地的,但是HDFS是集群上的!)
    在windows的hadoop目录bin目录有一个winutils.exe
    1、在windows下配置hadoop的环境变量(这里配置了path路径之后要重启电脑哦!)
    2、拷贝debug工具(winutils.exe)到HADOOP_HOME/bin
    3、修改hadoop的源码 ,注意:确保项目的lib需要真实安装的jdk的lib
    
    4、MR调用的代码需要改变:
        a、src不能有服务器的hadoop配置文件
        b、在调用是使用:
            Configuration config = new  Configuration();
            config.set("fs.defaultFS", "hdfs://node7:8020");
            config.set("yarn.resourcemanager.hostname", "node7");        
            
            
服务器环境:



首先需要在src下放置服务器上的hadoop配置文件(core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml)

1、在本地直接调用,执行过程在服务器上(真正企业运行环境)
    a、把MR程序打包(jar),直接放到本地
    b、修改hadoop的源码 ,注意:确保项目的lib需要真实安装的jdk的lib
    c、增加一个属性:
        config.set("mapred.jar", "C:\\Users\\Administrator\\Desktop\\wc.jar");
    d、本地执行main方法,servlet调用MR。
    
    
2、直接在服务器上,使用命令的方式调用,执行过程也在服务器上
    a、把MR程序打包(jar),传送到服务器上
    b、通过: hadoop jar jar路径  类的全限定名
    
 

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



 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值