Hadoop完全分布式集群的搭建及应用

news/2025/2/13 22:54:50/

1、系统硬件(虚拟机分配)

CPU:Intel(R)_Core(TM) i5-3230M CPU @ 2.60GHz

内存:4GB

硬盘:20GB

2、系统软件

操作系统:CentOS-7-x86_64-Everything-1611

虚拟机:VMware 11.1.1 build-2771112

Hadoop版本:Hadoop 3.0.3

Java版本:Java-1.8.0_171

3、Hadoop环境配置

3.1 配置虚拟网络

本项目使用一个主机,两个从机,它们的名称以及IP地址确定如下:

名称

IP地址

Master

192.168.102.100

Slave1

192.168.102.201

Slave2

192.168.102.202

3.2 主机网络的配置

(1)关闭SELINUX:vi /etc/selinux/config,设置SELINUX=disabled,保存退出,如下图所示:

(2)关闭防火墙,首先安装iptables,并启动服务:sudo yum install iptables-services。然后关闭防火墙:/sbin/service iptables stop;chkconfig --level 35 iptables off。执行完毕后查看防火墙状态:service iptables status,如下图所示

(3)修改静态IP地址,在命令行中输入vi /etc/sysconfig/network-scripts/ifcfg-ens33,IP配置信息如下

(4)修改主机名称:vim /etc/hostname

(5)修改host 映射:vi /etc/hosts

(6)重启网络service network restart,静态IP信息如下图所示

3.3 下载安装jdk,并且配置环境变量,完成安装

jdk环境变量的配置

3.4 安装配置hadoop

下载并解压Hadoop,修改hadoop-env.sh、core-site.xml、mapred-site.xml、workers、bash_profile等配置文件。

(1)修改hadoop-env.sh文件

(2)修改core-site.xml

(3)修改mapred-site.xml

(4)修改workers文件

(5)修改bash_profile文件

3.5 分布式集群的搭建

(1)克隆2个centos系统,至此可以看作3台服务器master、slave1、slave2。

(2)SSH免密码登录配置

默认启动ssh无密登录,每个系统都要对sshd_config文件进行配置vim /etc/ssh/sshd_config

      进入/root/.ssh文件,输入ssh-keygen -t dsa,生成密钥,会在root文件夹里产生ssh文件。输入cat id_dsa.pub >> authorized_keys,将id_dsa.pub文件信息复制到authorized_keys文件中,输入scp authorized_keys slave2:~/.ssh,将authorized_keys复制到slave2。

      然后输入ssh slave2 不用输入登录密码即可完成登录。同样的,对slave1完成ssh免密码登录配置。至此完成Hadoop在centos系统上的环境搭建

4、Hadoop平台的应用

4.1、Hadoop初始化

        格式化hdfs,输入命令./hadoop  namenode  -format,格式化的过程状态如下图所示。

4.2、启动Hadoop。

(1) 在Hadoop主目录的sbin文件夹中,输入命令./start-all.sh

(2) jps查看Hadoop进程

4.3、上传任务文件到hdfs

(1)在本地系统创建任务文件

         创建input文件夹,再在文件夹input中创建两个文本文件file1.txt和file2.txt,文件的内容如下图所示。

(2)上传文件

         Hdfs系统创建h_input文件夹,在hadoop主目录下输入命令行bin/hdfs dfs -mkdir -p h_input 。将本地任务文件上传到hdfs,输入命令行bin/hadoop fs -put /home/lgy/input/file* h_input

(3)运行代码

运行统计单词代码,输入命令hadoop fs -cat h_output/part-r-00000,查看结果如下图所示

5 代码

import java.io.IOException;import java.util.StringTokenizer;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.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.util.GenericOptionsParser;public class WordCount {public static class TokenizerMapperextends Mapper<Object, Text, Text, IntWritable>{private final static IntWritable one = new IntWritable(1);private Text word = new Text();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);} //while} //map()} //static class TokenizerMapperpublic static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> {private IntWritable result = new IntWritable();public void reduce(Text key, Iterable<IntWritable> values,Context context)throws IOException, InterruptedException {int sum = 0;for (IntWritable val : values) {sum += val.get();}result.set(sum);context.write(key, result);} //reduce} //static class IntSumReducerpublic static void main(String[] args) throws Exception {Configuration conf = new Configuration();String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();if (otherArgs.length != 2) {System.err.println("Usage: wordcount <in> <out>");System.exit(2);}Job job = new Job(conf, "word count");job.setJarByClass(WordCount.class);job.setMapperClass(TokenizerMapper.class);job.setCombinerClass(IntSumReducer.class);job.setReducerClass(IntSumReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);FileInputFormat.addInputPath(job, new Path(otherArgs[0]));FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);} //main()} //class WordCount

 

 


http://www.ppmy.cn/news/167575.html

相关文章

docker实现原理以及简单体验(一)

简介 由于科技技术的高度发展&#xff0c;在物理机服务器性能越来越高的今天&#xff0c;很多生产环境中使用的服务器&#xff0c;由于没有很多的用户访问&#xff0c;而导致性能过剩。而生产中又需要在多台服务器上部署业务。如果总是购买物理服务器&#xff0c;显然会造成经济…

ssh 配置文件讲解大全

ssh 配置文件讲解大全 ssh调试模式 sftp scp strace进行调试 特权分离 http://blog.chinaunix.net/uid-16728139-id-3265394.html 1995 年&#xff0c;芬兰学者Tatu Ylonen 设计了SSH 协议&#xff0c;将登录信息全部加密&#xff0c;成为互联网安全的一个基本解决方案。这个…

Windows API GetLastError错误代码解释大全(最完整的一篇)

这个也很好获取&#xff0c;循环FormatMessage即可。 0 操作成功完成。 1 函数不正确。 2 系统找不到指定的文件。 3 系统找不到指定的路径。 4 系统无法打开文件。 5 拒绝访问。 6 句柄无效。 7 存储控制块被损坏。 8 存储空间不足&#xff0c;无法处理此命令。 9 存…

docker操作(二)

目录 镜像操作搜索mysql镜像拉取镜像查看镜像删除镜像容器操作运行镜像&#xff0c;启动容器查看运行的容器查看容器日志停止容器启动容器删除容器进入容器上传文件将容器转成镜像存储镜像自动启动容器实时监控容器资源使用情况获得Docker容器进程ID其他更多命令 镜像操作 比如…

VS错误代码列

0-操作成功完成。 1-函数不正确。 2-系统找不到指定的文件。 3-系统找不到指定的路径。 4-系统无法打开文件。 5-拒绝访问。 6-句柄无效。 7-存储控制块被损坏。 8-存储空间不足&#xff0c;无法处理此命令。 9-存储控制块地址无效。 10-环境不正确。 11-试图加载格…

2007年上半年 网络工程师 上下午试卷【附带答案】

2004-2017年真题答案【0.23RMB】自取 2007年上半年 网络工程师 上午试卷 ● &#xff08;1&#xff09; 不属于计算机控制器中的部件。&#xff08;1&#xff09;A&#xff0e;指令寄存器IR  B&#xff0e;程序计数器PC  C&#xff0e;算术逻辑单元ALU …

旧电脑改造服务器或云电脑和外网访问家庭nas/软路由实战记录

旧电脑改造服务器和外网访问家庭nas/软路由实战记录 对于旧电脑&#xff0c;很多时候都闲置在家&#xff0c;技术好一些的同学可能会把他改造成软路由&#xff0c;但是很多旧电脑都只有百兆接口&#xff0c;作为软路由也未必能满足现在家里动辄500M,1000M的宽带。技术差一些的…

[WinAPI]通过Windows系统CLSID(GUID)打开系统指定窗口,及部分[上帝模式]命令

CLSID是类标识符,windows有众多的类对象,我门调用这些类对象就可以实现很多计算机操作, 用户在图形界面上找找找点点点,费时费力,程序员可以给用户提供脚本或者程序提供按钮完成"一键打开"系统窗口. 脚本就是直接保存*.bat文件,程序的话通过程序平台的Process类交互…