Hadoop--实分布部署

系统及环境

网络环境:处于局域网下的部分机器(>=4)
系统版本:win10较新版本,支持子系统
子系统版本:ubuntu18.04
其他软件:Xshell6,Xftp6
实验要求:在多台机器上安装hadoop,配置完成后,可以在完成官方demo的wordcount功能,实现其他功能

下载安装wsl(ubuntu)

  1. 系统要求:win10较新版本
  2. 修改电脑名(用以在ubuntu中分辨是哪台电脑,这一步推荐在后面其他节点修改配置里做):右击此电脑-属性-更改设置-计算机描述(ustc+序号)-更改-计算机名(ustc+序号)-稍后重启
  3. 关闭防火墙:控制面板-网络和Internet-网络和共享中心-wd防火墙(左下角)-启用或关闭wd防火墙-稍后重启
  4. 开启wsl功能:打开控制面板-程序-启用或关闭windows功能-勾选适用于Linux的Windows子系统-重启电脑
  5. 打开Microsoft Store,搜索ubuntu,选择18.04下载
  6. 先创建ustc用户,密码也为ustc(只是为了好记)
  7. 创建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并设置免密码登录

  1. 安装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服务则为成功
  1. 生成密钥和公钥并将公钥复制给其他机器
免密登录过程简介:本机生成公钥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 [email protected] -p xxxx
	user代表Linux用户,xxx.xxx.xxx.xxx代表远程主机地址,下面为例子:
	$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] -p xxxx
需要输入目标机器用户的密码,如hadoop用户的密码hadoop

如果公钥拷贝没有报错,使用命令即可免密码登录另一台机器
$ ssh -p 6666 [email protected]	#-p后面代表的是端口号 就是上一步修改的配置里面的Port


以上免密为本机登录其他机器的操作,并不需要每台机器都需要进行拷贝操作,只需要一台作为主机分发到其他机器即可

安装Java并配置环境变量

  1. 安装xshell和xftp,安装直接一路确认即可
  2. 尝试使用xshell连接自己的机子,以下命令都可以在xshell里运行,当然原来的界面也是可以的(连接步骤略)
  3. 安装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之后进行分发即可)

  1. 类似java的上传,将hadoop压缩包放到c盘下进行授权,并上传,本次上传路径为/home/hadoop(命令省略,请参考java配置来)

  2. 配置hadoop的四个xml文件和一个子节点标识文件(所有节点这几个信息请保持一致)

    1. 修改core-site.xml

      
      	
      		fs.default.name
      		hdfs://ustc01:9000
      			
      
      
    2. 修改hdfs-site.xml

      
      	
      		dfs.replication
      		3
      		副本个数,配置默认是3,应小于datanode机器数量
      	
      	
      		dfs.namenode.dir
      		file:/home/hadoop/hadoop-2.7.7/tmp/dfs/name
      		datanode上数据块的物理存储位置
      	
      	
      		dfs.datanode.dir
      		file:/home/hadoop/hadoop-2.7.7/tmp/dfs/data
      	
      
      	
      		 dfs.name.data.registration.ip-hostname-check
      		 false
      	
      
      
    3. 修改mapred-site.xml,本文件没有,需要运行以下命令

      mv mapred-site.xml.template mapred-site.xml  #重命名
      
      #这里是配置信息
      
      	
      		mapreduce.framework.name
      		yarn
      	 
      	 
      	  	mapred.job.tracker
      		hdfs://ustc01:9001
      	 
      
      
    4. 修改yarn-site.xml

      
      
      	
      		yarn.nodemanager.aux-services
      		mapreduce_shuffle
      	
      
      
    5. 修改slaves文件

      这里存放datanode节点名,主机节点名称不要添加,如

      ustc02
      ustc03
      ustc04
      
  3. 分发到其他节点,并配置

将配置好的文件夹,压缩打包
$ 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
  1. 开启与关闭以及验证
$ 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节点信息正确即成功
这个网址也是心跳监管系统,展示时需要打开
  1. 文档(@TODO锋哥辉哥雷哥林哥ing)

  2. 剩余部署(@TODO洋哥锋哥ing)

    ​ 2019-11-20

开机演示需要进行的操作:

  1. 打开wsl

  2. 运行ssh(可以设置自启动,这里懒得设置)

    开机后需要每台机子在wsl中运行这条命令,开启ssh命令
    $sudo service ssh --full-restart
    
  3. 一开机,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
    

你可能感兴趣的:(解决办法)