Hadoop集群搭建实验

前言

最近云计算实验需要搭建hadoop集群,顺便实验过程记录下来。使用的虚拟机VMware Workstation 16 Pro,还有三台centos 7 虚拟机。这种使用多台虚拟机的很麻烦,后面推荐选择使用Docker来搭建hadoop集群。

1. 实验目的

了解如何安装、配置和管理有实际意义的Hadoop集群

2. 实验内容

CentOS 7上搭建 hadoop 集群,包含 3 个节点,体验集群分布式,能够正常的访问hadoop的web页面。
准备机器:一台master,两台slave,配置每台机器保证各台机器之间通过机器名可以互访,如:

ip node 描述
192.168.111.101 node1 (master) (hadoop1)
192.168.111.102 node2 (slave1)(hadoop2)
192.168.111.103 node3 (slave2)(hadoop3)

3.1 单机配置

3.1.1 准备环境

虚拟机:Centos 7
SSH工具:MobaXterm
hadoop:hadoop-2.7.3.tar.gz
jdk:jdk-8u202-linux-x64.tar.gz

创建/software 目录 (mkdir /software), 上传jdk和hadoop

image

将文件解压到/opt目录下面,并修改名称

tar -xvzf hadoop-2.7.3.tar.gz -C /opt/
tar -xvzf jdk-8u202-linux-x64.tar.gz -C /opt/

image

3.1.2 修改配置文件

vim /etc/hosts
image

进入opt目录下
cd hadoop/etc/hadoop
vi hadoop-env.sh

export JAVA_HOME=/opt/jdk8

image

vi core-site.xml

<!-- 默认节点(写自己主机的ip)端口,端口默认为9000 -->  
<property>  
  <name>fs.defaultFS</name>  
  <value>hdfs://192.168.226.101:9000</value>  
</property>  
<!-- hdfs的临时文件的目录***这个要记好,后面初始化错误可能会用到***  -->  
<property>  
   <name>hadoop.tmp.dir</name>  
   <value>/opt/hadoop/tmp</value>  
</property>  
<!-- 其他机器的root用户可访问 -->  
<property>  
   <name>hadoop.proxyuser.root.hosts</name>  
   <value>*</value>  
</property>  
<!-- 其他root组下的用户都可以访问 -->  
<property>  
        <name>hadoop.proxyuser.root.groups</name>  
        <value>*</value>  
</property>  

image

vi hdfs-site.xml

<!-- 设置数据块应该被复制的份数(和集群机器数量相等,目前只有一个填1) -->  
<property>  
  <name>dfs.replication</name>  
  <value>1</value>  
</property>  
<!-- namenode备用节点,目前只有一个填主机的IP地址  -->  
<property>  
  <name>dfs.namenode.secondary.http-address</name>  
  <value>192.168.226.101:50090</value>  
</property>

image

将文件mapred-site.xml.template改名为mapred-site.xml
mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml

<!-- mapreduce的工作模式:yarn -->  
<property>  
        <name>mapreduce.framework.name</name>  
        <value>yarn</value>  
</property>  
<!-- mapreduce的工作地址 -->  
<property>  
        <name>mapreduce.jobhistory.address</name>  
        <value>192.168.226.101:10020</value>  
</property>  
<!-- web页面访问历史服务端口的配置 -->  
<property>  
        <name>mapreduce.jobhistory.webapp.address</name>  
        <value>192.168.226.101:19888</value>  
</property>

image

vi yarn-site.xml

<!-- reducer获取数据方式 -->  
<property>  
    <name>yarn.nodemanager.aux-services</name>  
    <value>mapreduce_shuffle</value>  
</property>  
<property>  
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>  
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>  
</property>  
<!-- 指定YARN的ResourceManager的地址,值为主机名 -->  
<property>  
    <name>yarn.resourcemanager.hostname</name>  
    <value>hadoop1</value>  
</property>  
<!-- 日志聚集功能使用 -->  
<property>  
    <name>yarn.log-aggregation-enable</name>  
    <value>true</value>  
</property>  
<!-- 日志保留时间设置7天 -->  
<property>  
    <name>yarn.log-aggregation.retain-seconds</name>  
    <value>604800</value>  
</property>

image

vim slaves
将内容改为主机名hadoop1

修改环境变量
vim /etc/profile

export JAVA_HOME=/opt/jdk8  
export CLASSPATH=.:$JAVA_HOME/rt.jar:$JAVA_HOME/tools.jar:$JAVA_HOME/dt.jar
export JRE_HOME=$JAVA_HOME/jre  
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$HBASE_HOME/bin:$HIVE_HOME/bin  
export HADOOP_HOME=/opt/hadoop  
export HBASE_HOME=/opt/hbase  
export HIVE_HOME=/opt/hive  
export HADOOP_MAPRED_HOME=$HADOOP_HOME  
export HADOOP_COMMON_HOME=$HADOOP_HOME  
export HADOOP_HDFS_HOME=$HADOOP_HOME  
export YARN_HOME=$HADOOP_HOME  
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native  
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib" 

添加修改为:

image

其中hbase、hive等的环境变量暂时用不到,先配上方便以后使用完成后
source /etc/profile

格式化HDFS
hadoop namenode -format

image

image

3.1.3 生成私钥

ssh-keygen -t rsa -P ""(注意这里是两个英文双引号)
回车后需要再按一次回车

image

复制到授权密钥
cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys

3.1.4 启动服务

start-all.sh
第一次启动需要输入yes确认密钥

image

jps查看

image

或者通过浏览器来判断服务是否开启成功
hdfs:
192.168.111.101:50070

image

yarn:
192.168.111.101:8088

image

启动历史服务(开不开没关系)
mr-jobhistory-daemon.sh start historyserver
再次输入jps

image
访问:http://192.168.111.101:19888/

image

3.1.5 关闭服务

stop-all.sh
image
jps查看没有进程表示关闭完成
image

关闭历史服务
mr-jobhistory-daemon.sh stop historyserver
jps查看没有进程表示关闭完成

image

下次开机重新启动。
cd /opt/Hadoop/etc/Hadoop
source /etc/profile
start-all.sh

3.2 Hadoop集群的搭建

3.2.1 环境准备:

直接复制虚拟机,然后修改一些配置就可以了,在虚拟机关闭的情况下克隆。

image

image

同样的方法克隆两个

image
克隆完成之后的虚拟机要先将MAC地址重新生成一下,不然后面Moba连不上
image

3.2.2 修改虚拟机配置

1)修改ip地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
两台机器修改IPADDR为102和103

image

image

重启网卡
systemctl restart network

修改主机名
102:
hostnamectl set-hostname hadoop2
103:
hostnamectl set-hostname hadoop3

修改完之后并不会立刻改变,可以输入命令exit先断开连接,在重连就可以显示修改后的名字
101/102/103:
vim /etc/hosts

三个虚拟机同样操作

image

3.2.3 配置所有机器之间的免密登录

三台虚拟机上先执行之前同样的操作

ssh-keygen -t rsa -P ""

image

提示是否overwrite的时候输入 y

cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
这里要使用一个“>”表示覆盖,重写,两个“>”表示追加

image

下面复制的时候小心使用
101:将授权密钥发给102,103
ssh-copy-id -i /root/.ssh/id_rsa.pub -p22 root@192.168.111.102
ssh-copy-id -i /root/.ssh/id_rsa.pub -p22 root@192.168.111.103

102:将授权密钥发给101,103
ssh-copy-id -i /root/.ssh/id_rsa.pub -p22 root@192.168.111.101
ssh-copy-id -i /root/.ssh/id_rsa.pub -p22 root@192.168.111.103

103:将授权密钥发给101,102
ssh-copy-id -i /root/.ssh/id_rsa.pub -p22 root@192.168.111.101
ssh-copy-id -i /root/.ssh/id_rsa.pub -p22 root@192.168.111.102

操作的时候需要输入一次yes和一次密码

image

一共操作六次,完成之后测试免密切换。

image

ssh -p 22 root@hadoop2(ssh hadoop2)

第一次连接却要输入yes确认,以后不用 切换用户之后可以使用命令exit登出

image

3.2.4 修改Hadoop配置文件

101/102/103三台虚拟机都要改:
cd /opt/hadoop/etc/hadoop
vi hdfs-site.xml

image
Vim slaves

image
只需修改102/103两台虚拟机:
vim mapred-site.xml

image

3.2.5 启动集群

先将三台虚拟机下的tmp目录删除
cd /opt/hadoop/
rm -rf tmp/

image

101机器初始化hdfs
hadoop namenode -format
如果出现无法找到命令,就重新激活一下配置文件
image

在101机器下启动服务
start-all.sh
mr-jobhistory-daemon.sh start historyserver

启动后分别输入jps查看启动进程
101:
image
102:
image
103:
image

3.3 Hadoop运行wordcount

3.3.1 HDFS简介

HDFS是hadoop原生态的文件系统,HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。

3.3.2 HDFS命令

1.帮助命令
一切命令都从帮助开始,命令是记不完的,只有学会使用帮助,才能免却记忆的痛苦。

hdfs dfs -help

2.查看命令
列出文件系统目录下的目录和文件

-h 以更友好的方式列出,主要针对文件大小显示成相应单位K、M、G等
-r 递归列出,类似于linux中的tree命令

hdfs dfs -ls [-h] [-r] <path>

3.查看文件内容
hdfs dfs -cat <hdfsfile>

查看文件末尾的1KB数据
hdfs dfs -tail [-f] <hdfsfile>

4.创建命令

新建目录
hdfs dfs -mkdir <path>

创建多级目录
hdfs dfs -mkdir -p <path>

新建一个空文件
hdfs dfs -touchz <filename>

上传本地文件到hdfs
-f 如果hdfs上已经存在要上传的文件,则覆盖

hdfs dfs -put [-f] <local src> <hdfs dst>

3.3.3 wordcount实践

  1. 准备一个英语小短文文本winepress.txt

image

  1. 在HDFS中创建input目录

就在刚才hadoop 目录下,输入命令:hdfs dfs -mkdir /input ,之后可以用命令看:hdfs dfs -ls / 创建input目录成功

image

  1. 将winepress.txt放到input目录下
hdfs dfs -put winepress.txt /input #上传文件到指定目录
hdfs dfs -ls /input  #查看目录下的文件

image

  1. 通过hadoop自带示例程序wordcount计算出其中各字母出现的次数便可

在系统文件中找到相应的hadoop-mapreduce-examples-2.7.3.jar 。
首先在hadoop/etc的同级目录找到一个叫做share的目录,再向下寻找mapreduce

image

执行语句统计字数:

[root@hadoop1 hadoop]# hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /input /output

image

查看执行完毕的文件

[root@hadoop1 hadoop]# hdfs dfs -ls /output
[root@hadoop1 hadoop]# hdfs dfs -cat /output/part-r-00000

image

posted @ 2022-03-30 15:46  Satoris  阅读(1027)  评论(0)    收藏  举报