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 TokenizerMapper
extends Mapper