Hadoop完全分布式部署笔记

目录

一、安装两台虚拟机

二、修改主机名和用户名

三、配置静态IP地址

四、配置SSH无密码连接

五、安装JDK:

六、配置Hadoop


本文笔记整理自《Hadoop海量数据处理:技术详解与项目实战》范东来,修正了原书中的一些细节处的问题,经过试验,可部署成功,特此附上完整部署笔记。

一、安装两台虚拟机

1.本机(笔记本)系统环境:CPU:Intel Core i5-7300HQ @2.50GHz;内存:16GB;机械硬盘:45GB。

2.通过VMware安装两台CentOS7系统,分别为masterslave1

3.很重要:安装类型采用“计算节点安装”,不要“最小安装”,以免后续要手动安装一大堆软件。

    可参考博客:vm安装无可视化桌面的CentOS系统

二、修改主机名和用户名

1.修改用户名密码,创建hadoop用户:

master和slave1节点都需创建hadoop用户
1.统一设置密码为123456
  $ passwd root
2.创建hadoop用户,并修改密码
  $ useradd hadoop
  $ passwd hadoop

2.修改主机名:

2.规范化主机名,虽然安装CentOS时输入过主机名
  $ vi /etc/sysconfig/network
  <修改或添加内容,如下:>
  NETWORKING=yes
  HOSTNAME=master
  <注1:HOSTNAME根据节点名称设定,主节点master,从节点slave1、slave2等等>
  <注2:伪分布只需设置一个master,无从节点>

  修改主机名,更改内容为:
  $ vi /etc/hostname
  master

3.添加主机名列表:

3.修改主机名列表,为了各节点间能用主机名相互访问
  $ vi /etc/hosts
  <文件末尾追加,如下:>
  # 填写IP地址与主机名
  192.168.190.200 master
  192.168.190.201 slave1
  <注1:若是伪分布模式,从节点IP和主机名slave1不用配置>
  <注2:完全分布式时,master和slave1节点都需修改此文件,保持文件内容一致>
  <主3:windows hosts 文件位置: C:\Windows\System32\drivers\etc\hosts >

三、配置静态IP地址

(由于Hadoop集群在启动时需要通过固定的主机名或者地址启动,所以必须配置静态IP地址。)
(主从节点都需配置)
0. 首先查看本地网卡名称
  $ ip addr
  1: lo: ............ 
  2: ens33: ...............
  注:此地为 ens33
  
  或者通过如下命令查看网卡状态:
  $ service network status

1.修改文件ifcfg-ens33,输入如下内容:
  a. 先查看网络配置目录,并备份 ifcfg-ens33 文件:
    $ cd /etc/sysconfig/network-scripts/
    $ ll
    $ cp ifcfg-ens33 ifcfg-ens33.copy
  b. 之后在对 ifcfg-ens33 进行修改:
    $ vi ifcfg-ens33

    <删除原内容,添加如下内容:>
    # 静态
    DEVICE="ens33"
    BOOTPROTO="static"
    NM_CONTROLLED="no" # 禁用 NetworkManager 服务,不让其获取动态IP,默认 yes
    # 设备硬件地址
    HWADDR="00:0b:28:33:ec:e1" (各节点硬件地址不同)
    ONBOOT="yes"
    #TYPE="Ethernet"
    # 静态IP和子网掩码
    IPADDR=192.168.190.200  (master节点为 200 ;slave1从节点为 201)
    NETMASK=255.255.255.0
    # 网关IP
    GATEWAY=192.168.190.1
    DNS1=8.8.8.8

  c. 修改完文件 ifcfg-ens33 后重启网络:
    $ service network restart
    注:遇到提示,按回车即可

  <注1:Linux6.4前用ifcfg-em1,后用ifcfg-eth0>
  <注2:所有节点都需配置,伪分布只需配置一个>
  <注3:HWADDR(硬件地址)可用 $ ip addr 命令查看,找到 "link/ether 00:0b:28:33:ec:e1">
        eth0,eth1,eth2……代表网卡一,网卡二,网卡三……
        lo代表127.0.0.1,即localhost
  <注4:IPADDR 根据本机网段确定,命令 $ ifconfig 查看>
  

2.网络适配器连接模式:【桥接模式】
  测试各台机之间能通过静态IP相互ping通
  slave1]$ ping 192.168.190.200
  master]$ ping 192.168.190.201

  <注1:在vmware虚拟机中:vmnet0对应桥接模式;vmnet1对应NAT模式;vmnet8对应仅主机模式>
  <注2:本机搭建虚拟机环境,网络使用 ‘无线局域网适配器 WLAN’>
  <注3:更换无线网络后,IP变化,需要重新更改对应的 IP ,需修改这两个文件:
        vi /etc/sysconfig/network-scripts/ifcfg-ens33
        vi /etc/hosts 
    如原 IP :192.168.190.200
    如现 IP :192.168.242.200
    
    同时,还需更改 ssh 免密登录设置

  **同时出现的问题:
        1)会导致 hadoop namenode 与 datanode 不一致;
        2)出现 datanode 无法启动的问题(提示 0 datanode 可用);
        3)就算 datanode 能启动,向HDFS上传下载文件时会 name node is in safe mode;
       暂时解决方式:(针对单机试验阶段,真实环境不可取)
        1. 必须先关闭Hadoop,删除各节点的 /opt/hdfs/name 和 /opt/hdfs/data 文件夹
        2. 然后格式化 namenode
        3. 重启恢复
  >
注4:如果开机发现本机获得了两个IP,一个动态IP和一个静态IP,那么如何禁止动态IP呢?如下:
    原因:network与NetworkManager服务冲突
    解决:禁用NetworkManager服务
    $ systemctl stop NetworkManager.service -- 停止服务
    $ systemctl disable NetworkManager.service -- 禁用服务
    $ service network restart -- 重启网络

    同时,还需修改 ifcfg-ens33 配置文件中的 NM_CONTROLLED="no"

     参考博客:系统设置了静态IP之后还会获取动态IP的问题解决

四、配置SSH无密码连接

1.关闭防火墙:

1.首先查看防火墙状态
  $ service firewalld status
  <会显示绿色的active状态>
2.关闭防火墙
  $ service firewalld stop
3.再次查看防火墙状态
  $ service firewalld status
  <会显示白色的inactive状态>

2.配置防火墙开机不自启:

$ systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
$ systemctl list-unit-files | grep firewalld
firewalld.service        disabled

3.检查SSH是否安装:(一般已经安装,除非最小安装)

1.安装SSH协议(每个节点都需安装)
  $ yum install ssh
  $ yum install rsync
2.启动/重启SSH服务
  $ service sshd restart
3.检查ssh是否安装成功
  $ rpm -qa | grep openssh
  openssh-7.4p1-16.el7.x86_64
  openssh-server-7.4p1-16.el7.x86_64
  openssh-clients-7.4p1-16.el7.x86_64
  <表示已安装成功>
4.检查远程数据同步工具是否安装成功
  $ rpm -qa | grep rsync
  rsync-3.1.2-4.el7.x86_64
  <表示已安装成功>

4.生成SSH公钥:

参看文章:SSH免密登录原理介绍

此处可以先不配置(跳过),等配置好Hadoop后再回过来配置,可以更好理解。

如果已经配置好Hadoop了,或者已经知道来龙去脉的,就直接如下配置:

在master节点以hadoop用户执行启动Hadoop:
1.在hadoop启动NameNode节点时,会访问hadoop@master,需要输入密码;
2.在hadoop启动DateNode节点时,会访问hadoop@slave1、hadoop@slave2 ... 等等(看配了多少台从节点),需要输入密码;
以上启动时的不断输入密码很繁琐,可以通过SSH配置免密登陆,如下:

以hadoop用户登陆master主节点,执行如下命令:
1.生成公钥/密钥(任意路径下执行)(master和slave1节点都需执行)
  $ ssh-keygen -t rsa
2.查看生成的'.ssh/'目录
  $ cd ~/.ssh/
  $ ll
  id_rsa (私钥)
  id_rsa.pub (公钥)
  known_hosts (已访问过的主机公钥)
3.复制master节点的公钥,并重命名,存放当前文件夹下
  $ cp id_rsa.pub id_rsa.pub.master
  $ ll
4.加入到master和slave1主机的hadoop用户的~/.ssh/下的authorized_keys文件中
  4.1.由于当前已经是在master节点的hadoop用户目录下,直接加入authorized_keys(此文件一开始不存在)
    $ cat id_rsa.pub.master >> authorized_keys
  4.2.跨域发送到slave1节点的hadoop用户目录下,并加入authorized_keys文件末尾
    $ scp id_rsa.pub.master hadoop@slave1:~/.ssh/
    $ cat id_rsa.pub.master >> authorized_keys
5.更改权限(master和slave1节点都需执行)
  5.1.更改'~/.ssh'文件夹权限
    $ chmod 700 ~/.ssh
  5.2.更改'~/.ssh/authorized_keys'文件权限
    $ chmod 644 ~/.ssh/authorized_keys
6.验证免密连接(master节点hadoop用户登陆)
  $ ssh hadoop@master
  $ ssh hadoop@slave1
  <注1:如果没有提示输入密码便能直接登陆,便是设置成功了>
  <注2:经验证,只需配置主节点向从节点的免密连接即可,无需设置从节点向主节点的免密连接>
  <简述:A主机公钥放入B主机授权列表中,A主机就能实现免密登录B主机>
  <注3:windows .ssh 文件位置:C:\Users\Wayne Fong\.ssh>

五、安装JDK:

如果系统预装了Open JDK,卸载掉,装Oracle JDK

   下载地址:Java SE - Downloads | Oracle Technology Network | Oracle

注:JDK的卸载安装以 root 用户执行

1.卸载Open JDK:

root用户登陆主从节点
1.检查是否安装了JDK
  $ rpm -qa | grep jdk
  xxx
  如果出现的xxx为 openjdk,则执行命令卸载:
  $ yum -y remove xxx

2.安装Oracle JDK:

安装JDK版本:jdk-8u191-linux-x64.tar.gz
1.将JDK 从Windows下的D:/根目录 上传至 Linux下的/opt目录下
  Win下运行Power Shell或者CMD命令行工具
  1.1.上传至master节点(使用静态IP)
    D:> scp jdk-8u191-linux-x64.tar.gz [email protected]:/opt/
  1.2.上传至slave1节点(使用静态IP)
    D:> scp jdk-8u191-linux-x64.tar.gz [email protected]:/opt/

2.使用tar文件的方式安装JDK
  $ cd /opt
  $ tar -xzvf jdk-8u191-linux-x64.tar.gz

3.配置环境变量:

配置JDK环境变量,主从节点都需配置
1.修改 /etc/profile 文件,追加内容如下:
  $ vi /etc/profile
  export JAVA_HOME=/opt/jdk1.8.0_191
  export PATH=$PATH:$JAVA_HOME/bin
修改环境变量后,可以在任意路径下使用java命令
2.立即生效环境变量
  $ source /etc/profile
3.验证安装
  $ java -version
  java version "1.8.0_191"
  Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
  Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
  <出现版本信息即安装成功>

六、配置Hadoop

1.解压安装hadoop:

root用户登陆主从节点
1.更改'/opt'文件夹的拥有者为hadoop
  $ chown -R hadoop /opt

hadoop用户登陆主从节点
 安装Hadoop版本:hadoop-2.9.2.tar.gz
1.将文件从Windows下的D:/根目录 上传至 Linux下的/opt目录下
  Win下运行Power Shell或者CMD命令行工具(需windows上已经安装SSH)
  1.1.上传至master节点(使用静态IP)
    D:> scp hadoop-2.9.2.tar.gz [email protected]:/opt/
  1.2.上传至slave1节点(使用静态IP)
    D:> scp hadoop-2.9.2.tar.gz [email protected]:/opt/

2.使用tar文件的方式安装Hadoop
  $ cd /opt
  $ tar -zxvf hadoop-2.9.2.tar.gz

2.修改配置文件:(主从节点都需一样的配置)

进入配置文件夹下:
  $ cd /opt/hadoop-2.9.2/etc/hadoop
1.修改 hadoop-env.sh,在文件末尾追加环境变量
  $ vi hadoop-env.sh
  export JAVA_HOME=/opt/jdk1.8.0_191
  export HADOOP_HOME=/opt/hadoop-2.9.2

2.修改core-site.xml,修改为:
  
  
  
    
        fs.default.name
        hdfs://master:9000
    
  
  注1:此项配置设置了提供HDFS服务的主机名和端口号
  注2:指明了NameNode运行于主节点master

3.修改hdfs-site.xml,修改为:
  
  
  
    
        dfs.replication
        3
    
    
        dfs.name.dir
        /opt/hdfs/name
    
    
        dfs.data.dir
	/opt/hdfs/data
    
  
  注1:dfs.replication指定HDFS文件副本数
  注2:dfs.name.dir指定NameNode的元数据存放的本地文件系统路径
  注3:dfs.data.dir指定DataNode的数据存放的本地文件系统路径

4.修改mapred-site.xml,修改为:
  
  
  
    
        mapreduce.framework.name
        yarn
    
  
  注:指明MapReduce计算框架基于YARN工作

5.修改yarn-site.xml,修改为:
  
  
    
        The hostname of the RM.
        yarn.resourcemanager.hostname
        master
    
    
        The address of the applications manager interface in the RM.
        yarn.resourcemanager.address
        ${yarn.resourcemanager.hostname}:8032
    
    
        The address of the scheduler interface.
	yarn.resourcemanager.scheduler.address
	${yarn.resourcemanager.hostname}:8030
    
    
	The http address of the RM web application.
	yarn.resourcemanager.webapp.address
	${yarn.resourcemanager.hostname}:8088
    
    
	The https adddress of the RM web application.
	yarn.resourcemanager.webapp.https.address
	${yarn.resourcemanager.hostname}:8090
    
    
       	yarn.resourcemanager.resource-tracker.address
       	${yarn.resourcemanager.hostname}:8031
    
    
       	yarn.nodemanager.aux-services
       	mapreduce_shuffle
    
    
        yarn.nodemanager.aux-services.mapreduce.shuffle.class
        org.apache.hadoop.mapred.ShuffleHandler
    

  注:指明了ResourceManager服务的主机名和端口号
  注:指明了mapreduce_shuffle的类

6.修改slaves文件内容,修改为:
  slave1
  slave2
  ...
  注:这里指定了运行DataNode和NodeManager进程的从节点节点信息
  注:如果是伪分布模式,slaves文件中只需加入master,意为运行于主节点

3.配置环境变量:(主从节点都需配置)

root用户登录master/slave1 主/从节点,添加全局环境变量(也可以只添加hadoop用户的局部环境变量)
1.在文件 /etc/profile 内容末尾追加如下内容,以确保任何路径下使用Hadoop命令:
  $ vi /etc/profile
  export HADOOP_HOME=/opt/hadoop-2.9.2
  export PATH=$PATH:$HADOOP_HOME/bin
2.立即生效环境变量
  $ source /etc/profile

4.格式化HDFS:

hadoop用户登录master/slave1 主/从节点
1.第一次启动Hadoop之前,必须格式化HDFS,如下命令:
  $ hadoop namenode -format
  格式化成功信息:
  INFO common.Storage: Storage directory /opt/hdfs/name has been successfully formatted.

5.启动验证:

1.启动Hadoop(master节点hadoop用户登陆)
  $ /opt/hadoop-2.9.2/sbin/start-dfs.sh
  $ /opt/hadoop-2.9.2/sbin/start-yarn.sh
  $ /opt/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver
2.启动后查看进程信息
  2.1.master主节点执行
    $ jps
    会出现如下主节点进程:
    Jps
    NameNode
    ResourceManager
    SecondaryNameNode
  2.2.slave1从节点执行
    $ jps
    会出现如下从节点进程:
    Jps
    DataNode
    NodeManager
  2.3.如果是伪分布模式,master节点将出现所有进程:
    Jps
    NameNode
    ResourceManager
    SecondaryNameNode
    DataNode
    NodeManager

6.验证是否安装成功:(跑一个程序:单词计数)

slave1从节点hadoop用户执行
1.查看HDFS根目录,发现为空
  $ hadoop fs -ls /
2.创建HDFS用户目录
  $ hadoop fs -mkdir /user
  $ hadoop fs -mkdir /user/hadoop
3.本地用户目录下创建文件words
  $ cd ~/
  $ touch words
  $ vi words
  输入如下内容
  data mining on data warehouse

4.在HDFS中创建MapReduce作业输入目录
  $ hadoop fs -mkdir /user/hadoop/wordsinput
5.将本地words文件上传至HDFS目录下
  $ hadoop fs -put words /user/hadoop/wordsinput
6.查看HDFS上的words文件
  $ hadoop fs -cat /user/hadoop/wordsinput/words
  显示如下内容:
  data mining on data warehouse
7.执行MapReduce任务
  $ hadoop jar /opt/hadoop-2.9.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /user/hadoop/wordsinput /user/hadoop/wordsoutput
  注1:这是Hadoop自带的测试用例测试
  注2:结构是:hadoop jar  参数1 参数2 参数3
  注3:参数1为执行的MapReduce作业名称
       参数2为输入数据路径
       参数3为输出数据路径
8.查看执行结果:
  $ hadoop fs -cat /user/hadoop/wordsoutput/part-r-00000
  data 2
  mining 1
  on 1
  warehouse 1
  <说明Hadoop安装成功>

9.停止Hadoop
  $ /opt/hadoop-2.9.2/sbin/stop-dfs.sh
  $ /opt/hadoop-2.9.2/sbin/stop-yarn.sh

<注:无法访问删除HDFS文件,并提示 'Name node is in safe mode.'
     解决方式:
        hadoop dfsadmin -safemode leave    # 解除安全模式
        hadoop dfsadmin -safemode enter    # 进入安全模式
        hadoop dfsadmin -safemode get      # 查询安全模式
        hadoop dfsadmin -safemode wait     # 阻塞直到安全模式解除
>

你可能感兴趣的:(Hadoop,hadoop,big,data,centos)