Ubuntu18.04 Hadoop伪分布/集群配置

文章目录
  1. 1. Java 环境配置
    1. 1.1. 从官网下载JDK1.8并解压
    2. 1.2. 设置Java1.8为全局变量
    3. 1.3. 设置默认JDK
  2. 2. Hadoop配置相关操作
    1. 2.1. 基本配置
    2. 2.2. 伪分布模式配置
    3. 2.3. 运行伪分布模式示例
    4. 2.4. 配置YARN
    5. 2.5. Hadoop集群搭建
      1. 2.5.1. 设置host
      2. 2.5.2. 设置SSH免密码登录

这篇文章,从实际角度来说应该叫做:当你的老师给了你一份从头错到尾的配置文件以后……
配置文件是错的,那就只能自己认真(瞎)搞了呗,从早上一睁眼配到下午快吃饭(超大声)除去中间摸鱼的时间(小声哔哔)。

下面正文

虚拟机:Ubuntu 18.04
Java版本:1.8.0_181
Hadoop版本:2.7.7

Java 环境配置

从官网下载JDK1.8并解压

这里放在Desktop上

然后在终端输入命令,这里要注意路径问题,这里暂时还没切换到root权限

1
sudo tar -zxvf /home/willard/Desktop/jdk-8u181-linux-x64.tar.gz -C /usr/lib/jvm

P.S.后面的操作均以root来执行。

设置Java1.8为全局变量

使用vim打开这个文件

1
sudo vim /etc/profile

没有安装vim可以先执行下面的命令安装好vim

1
sudo apt-get install vim

使用vim打开以后往里面写入下面的内容
注意:JAVA_HOME这里是写之前解压的jdk安装包路径,根据下载的版本写

1
2
3
4
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_181
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH

保存之后执行下面命令

1
source /etc/profile

查看当前Java环境

1
java -version

如图所示即为配置成功。

设置默认JDK

直接执行下面的命令,同样要注意文件路径等问题

1
2
3
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_181/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_181/bin/javac 300
sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.8.0_181/bin/jar 300

最后执行,如果本机环境只有这一个Java版本也无所谓~

1
2
sudo update-alternatives --config java
sudo update-alternatives --config javac

Hadoop配置相关操作

基本配置

首先把下载的安装包放在Ubuntu18.4的桌面上

然后执行命令
(1)解压

1
sudo tar -zxf /home/willard/Desktop/hadoop-2.7.7.tar.gz -C /usr/local/hadoop

(2)修改权限

1
sudo chown -R root ./hadoop

(3)验证hadoop

1
./bin/hadoop version


这样表示成功。

伪分布模式配置

Hadoop默认为单机模式,可通过配置为伪分布模式。
修改 \/usr/local/hadoop/etc/hadoop 下面的几个文件

执行命令

1
vim core-site.xml

然后再文件里面写入

1
2
3
4
5
6
7
8
9
10
11
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>

执行命令

1
vim hdfs-site.xml

再在文件里面写入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>

修改完毕以后执行,这条命令在/usr/local/hadoop下执行

1
./bin/hdfs namenode -format

执行完毕后再在改目录下面执行

1
./sbin/start-dfs.sh

然后运行

1
jps

出现的结点数均正确,OK,完成。

运行伪分布模式示例

创建hadoop用户,这里我直接设置root

1
./bin/hdfs dfs -mkdir -p /user/root

创建input文件夹

1
./bin/hdfs dfs -mkdir input

把本地文件复制到HDFS中

1
./bin/hdfs dfs -put ./etc/hadoop/*.xml input

查看文件列表

1
./bin/hdfs dfs -ls input

OK,文件复制成功,继续执行下面的命令

1
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

然鹅!!!!这里报错了!!!
错误长酱紫的…(没有报错的不用看下面的)

报错原因
Hadoop集群yarn-site.xml配置错误:
默认情况下yarn ResourceManager 相关服务IP地址指向的是0.0.0.0。
而在服务器中,0.0.0.0指的是本机网络地址,那么NodeManager就会在本机找ResourceManager相关服务,而slave节点上并没有这些服务,这些服务在ResourceManager Master节点上。所以针对Hadoop集群配置yare-site.xml某些配置项不能使用默认配置。
注意:hadoop伪分布式可以使用默认配置,因为所有服务都在本地运行。

解决办法

修改所有节点上yare-site.xml配置文件(这个文件在/usr/local/hadoop/etc/hadoop下面),在该文件中配置ResourceManager Master节点所在地址即可解决问题。详细配置信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
<property>  
<name>yarn.resourcemanager.address</name>
<value>hadoopMaster:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value> hadoopMaster:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value> hadoopMaster:8031</value>
</property>

修改完这些以后重新运行:

1
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

最后的结果应该是这样:

查看运行结果

1
./bin/hdfs dfs -cat output/*

将运行结果放到本地文件夹

1
./bin/hdfs dfs -get output ./output

删除HDFS中的output文件夹

1
./bin/hdfs dfs -rm -r output

配置YARN

首先进入到 \/usr/local/hadoop/etc/hadoop 下面
直接vim新建一个文件,不改名了,直接

1
vim mapred-site.xml

在里面加入内容

1
2
3
4
5
6
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

修改yarn-site.xml,vim YARN-SITE.XML

1
2
3
4
5
6
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

运行(在这之前先运行./sbin/start-dfs.sh)

1
./sbin/start-yarn.sh

再运行jsp查看

配置YARN成功应该显示NodeManager和ResourceManager

Hadoop集群搭建

设置host

首先把之前配置好的虚拟机克隆一份作为slave1
ifconfig,查看两台机器的ip地址
master:192.168.242.138

slave1:192.168.242.141

然后在两台机器里分别执行下面的命令,并写入相同的文件

1
vim /etc/hosts

注意:两台机器都要写!!!

完成上述步骤之后两台虚拟机之间需要相互ping一下对方的ip地址,比如这样

设置SSH免密码登录

1.以下操作现在master节点上运行

1
2
3
4
cd ~/.ssh
rm ./id_rsa* 因为之前建过rsa key,所以需要先删除之前建好的
ssh-keygen -t rsa
cat ./id_rsa.pub >> ./authorized_keys

运行完之后验证:ssh master

2.将MASTER的公钥分发给SLAVE1节点

这里巨坑!!!天坑!!!坑死我了!!!

这里如果直接执行命令,那就等着报错吧!!!

1
scp id_rsa.pub root@192.168.242.141:~/.ssh/authorized_keys

各种ssh permission denied…这里在执行上面的命令前要先修改一点东西,在slave1节点上改。
执行命令

1
vim /etc/ssh/sshd_config

然后将其中的PermitRootLogin no修改为yes
PubkeyAuthentication yes修改为no
AuthorizedKeysFile .ssh/authorized_keys前面加上#屏蔽掉,
PasswordAuthentication no修改为yes

保存退出以后,给slave1的root重新设个密码

1
sudo passwd root

然后执行下面的命令重启slave1的服务器

1
sudo service ssh localhost

切换回master机器,再执行

1
scp id_rsa.pub root@192.168.242.141:~/.ssh/authorized_keys

这才叫完成了~

然后再进到slave1这边

1
2
3
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys 设置权限
chmod 700 -R .ssh 设置.ssh目录权限,这要在外层目录设置

完成这些以后在master就能免密ssh登录了。