Hadoop详解(04-1)-基于hadoop3.1.3配置Windows10本地开
发运⾏环境
Hadoop详解(04-1) - 基于hadoop3.1.3配置Windows10本地开发运⾏环境
环境准备
安装jdk环境
安装idea
配置maven
搭建好的hadoop集
配置hadoop
解压hadoopo
将hadoop压缩包hadoop-3.1.解压到本地任意⽬录
拷贝Windows依赖到本地⽬录
Hadoop的Windows依赖说明
hadoop在windows上运⾏需要winutils⽀持和hadoop.dll等⽂件,hadoop主要基于linux编写,hadoop.dll和主要⽤于模拟linux下的⽬录环境,如果缺少这两个⽂件在本地调试MR程序会报错
缺少
Could not locate executable null \ in the hadoop binaries
缺少hadoop.dll
Unable to load native-hadoop library for your platform… using builtin-Java classes where applicable
Windows依赖⽂件官⽅没有直接提供,需要⾃⾏下载。
配置环境变量
添加HADOOP_HOME并编辑Path的值
查看hadoop版本
通过查看hadoop版本确认windows下的hadoop环境变量配置是否成功
C:\Users\Administrator> hadoop version
创建项⽬
hadoop安装详细步骤linux
创建maven项⽬HadoopDemo
导⼊相应的依赖坐标
在l⽂件中添加依赖坐标
Hadoop开发环境只需要引⼊hadoop-client即可,hadoop-client的依赖关系已经包含了client、common、hdfs、mapreduce、yarn等模块<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.1.3</version>
</dependency>
</dependencies>
和添加⽇志
在项⽬的src/main/resources⽬录下,新建⼀个⽂件,命名为"l",在⽂件中填⼊<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error" strict="true" name="XMLConfig">
<Appenders>
<!-- 类型名为Console,名称为必须属性 -->
<Appender type="Console" name="STDOUT">
<!-- 布局为PatternLayout的⽅式,
输出样式为[INFO] [2018-01-22 17:34:01][st.Console]I'm here -->
<Layout type="PatternLayout"
pattern="[%p] [%d{yyyy-MM-dd HH:mm:ss}][%c{10}]%m%n" />
</Appender>
</Appenders>
<Loggers>
<!-- 可加性为false -->
<Logger name="test" level="info" additivity="false">
<AppenderRef ref="STDOUT" />
</Logger>
<!-- root loggerConfig设置 -->
<Root level="info">
<AppenderRef ref="STDOUT" />
</Root>
</Loggers>
</Configuration>
本地测试hdfs
需求
在hdfs中创建⽬录:/1128/daxian/banzhang
创建包名:com.zhangjk.hdfs
创建HdfsClient类并编写代码
1. package com.zhangjk.hdfs;
2.
3. import org.f.Configuration;
4. import org.apache.hadoop.fs.FileSystem;
5. import org.apache.hadoop.fs.Path;
6. import org.junit.Test;
7. import java.io.IOException;
8. import java.URI;
9. import java.URISyntaxException;
10.
11. /**
12.  * @author : 张京坤
13.  * mail:zhangjingkun88@126
14.  * date: 2021/11/28
15.  * project name: HdfsClientDemo
16.  * package name: com.zhangjk.hdfs
17.  * content:
18.  * @version:1.0
19.  */
20. public class HdfsClient {
21.
22. @Test
23. public void testMkdirs() throws IOException, InterruptedException, URISyntaxException {
24.
25. // 1 获取⽂件系统
26.        Configuration configuration = new Configuration();
27.
28.        FileSystem fs = (new URI("hdfs://hadoop102:9820"), configuration, "hadoop");
29.
30. // 2 创建⽬录
31.        fs.mkdirs(new Path("/1128/daxian/banzhang"));
32.
33. // 3 关闭资源
34.        fs.close();
35.    }
36.
37. }
要配置⽤户名称
客户端去操作HDFS时,是有⼀个⽤户⾝份的。默认情况下,HDFS客户端API会从JVM中获取⼀个参数来作为⾃⼰的⽤户⾝份:通过在VM options中设置参数-DHADOOP_USER_NAME=hadoop,hadoop为⽤户名称。
执⾏程序
运⾏程序并查看结果
本地测试MR程序WordCount
需求
在给定的⽂本⽂件中统计输出每⼀个单词出现的总次数
<⽂件中的内容
hadoop hadoop
ss ss
cls cls
jiao
banzhang
xue
hadoop
期望输出数据
hadoop    2
banzhang    1
cls    2
hadoop    1
jiao    1
ss    2
xue    1
需求分析
按照MapReduce编程规范,分别编写Mapper,Reducer,Driver。输⼊数据
hadoop hadoop
ss ss
cls cls
jiao
banzhang
xue
hadoop
输出数据
hadoop    2
banzhang1
cls    2
hadoop    1
jiao    1
ss    2
xue    1
Mapper阶段
1 将MapTask传过来的⽂本内容先转换成String
hadoop hadoop
2 根据空格将这⼀⾏切分成单词
hadoop
hadoop
3 将单词输出为<;单词,1>
hadoop, 1
hadoop, 1
Reducer阶段
1 汇总各个key的个数
hadoop, 1
hadoop, 1
2 输出该key的总次数
hadoop, 2
Driver阶段
1 获取配置信息,获取job对象实例
2 指定本程序的jar包所在的本地路径
3 关联Mapper/Reducer业务类
4 指定Mapper输出数据的kv类型
5 指定最终输出的数据的kv类型
6 指定job的输⼊原始⽂件所在⽬录
7 指定job的输出结果所在⽬录
8 提交作业
创建包名:com.zhangjk.mapreduce
创建WordcountMapper、WordcountReducer、WordcountDriver类并编写代码
Mapper
1. package com.zhangjk.mapreduce;
2.
3. import org.apache.hadoop.io.IntWritable;
4. import org.apache.hadoop.io.LongWritable;
5. import org.apache.hadoop.io.Text;
6. import org.apache.hadoop.mapreduce.Mapper;
7.
8. import java.io.IOException;
9.
10. /**
11.  * @author : 张京坤
12.  * mail:zhangjingkun88@126
13.  * date: 2021/12/2
14.  * project name: HdfsClientDemo
15.  * package name: com.zhangjk.mapreduce
16.  * content:
17.  * @version:1.0
18.  */
19. public class WordcountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
20. //常见kv对变量
21.    Text k = new Text();
22.    IntWritable v = new IntWritable(1);
23.
24. @Override
25. protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
26. //获取⼀⾏
27.        String line = String();
28. //切割
29.        String[] words = line.split(" ");
30. //输出
31. for (String word : words) {
32.            k.set(word);
33.            context.write(k, v);
34.        }
35.    }
36. }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。