说明
我这里实际上是把jdk和hadoop安装在了/home/wolf/opt/app/中,而非正常的/opt/app/中,所以路径可能会有点怪,所以看这篇文章的时候要时刻注意路径问题,我也非常建议把软件放在/opt/app/中(记得提前chown把权限给好),这样比较符合市面上大多数的教程的路径。
参考链接:Ububtu18.04安装Hadoop3.1.3全分布集群-持续更新问题集-腾讯云开发者社区-腾讯云
目录
4.使用SSH工具把Hadoop3.1.3和jdk8的压缩包上传到虚拟机上
1.设置主机名
# 临时设置hostname
sudo hostname master
# 永久设置hostname
sudo vim /etc/hostname
# 填写hostname,这里填写master
重启虚拟机即应用成功,对于其他的虚拟机可以填写hostname为slave1、slave2......
2.配置/etc/hosts文件
sudo vim /etc/hosts
配置成类似这样,注意修改ip地址。
3.SSH免密登录
在主机输入
ssh master
进行ssh登录,这时还需要密码登录。
设置SSH免密登录
exit # 退出刚才的 ssh localhost
# 若没有该目录,请先执行一次ssh localhost
cd ~/.ssh/
ssh-keygen -t rsa # 会有提示,都按回车就可以
cat ./id_rsa.pub >> ./authorized_keys # 加入授权方法1
# 加入授权方法2 或这种方法
ssh-copy-id -i .ssh/id_rsa.pub wolf@192.168.199.129
4.使用SSH工具把Hadoop3.1.3和jdk8的压缩包上传到虚拟机上
我用的是finalshell,其他的各种shell或者putty都可以,这里就不多赘述了。压缩包可以去参考链接里下载。
5.安装jdk
先在主目录中(注:关于安装目录的问题,见“说明”)
mkdir opt/app/jdk
解压下载的jdk文件到 /home/用户名/opt/app/jdk目录下
tar zxf jdk-8u162-linux-x64.tar.gz -C ~/opt/app/jdk
在主目录
sudo vim .bashrc
在最后插入
export JAVA_HOME=/home/用户名/opt/app/jdk
export JRE_HOME=/home/用户名/opt/app/jdk/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
重启虚拟机,在终端输入
java -version
6.安装Hadoop
同理,在opt/app/中创建一个hadoop目录
mkdir /opt/app/hadoop
tar -zxf hadoop-3.1.3.tar.gz -C ~/opt/app/hadoop
在主目录
sudo vim .bashrc
在最后插入
export HADOOP_HOME=/home/用户名/opt/app/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
编辑Hadoop目录下的子目录etc/hadoop目录文件Hadoop-env.sh文件:
将JAVA_HOME设为jdk所在绝对路径(否则运行时可能会出现找不到的情况)
export JAVA_HOME=/home/用户名/opt/app/jdk
单机测试,参考博客的内容:
# 查看版本号
hadoop version
cd /home/用户名/opt/app/hadoop
mkdir ./input
# 将配置文件作为输入文件
cp ./etc/hadoop/*.xml ./input
# 测试MR程序
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/*
# 输出如下表示正确
1 dfsadmin
hadoop目录结构
7.测试本地运行模式
在hadoop目录中
mkdir wcinput
cd wcinput
新建word.txt
vim word.txt
随便输入一些文本,用来统计词频
返回hadoop安装目录
cd ..
使用hadoop提供的examples包进行词频统计,注意输出目录不能已存在
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput/ ./wcoutput
查看一下输出结果
part-r-00000里面存的是输出结果
8.完全分布式搭建及运行测试
这里参考的是尚硅谷的Hadoop教程
27_尚硅谷_Hadoop_入门_scp&rsync命令讲解_哔哩哔哩_bilibili
这里是重点,最好搭建三遍以上。
首先要编写脚本分发hadoop和jdk(脚本这里暂时没看,所以使用scp,脚本编写可以看视频)
(1)在slave1和slave2上新建文件夹opt/app
(2)把master的jdk和hadoop拷贝到slave1和slave2
sudo scp -r jdk/ wolf@slave1:~/opt/app/
sudo scp -r jdk/ wolf@slave2:~/opt/app/
sudo scp -r hadoop/ wolf@slave1:~/opt/app/
sudo scp -r hadoop/ wolf@slave2:~/opt/app/
(3)设置slave的环境变量
跳到5、6的环境配置,然后重启。
(4)免密登录
希望master可以免密登录slave1和slave2
在master中
ssh-keygen -t rsa
ssh-copy-id slave1
输入密码后,再次登录slave1即可免密登录
ssh slave1 # 登录
exit # 退出
常见问题
如果出现下图这种“Network is unreachable”
在slave中
sudo vim /etc/ssh/sshd_config
把下图中的两行解除注释,然后把no改成yes
重启ssh服务,然后重启机器即可解决。
systemctl restart ssh.service
sudo reboot
然后可以依次对slave1和slave2进行类似的免密登录配置,使三台机器可以互相免密登录,在任何一台主机上都可以启动和操作集群。
(5) 集群配置
(a)配置core-site.xml
cd etc/hadoop/
vim core-site.xml
我们要把配置信息放在蓝色框范围内,注意修改路径
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/wolf/opt/app/hadoop/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为wolf -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>wolf</value>
</property>
</configuration>
(b)配置hdfs-site.xml
vim hdfs-site.xml
<configuration>
<!-- namenode web 端访问地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>master:9870</value>
</property>
<!-- 2nn web 端访问地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave2:9868</value>
</property>
</configuration>
(c)配置yarn-site.xml
vim yarn-site.xml
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManeger的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>slave1</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
(d)配置mapred-site.xml
vim mapred-site.xml
<configuration>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/home/wolf/opt/app/hadoop</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/home/wolf/opt/app/hadoop</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/home/wolf/opt/app/hadoop</value>
</property>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
(e)把配置好的文件发送到slave上
sudo scp -r hadoop/ wolf@slave1:~/opt/app/hadoop/etc/
sudo scp -r hadoop/ wolf@slave2:~/opt/app/hadoop/etc/
(6)群起集群并测试
(a)配置workers
vim opt/app/hadoop/etc/hadoop/workers
同样分发
sudo scp -r hadoop/ wolf@slave1:~/opt/app/hadoop/etc/
sudo scp -r hadoop/ wolf@slave2:~/opt/app/hadoop/etc/
(b)启动集群
注意:第一次启动要初始化,在master格式化NameNode。
hdfs namenode -format
用sbin目录下的start-dfs.sh启动
sbin/start-dfs.sh
集群启动成功,在浏览器中输入master:9870启动web端,查看dfs的NameNode
(c)在slave1启动YARN(因为ResourceManager在slave1)
sbin/start-yarn.sh
Web端查看Yarn的ResourceManager
至此,我们已经在Ubuntu18.04上安装并配置了Hadoop3.1.3(完全分布式运行模式),接下来就是Hadoop具体操作的学习。