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)封装,然后再拆分,这是很麻烦的!
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路径 类的全限定名
===================================================================================================================
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,那么就要在程序中加入 这句话!
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路径 类的全限定名
===================================================================================================================