【Cloud Computing】Hadoop环境安装、基本命令及MapReduce字数统计程序
【Cloud Computing】Hadoop环境安装、基本命令及MapReduce字数统计程序
1.虚拟机准备
1.1 模板机器配置
1.1.1 主机配置
- IP地址:在学校校园网Wifi下连接下 VMWare自己DHCP分配的是
192.168.190.xxx- 内存:4G(根据自己机器确定 我需要三台机器 我的内存是16G)
- 硬盘:50G
- OS:CentOS7 x64
1.1.2 环境工具安装
ping www.baidu.com先查看能否正常上网yum install -y epel-release安装额外的软件包yum install -y net-tools:如果是最小化安装(只有命令行)需要安装,包含ifconfig命令yum install -y vim:vim编辑器
1.1.3 关闭防火墙
systemctl stop firewalld关闭防火墙systemctl disable firewalld.service关闭防火墙开机自启动
1.1.4 创建hadoop用户 设置密码
- useradd hadoop
- passwd hadoop
1.1.5 配置hadoop用户具有root权限
修改
etc/sudoers文件在%whell ALL=(ALL) ALL语句下增加:hadoop ALL=(ALL) NOPASSWD:ALL。实现免密功能。
1.1.6 在/opt下创建module和software两个软件 修改主和所属组
mkdir /opt/modulemkdir /opt/softwarechown hadoop:hadoop /opt/modulechown hadoop:hadoop /opt/software
1.1.7 卸载虚拟机自带的JDK
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
1.1.8 重启虚拟机
reboot
1.2 克隆三台虚拟机
通过VMWare克隆模板机器,此处可以不使用静态IP, 但是要记得对应虚拟机的IP地址。

1.2.1 修改主机名
这里因为我的IP是192.168.190.135所以我改为hadoop135
vim /etc/hostname -> hadoop135
1.2.2 增加主机映射
因为后续集群部署是三个机器所以要添加域名映射
vim /etc/hosts
192.168.190.135 hadoop135
192.168.190.136 hadoop136
192.168.190.137 hadoop137
重启即可。
reboot
1.3 在hadoop136上安装JDK
1.3.1 上传JDK Hadoop资源文件
通过远程链接软件Xshell或者FinalShell连接到虚拟机,上传JDK文件到/opt/software。

1.3.2 解压到/opt/module目录下
tar -zxvf jdkxxxx.gz -C /opt/module
1.3.3 配置JDK环境变量
在
/etc/profile.d/新建jdk_path.sh文件
写入:
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
让资源文件生效:source /etc/profile
1.3.4 测试是否安装成功
java -version

1.4 在hadoop136上安装hadoop
1.4.1 上传Hadoop

1.4.2 解压Hadoop
1.4.3 配置Hadoop环境变量
1.4.3 测试Hadoop是否安装成功
2.本地模式
2.1 Hadoop目录结构

- bin目录:存放对 Hadoop 相关服务(hdfs,yarn,mapred)进行操作的脚本
- etc目录:Hadoop 的配置文件目录,存放 Hadoop 的配置文件
- lib目录:存放 Hadoop 的本地库(对数据进行压缩解压缩功能)
- sbin目录:存放启动或停止 Hadoop 相关服务的脚本
- share目录:存放 Hadoop 的依赖 jar 包、文档、和官方案例
2.2 本地运行模式(官方WordCount)
2.2.1 在hadoop-3.1.3 文件下创建wcinput文件夹
mkdir wcinput
2.2.2 在同文件夹下创建wcoutput
mkdir wcoutput
2.2.3 在wcinput文件夹下创建word.txt
vim word.txt
hadoop yarn
hadoop mapreduce
dengschoo
deng schoo
2.2.4 执行程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput
deng 1
dengschoo 1
hadoop 2
mapreduce 1
schoo 1
yarn 1
3.集群模式(完全分布式运行模式)
3.1 集群规划

3.2 配置文件说明

3.3 配置集群
cd $HADOOP_HOME/etc/hadoop
3.3.1 核心配置文件
vim core-site.xml
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop136:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 atguigu -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>dengschoo</value>
</property>
</configuration>
3.3.2 HDFS配置文件
vim hdfs-site.xml
<configuration>
<!-- nn web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop136:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop137:9868</value>
</property>
</configuration>
3.3.3 YARN配置文件
vim yarn-site.xml
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop135</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
</property>
</configuration>
3.3.4 MapReduce配置文件
vim maored-site.xml
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
3.3.5 分发配置文件
将配置好的文件下发到hadoop135,hadoop136, hadoop137
最好的效果是三个worker的配置文件是一样的。
4.4 启动集群
4.1 配置worker
vim etc/hadoop/workers
删除localhost,文中不可以有空格 空行
hadoop135
hadoop136
hadoop137
4.2 启动集群
4.2.1 格式化节点
需要再hadoop136下格式化NameNode
hdfs namenode -format
4.2.2 启动hdfs
启动HDFS
sbin/start-dfs.sh

4.2.3 在部署yarn节点上(hadoop135)启动yarn
sbin/start-yarn.sh

4.2.4 web查看hdfs
http://hadoop136:9870
查看存储的数据信息

4.2.5 web查看YARN的ResourceManager
http:hadoop135:8088

查看yarn上运行的job信息
4.实验1 HDFS Shell命令
4.1 命令
hadoop fs [命令选项]



4.2 常用命令实例
在HDFS文件系统上建立一个目录,将本地文件系统上传到该目录。
hadoop fs -mkdir test: 在HDFS创建test目录
hadoop fs -ls /:显示HDFS目录结构
echo "Hello Hadoop DengSchoo" > file.txt: 创建一个文件
hadoop fs -put file.txt /test/: 上传该文件到/test/
hadoop fs -ls /test/:显示HDFS路径
hadoop fs -cat /test/file.ext:查看HDFS内容

5.实验2 HDFS Java接口调用
5.0 Hadoop Win依赖Path配置
添加依赖:hadoop bin 到系统环境变量。

5.1 创建Maven工程导入依赖
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.1.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
</dependency>
</dependencies>
5.2 API操作
5.2.1 创建文件夹
package com.dengschoo.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
/**
* @author :Deng Schoo
* @version :V1.0
* @className :HdfsClient
* @description :TODO
* @date :2021/11/28 19:57
*/
public class HdfsClient {
@Test
public void testMkdirs() throws URISyntaxException, IOException, InterruptedException {
// 1. 获取文件系统
Configuration configuration = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.190.136:8020"), configuration, "hadoop");
// 2. 创建目录
fs.mkdirs(new Path("/javaAPI/test/"));
// 3. 关闭资源
fs.close();
}
}
输出 成功通过测试

5.2.2 上传文件
package com.dengschoo.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
/**
* @author :Deng Schoo
* @version :V1.0
* @className :HdfsClient
* @description :TODO
* @date :2021/11/28 19:57
*/
public class HdfsClient {
@Test
public void testMkdirs() throws URISyntaxException, IOException, InterruptedException {
// 1. 获取文件系统
Configuration configuration = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.190.136:8020"), configuration, "hadoop");
// 2. 创建目录
fs.mkdirs(new Path("/javaAPI/test/"));
// 3. 关闭资源
fs.close();
}
@Test
public void testCopyFromLocalFile() throws URISyntaxException, IOException, InterruptedException {
// 1. 获取文件系统
Configuration configuration = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.190.136:8020"), configuration, "hadoop");
// 2. 上传文件
fs.copyFromLocalFile(new Path("D:\\Study\\GradeFour\\Course\\CloudComputingProjects\\src\\main\\java\\com\\dengschoo\\hdfs\\file.txt"), new Path("/javaAPI/test/"));
//3.关闭资源
fs.close();
}
}
输出:

5.2.3 文件下载
@Test
public void testCopyToLocalFile() throws URISyntaxException, IOException, InterruptedException {
// 1. 获取文件系统
Configuration configuration = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.190.136:8020"), configuration, "hadoop");
// 指向文件下载操作
// boolean 是否删除源文件
// src
// des
// 是否开启文件校验
fs.copyToLocalFile(false,new Path("/javaAPI/test/file.txt"), new Path("D:\\Environment\\TestEnv"), true);
//3.关闭资源
fs.close();
}
5.2.4 文件更名和移动
@Test
public void testRename() throws IOException, InterruptedException, URISyntaxException{
// 1 获取文件系统
Configuration configuration = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.190.136:8020"),
configuration, "hadoop");
// 2 修改文件名称
fs.rename(new Path("/javaAPI/test/file.txt"), new
Path("/javaAPI/test/file——new.txt"));
// 3 关闭资源
fs.close();
}
5.2.5 HDFS删除文件和目录
@Test
public void testDelete() throws IOException, InterruptedException,
URISyntaxException{
// 1 获取文件系统
Configuration configuration = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.190.136:8020"),
configuration, "hadoop");
// 2 执行删除
fs.delete(new Path("/javaAPI/test"), true);
// 3 关闭资源
fs.close();
}
5.2.6 文件详情查看
@Test
public void testListFiles() throws IOException, InterruptedException,
URISyntaxException {
// 1 获取文件系统
Configuration configuration = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.190.136:8020"),
configuration, "hadoop");
// 2 获取文件详情
RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"),
true);
while (listFiles.hasNext()) {
LocatedFileStatus fileStatus = listFiles.next();
System.out.println("========" + fileStatus.getPath() + "=========");
System.out.println(fileStatus.getPermission());
System.out.println(fileStatus.getOwner());
System.out.println(fileStatus.getGroup());
System.out.println(fileStatus.getLen());
System.out.println(fileStatus.getModificationTime());
System.out.println(fileStatus.getReplication());
System.out.println(fileStatus.getBlockSize());
System.out.println(fileStatus.getPath().getName());
// 获取块信息
BlockLocation[] blockLocations = fileStatus.getBlockLocations();
System.out.println(Arrays.toString(blockLocations));
}
// 3 关闭资源
fs.close();
}

5.2.7 HDFS文件和文件夹判断
@Test
public void testListStatus() throws IOException, InterruptedException,
URISyntaxException{
// 1 获取文件配置信息
Configuration configuration = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.190.136:8020"),
configuration, "hadoop");
// 2 判断是文件还是文件夹
FileStatus[] listStatus = fs.listStatus(new Path("/"));
for (FileStatus fileStatus : listStatus) {
// 如果是文件
if (fileStatus.isFile()) {
System.out.println("f:"+fileStatus.getPath().getName());
}else {
System.out.println("d:"+fileStatus.getPath().getName());
}
}
// 3 关闭资源
fs.close();
}

6.实验3 MapReduce应用程序
6.1 编写Mapper类
public static class MyMapper
extends Mapper<Object, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);//one表示单词在该行 中的出现次数
private final Text word = new Text(); //word存放一行中的单词
/*定义map方法,分割文本行中的单词,将单词及其在该行中的出现次数1写入conte
xt;形参value表示一行文本*/
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);//把word、one写入到context中
}
}
}
6.2 编写Reducer类
public static class MyReducer
extends Reducer<Text, IntWritable,Text,IntWritable> {
private final IntWritable result = new IntWritable();//result表示单词出现的总次数
public void reduce(Text key, Iterable<IntWritable> values,
Context context
) throws IOException, InterruptedException {
int sum = 0;//sum存放该单词出现的总次数
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum); //result表示单词的总次数,是最后输出的“值”
context.write(key, result);
}
}
6.3 编写主类
public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
Configuration conf = new Configuration();
System.setProperty("HADOOP_USER_NAME","hadoop");
Job job = Job.getInstance(conf, "wordcount"); //创建一个job对象
job.setUser("hadoop");
job.setJarByClass(MapReduceTest.class); //创建一个job对象
job.setMapperClass(MyMapper.class); //设置自定义的Mapper类
job.setCombinerClass(MyReducer.class);
job.setReducerClass(MyReducer.class);//设置自定义的Reducer类
job.setOutputKeyClass(Text.class);//设置map()方法输出的key类型
job.setOutputValueClass(IntWritable.class);//设置输出的value的类型
job.setUser("hadoop");
FileInputFormat.addInputPath(job,
new Path("hdfs://192.168.190.136:8020/javaAPI/test/input"));
//job作业执行时输入文件的路径
FileOutputFormat.setOutputPath(job,
new Path("hdfs://192.168.190.136:8020/javaAPI/test/out"));
System.exit(job.waitForCompletion(true) ? 0 : 1);//设置job作业执行的输出路
}
6.4 运行结果

【Cloud Computing】Hadoop环境安装、基本命令及MapReduce字数统计程序的更多相关文章
- hadoop环境安装及简单Map-Reduce示例
说明:这篇博客来自我的csdn博客,http://blog.csdn.net/lxxgreat/article/details/7753511 一.参考书:<hadoop权威指南--第二版(中文 ...
- Hadoop环境安装和集群创建
虚拟机使用vmware,vmware可以直接百度下载安装 秘钥也能百度到 安装很简单 CentOS 7下载: 进入官网 https://www.centos.org/download/ 这里有三种 第 ...
- hadoop环境安装及错误总结
历时N天的hadoop环境,终于配好了 主要参考 Hadoop集群安装配置教程_Hadoop2.6.0_Ubuntu/CentOS 1.开机默认进入字符界面或者是图形界面:http://blog.cs ...
- 大数据学习系列之一 ----- Hadoop环境搭建(单机)
一.环境选择 1,服务器选择 阿里云服务器:入门型(按量付费) 操作系统:linux CentOS 6.8 Cpu:1核 内存:1G 硬盘:40G ip:39.108.77.250 2,配置选择 JD ...
- [Taro] Taro 环境安装 (一)
Taro 环境安装 Taro是一个前端小程序框架,通过这个框架写一套代码,再通过 Taro 的编译工具,就可以将源代码分别编译出可以在不同端(微信/百度/支付宝/字节跳动小程序.H5.React-N ...
- 最新hadoop+hbase+spark+zookeeper环境安装(vmmare下)
说明:我这里安装的版本是hadoop2.7.3,hbase1.2.4,spark2.0.2,zookeeper3.4.9 (安装包:链接:http://pan.baidu.com/s/1c25hI4g ...
- hadoop——配置eclipse下的map-reduce运行环境 1
1.通过修改实例模板程序来实现自己的map-reduce: 为了让示例程序run起来: 1)安装eclipse 2)安装map-reduce的eclipse插件 eclipse的map-reduce插 ...
- 高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南
原文:http://my.oschina.net/wstone/blog/365010#OSC_h3_13 (WJW)高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南 [X] ...
- Hadoop环境搭建2_hadoop安装和运行环境
1 运行模式: 单机模式(standalone): 单机模式是Hadoop的默认模式.当首次解压Hadoop的源码包时,Hadoop无法了解硬件安装环境,便保守地选择了最小配置.在这种默认模式下所有 ...
随机推荐
- 【集成学习】:Stacking原理以及Python代码实现
Stacking集成学习在各类机器学习竞赛当中得到了广泛的应用,尤其是在结构化的机器学习竞赛当中表现非常好.今天我们就来介绍下stacking这个在机器学习模型融合当中的大杀器的原理.并在博文的后面附 ...
- Vuex 基础
其他章节请看: vue 快速入门 系列 Vuex 基础 Vuex 是 Vue.js 官方的状态管理器 在vue 的基础应用(上)一文中,我们已知道父子之间通信可以使用 props 和 $emit,而非 ...
- 【Java虚拟机1】Java字节码文件格式入门
第一次学习看字节码文件,这个对工作没什么用,但是会提升内功. 首先介绍两个IDEA插件以及使用: BinEd:以16进制格式查看class文件 使用方法:右键class文件,点击Open as bin ...
- 剑指offer:JZ12 矩阵中的路径
JZ12 矩阵中的路径 描述 请设计一个函数,用来判断在一个n乘m的矩阵中是否存在一条包含某长度为len的字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上, ...
- MySQL复习(一)MySQL架构
MySQL架构 MySQL采用的是C/S架构,我们在使用MySQL的时候,都是以客户端的身份,发送请求连接到运行服务端的MySQL守护进程,而MySQL服务器端则根据我们的请求进行处理并把处理后的结果 ...
- Java中类及方法的加载顺序
1. 虚拟机在首次加载Java类时,会对静态代码块.静态成员变量.静态方法进行一次初始化(静态间按顺序执行). 2. 只有在调用new方法时才会创建类的实例. 3. 类实例创建过程:父子继承关系,先父 ...
- [对对子队]会议记录4.10(Scrum Meeting 1)
本次每日例会的开会时间是4月10日晚上20:00,使用腾讯会议作为开会工具. 今天已完成的工作 何瑞 工作内容:制作UI界面的指令编辑系统,已大致实现指令的衔接 相关issue:实现用户指令编 ...
- [对对子队]会议记录4.18(Scrum Meeting9)
今天已完成的工作 何瑞 工作内容:修复了一些关卡1的bug 相关issue:搭建关卡1 相关签入:4.18签入1 4.18签入2 梁河览 工作内容:实现了音量控制,添加了BGM 相 ...
- 零基础学习C语言入门必备知识
今天跟大家一起从零学C语言: 1. C语言简介 1.1 C语言发展史 C语言是一种广泛使用的面向过程的计算机程序设计语言,既适合于系统程序设计,又适合于应用程序设计.C语言的发展历程大致如图1-1所示 ...
- 我的一些JAVA基础见解
这个学期学习JAVA基础课,虽说之前都自学过,但在学习时仍可以思考一些模糊不清的问题,可以更深一步的思考.在这里写下一些需要深入的知识点,对小白们也很友好~ 一.Java数据类型 1.基本数据类型 这 ...