#本博客主要是记录自己学习过程,有问题麻烦大家指出…
参考:
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: