记录一下Hadoop3.0.0在3个虚拟机中模拟分布式安装的过程,用于日后练习Hadoop和MR相关
欢迎访问排版更好的原文链接,https://www.casscw.cn/index.php/archives/65/
选择的是Virtul Box,占用资源比较少
- 系统:Ubuntu Server 16.04 x64
- Virtual Box 5.2.6
- PC配置:16G内存,CPU I5
安装过程没什么特别的,为了方便本文中所有用户名均设置为hadoop,值得注意的是,要对启用的虚拟机开启局域网访问,步骤如下
首先需要添加一个NAT网络
其次需要将虚拟机网卡添加一个NAT网络
值得注意的是,每个虚拟机最好配置两张网卡,仅仅有一个NAT网络会导致虚拟机无法连接外网。这配置多张网卡时,需要在虚拟机中确认是否所有网卡已经正常开启,可以通过查看/etc/network/interfaces的配置或者ifconfig -a
来检测。
主机名即hostname,文件位于/etc/hostname,将其中一台设置为master,另外两台分别设置为slave1、slave2。修改完成后重启便可以生效
修改hosts文件,位于/ets/hosts,将master、slave1和slave2对应的ip地址和主机名输入到每台机器中
10.0.2.4 master
10.0.2.5 slave2
10.0.2.6 slave1
在三台机器上分别执行ssh-keygen -t rsa
,然后回车至结束,在master上进入到根目录下的.ssh文件夹
cat id_rsa.pub >> authorized_keys
scp authorized_keys hadoop@slave1:~/.ssh
scp authorized_keys hadoop@slave2:~/.ssh
关于上述命令的说明,第一行是将master的公钥复制到authorized_keys文件中,第二行第三行是分别将authorized_keys文件复制到slave1和slave2的.ssh文件夹中,代表master免密码ssh登陆slave1和slave2。值得注意的是,这边的ip地址均用了主机名代替,如果上面的修改hosts等步骤出错这边也将无法进行下去
Hadoop3.0好像要求最低JDK8.0,到官网下载压缩版本解压至任意目录,然后添加环境变量
export JAVA_HOME=/home/hadoop/tools/jdk1.8.0_161
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
以上配置JDK1.8操作需要分别对三台机器同样执行
到网站下载对应的压缩文件到master的根目录或者任意目录下,由于出于学习的目的可以直接放置在根目录下即可。解压得到hadoop-3.0.0文件夹,进入目录/hadoop-3.0.0/etc/hadoop进行一系列配置
**core-site.xml**
<configuration>
<property>
<name>fs.defaultFSname>
<value>hdfs://master:9000value>
property>
<property>
<name>hadoop.tmp.dirname>
<value>file:///home/hadoop/hadoop-3.0.0/tmpvalue>
property>
configuration>
**hdfs-site.xml**
<configuration>
<property>
<name>dfs.replicationname>
<value>2value>
property>
<property>
<name>dfs.namenode.name.dirname>
<value>file:///home/hadoop/hadoop-3.0.0/hdfs/namevalue>
property>
<property>
<name>dfs.datanode.data.dirname>
<value>file:///home/hadoop/hadoop-3.0.0/hdfs/datavalue>
property>
<property>
<name>dfs.namenode.secondary.http-addressname>
<value>slave1:9001value>
property>
configuration>
**yarn-site.xml**
<configuration>
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.classname>
<value>org.apache.hadoop.mapred.ShuffleHandlevalue>
property>
<property>
<name>yarn.resourcemanager.resource-tracker.addressname>
<value>master:8025value>
property>
<property>
<name>yarn.resourcemanager.scheduler.addressname>
<value>master:8030value>
property>
<property>
<name>yarn.resourcemanager.addressname>
<value>master:8040value>
property>
configuration>
**mapred-site.xml**
<configuration>
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
<property>
<name>mapreduce.application.classpathname>
<value>
/home/hadoop/hadoop-3.0.0/etc/hadoop,
/home/hadoop/hadoop-3.0.0/share/hadoop/common/*,
/home/hadoop/hadoop-3.0.0/share/hadoop/common/lib/*,
/home/hadoop/hadoop-3.0.0/share/hadoop/hdfs/*,
/home/hadoop/hadoop-3.0.0/share/hadoop/hdfs/lib/*,
/home/hadoop/hadoop-3.0.0/share/hadoop/mapreduce/*,
/home/hadoop/hadoop-3.0.0/share/hadoop/mapreduce/lib/*,
/home/hadoop/hadoop-3.0.0/share/hadoop/yarn/*,
/home/hadoop/hadoop-3.0.0/share/hadoop/yarn/lib/*
value>
property>
configuration>
**workers**
注意这边修改的文件就是目录下的workers文件,加入两个slave机器名即可
slave1
slave2
**hadoop-env.sh**
在此文件中加入
export JAVA_HOME=/home/hadoop/tools/jdk1.8.0_161
**yarn-env.sh**
在此文件中加入
export JAVA_HOME=/home/hadoop/tools/jdk1.8.0_161
配置完成后,将hadoop-3.0.0整个文件夹复制到另外两台机器slave1和slave2
scp -r hadoop-3.0.0/ hadoop@slave1:/home/hadoop/
scp -r hadoop-3.0.0/ hadoop@slave2:/home/hadoop/
hadoop fs -ls /
,其中/
代表根目录hadoop fs -mkdir -p /user/hadoop/
,其中-p
代表把父级目录也同时创建hadoop fs -put a.txt /user/hadoop/
,其中a.txt
为任意创建的一个文本作为词频统计的输入hadoop jar hadoop-3.0.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0.jar wordcount a.txt wordcount
,无错误即可hadoop fs -cat /user/hadoop/wordcount/part-r-00000