在ubuntu下进行HDFS伪分布式环境搭建(学习用)


#本博客主要是记录自己学习过程,有问题麻烦大家指出…

参考:
https://www.cnblogs.com/sdwyz/p/10797820.html
https://blog.csdn.net/qq_32635069/article/details/80859790
https://blog.csdn.net/kh896424665/article/details/78765175

hadoop + mapreduce的伪分布式环境主要包括:HDFS搭建,YARN搭建等,下面先阐述HDFS搭建过程

环境:
Ubuntu 18.04.1
Hadoop 3.1.4

一.准备工作

1.创建新用户

因为是在虚拟机下搭建,所以有必要为了这个作业专门创建一个用户并给权限

sudo useradd -m hadoop  #-m表示自动建立用户登陆目录
sudo passwd hadoop
sudo adduser hadoop sudo  #增加管理员权限

这之后就可以切换到hadoop用户了(su hadoop),然而我忘了。。所以下面用户可能不是hadoop,不过大家知道就好

2.更新

sudo apt-get update

在更新的时候报错:
在这里插入图片描述主要是DNS服务器有问题导致域名无法解析,在/etc/resolvconf/resolv.conf.d/base中修改配置,创建万能域名解析器

cd /
cd /etc/resolvconf
sudo mkdir resolv.conf.d  #没有该文件夹,要先创建
cd resolv.conf.d
sudo vim base

在base中插入

nameserver 8.8.8.8
nameserver 8.8.4.4

之后就可以正常update了

3.ssh安装

安装ssh服务端(ubuntu默认安装了客户端,伪分布式模式下本机既作为服务端又作为客户端,所以两个都得装)

sudo apt-get install openssh-server

安装好了以后尝试登陆

ssh localhost

在这里插入图片描述当要你输入密码说明安装成功了
因为分布式计算的情况下,需要对多台机器进行多次调度。如果每次对机器进行ssh登陆都要输密码未免也太麻烦了,故要设置ssh登陆为无密登陆

cd ~/.ssh/
ssh-keygen -t rsa
cat ./id_rsa.pub >> ./authorized_keys

#设置好后再进行无密登陆
ssh localhost

在这里插入图片描述
在这里插入图片描述当输入ssh-keygen -t rsa后会要求你输入密码,一直enter即可(密码空)
再ssh登陆时发现fail to connect,首先ping一下后面的网址
在这里插入图片描述可以ping通,网络应该没问题,再清理一下缓存

sudo rm /var/lib/ubuntu-release-upgrader/release-upgrade-available

再登陆,没问题了
在这里插入图片描述

4.JAVA环境安装

安装OpenJDK(开源版本)

sudo apt-get install default-jre default-jdk

进行环境变量配置

vim ~/.bashrc

在其中加入

export JAVA_HOME=/usr/lib/jvm/default-java  #环境变量设置

使环境变量生效

source ~/.bashrc

可通过java --version查看java版本

二.HDFS环境搭建

1.hadoop安装

这里在windows官网上下载了hadoop对应的版本,安装了最新的3.1.4的binary版本(source是源码)
在这里插入图片描述得到的是tar.gz的压缩包,通过filezilla上传到ubuntu中,再解压
我上传到了家目录下,解压到/usr/local目录下,再改名为hadoop

cd /
cd /usr/local
sudo mv ./hadoop-3.1.4/ ./hadoop  #改名
sudo chmod 777 -R /usr/local/hadoop/  #给hadoop权限,-R表示递归的给文件夹中所有文件权限

2.hadoop配置

首先在hadoop中进行设置

cd /usr/local/hadoop/etc/hadoop
vim hadoop-env.sh

跟之前配置JAVA环境变量一样,在该文件中加入

export JAVA_HOME=/usr/lib/jvm/default-java

(注意:如果后面是因为环境出了问题,可以尝试修改default-java为安装的java版本,在/usr/lib/jvm中可以看到,如下)
在这里插入图片描述由于这里搭建的是伪分布式环境,需要对usr/local/hadoop/etc/hadoop下的core-site.xml和hdfs-site.xml文件分别配置
core-site.xml文件中配置如下:

<property>
    <name>hadoop.tmp.dir</name>
    <value>file:/usr/local/hadoop/tmp</value>  #指定临时目录,如果不指定,会默认使用临时目录/tmp/hadoo-hadoop,这个文件在Hadoop重启时可能被清除
    <description>Abase for other trmporary directories</description>
</property>
<property>
    <name>fs.defaultFS</name>  #指定HDFS的访问地址,可以是一个端口,即访问该端口等效于访问了HDFS(文件系统位置可以是目录可以是端口)
    <value>hdfs://localhost:9000</value>
</property>

hdfs-site.xml中如下:

<property>
    <name>dfs.replication</name>  #指定副本数量
    <value>1</value>
</property>

<property>
  <name>dfs.namenode.http-address</name>
  <value>0.0.0.0:9870</value>  #hadoop3下hdfs的监听端口为9870
</property>

<property>
    <name>dfs.namenode.name.dir</name>  #name节点的存储位置
    <value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>

<property>
    <name>dfs.datanode.data.dir</name>   #data节点的存储位置
    <value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>

需要注意的是,进入两个文件会看到一组configuration,要把property组之间的内容加到configuration之间,即

<configuration>

<property>
#property之间才是具体的属性
</property>

<property>
...
</property>

</configuration>

然后格式化namenode节点(只有第一次启动才需要格式化)

./bin/hdfs namenode -format

如果报权限不够的错误,在前面加上sudo
如果还是不行,可以切换为root用户(su root)再进行格式化,就可以成功了
在这里插入图片描述出现第一句(has been successfully formatted)即表示格式化成功
在这里插入图片描述如果切换到root用户再切换回去

3.hdfs启动

cd /usr/local/hadoop/
./sbin/start-dfs.sh

可能出现的bug:
一个是JAVA_HOME is not set and could not be found
检查之前的环境设置好了没(前面有两个地方需要设置JAVA_HOME)
二是permission denied
这是hadoop权限没给对,执行sudo chmod 777 -R /usr/local/hadoop/即可
三是ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.,则cd /usr/local/hadoop/sbin/,修改start-dfs.sh,在最前面加上:

HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root 

如果能正常启动,再用jps检查一下进程,有四个进程就没问题了
在这里插入图片描述用浏览器访问localhost:9870:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值