Hadoop程序实现
- 1 安装hadoop程序
- 2 项目构建(和普通项目基本一样)
- 3 其它需要知道的重要的内容
- 4 几个小案例
- 5 hadoop和java运行jar包命令
- 6 linux中使用hadoop命令大全
1 安装hadoop程序
1.1 linux上安装环境,就是软件包,跟mysql本质上1样
1.2 windows上安装环境(这样才能在windows中跑hadoop程序,测试java写的hadoop程序是否可用)
参考下面的资料自己在电脑上成功安装:
Hadoop-3.0.0版本Windows安装
2 项目构建(和普通项目基本一样)
和普通项目构建只有3处不同:
(1)需要导入hadoop的JAR包,包含几十个jar包
(2)重写map方法和reduce方法
(3)运行在安装有hadoop的环境上
2.1 创建1个普通的项目
2.2 导入Hadoop的JAR包
2.2.1 手动导入
直接添加外部依赖库
2.2.2 maven导入
1 看尚硅谷的课程
2 使用Maven搭建Hadoop开发环境
2.3 一共就写5个方面的内容,分别编写split, InputFormat和outputFormat,Mapper和Partitioner和Reducer,排序sort+合并combine,Driver提交任务
2.3.1 切分任务split
定义分成几个mapper任务;
2.3.2 输入输出格式InputFormat和outputFormat
(1)定义mapper输入输出的键值对;
(2)定义reduce输入输出的键值对;
2.3.3 重写Mapper和Partitioner和Reducer
主要程序逻辑
(1)不同mapper各自实现自己的功能,输出数据;
(2)Partitioner将mapper输出进行分组,然后不同组对应不同reduce处理;
(3)Reducer对每个Partitioner数据进行处理;n个Partitioner就对应n个Reduce;
2.3.4 排序sort+合并combine
1、排序过程有2次
(1)mapper执行任务结束,会自动调用sort方法对输出的结果进行排序;
(2)在Partitioner内部,不同mapper的输入再次进行排序;
2、combine是合并,将相同键值对合并为1个键值对,其中值为1个列表;
功能:3个<Car,1>合并为1个<Car,[1,1,1]>,键相同的合并为1个。
2.3.5 主函数逻辑类Driver提交任务
2.4 在安有hadoop的Windows上测试或者在linux上测试代码
2.5 打包成JAR包
2.6 在linux环境上部署运行(必须使用hadoop命令)
两步:
1 su yarn切换到yarn用户
2 hadoop jar EXEMPLE_RUNNABLE.jar …
如果打包成普通jar包,那么需要在运行时指定main方法入口:
% hadoop jar EXEMPLE.jar MainClassName
好处是可以随意指定jar包中需要运行的main方法
如果打包成runnable jar包,在打包时就指定了main方法入口:
% hadoop jar EXEMPLE_RUNNABLE.jar …
3 其它需要知道的重要的内容
3.1 分区patiner
3.2 合并combiner
3.3 shuffle
3.3 序列化和反序列化
不同节点传输数据需要落盘,现在一个节点上的map处理好的key,value在你的内存中,如何让另一个节点上面的Reduce获取到呢?
(1)先需要把map输出的key,value存到硬盘中;
(2)再通过通信让处理reduce的这个节点读取你的盘里面的数据。
落盘和读取就叫序列化和反序列化,你就叫它写和读就行,很简单。
4 几个小案例
4.1 wordCount代碼案例
4.2
1 这个案例非常好:hadoop 启动wordcount实例,包括hadoop自带jar包和eclipsejar包。
5 hadoop和java运行jar包命令
5.1 hadoop
5.1.1 指定主函数
// 主函数包括两个参数
hadoop jar study_demo.jar com.ncst.hadoop.MaxTemperature /input/sample.txt /output
5.1.2 默认主函数
// 主函数包括两个参数
hadoop jar study_demo.jar /input/sample.txt /output
5.2 java命令
java -jar
或者 java -cp