文章目录
- hive 与 mysql 的区别
- 类加载器的种类,有什么机制,机制有何用处
- MapReduce实现wordcount流程
- full GC 和 old GC 区别
- 避免频繁的Full GC
hive 与 mysql 的区别
- 数据存储位置
hive数据存储在hdfs上,mysql的数据存储在本地磁盘中。 - 数据规模
hive支持很大规模数据的计算,mysql支持的数据规模很小。 - 执行延迟
mysql的执行延迟较低,hive的执行延迟较高,但这是有条件的,当数据量足够体现出hive的并行计算的优势时,hive的延迟更低。 - 数据更新
- mysql经常需要对数据进行更新,hive不建议对数据进行更新
类加载器的种类,有什么机制,机制有何用处
- 启动类加载器(引导类加载器 Bootstrap ClassLoader)
这个类加载器是使用c/c++实现的,是JVM的一部分(JVM也是c/c++实现的)。主要负责加载java的核心类库(JAVA_HOME/jre/lib/rt.jar、resources.jar或sun.boot.class.path路径下的内容),例如System,String等。只有把这些类都加载到内存中我们才可以使用。它不是java实现的,所以并不是ClassLoader的子类。还用于加载其他加载器,并被指定为他们的父类加载器。出于安全考虑,启动类加载器只加载java,javax,sun等开头的类。 - 扩展类加载器(Extension ClassLoader)
由java语言编写,由sun.mics.Launcher$ExtClassLoader实现。扩展类加载器派生自ClassLoader。父类加载器为Bootstrap ClassLoader。主要加载java.ext.dirs目录下的类或JDK安装目录jre/lib/ext子目录下的类。如果用户将自定义类放在该目录下,也会由扩展类加载器加载 - 应用程序类加载器(系统类加载器 AppClassLoader)
由java语言编写,由sun.mics.Launcher$AppClassLoader实现。系统类加载器派生自ClassLoader。父类加载器为ExtClassLoader。负责加载classpath目录或系统属性java.class.path下的指定类库。该类是程序中默认的类加载器,java应用中的类一般都由它来加载。 - 用户自定义类加载器
通常的程序加载都由上面三种类加载器配合加载。而在某些特定的时候需要用户自定义加载器来定制类的加载方式。
自定义类加载器的目的:
(1)隔离加载类
(2)修改类加载的方式
(3)扩展加载源
(4)防止源码泄露
MapReduce实现wordcount流程
- 自定义Mapper
继承Mapper类,重写map方法,参数列表(偏移量,文本,输出K,输出V) - 自定义Reducer
继承Reducer类,重写reduce方法,参数列表(输入K,输入V,输出K,输出V) - 编写Driver驱动类
①通过Job.getInstance(conf)获取由conf配置的Job
②注册驱动类
③关联Mapper类和Reducer类
④设置Mapper类输出KV类型
⑤设置Reducer类输出KV类型
⑥设置输出输出路径
⑦提交Job
full GC 和 old GC 区别
full GC(重GC)由Minor GC(轻GC) 和 Major GC(old GC) 组成。当新创建的对象无法存放在Eden区时会进行Minor GC(99%都是Minor GC)。随后再次存放,依然放不下,尝试直接放入S0区,S0区也放不下,尝试直接放入老年代,也放不下,这时就会触发Major GC清理老年代的内存,放得下,成功,放不下,OOM。所以触发Major GC通常伴随着Minor GC,合起来称作full GC
避免频繁的Full GC
- 避免定义过大的对象(数组)
- 避免将过大对象定义为静态变量