系统及环境
网络环境:处于局域网下的部分机器(>=4)
系统版本:win10较新版本,支持子系统
子系统版本:ubuntu18.04
其他软件:Xshell6,Xftp6
实验要求:在多台机器上安装hadoop,配置完成后,可以在完成官方demo的wordcount功能,实现其他功能
下载安装wsl(ubuntu)
- 系统要求:win10较新版本
- 修改电脑名(用以在ubuntu中分辨是哪台电脑,这一步推荐在后面其他节点修改配置里做):右击此电脑-属性-更改设置-计算机描述(ustc+序号)-更改-计算机名(ustc+序号)-稍后重启
- 关闭防火墙:控制面板-网络和Internet-网络和共享中心-wd防火墙(左下角)-启用或关闭wd防火墙-稍后重启
- 开启wsl功能:打开控制面板-程序-启用或关闭windows功能-勾选适用于Linux的Windows子系统-重启电脑
- 打开Microsoft Store,搜索ubuntu,选择18.04下载
- 先创建ustc用户,密码也为ustc(只是为了好记)
- 创建hadoop用户
$sudo useradd -m hadoop -s /bin/bash # 创建hadoop用户,并使用/bin/shell作为shell
$sudo passwd hadoop #为hadoop用户设置密码
$sudo adduser hadoop sudo #为hadoop用户增加管理员权限
$su - hadoop #切换当前用户为hadoop
$sudo apt-get update #更新hadoop用户的apt,方便后面安装ssh
安装ssh并设置免密码登录
- 安装ssh,生成公钥和私钥
$ sudo apt-get install openssh-server #安装SSH server
$ cd /home/hadoop # 进入hadoop下
$ ssh-keygen -t rsa #一直回车,会在用户文件夹下生成.ssh文件夹,文件夹下生成三个文件,不要添加sudo,否在会报错
$ sudo /etc/init.d/ssh start #启动ssh服务
若启动报错,则将没有的文件对应生成一下
$ sudo ssh-keygen -t rsa -f /etc/xxx
$ ps -e |grep ssh #查看ssh进程,显示有ssh服务则为成功
- 生成密钥和公钥并将公钥复制给其他机器
免密登录过程简介:本机生成公钥id_rsa.pub(上一步已经做好),将生成的公钥上传到目标机器上的授权文件authorized_keys,本机即可免密登录目标机
创建授权文件:将id_rsa.pub的内容给authorized_keys,若没有auth文件则会自动生成一个
$ cd /home/hadoop/.ssh #进入用户文件夹下面的.ssh文件夹
$ cat id_rsa.pub>>authorized_keys
给.ssh文件夹和authorized_keys授权,权限如下
$cd /home/hadoop/.ssh #已经在这一步请不用操作
$sudo chmod 600 authorized_keys
$cd ..#回到上一层目录
$sudo chmod 700 .ssh
$cd ..#回到上一层目录
$sudo chmod 700 hadoop #将.ssh上级目录授权为700
修改配置
$sudo vim /etc/ssh/sshd_config
Port xxx (可以修改成其他统一端口号)
PermitRootLogin yes
将下面配置更改为yes
PasswordAuthentication yes(不修改会报权限问题)
$ sudo /etc/init.d/ssh restart #重启ssh服务
将客户端的公钥~/.ssh/id_rsa.pub通过ssh-copy-id -i拷贝到服务器(只需要将master节点的公钥复制给其他datanode节点,其他的可以不用复制)
$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@xxx.xxx.xxx.xxx -p xxxx
user代表Linux用户,xxx.xxx.xxx.xxx代表远程主机地址,下面为例子:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.xxx -p xxxx
需要输入目标机器用户的密码,如hadoop用户的密码hadoop
如果公钥拷贝没有报错,使用命令即可免密码登录另一台机器
$ ssh -p 6666 hadoop@192.168.1.xxx #-p后面代表的是端口号 就是上一步修改的配置里面的Port
以上免密为本机登录其他机器的操作,并不需要每台机器都需要进行拷贝操作,只需要一台作为主机分发到其他机器即可
安装Java并配置环境变量
- 安装xshell和xftp,安装直接一路确认即可
- 尝试使用xshell连接自己的机子,以下命令都可以在xshell里运行,当然原来的界面也是可以的(连接步骤略)
- 安装java,并配置环境
$ sudo mkdir /usr/local/java#在/usr/local下创建java文件夹
将jdk-8xxxx-linux-x64复制到c盘下,右击属性给文件授予全部权限,以便方便上传到wsl里面
$ cd /mnt/c #进入win的c盘
$ cp jdk-8xxxx-linux-x64.tar.gz /usr/local/java
进入java文件夹,并进行解压
$cd java/
$tar -zxvf jdk-8xxxx-linux-x64.tar.gz#解压
java文件下面会出现jdk1.8xxxx文件夹
如果遇到权限问题或者进不去java文件夹,请将/usr/local的文件夹授予权限
$ sudo chmod 777 /usr/local/java
配置环境变量
$ sudo vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8xxxx
export PATH=${PATH}:${JAVA_HOME}/bin
注意:“=”两边不要有空格
使环境变量生效
$ source /etc/profile
注意:请不要加sudo,source是bash的内建命令,那样会报找不到命令的错误
验证java环境是否配置完成
$ java -version
如果正常命令下来还是找不到,请参考:
告诉Ubuntu Java JDK的位置
$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_231/bin/java" 1
$ sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_231/bin/javac" 1
$ sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_231/bin/javaws" 1
相应的将其设为默认方式:
$ sudo update-alternatives --set java /usr/local/java/jdk1.8.0_231/bin/java
$ sudo update-alternatives --set javac /usr/local/java/jdk1.8.0_231/bin/javac
$ sudo update-alternatives --set javaws /usr/local/java/jdk1.8.0_231/bin/javaws
参考文章:https://blog.csdn.net/weixin_42001089/article/details/81865101
其他节点配置(重要)
将所有的主机的host都配置一下,添加每台机器的ip和对应名称,如
$sudo vim /etc/hosts
192.168.1.100 ustc01
192.168.1.158 ustc02
192.168.1.58 ustc03
192.168.1.75 ustc04
(重要)将其他ip配置关闭,前面全部添加#,只保留上面四个配置,要不然在之后hadoop的监控页面看不到datanode节点信息。
顺便在win系统中hosts添加这几个信息
192.168.1.100 ustc01
192.168.1.158 ustc02
192.168.1.58 ustc03
192.168.1.75 ustc04
重启win电脑
如果Java是单独每个人配置的,以下步骤可以不做
分发hadoop到其他节点
$scp -P 6666 /home/hadoop/hadoop-2.7.7.tar.gz ustc02:/home/hadoop #-P为大写,后接端口号。
$scp -P 6666 /home/hadoop/hadoop-2.7.7.tar.gz ustc03:/home/hadoop #-P为大写。
$scp -P 6666 /home/hadoop/hadoop-2.7.7.tar.gz ustc04:/home/hadoop #-P为大写。
解压与配置和前面的java是一样的,参考前面,写了的话请忽略
主节点安装hadoop并分发到其他节点
(本配置只需要主要的namenode进行配置即可,其他datanode之后进行分发即可)
-
类似java的上传,将hadoop压缩包放到c盘下进行授权,并上传,本次上传路径为/home/hadoop(命令省略,请参考java配置来)
-
配置hadoop的四个xml文件和一个子节点标识文件(所有节点这几个信息请保持一致)
-
修改core-site.xml
<configuration> <property> <name>fs.default.name</name> <value>hdfs://ustc01:9000</value> </property> </configuration>
-
修改hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>3</value> <description>副本个数,配置默认是3,应小于datanode机器数量</description> </property> <property> <name>dfs.namenode.dir</name> <value>file:/home/hadoop/hadoop-2.7.7/tmp/dfs/name</value> <description>datanode上数据块的物理存储位置</description> </property> <property> <name>dfs.datanode.dir</name> <value>file:/home/hadoop/hadoop-2.7.7/tmp/dfs/data</value> </property> <property> <name>dfs.name.data.registration.ip-hostname-check</name> <value>false</value> </property> </configuration>
-
修改mapred-site.xml,本文件没有,需要运行以下命令
mv mapred-site.xml.template mapred-site.xml #重命名
#这里是配置信息 <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapred.job.tracker</name> <value>hdfs://ustc01:9001</value> </property> </configuration>
-
修改yarn-site.xml
<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
-
修改slaves文件
这里存放datanode节点名,主机节点名称不要添加,如
ustc02 ustc03 ustc04
-
-
分发到其他节点,并配置
将配置好的文件夹,压缩打包
$ cd /home/hadoop
$ tar -zcf hadoop-2.7.7.tar.gz hadoop-2.7.7/
$ scp -P 6666 hadoop-2.7.7.tar.gz ustc02:/home/hadoop #分发hadoop,-P为大写。
这里解压也是类似java解压配置配置
配置环境变量
$ sudo vim /etc/profile #在刚刚配置的java环境下添加配置成如下格式
export JAVA_HOME=/usr/local/java/jdk1.8.0_231
export HADOOP_HOME=/home/hadoop/hadoop-2.7.7
export PATH=${PATH}:${JAVA_HOME}/bin:{HADOOP_HOME}/bin:{HADOOP_HOME}/sbin:
使环境变量生效
$ source /etc/profile
注意:请不要加sudo,source是bash的内建命令,那样会报找不到命令的错误
验证hadoop环境是否配置完成
$ hadoop
如果没有报错就是成功配置了环境
由于之前我们修改了默认的22端口为6666,这里修改Hadoop的相关端口号
在hadoop-2.7.7/etc/hadoop目录修改 hadoop-env.sh 文件添加如下语句。
$sudo vim /home/hadoop/hadoop-2.7.7/etc/hadoop/hadoop-env.sh
export HADOOP_SSH_OPTS="-p 6666"
将JAVA_HOME等号后面用/usr/local/java/jdk1.8.0_231替换掉
JAVA_HOME=/usr/local/java/jdk1.8.0_231
- 开启与关闭以及验证
$ hadoop namenode -format #格式化主节点,本条命令请不要乱输入,请部署完所有节点之后进行输入
#开启与关闭,只需要在namenode节点上输入,不要都输入了
$ start-all.sh #开启全部服务
$ stop-all.sh #关闭全部服务
$ start-dfs.sh #开启hdfs
$ start-dfs.sh #关闭hdfs
验证是否已经启动,在每个节点输入
$ jps
如果在namenode节点上显示了namenode,在datenode上显示了datanode就表示启动正常
打开win系统的浏览器,输入http://ustc01:50070,如果显示namenode与datanode节点信息正确即成功
这个网址也是心跳监管系统,展示时需要打开
-
文档(@TODO锋哥辉哥雷哥林哥ing)
-
剩余部署(@TODO洋哥锋哥ing)
2019-11-20
开机演示需要进行的操作:
-
打开wsl
-
运行ssh(可以设置自启动,这里懒得设置)
开机后需要每台机子在wsl中运行这条命令,开启ssh命令 $sudo service ssh --full-restart
-
一开机,hosts就变回去了,这个还没解决(待修复)
$sudo vim /etc/hosts 192.168.1.100 ustc01 192.168.1.158 ustc02 192.168.1.58 ustc03 192.168.1.75 ustc04