- 1. VMWare安装模板机
- 2. 克隆模板机
- 3. JDK安装
- 4. hadoop安装
- 5. hadoop单机模式运行
- 6. 伪分布式搭建
- 7. 完全分布式的搭建
- 7.1 在hadoop2主机上安装jdk和hadoop
- 7.2 在hadoop1上实现SSH无密码登录
- 7.3 修改5个文件
- 7.4 启动
- 7.5 执行分布式实例
- 7.6 关闭
安装好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地址一样,也不要和网关地址一样
连接成功情形:
- 关闭模板机器
- 右键模板机->管理->克隆(选择从现有快照克隆,因此要先对模板机打一个快照)->创建完整克隆
克隆完成截图:
然后按前面的步骤修改hadoop2和hadoop3中的主机名和ip, 注意不要重复并且在root用户下修改,修改完以后reboot重启
修改完成后,用XSHELL连接3台虚拟机:
通过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, 查看是否设置成功
- 解压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命令查看是否配置成功:
数据存储在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
hadoop.tmp.dir file:/opt/hadoop-3.1.3/tmp Abase for other temporary directories. fs.defaultFS hdfs://localhost:9000
- 修改 hdfs-site.xml:
dfs.replication 1 dfs.namenode.name.dir file:/opt/hadoop-3.1.3/tmp/dfs/name dfs.datanode.data.dir file:/opt/hadoop-3.1.3/tmp/dfs/data
- 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.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.pub7.3 修改5个文件
5个文件所在目录:/opt/hadoop-3.1.3/etc/hadoop
1. core-site.xml
fs.defaultFS hdfs://hadoop1:9000 hadoop.tmp.dir file:/opt/hadoop-3.1.3/tmp Abase for other temporary directories.
hadoop1主机只当作NameNode节点使用
file:/opt/hadoop-3.1.3/tmp 中选择自己的hadoop安装路径
2. hdfs-site.xml
dfs.namenode.secondary.http-address hadoop1:50090 dfs.replication 1 dfs.namenode.name.dir file:/opt/hadoop-3.1.3/tmp/dfs/name dfs.datanode.data.dir file:/opt/hadoop-3.1.3/tmp/dfs/data
3. mapred-site.xml
mapreduce.framework.name yarn mapreduce.jobhistory.address hadoop1:10020 mapreduce.jobhistory.webapp.address hadoop1:19888 yarn.app.mapreduce.am.env HADOOP_MAPRED_HOME=${HADOOP_HOME} mapreduce.map.env HADOOP_MAPRED_HOME=${HADOOP_HOME} mapreduce.reduce.env HADOOP_MAPRED_HOME=${HADOOP_HOME}
4. yarn-site.xml
yarn.resourcemanager.hostname hadoop1 yarn.nodemanager.aux-services mapreduce_shuffle
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是否正常启动:
在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,添加以下内容:
7.6 关闭mapreduce.map.memory.mb 1536 mapreduce.map.java.opts -Xmx1024M mapreduce.reduce.memory.mb 3072 mapreduce.reduce.java.opts -Xmx2560M
在hadoop1(Master)主机上面的hadoop安装目录下的sbin文件夹下执行
stop-yarn.sh stop-dfs.sh mr-jobhistory-daemon.sh stop historyserver



