文章目录
1. VMWare安装模板机
安装好ubutun20系统:
修改网络配置:
1. 修改VMWare的网络配置
编辑->虚拟网络配置->选择VMnet8
保证子网和NAT网关网段一致
2. 修改Windows网络配置
找到VMnet8, 右键属性,修改如下(ip地址不要和前面设置的网关ip一致)
3. 打开虚拟机进行配置
sudo gedit /etc/netplan/01-network-manager-all.yaml
修改成如下内容,其中dhcp为no表示不使用动态ip分配,address为192.168.10.101(不要和刚刚在window系统中配置的ip 192.168.10.3地址一样)
network:
version: 2
ethernets:
ens33:
addresses: [192.168.10.101/24]
dhcp4: no
dhcp6: no
gateway4: 192.168.10.2
nameservers:
addresses: [192.168.10.2]
修改机器名称:gedit /etc/hostname
(切记切换到root用户)
机器名称和ip绑定:gedit /etc/hosts
hadoop2 hadoop3是后面要克隆出来的主机, ip是前面手动设置的ip
重启: reboot
完成以上步骤,在ubutu20中查看一下ip,可以看出ip地址和前面手动设置的一致
在window下ping测试:
之后用XSHELL进行连接,如果连接失败,将window系统中的host文件复制一份到桌面,进行以下检查:
-
虚拟机是否安装ssh ssh服务是否打开
-
虚拟机是否关闭防火墙
-
虚拟机的设置是否是NAT模式
-
在windows中的VMnet8中配置的ip地址不要和虚拟机的ip地址一样,也不要和网关地址一样
连接成功情形:
2. 克隆模板机
- 关闭模板机器
- 右键模板机->管理->克隆(选择从现有快照克隆,因此要先对模板机打一个快照)->创建完整克隆
克隆完成截图:
然后按前面的步骤修改hadoop2和hadoop3中的主机名和ip, 注意不要重复并且在root用户下修改,修改完以后reboot重启
修改完成后,用XSHELL连接3台虚拟机:
3. JDK安装
通过XFTP将Linux版本的jdk1.8压缩包传到hadoop1
-
解压:
sudo tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/
安装在opt目录下
-
sudo vi ~/.bashrc , 在后面添加java路径:
export JAVA_HOME=/opt/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
添加完保存再source, 查看是否设置成功
4. hadoop安装
- 解压hadoop到/opt目录下:
sudo tar -zxvf hadoop-3.1.3.tar.gz -C /opt
- 在opt目录下添加权限:
chown -R 用户名 ./hadoop-3.1.3
- 修改~/bashrc文件,sudo vi ~/.bashrc , 在后面添加java路径:
export HADOOP_HOME=/opt/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
- 添加完之后
source ~/.bashrc
, 输入hadoop命令查看是否配置成功:
5. hadoop单机模式运行
数据存储在linux本地
- 在hadoop安装目录下创建一个文件夹wcinput, 在该目录下创建一个文件,比如word.txt, 文件里面随意输入一些内容
- 执行以下命令
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput/ ./wcoutput
执行完成后进入wcoutput文件夹下查看:
结果显示了刚刚创建的word.txt中的各个单词的数量
注意点:在执行bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput/ ./wcoutput
命令时要保证wcoutput文件夹不存在,如果想要再次执行该命令,需要删除wcoutput文件夹
6. 伪分布式搭建
数据存储在hdfs
以下文件在haoop安装目录中的/etc/hadoop/文件夹下
- 修改core.site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/hadoop-3.1.3/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
- 修改 hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop-3.1.3/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop-3.1.3/tmp/dfs/data</value>
</property>
</configuration>
- namenode格式化
cd /usr/local/hadoop
./bin/hdfs namenode -format
//如果提示JAVA_HOME is not set 修改etc/hadoop/hadoop-env.sh 中的export JAVA_HOME= 等号后面填写具体的jdk安装路径
格式化完成后输入jps
命令,如果格式化成功会显示NameNode”、”DataNode” 和“SecondaryNameNode”
-
启动
-
准备数据
-
执行
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
-
查看结果
-
关闭
7. 完全分布式的搭建
数据存储在多台服务器
7.1 在hadoop2主机上安装jdk和hadoop
用XSHELL连接hadoop1,使用scp命令将jdk hadoop复制到hadoop2 (当然也可以使用xftp进行文件上传)
scp -r /opt/jdk1.8.0_212/ pengfeigui@hadoop2:/home/pengfeigui
scp -r /opt/hadoop-3.1.3/ pengfeigui@hadoop2:/home/pengfeigui
scp -r /opt/jdk1.8.0_212/ pengfeigui@hadoop3:/home/pengfeigui
scp -r /opt/hadoop-3.1.3/ pengfeigui@hadoop3:/home/pengfeigui
在hadoop2上也要修改bashrc环境变量
7.2 在hadoop1上实现SSH无密码登录
进入hadoop1主机:
cd ~/.ssh (如果提示没有ssh目录,先使用ssh localhost有秘密登录然后再退出)
rm ./id_rsa*
ssh-keygen -t rsa
cat ./id_rsa.pub >> ./authorized_keys
scp ~/.ssh/id_rsa.pub pengfeigui@hadoop2:/home/pengfeigui/
接着进入hadoop2主机:
mkdir ~/.ssh
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub
7.3 修改5个文件
5个文件所在目录:/opt/hadoop-3.1.3/etc/hadoop
1. core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/hadoop-3.1.3/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
2. hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop1:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop-3.1.3/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop-3.1.3/tmp/dfs/data</value>
</property>
</configuration>
3. mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop1:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
</configuration>
4. yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
5. workers
该文件中保存作为datanode的主机,这里搭建hadoop1作为namenode,hadoop2作为datanode,因此删除worker文件中原始的localhost,改为hadoop2
7.4 启动
在hadoop1(Master节点)中的sbin目录中执行命令:
hdfs namenode -format
(首次运行时需要执行,后面不需要)
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
输入命令:jps
查看:
保证NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程都存在
再登录到hadoop2主机(Slave节点)上使用jps
命令:
存在 DataNode 和 NodeManager 进程
在hadoop1主机上使用hdfs dfsadmin -report
查看datanode是否正常启动:
7.5 执行分布式实例
在hadoop1主机上:
hdfs dfs -mkdir -p /user/pengfeigui
hdfs dfs -mkdir -p input
hdfs dfs -put /opt/hadoop-3.1.3/etc/hadoop/*.xml input
hadoop jar /opt/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
下次再运行需要移除之前的output目录:/opt/hadoop-3.1.3/bin/hadoop fs -rm -r output
以下是运行成功的截图:
ps: 如果运行失败,可能是虚拟机内存分配过小,修改mapred-site.xml,添加以下内容:
<property>
<name>mapreduce.map.memory.mb</name>
<value>1536</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx1024M</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>3072</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx2560M</value>
</property>
7.6 关闭
在hadoop1(Master)主机上面的hadoop安装目录下的sbin文件夹下执行
stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.sh stop historyserver