使用虚拟机搭建Hadoop(伪分布式搭建、分布式搭建)

使用虚拟机搭建Hadoop(伪分布式搭建、分布式搭建),第1张

使用虚拟机搭建Hadoop(伪分布式搭建、分布式搭建)

学了一个学期的Hadoop,终于把这块大骨头啃掉了,泪目!!!
这篇文章更像是一个学习Hadoop的总结

Hadoop伪分布式、分布式搭建
  • 一、准备工作
    • 1、hadoop压缩包
    • 2、jdk压缩包
    • 3、Xshell
    • 4、Xftp
    • 5、VM虚拟机
  • 二、Hadoop伪分布式
    • 1、安装Java
    • 2、配置环境变量
    • 3、安装Hadoop
    • 4、格式化NameNode
    • 5、配置Hadoop、start-dfs.sh和start-yarn.sh环境变量
    • 6、启动Hadoop
    • 7、通过Web端口访问HDFS
  • 三、Hadoop分布式
    • 0、安装Java
    • 1、修改hostname
    • 2、配置环境变量
    • 3、设置ssh免密
      • 3.1 设置本地免密
      • 3.2 设置从机免密登录
    • 4、配置Hadoop
    • 5、拷贝文件
    • 6、格式化NameNode
    • 7、验证集群是否启动成功
    • 8、通过Web端口访问HDFS

一、准备工作 1、hadoop压缩包

这个官网都会有,下载好压缩包备着,我使用的是2.7.1版本

2、jdk压缩包

这是Java的运行环境,因为Hadoop是基于Java的,所以需要配置Java环境

3、Xshell


它可以配合Xftp传输文件到虚拟机上

4、Xftp


配合Xshell使用传输文件

这里是教程链接:Xshell和Xftp使用教程

5、VM虚拟机

网上有很多安装教程,大家可以参考后安装VM虚拟机,我这里用的是12pro版本。


二、Hadoop伪分布式 1、安装Java

在/usr/local新建一个jvm的文件夹

cd /usr/local
mkdir jvm

进入jvm目录,将jdk的压缩包通过xftp导入虚拟机,tar -zxvf解压到当前目录下

2、配置环境变量

vi ~/.bashrc编辑环境变量,加入如下目录(我的安装目录:/usr/local/jvm/jdk)

export JAVA_HOME=/usr/local/jvm/jdk      
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=$PATH:${JAVA_HOME}/bin

source ~/.bashrc让.bashrc立即生效,通过java -version查看环境变量是否配置成功

3、安装Hadoop

将Hadoop安装包通过Xftp导入虚拟机,解压到当前文件夹(/usr/local/hadoop)

修改配置文件core-site.xml和hdfs-site.xml当中的



core-site.xml修改(/usr/local/hadoop/etc/hadoop目录下)


    
        hadoop.tmp.dir
        file:/usr/local/hadoop/tmp
        Abase for other temporary directories.
    
    
        fs.defaultFS
        hdfs://localhost:9000
    

hdfs-site.xml修改(/usr/local/hadoop/etc/hadoop目录下)


    
        dfs.replication
        1
    
    
        dfs.namenode.name.dir
        file:/usr/local/hadoop/tmp/dfs/name
    
    
        dfs.datanode.data.dir
        file:/usr/local/hadoop/tmp/dfs/data
    

4、格式化NameNode

配置完成后格式化NameNode

$ cd /usr/local/hadoop
$ ./bin/hdfs namenode -format

成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错。

如果在这一步时提示 Error: JAVA_HOME is not set and could not be found. 的错误,则说明之前设置 JAVA_HOME 环境变量那边就没设置好,请按教程先设置好 JAVA_HOME 变量,否则后面的过程都是进行不下去的。如果已经按照前面教程在.bashrc文件中设置了JAVA_HOME,还是出现 Error: JAVA_HOME is not set and could not be found. 的错误,那么,请到hadoop的安装目录修改配置文件“/usr/local/hadoop/etc/hadoop/hadoop-env.sh”,在里面找到“export JAVA_HOME=${JAVA_HOME}”这行,然后,把它修改成JAVA安装路径的具体地址,比如,“export JAVA_HOME=/usr/lib/jvm/default-java”,然后,再次启动Hadoop。

5、配置Hadoop、start-dfs.sh和start-yarn.sh环境变量

vi ~/.bashrc打开环境变量配置,添加如下路径(export PATH最好放在最后)

export HADOOP_HOME=/usr/local/hadoop
export PATH=${HADOOP_HOME}/sbin:${HADOOP_HOME}/bin:$PATH

source ~/.bashrc使配置立即生效,输入hadoop version确定是否配置成功。

之后可以在任意位置输入start-all.sh启动Hadoop服务。

6、启动Hadoop

输入start-all.sh,启动Hadoop(建议回到根目录 *** 作)

7、通过Web端口访问HDFS

需要注意的是,无法访问Web端的原因可能是你的NameNode节点挂了(配置文件没配好),还有就是防火墙没有关闭。这里针对防火墙问题无法访问给出解决方案

systemctl stop firewalld
systemctl disable firewlld

第一条命令停止防火墙,第二条命令永久关闭防火墙,之后就可以通过localhost:50070端口访问


三、Hadoop分布式

我这里演示的例子为一台主机master和一台从机slave,本质其实是一样的,如果你需要多台从机,相当于加入多个slave,只不过hostname和IP不可以重复,我会在下面的配置中加入注释

0、安装Java

参考伪分布式,先在master主机上安装Java环境

1、修改hostname

由于Hadoop分布式会有多台机器,每个机子的hostname不能相同

vi /etc/hostname修改hostname,hostname $(cat /etc/hostname)hostname修改后立即生效

将集群中所有机子的IP都加入到/etc/hosts中(这一步所有从机也需要配置)

[root@slave hadoop]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.117.150 master				#主机
192.168.117.151 slave				#从机
#192.168.117.152 slave02	
#192.168.117.153 slave03
2、配置环境变量

vi ~/.bashrc编辑环境变量,加入如下目录(我的安装目录:/usr/local/jvm/jdk)

export JAVA_HOME=/usr/local/jvm/jdk      
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${PATH}

source ~/.bashrc让.bashrc立即生效,通过java -version查看环境变量是否配置成功

所有从机也需要配置更新环境变量

3、设置ssh免密

设置免密之后你每次启动Hadoop就不用再输入密码了,连接从机也不用输入密码,方便主机登入从机
在master上,输入cd ~/.ssh检查你是否有.ssh文件夹。如果没有,输入ssh localhost输密码用ssh连一下本地,就有.ssh文件夹了。在该文件夹下输入ssh-keygen -t rsa进入命令后按流程按回车(有3次回车),然后在该目录下会生成密钥

3.1 设置本地免密

后在.ssh目录下输入cat id_rsa.pub >> authorized_keys这样你ssh localhost就不用输入密码了。

[root@slave .ssh]# cat id_rsa.pub >> authorized_keys
[root@slave .ssh]# ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts     #可以看到多出了authorized_keys文件
[root@slave .ssh]# ssh localhost
Last login: Wed Dec  1 15:33:55 2021 from ::1		#直接连接
3.2 设置从机免密登录

将生成好的密钥拷贝到从机上

ssh-copy-id -i root@slave	
#ssh-copy-id -i root@slave02
#ssh-copy-id -i root@slave03

root@的就是你从机的hostname,拷贝好后输入ssh root@slave验证

[root@master ~]# ssh slave
Last login: Wed Dec  1 16:02:37 2021 from 192.168.117.150
[root@slave ~]# exit
登出
Connection to slave closed.

可以看到不需要再进行密码验证了

4、配置Hadoop

修改master主机上core-site.xml文件(/usr/local/hadoop/etc/hadoop目录下):


    
        hadoop.tmp.dir
        file:/usr/local/hadoop/tmp
        Abase for other temporary directories.
    
    
        fs.defaultFS
        hdfs://master:9000
        # 注意开放的是主机的9000端口,所以localhost要改成主机的hostname
    

修改hdfs-site.xml文件(/usr/local/hadoop/etc/hadoop目录下):


    
        dfs.replication
        2
    
    
        dfs.namenode.name.dir
        file:/usr/local/hadoop/tmp/dfs/name
    
    
        dfs.datanode.data.dir
        file:/usr/local/hadoop/tmp/dfs/data
    
    
    
    #加入如下配置,不加也没啥影响
    
	dfs.namenode.secorndary.http-address
	master:50090
	#localhost修改成主机的名字
    
    

修改主机中的slaves(/usr/local/hadoop/etc/hadoop目录下)配置文件,将从机的hostname加入

[root@master hadoop]# cat slaves 
slave		#我的从机hostname
#slave02
#slave03
5、拷贝文件

将配置好的主机中的hadoop和jdk拷贝到从机

scp -r <需要拷贝的文件目录> <从机hostname>:<拷贝到从机的目录>
scp -r /usr/local/hadoop slave:/usr/local   #将主机hadoop文件拷贝到从机local目录下
#scp -r /usr/local/hadoop slave02:/usr/local
#scp -r /usr/local/hadoop slave03:/usr/local

scp -r /usr/local/jvm slave:/usr/local   #将主机jvm文件拷贝到从机jvm目录下
#scp -r /usr/local/jvm slave02:/usr/local
#scp -r /usr/local/jvm slave03:/usr/local

不要忘记从机的.bashrc环境变量配置,参考主机的环境变量,配置好后source更新!!!

6、格式化NameNode
$ cd /usr/local/hadoop
$ ./bin/hdfs namenode -format

格式化 *** 作只需要在master主机上运行一次就行
成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错。

如果在这一步时提示 Error: JAVA_HOME is not set and could not be found. 的错误,则说明之前设置 JAVA_HOME 环境变量那边就没设置好,请按教程先设置好 JAVA_HOME 变量,否则后面的过程都是进行不下去的。如果已经按照前面教程在.bashrc文件中设置了JAVA_HOME,还是出现 Error: JAVA_HOME is not set and could not be found. 的错误,那么,请到hadoop的安装目录修改配置文件“/usr/local/hadoop/etc/hadoop/hadoop-env.sh”,在里面找到“export JAVA_HOME=${JAVA_HOME}”这行,然后,把它修改成JAVA安装路径的具体地址,比如,“export JAVA_HOME=/usr/lib/jvm/default-java”,然后,再次启动Hadoop。
hdfs在hadoop的bin目录下

7、验证集群是否启动成功

主机上输入start-all.sh,启动后输入jps

[root@master hadoop]# jps
13845 NameNode
14182 ResourceManager
14875 Jps
14029 SecondaryNameNode

在从机上输入jps

[root@slave ~]# jps
10405 DataNode
11045 Jps
10509 NodeManager

可以看到,主机的NameNode节点已经启动,从机的DataNode节点启动

该集群搭建成功

8、通过Web端口访问HDFS
systemctl stop firewalld
systemctl disable firewlld

第一条命令停止防火墙,第二条命令永久关闭防火墙,之后就可以通过localhost:50070端口访问,点击Web界面上方的DataNodes,可以在该界面看到主机的从机信息

如果无法显示datanode,但是jps上都有datanode,检查hosts,每个从机的hosts里都要有整个集群的IP

stop-all.sh然后service network restart每一个机子的网卡,之后再访问web端,或者重新启动一次虚拟机。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5690286.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存