大佬教程收集整理的这篇文章主要介绍了0614 hadoop03,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
1.客户端通过DiStributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件存放的DataNode地址.
2.挑选一台近的DataNode节点,请求下载数据.
3.DataNode传输数据到客户端,(以某个单位来读取数据的)
4.先保存到本地缓存,然后合并写入本地磁盘.
第一阶段:NameNode启动
1.第一次启动NameNode要进行格式化,创建Fsimage和edits日志文件,如果不是第一次启动,编辑原来格式化的文件进行记录.
2.客户端对元数据进行修改或删除操作
3.NameNode会更新滚动记录日志
4.NameNode同步内存与磁盘edit文件
第二阶段: SecondaryNameNode
<!-- 默认checkpoint最长时间--> <property> <name>dfs.namenode.checkpoint.period</name> <value>3600</value> </property> <!-- 默认checkpoint的记录大小--> <property> <name>dfs.namenode.checkpoint.txns</name> <value>1000000</value> </property> |
dfs.hosts:
hadoop01
hadoop02
hadoop03
hadoop04
......
<property> <name>dfs.hosts</name> <value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts</value> </property> |
# hdfs dfsadmin -refreshNodes
提示成功!
hadoop01
hadoop02
hadoop03
hadoop04
.....
添加退役服点:
hadoop04
<property> <name>dfs.hosts.exclude</name> <value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts.exclude</value> </property> |
# hdfs dfsadmin -refreshNodes
提示刷新成功信息..
@H_952_21@mapReduce是一个分布式运算框架,是hadoop的运算核心.
离线计算: 统计一部分结果,是旧的信息产生的结果.
实时计算: 通过产生的信息,实时得到想要的结果.
@H_952_21@mapReduce是离线计算框架,不能做实时运算.
启动yarn
[root@hadoop01 hadoop-2.7.2]# sbin/start-yarn.sh
全启动: HDFS 和 Yarn
[root@hadoop01 hadoop-2.7.2]# sbin/start-all.sh
启动成功后存在以下节点:
resourceManager : 资源管理器(老大)
NodeManager: 节点运算管理(小弟)
访问resourceManager的管理页面:
http://192.168.254.101:8088/cluster
[root@hadoop01 hadoop-2.7.2]# bin/hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount hdfs://hadoop01:9000/words.txt hdfs://hadoop01:9000/countout
在进行@H_952_21@mapreduce运算时,会动态显示进程:
RunJar
@H_549_18@mRAppMasterYarnChild
结果:
一个完整的@H_952_21@mapreduce运行会出现三个进程:
@H_549_18@mRAppMaster: 负责整个@H_952_21@mapreduce的资源调度与状态协调.@H_952_21@mapTask: 负责@H_952_21@map阶段的整个数据处理流程.
reduCETask: 负责reduce阶段的整个数据处理流程.
RunJar: 运算@H_952_21@mapreduce程序需要运行jar,RunJar进程是在JVM虚拟机中运行java程序的开启一块运资源.
YarnChild: @H_952_21@mapreduce计算所需要开启的一块计算资源(JVM虚拟机用到的资源)
用户编写@H_952_21@mapreduce程序分为三个部分: Driver,@H_861_3@map和Reduce
一. Driver阶段
整个程序需要一个Driver进行提交,提交的是一个job的描述信息(Map和ReducE).
二. @H_952_21@map阶段
1) 用户需要自定义@H_952_21@map运算,必须继承原来的@H_952_21@map接口实现方法
2) @H_952_21@map对数据的输入类型K,V 进行自定义,当然附合序列化规则
3) 编写局部统计算法
4) @H_952_21@map对数据的输出类型K,V 进行自定义,当然附合序列化规则
5) @H_952_21@map()方法:对每一个kv会调用一次.
三. Reduce阶段
1) 用户需要自定义reduce运算,必须继承原来的reduce接口实现方法
2) Reduce对@H_952_21@map阶段输出作为自已输入进行kv结构运算,类型要匹配@H_952_21@map输入类型
3) Reduce的任务汇总数据,会调用reduce()方法,有多少个分区,就会有多个个reduCETask进行汇总.
4) 每个分区会调一次reduce方法
需求: 有一堆文本数据,要求统计文本数据内的单词个数.
<dependencies> <!--单元测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!--导入日志依赖--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.13.3</version> </dependency> <!-- hadoop-common 公共依赖--> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.7.2</version> </dependency> <!-- hadoop-client 客户端依赖--> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.7.2</version> </dependency> <!-- hadoop-hdfs 依赖--> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>2.7.2</version> </dependency> <!-- hadoop-mapreduce依赖--> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-core</artifactId> <version>2.7.2</version> </dependency></dependencies> |
public class WordCountMapper extends @H_595_4@mapper<LongWritable, Text,Text, IntWritable> { Text k = new Text(); IntWritable v = new IntWritable(1); @Override protected void @H_595_4@map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { //1.获取一行的内容 String line = value.toString();//<1,"hadoop kafka spark stop start"> //2.切割 String[] words = line.split(" "); //切割后数据类型 String //3.获取每个单词 for (String word : words){ // hadoop //对类型转换hadoop类型 k.set(word); context.write(k,v);//--> <"hadoop",1> } }} |
import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;public class WordCountReduce extends Reducer<Text, IntWritable,Text, IntWritable> { int sum; IntWritable v =new IntWritable(); @Override protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { //1.累加求和 sum=0; for (IntWritable count: values){ sum+=count.get(); } //2.输出 v.set(sum); context.write(key,v); }}
|
import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FiLeoutputFormat;import java.io.FileInputStream;public class WordCountDriver { public static void @H_595_4@main(String[] args) throws Exception { // 获取集群信息 Configuration configuration = new Configuration(); // 构造job任务 Job job = Job.geTinstance(configuration); // 设置job类路径 job.setJarByClass(WordCountDriver.class); // 设置@H_566_1299@map和reduce类 job.setMapperClass(WordCountMapper.class); job.setReducerClass(WordCountReduce.class); // 设置@H_566_1299@map的k,v类型 job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(IntWritable.class); // 设置reduce的k,v类型 job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); // 设置输入与输出路径 FileInputFormat.seTinputPaths(job,new Path(args[0])); FiLeoutputFormat.setOutputPath(job,new Path(args[1])); // 提交工作 Boolean result = job.waitForCompletion(true); System.exit(result?0:1); }}
|
1) 配置打包插件
<build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <@H_647_1@manifest> <@H_647_1@mainClass>com.hotdas.mr.WordCountDriver</@H_647_1@mainClass> </@H_647_1@manifest> </archive> </configuration> <EXECUTIONS> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </EXECUTIONS> </plugin> </plugins></build> |
2) 打包方式
3) 打包结果
JDK序列化词 serializable
Hadoop序列化词: Writable
1) 紧凑
2) 快速
3) 可扩展强
4) 互操作强
统计每个手机号消耗的流量: 上传流量 下载流量 总流量
以上是大佬教程为你收集整理的0614 hadoop03全部内容,希望文章能够帮你解决0614 hadoop03所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。