【Hadoop】在Ubuntu系统下安装Hadoop集群安装
本环境使用
Ubuntu-18.04.1 64,分布式集群方式(三台虚拟机:一台namenode,俩台datanode)
OpenJDK Java 1.8.0
Hadoop 2.9.1
2018.9.30. 本随笔完结
-
创建hadoop用户(三台都要)
为了操作方便,如果安装Ubuntu的时候不是“hadoop”用户,则需要增加一个名为hadoop的用户。
打开终端是 ctrl+alt+t
Ubuntu终端窗口中,复制粘贴的快捷键需要加上 shift,即粘贴是 ctrl+shift+v
创建用户:
sudo useradd -m hadoop -s /bin/bash
设置密码,可简单设置为 hadoop,按提示输入两次密码:
sudo passwd hadoop
hadoop 用户增加管理员权限,方便部署:
sudo adduser hadoop sudo
注销当前用户(在右上角),在登陆界面使用hadoop用户进行登陆
更新apt
由于Ubuntu的一些特性,需要随时更新一下apt,不然有时候软件安装不了
sudo apt-get update
后续配置文件的过程中,很多人喜欢用vi ,vim。为了图方便可以使用gedit,请将后面用到 vim 的地方改为 gedit
可选:
Ubuntu 安装gcc:
sudo apt-get update
sudo apt-get install gcc
-
安装最新版本的Java
Hadoop 3.x.y 或更高版本只支持Java 1.8或者更高版本,Hadoop 2.x.y 支持Java 1.1 - 1.7版本。
更新软件列表
sudo apt-get update
安装openjdk-8-jdk
sudo apt-get install openjdk-8-jdk
查看Java版本,如下:
java -version
安装好 OpenJDK 后,需要找到相应的安装路径
update-alternatives --config java
我们输出的路径为 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
其中,绝对路径为 /usr/lib/jvm/java-8-openjdk-amd64
接着配置 JAVA_HOME 环境变量,为方便,我们在 ~/.bashrc 中进行设置
sudo vi ~/.bashrc
在文件最前面添加如下单独一行(注意 = 号前后不能有空格),将“JDK安装路径”改为绝对路径,并保存:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
让该环境变量生效
source ~/.bashrc
设置好后我们来检验一下是否设置正确:
echo $JAVA_HOME # 检验变量值
java -version
$JAVA_HOME/bin/java -version # 与直接执行 java -version 一样
如果正确的话
第一个会输出JAVA安装路径
第二个和第三个输出的Java安装版本一致
这样,Hadoop 所需的 Java 运行环境就安装好了
-
网络配置
修改主机名字
为了便于区分,可以修改各个节点的主机名
以 master 节点上为例:
sudo vim /etc/hostname
把里面原来的主机名字删掉,改为:
HOSTNAME=master
按照同样的方式,将剩下俩台主机分别改为:slave1 、slave2
网络配置
配置IP地址
如果使用的是虚拟机安装的系统需要注意以下几个坑:
VirtualBox中虚拟机不能互相访问
Virtualbox中Ubuntu系统桥接(Bridge)模式不能访问外网
Brige模式网卡下,Ubuntu系统的IP地址不固定
解决办法(一台有问题,三台都要改):
1. NAT卡保证了可以连外网,Bridge卡保证了虚拟机可以互联。所以,如果已有网卡是NAT模式,则需要在虚拟机设置中再加一个网卡,其连接方式更改网络连接方式为桥接(Bridge)模式,并保证每台主机桥接(Bridge)网卡的MAC地址不同。
2. 桥接(Bridge)分配的IP地址如果不固定,需要改成静态(一台有问题,三台都要改)。
输入 ifcongfig 指令(以master主机为例)。
第一个 enp0s3 为 NAT 网卡,其IP地址不是独立主机IP地址。这是我们创建的第一个网卡,为默认网卡默认路由,这就使得其他路由不能匹配到的网段都会走 enp0s3 这个网卡,即可以访问外网。
第二个 enp0s8 为 Bridge 网卡,其IP地址为:172.31.185.70
修改静态IP地址
sudo vi /etc/network/interfaces
文本最后添加如下信息,保存退出:
auto enp0s8
iface enp0s8 inet static
address 172.31.185.70
重启路由器
sudo /etc/init.d/networking restart
这样,我们就将一台主机的IP地址配置好了。将剩下俩台主机按照同样配置方法的ip地址改为
slave1
172.31.185.71
slave2
172.31.185.72
这样,我们三台主机的IP地址分别为
172.31.185.70 master
172.31.185.71 slave1
172.31.185.72 slave2
执行如下命令修改自己所用节点的IP映射
sudo vim /etc/hosts
在文末添加我们的IP地址与主机名字映射。如下图master主机所示(一般该文件中只有一个 127.0.0.1,其对应名为 localhost,如果有多余的应删除,特别是不能有 “127.0.0.1 master” 这样的记录)
按照同样的方式,将剩下俩个主机 hosts 文件都修改好。重启生效。
配置SSH无密码登陆节点
因为Ubuntu中默认没有安装SSH服务,所以我们先要执行三步使其生效(三台都要):
sudo apt-get install openssh-server #安装服务,一路回车
sudo /etc/init.d/ssh restart #启动服务
sudo ufw disable #关闭防火墙
执行以下命令看是否成功运行,如果成功的话,会出现俩个进程
ps -e | grep ssh
然后在master节点生成SSH公钥,公钥储存在 /home/hadoop/.ssh中
cd ~/.ssh # 如果没有该目录,先执行一次ssh localhost
rm ./id_rsa* # 删除之前生成的公匙(如果有)
ssh-keygen -t rsa # 一直按回车就可以
让 master 节点可以无密码 SSH 本机,在 master 节点上执行
cat ./id_rsa.pub >> ./authorized_keys
完成后可执行 ssh master
验证一下(需要输入 yes,成功后执行 exit
返回原来的终端)
ssh master
接着在 master 节点将上公匙传输到 slave1节点,过程中需要输入 slave1 节点的密码,传输100%以后就是传过去了:
scp ~/.ssh/id_rsa.pub hadoop@slave1:/home/hadoop/
接着在 slave1节点上,把公钥加入授权
mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在则忽略
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub # 用完就可以删掉了
对 slave2 重复上面俩步,这样 master 节点就可以无密码登陆俩个 slave 节点了。
ssh slave1 #可以用来检验是否能成功登陆,exit退出
选:
Ubuntu下出现 “ ifconfig not found ”解决方案
sudo apt-get install net-tools -y
-
安装Hadoop
Hadoop 可以通过http://mirror.bit.edu.cn/apache/hadoop/common/ 或者者 http://mirrors.cnnic.cn/apache/hadoop/common/ 下载。
下载文件默认保存于于 ~/Download 路径中(中文版Ubuntu为 ~/下载 路径)。
Hadoop 我安装的是 2.9.1 版本 ( hadoop-2.9.1.tar.gz )。如果你用的不是 2.9.1 版本,接下来的指令需要更改为你目前安装的版本。
sudo tar -zxf ~/Download/hadoop-2.6.0.tar.gz -C /usr/local # 解压到/usr/local中 cd /usr/local/ sudo mv ./hadoop-2.6.0/ ./hadoop # 将文件夹名改为hadoop sudo chown -R hadoop ./hadoop
将 Hadoop 安装至 /usr/local/ 中
sudo tar -zxf ~/下载/hadoop-2.6.0.tar.gz -C /usr/local # 解压到/usr/local中 cd /usr/local/ sudo mv ./hadoop-2.6.0/ ./hadoop # 将文件夹名改为hadoop sudo chown -R hadoop ./hadoop # 修改文件权限
输入指令查看 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
cd /usr/local/hadoop #到Hadoop文件夹的当前路径
./bin/hadoop version #查看版本,再设置完环境变量以后,再任意目录执行 hadoop version 同样有效。
配置 Hadoop 环境变量
可以将 Hadoop 安装目录加入环境变量中,这样就可以在任意目录中使用 Hadoop 指令了。
在 master 节点,输入指令:
sudo vim ~/.bashrc
在文末添加如下代码,保存退出:
export HADOOP_PATH=/usr/local/hadoop
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
再使设置生效
source ~/.bashrc
-
配置分布式集群环境
需要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件。
slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml
slaves
此文件记录的是将要作为 Datanode 节点的名字。将 slave1,slave2 主机名字加入进去,如果想让 master 节点作为 Namenode 的同时也作为 Datanode,可以保留 localhost。(我这里没有保留)
core-site.xml 改为如下配置:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> </configuration>
hdfs-site.xml
这文件记录备份相关。dfs.replication 一般设为 3,我们有俩个 slave 节点,因此可以将 dfs.replication 的值设为 2
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:50090</value> </property> <property> <name>dfs.replication</name> <value>2</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>
mapred-site.xml
可能默认文件名为 mapred-site.xml.template ,此时需要重命名
mv mapred-site.xml.template mapred-site.xml
改为如下配置:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> </configuration>
yarn-site.xml 改为如下配置:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
配置好以后,将 master 节点上的 /usr/local/Hadoop 文件夹复制到剩余节点上。
在 master 节点执行:
cd /usr/local sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件 sudo rm -r ./hadoop/logs/* # 删除日志文件 tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先压缩再复制 cd ~ #跳转到有压缩包的路径下 scp ./hadoop.master.tar.gz slave1:/home/hadoop #发送到slave1节点,对其他salve节点也要执行这一步
在剩余 salve 节点上执行(以slave1为例):
sudo rm -r /usr/local/hadoop # 删掉旧的(如果存在)
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop
-
启动 Hadoop
首次启动 Hadoop 需要将 master 节点格式化:
hdfs namenode -format # 首次运行需要执行初始化,之后不需要
启动
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
通过命令 jps 可以查看各个节点的启动进程
jps
master 有 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServe
slave 有 DataNode、 NodeManager
以上进程缺少任意一个都表示有错。
在 master 节点查看 DataNode 是否正常启动。以我为例,Live datanodes 为 2,与 slave 数量一致,集群启动成功。
hdfs dfsadmin -report
可以通过 Web 页面看到查看 DataNode 和 NameNode 的状态:http://master:50070/
可选:
关闭Hadoop
cd /usr/local/hadoop
stop-all.sh
特别感谢:
给力星前辈写的非常好,单机和集群俩篇文章对我启发都很大。可以说我的第一个hadoop集群就是在他的博文指导下搭建好的。吃水不忘挖井人,在向前辈表示感谢的同时,特此附上原网址:
http://www.powerxing.com/install-hadoop/