hadoop全分布安装

作者 zhan-bin 日期 2018-06-28
hadoop全分布安装

全分布配置

作者:Zhan-bin

日期:2018-6-28

1.搭建环境

这里的配置为 VMware+CentOS7+hadoop2.9.1

这里我下载的镜像是 CentOS-7-x86_64-Minimal-1804.iso

CentOS系统镜像下载地址-点击进入

JDK下载地址-点击进入

Hadoop下载地址-点击进入

(这里使用的是hadoop2.9.1 尽量下载stable文件夹里面的稳定版本。下载”stable”下的hadoop-2.x.y.tar.gz这个格式的文件)

2.虚拟机安装CentOS及创建hadoop用户

  • 打开VMware 选择创建新的虚拟机-典型-安装程序镜像文件

1

2

  • 这里选择刚刚下载好的镜像文件点击下一步

3

  • 这里选择系统的安装目录

4

  • 设置完之后直接开启虚拟机,等待安装系统。

  • 这里需要设置好root用户的密码以及创建一个新用户,名为 hadoop 。

5

  • 安装系统的时候忘记创建了,就输入如下命令创建:
    1
    2
    useradd hadoop #创建hadoop用户
    passwd hadoop #设置密码

3.配置系统网络

3.1 虚拟机网络连接配置

开机之后,先设置网络,在下图框住的位置点击鼠标右键选择设置将网络设置选择NAT模式,点击确定之后回到刚刚界面还是右键刚刚那个图标连接网络。

6

7

  • 输入ifconfig,出现“fconfig command not found”
  • CentOS7是默认没有安装net-tools的,所以这里安装一下,如果不确定有没有就输入ifconfig,会提示“fconfig command not found”。
  • 确认sbin目录是否存在。

    1
    cd /sbin
  • 确认ifconfig命令是否未安装
    在sbin目录下输入ls,如果没有ifconfig就执行下面命令安装。

    1
    sudo yum install net-tools

这个命令是从网上安装的,如果虚拟机不能连接外网,就先执行完下面网络配置步骤再进行安装。

  • 回到自己的电脑 win+r 打开cmd输入ipconfig查看VMware Network Adapter VMnet8的IP地址

14

  • 配置完之后,用root用户登陆主机,输入命令
1
2

cd /etc/sysconfig/network-scripts
  • 然后再输入下面命令打开ifcfg-ens33的文件:
1
2

sudo vi ifcfg-ens33
  • 进入文件编辑界面,将其中的onboot=no,改成onboot=yes,添加几行代码(如下图):

IPADDR 填写与刚刚查看的自己电脑VMware Network Adapter VMnet8的ipv4同一个子网的一个IP地址比如我这里是169.254.237.190,就填写169.254.237.xxx XXX填写0-255之间的任何一个数即可(不要和主机、网关、其他虚拟机的一样)

GATWAY直接填VMware Network Adapter VMnet8的网关

NETMASK一般填255.255.255.0

8

  • 改完之后,保存退出,输入重启网络的命令:
1
2

service network restart
  • 再ping百度测试是否连接上网络:
1
2

ping www.baidu.com

如果出现问题,也可以设置桥接,静态IP的形式:虚拟机配置桥接

3.2 虚拟机域名配置

当3台虚拟机均安装完成后,需要进行的是修改机器名、添加域名映照、关闭防火墙

3.2.1 修改机器名

  • 命令行输入cd回车回到根目录下,执行下面命令打开network文件,在其中添加“HOSTNAME=cMaster”,然后重启当前虚拟机,再查看机器名就是cMaster了。:
1
2

sudo vi /etc/sysconfig/network

9

-然后重启机器

1
2

shutdown -r now
  • 查看主机名:
1
2

hostname

10

(如果重启以后机器名不是cMaster,可使用命令hostnamectl set-hostname cMaster修改机器名)

3.2.2 添加域名映射

  • 使用ifconfig命令分别查看3台虚拟机的IP地址。然后将3个ip地址都添加到各自的/etc/hosts文件中,3台主机的ip配置以下图。
1
2

sudo vi /etc/hosts
  • 按如下格式添加主机名和相应ip地址的映射

11

  • 再ping下各个主机试试可不可以ping通(如下图所示)。建议先ping下这几台虚拟机的ip看可不可以ping通之后再ping各自的主机名。

12

3.2.3 关闭防火墙

  • 在root权限下履行以下两条指令,关闭防火墙并禁止其开机启动。
1
2
3
4

systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #制止firewall开机启动

3.2.4 使用xshell将文件上传到linux虚拟机上

4.安装JDK

4.1将文件放到安装目录下面

  • (1)先建立jdk安装目录,这里我是安装在 /home/hadoop/java 下。
1
2

sudo mkdir -p /home/hadoop/java
  • (2)转到jdk文件所在文件夹,将刚刚从自己电脑上传的JDK复制到java安装路径中,执行命令:
1
2
3
4
5
6

cd /home/hadoop/winupload/

sudo cp -r jdk-8u171-linux-x64.tar.gz /home/hadoop/java/

cd /home/hadoop/java
  • (3)解压
1
2

sudo tar xvzf jdk-8u171-linux-x64.tar.gz

4.2 配置环境变量

  • (1)先执行cd 切换到根目录下再执行 sudo vi /etc/profile ming ,然后将一段一段代码插入到文件的末尾 命令如下:
1
2
3
4

cd

sudo vi /etc/profile
  • 将下面代码插入到文件末尾
1
2
3
4
5
6
7
8

JAVA_HOME=/home/hadoop/java/jdk1.8.0_171

PATH=$PATH:$HOME/bin:$JAVA_HOME/bin

export JAVA_HOME

export PATH
  • (2)执行update-alternatives
1
2
3
4
5
6

sudo update-alternatives --install "/usr/bin/java" "java" "/home/hadoop/java/jdk1.8.0_171/bin/java" 1

sudo update-alternatives --install "/usr/bin/javac" "javac" "/home/hadoop/java/jdk1.8.0_171/bin/javac" 1

sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/home/hadoop/java/jdk1.8.0_171/bin/javaws" 1
1
2
3
4
5
6

sudo update-alternatives --set java /home/hadoop/java/jdk1.8.0_171/bin/java

sudo update-alternatives --set javac /home/hadoop/java/jdk1.8.0_171/bin/javac

sudo update-alternatives --set javaws /home/hadoop/java/jdk1.8.0_171/bin/javaws
  • (3)重新加载 /etc/profile
1
2

source /etc/profile
  • (4)测试(执行如下命令测试是否安装成功)
1
2

java -version

15

5. 安装Hadoop

5.2 复制并解压文件

这里使用的是hadoop2.9.1 尽量下载stable文件夹里面的稳定版本。下载”stable”下的hadoop-2.x.y.tar.gz这个格式的文件

  • (1)将刚刚上传到linux虚拟机的Hadoop文件复制到Hadoop安装路径,这里我的安装路径是 /home/hadoop/hadoop ,复制过去之后解压并将文件夹名改为hadoop(这里我就没有创建hadoop文件夹了,直接解压到local,将解压后的文件夹重命名为hadoop)。
1
2
3
4
5
6
7
8

sudo tar -zxf /home/hadoop/winupload/hadoop-2.9.1.tar.gz -C /home/hadoop #解压到/home/hadoop中

cd /home/hadoop

sudo mv ./hadoop-2.9.1/ ./hadoop #将文件夹名改为hadoop

sudo chown -R hadoop ./hadoop #修改文件权限
  • (2)解压之后直接测试有没有装成功
1
2
3
4

cd /home/hadoop/hadoop

./bin/hadoop version

如果出现 JAVA_HOME not found 之类的提示就将hadoop里的JAVA_HOME设成绝对地址:hadoop找不到java-点击打开

16

5.1 配置hadoop环境变量

  • (1)打开系统文件(添加如下图框框内的内容):
1
2

vi /etc/profile
  • (1)在末尾加上hadoop安装路径(这里我的hadoop安装路径是/usr/local/hadoop,如果你的不是这个目录,就把后面的/usr/local/hadoop改为你自己的安装目录)
1
2
3
4

export HADOOP_INSTALL=/home/hadoop/hadoop

export HADOOP_HOME=/home/hadoop/hadoop
  • (2)在PATH的后面加上下面内容:
1
2

:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

18

  • (3)重新加载下profile
1
2

source /etc/profile
  • (4)输入“hdfs -version”测试下有没有安装成功

19

5.2 更改hadoop配置文件

Hadoop的配置文件都是放在安装目录下的“/etc/hadoop”里面

5.2.1cmaster主机配置文件设置

  • (1)更改core-site.xml。(在标签里面添加如下代码)

命令:

1
2
3
4

cd /home/hadoop/hadoop/

vi ./etc/hadoop/core-site.xml

在最后标签里面添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

<property>

<name>fs.default.name</name>

<value>hdfs://cmaster:9000</value>

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>/home/hadoop/hadoop/var</value>

</property>

17

  • (2) 修改hadoop安装目录下的/etc/hadoop里面的slaves文件(这个文件是记录master主机管理的所有主机,将自己的datanode添加进去即可)。

  • 先进入到hadoop安装目录

1
2

cd /home/hadoop/hadoop
  • 打开slaves文件。
1
2

vi /etc/hadoop/slaves
  • 将文件覆盖成如下内容(我的三台数据节点分别为cslaver1;cslaver2;cslaver3,不一定要和我相同,名字要和前面的hosts文件的映射对应上,根据自己的数据节点的主机名修改):
1
2
3
4
5
6

cslaver1

cslaver2

cslaver3

20

5.2.2更改cslaver1和cslaver2的配置文件

  • 数据节点只需修改core-site.xml文件,文件添加内容同上。

6. 安装ssh免密登陆

6.1设置名称节点(cmaster)

  • (1)生成密钥对,执行如下命令:
1
2
cd ~/.ssh/
ssh-keygen -t rsa
  • 然后有提示就按【Enter】键,就会依照默许的选项将生成的秘钥对保存在.ssh/id_rsa文件中。
  • (2)进入.ssh目录履行以下命令
1
2

cp id_rsa.pub authorized_keys #将id_rsa.pub授权到key里面去
  • (3)配置SSH
1
2

vi /etc/ssh/sshd_config

将RSAAuthentication yes//前面的#去掉

PubkeyAutentication yes//前面的#去掉

AuthorizedKeysFile .ssh/authorized_keys//看看是不是变成autorized_keys

  • 如果找不到对应字段就不用管了。

6.2 设置两台cslave的ssh配置

  • (1)把公钥复制所有cslave机器上

scp ~/.ssh/id_rsa.pub 远程用户名@远程服务器ip:~/

1
2

#scp ~/.ssh/id_rsa.pub root@192.168.88.133:~/
  • (2)在数据节点cslaver主机里面输入命令:

  • 将公钥复制给authorized_keys
    (要在根目录下执行,因为刚刚公钥是复制到根目录下面的。)

    1
    2
    cd #进入到根目录
    cp id_rsa.pub ~/.ssh/authorized_keys

(如果提示没有.ssh目录的话可能是系统一开始没有自动创建这个目录,那就执行ssh-keygen -t rsa 和 cp id_rsa.pub authorized_keys 顺带设置自己免密登陆,就会有那个.ssh目录了)

  • (3)测试是否可行

  • 在cmaster主机上输入命令(ssh 后面是cslaver的IP地址或者设置了映射的直接输入cslaver1或者cslaver2):

1
2

ssh 192.168.43.129
  • (4)数据节点cslaver设置本机登陆免密

  • 然后切换路径并使用ssh-keygen生成密钥,并将密钥加入到授权中(如提示 bash: cd: adasd: No such file or directory 请执行一次ssh localhost

1
2
3
4

cd ~/.ssh/

ssh-keygen -t rsa
  • 最后执行 cat ./id_rsa.pub >> ./authorized_keys 加入授权(后面没有任何的提示)
1
2

cat ./id_rsa.pub >> ./authorized_keys

其他数据节点主机均这样设置。
如果设置免密登陆失败,请参考:ssh免密登陆配置失败解决办法

7.启动Hadoop

  • (1)首先进入到你的hadoop安装路径(我的hadoop安装路径是/usr/local/hadoop),再格式化主节点命名空间,使用命令:
1
2
3
4

cd /home/hadoop/hadoop

./bin/hdfs namenode –formate
  • 方法1:其次在主节点上启动存储服务和资源管理主服务。使用命令:
1
2
3
4

./sbin/hadoop-daemon.sh start namenode #启动主存储服务

./sbin/yarn-daemon.sh start resourcemanager# 启动资源管理服务。

最后在从节点上启动存储从服务和资源管理从服务(以下两条命令要在两台机器上分别履行)

1
2
3
4
5
6

cd /home/hadoop/hadoop

./sbin/hadoop-daemon.sh start datanode #启动从存储服务

./sbin/yarn-daemon.sh start nodemanager #启动资源管理从服务
  • 方法2:或进入sbin目录
1
2
3
4

#cd /home/hadoop/hadoop-**/sbin/start-all.sh #启动hadoop守护进程

#cd /home/hadoop/hadoop-**/sbin/stop-all.sh #停止hadoop守护进程

(启动时如果出现找不到JAVA_HOME,请参考:hadoop启动找不到java-点击打开

(有时出问题之后namenode或datanode有一个会打不开,这个问题请参考:hadoop节点无法启动-点击打开

  • 服务启动后在3台机器上分别使用jps命令查看是不是启动(主机只需要启动namenode节点,其他的启动datanode节点)。
  • 在cmaster主机启动名称节点,在其他节点启动datanode。效果如下图:

21

  • 启动之后我们还可以在主节点(namenoded)查看所有主节点和主节点控制下的节点的状态
  • 命令:
    1
    hdfs dfsadmin -report | more  #节点状态详细信息

22

  • 这里使用root用户来配置的hadoop环境,用root操作hadoop系统的话容易误操作而造成不可弥补的错误。如果需要使用hadoop用户操作hadoop集群,则后续将相关文件夹所有者改为hadoop即可,后面可能会出现ssh失效的问题,这可能是文件夹权限需要更改,参考:ssh失效-点击打开 参考最后几行修改下权限即可。

8.windows 下eclipse配置hadoop开发环境

参考下面链接
windows 下eclipse配置hadoop开发环境

9.程序&实例

在master上执行hdfs文件操作:使用Linux命令实现hdfs文件操作
Demo程序参考:第一个hdfs程序
java对hdfs的操作Demo:java对hdfs文件的操作