It has been 515 days since the last update, the content of the article may be outdated.

hadoop 环境搭建

第一章 hadoop 环境搭建

第一节 虚拟机配置

1.1 安装 Vmware 软件

1.2 安装 Centos7 后修改虚拟机名称为 master

1.3 网络连接配置

根据虚拟网络编辑器修改 VMnet8 的 IP、网关和 DNS。

LKZ5Ih.png

1.4 虚拟机网络配置

登录 Cen­tOS 系统,进入 etc/syscon­fig/net­work-scripts 中,编辑 NAT 网卡配置文件。修改为以下变量:

plaintext
#修改
BOOTPROTO=“static”
ONBOOT="yes"
#添加
IPADDR=192.168.237.130
GATEWAY=192.168.237.2
DNS1=119.29.29.29

LKZ7US.png

1.5 重启网卡并检查 IP 是否变化。

plaintext
ifconfig

LKZW0Q.jpg

1.6 关闭 CentOS 防火墙

关闭防火墙并禁止防火墙开机启动

plaintext
systemctl stop firewalld.service #关闭防火墙
systemctl disable firewalld.service #禁止防火墙开机启动

LKZdx2.png

可以使用以下命令查看防火墙状态

plaintext
systemctl status firewalld.service

LKZQoW.png

1.7 使用 fianlshell 连接虚拟机继续操作

图形化界面和 ftp 工具便于操作。

LKZl6H.png

PS:如果 ssh 连接报错,可以尝试执行 sudo yum update。

第二节 基础环境配置

2.1 配置时钟同步

在线安装 ntpdate,使用阿里云 ntp 服务器同步时间,date 命令查看当前时间

plaintext
yum install ntpdate 
ntpdate ntp.aliyun.com
date

LKZA5U.png

2.2 配置主机名

在网络中能够唯一标识主机,和 ip 地址一样,可通过 ip 地址和网络主机名访问这台主机,作用:简化、方便。

plaintext
hostnamectl set-hostname master #修改主机名为mastr
hostname #查看主机名

LKZXtO.png

2.3 配置 hosts 列表

hosts 列表作用是让集群中的每台服务器彼此都知道对方的主机名和 ip 地址,可以在这步时直接加入预计添加的从节点。

LKZ6FL.png

验证,ping ip 地址和主机名,结果相同无区别

LKZVjf.png

2.5 Java 安装

因为系统本身就有 Java 就没有去安装,但是后来发现无法使用 jps 命令。遂更新 Java 版本。

plaintext
sudo yum install java-1.8.0-openjdk-devel.x86_64

LKZuUi.png

可以用 java -version 验证 Java 版本。

2.6 Hadoop 安装

使用 finalshell 上传 hadoop 安装包至 /usr/hadoop 文件夹下,解压 Hadoop 安装包。

plaintext
tar -zxvf hadoop-2.10.1.tar.gz

配置 Hadoop 环境变量

在配置文件最后添加以下两行

plaintext
export HADOOP_HOME=/usr/hadoop/hadoop-2.10.0
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

LKZc0w.png

将 hadoop 与 java 绑定

设置 hadoop 配置文件

plaintext
cd /usr/hadoop/hadoop-2.10.0/etc/hadoop
vi hadoop-env.sh

找到下面这行代码:

plaintext
export JAVA_HOME=${JAVA_HOME}

将这行代码修改为

plaintext
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.e179.x86_64/jre

LKZ1ok.png

如果不知道 java 地址可以用 java -verbose 查找

LKZbL8.png

使 hadoop 配置生效,并进行验证

plaintext
source /etc/profile
hadoop version
whereis hdfs

无错误信息表示 hadoop 已成功加入到 CentOS 系统环境中

LKZt6y.png

第三节 配置 Hadoop

3.1 Hadoop 核心文件配置

进入 hadoop 的 etc 文件夹,配置 core-site.xml 文件,修改成以下内容

plaintext
<configuration>
<!--指定文件系统的入口地址,可以为主机名或ip -->
<!--端口号默认为8020 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<!--指定hadoop的临时工作存目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/tmp</value>
</property>
</configuration>

LKZsNt.png

配置 yarn-env.sh 文件,修改 JAVA_HOME 行为(记得去掉前面的注释符 #):

plaintext
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.e179.x86_64/jre

LKZkLz.png

配置 hdfs-site.xml 文件,修改成以下内容:

plaintext
<configuration>
<!--指定hdfs备份数量,小于等于从节点数目-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.http.address</name>
<value>master:50070</value>
</property>
<!-- 自定义hdfs中namenode的存储位置-->
<!-- <property>-->
<!-- <name>dfs.namenode.name.dir</name>-->
<!-- <value>file:/usr/hadoop/dfs/name</value>-->
<!-- </property>-->
<!-- 自定义hdfs中datanode的存储位置-->
<!-- <property>-->
<!-- <name>dfs.datanode.data.dir</name>-->
<!-- <value>file:/usr/hadoop/dfs/data</value>-->
<!--</property>-->
</configuration>

LKZE2R.png

配置 mapred-site.xml 文件,通过 cp 命令生成不带后缀 template 的文件

LKZmbu.png

编辑 mapred-site.xml 文件,修改为以下内容:

plaintext
<configuration>
<!--hadoop的MapReduce程序运行在YARN上-->
<!--默认值为local-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

LKZr5C.png

配置 yarn-site.xml 文件

plaintext
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!--nomenodeManager获取数据的方式是shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

LKZoVX.png

修改 slaves 文件,删除原有内容,新增即将要建立的两个虚拟机的 host­name

LKZp4G.png

3.2 克隆多台 slave 机

使用 mas­ter 镜像克隆 3 台虚拟机 (创建完整克隆),名称分别为 slave1、slave2、slave3,根据电脑配置情况可以自由设置数量,以下步骤与上方执行过程相同。

修改每个 slave 的主机名,方法同 2.3

进入 etc/sysconfig/network-scripts 中,修改每台 slave 机的 ip 地址 ,方法同 1.3

第四节 配置 SSH 登录

4.1 生成公钥私钥

在 master 和每台 slave 上,使用 rsa 算法产生公钥和私钥

4.2 发送公钥

在 mas­ter 上创建一个大家通用的公钥 authorized_keys,修改 authorized_keys 权限,并将这个公钥发送给每个 slave.

在 master 和每台 slave 上,使用 rsa 算法产生公钥和私钥(安装过程中,使用 “Enter” 键确定)

plaintext
ssh-keygen -t rsa

查看生成的私钥 id_rsa 和公钥 id_rsa.pub

plaintext
cd /root/.ssh/
ls

在 master 上创建一个大家通用的公钥 authorized_keys,修改 authorized_keys 权限,并将这个公钥发送给每个 slave

plaintext
cat id_rsa.pub >> authorized_keys
chmod 644 authorized_keys
systemctl restart sshd.service
scp /root/.ssh/authorized_keys slave1:/root/.ssh
scp /root/.ssh/authorized_keys slave2:/root/.ssh

LKZ4FD.png

4.3 验证 SSH

ssh 登录检验,不需要密码即可登录路径从 ‘/.ssh ’ 变成 '’,登出为 exit

LKZvD4.png

第五节 准备运行 hadoop

5.1 格式化 HDFS

在 master 机上,进入 hadoop 下的 bin 文件夹,运行以下代码:

plaintext
hdfs namenode -format

注意:只需格式化一次!多次格式化会导致 NameNode 和 DataNode 的集群 ID 值不匹配,需要在格式化前删除 NameNode,DataNode、日志等文件夹。

5.2 启动 hadoop

LKZ02E.png

5.3 jps 检查进程

LKZzNT.png

5.4 通过 web 端访问 hadoop

查看 NameNode、DataNode:

LKZg76.png

查看 YARN 界面:

LKZByp.png

参考 Hadoop 配置手册