Hadoop集群搭建(超级详细)-程序员宅基地

技术标签: hadoop  

感谢评论区大佬们指出文章中的一些错误,已经进行修改。如果还存在其他错误,希望大佬们指出!

需要的安装包:jdk-8u162-linux-x64.tar.gz( 提取码:6k1i )、hadoop-3.1.3.tar.gz( 提取码:07p6 )

1 集群规划

安装VMware,使用三台Ubuntu18.04虚拟机进行集群搭建,下面是每台虚拟机的规划:

主机名 IP 用户 HDFS YARN
hadoopMaster 待定 rmc0924 NameNode、DataNode NodeManager、ResourceManager
hadoopSlave0 待定 rmc0924 DataNode、SecondaryNameNode NodeManager
hadoopSlave1 待定 rmc0924 DataNode NodeManager

上面表格备用,还需要确定每台虚拟机的IP地址

2 网络配置

首先在VMware中新建一台4G内存(后期会进行修改),20G硬盘空间的Ubuntu虚拟机。新建完成后进行下面操作。

2.1 修改主机名

sudo vim /etc/hostname

其中的vim文本编辑器需要自己安装,具体的安装步骤也很简单,大家伙可以去看别人的博客安装一下。执行上面的命令打开“/etc/hostname”这个文件,将其中内容删除,并修改为“hadoopMaster”,保存退出vim编辑器,重启Linux即可看到主机名发生变化。下面是修改前的主机名:
在这里插入图片描述
下面是修改后的主机名:
在这里插入图片描述

2.2 设置虚拟机IP地址

  1. 查看VMware虚拟机的虚拟网络编辑器
    在这里插入图片描述
  2. 点击VMnet8网络,点击NAT设置

在这里插入图片描述
记录上面图中子网IP、子网掩码、网关三个属性,这些在后面的步骤有用,不同的电脑会有不同。

  1. 获取Ubuntu虚拟机的网卡编号
ifconfig

在这里插入图片描述

  1. 设置静态网络
sudo vim /etc/network/interfaces

在原有的内容上添加

auto ens33				# 网卡编号,我这里是ens33
iface ens33 inet static	# 设置为静态IP
address 192.168.131.151	# 该机器的IP,根据我们刚才获取到的VMware的子网IP进行选取
netmask 255.255.255.0	# 子网掩码,刚才获取VMware的子网掩码
gateway 192.168.131.2	# 网关,也是刚才获取的网关
dns-nameserver 192.168.131.2	# DNS,和网关一样即可

上面的内容根据各自的电脑进行设置,一定要和VMware中的子网IP、子网掩码、网关保持一致,不然会上不了网。保存退出vim编辑器,重启Ubuntu即可生效。

  1. 主机IP映射
sudo vim /etc/hosts

打开hosts文件,新增三条IP与主机的映射关系:

192.168.131.151	hadoopMaster
192.168.131.152	hadoopSlave0
192.168.131.153	hadoopSlave1

修改结果如下图所示:
在这里插入图片描述

一般情况下,hosts文件中只有一个127.0.0.1,其对应的主机名为localhost,如果存在多余的127.0.0.1,应删除,同时127.0.0.1不能与hadoopMaster这样的主机名进行映射关系。修改后重启Ubuntu。

2.3 关闭防火墙

使用下面命令查看防火墙状态,inactive状态是防火墙关闭状态 active是开启状态。

sudo ufw status

使用下面命令关闭防火墙:

sudo ufw disable

3 安装SSH服务端

sudo apt-get install openssh-server

安装后,使用下面命令登录本机:

ssh localhost

SSH首次登录会有提示,输入yes即可,然后按照提示输入本机密码即可。但是这样每次登录都要输入密码,现在设置SSH无密码登录。首先退出SSH,利用ssh-keygen生成密钥,并将密钥加入到授权中。

exit	# 退出ssh localhost
cd ~/.ssh/
ssh-keygen -t rsa	# 会有提示,都按回车就行
cat ./id_rsa.pub >> ./authorized_keys	# 加入授权

现在再使用"ssh localhost",就可以不用输入密码登录ssh
在这里插入图片描述

4 安装Java环境

Hadoop3.1.3需要JDK版本在1.8及以上,jdk-8u162-linux-x64.tar.gz在文首给出,可以进行下载。将文件放在一个目录中后,打开一个终端,执行下面命令。

cd /usr/lib
sudo mkdir jvm	# 创建目录来存放JDK文件
# 进入jdk-8u162-linux-x64.tar.gz所在的文件夹
sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm

上面将JDK文件解压之后,进入/usr/lib/jvm目录下会有个jdk1.8.0_162文件
下面开始设置环境变量

sudo vim ~/.bashrc

在打开的文件首部添加下面内容

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

保存退出vim编辑器,执行下面命令让.bashrc文件的配置生效:

source ~/.bashrc

接下来使用下面命令查看是否安装成功:

java -version

如果显示java的版本信息,则表示安装成功:
在这里插入图片描述

5 安装Hadoop3.1.3

hadoop-3.1.3.tar.gz文件在文首已经给出,将其下载并放到相应的位置上,使用下面命令安装:

sudo tar -zxf ./hadoop-3.1.3.tar.gz -C /usr/local	# 解压到/usr/local中
sudo mv ./hadoop-3.1.3/ ./hadoop	# 将文件名改为hadoop
sudo chown -R rmc0924 ./hadoop	# 修改权限,当前是什么用户登录,就给他赋予用户的权限

解压后使用下面命令看是否安装成功,安装成功会显示Hadoop的版本信息。

cd /usr/local/hadoop
./bin/hadoop verison

在这里插入图片描述

6 克隆虚拟机

经过上面步骤,名称为hadoopMaster的Ubuntu已经配置完成,现在退出该虚拟机。将该虚拟机克隆出另外两台虚拟机,分别命名为hadoopSlave0和hadoopSlave1。
在这里插入图片描述
在后面的提示框中依次选择“虚拟机中的当前状态”、“创建完整克隆”、对克隆的虚拟机命名、选择位置,等待克隆完成。最后的虚拟机如下所示:
在这里插入图片描述
将hadoopSlave0和hadoopSlave1两台虚拟机按照2.1和2.2中步骤,修改主机名以及各自的静态IP,备用。最后我们可以把最初的那张表补全:

主机名 IP 用户 HDFS YARN
hadoopMaster 192.168.131.151 rmc0924 NameNode、DataNode NodeManager、ResourceManager
hadoopSlave0 192.168.131.152 rmc0924 DataNode、SecondaryNameNode NodeManager
hadoopSlave1 192.168.131.153 rmc0924 DataNode NodeManager

7 安装SecureCRT

由于使用一台电脑来搭建集群,电脑的内存就8G,带不动三台带有图形化界面的虚拟机同时运行,所以使用SecureCRT进行远程连接。SecureCRT安装教程在这位大佬的博客中有详细的教程,大家伙自己过去看就好了,我就不再赘述。

8 集群搭建

好了,前面说了那么多都是铺垫,现在正式搭建Hadoop集群。首先我们还是需要打开VMware中的三台虚拟机,但是打开之前,我们要把它们的内存进行修改,由原先的4G改为1.5G就行了。硬件原因,不在这三台的图形化界面上进行操作,而是使用SecureCRT远程连接,只在终端上进行操作。将三台虚拟机的内存大小改为1.5G后,就可以将三台机子打开。仅仅打开就行,登录界面出现就够了,不需要登录进去。
在这里插入图片描述
这样开了三台,内存还都是1.5G的,我的内存就干到了85%,所以不用在图形化界面上进行操作。使用SecureCRT就可以直接登录三台机子。
在这里插入图片描述
三台机子之间互相ping,看是否能ping通。
在这里插入图片描述

  1. SSH无密码登录节点

必须要让hadoopMaster节点可以SSH无密码登录到各个hadoopSlave节点上。首先生成hadoopMaster节点公钥,如果之前已经生成,必须删除,重新生成一次。在hadoopMaster上进行下面操作:

cd ~/.ssh
rm ./id_rsa*	# 删除之前生成的公钥
ssh-keygen -t rsa	# 遇到信息,一直回车就行

再让hadoopMaster节点能够无密码SSH登录本机,在hadoopMaster节点上执行下面命令:

cat ./id_rsa.pub >> ./authorized_keys

使用下面命令进行测试:

ssh hadoopMaster

接下来将hadoopMaster上的公钥传给各个hadoopSlave节点:

scp ~/.ssh/id_rsa.pub hadoopSlave0:/home/rmc0924

其中scp是secure copy的简写,在Linux中用于远程拷贝。执行scp时会要求输入hadoopSlave1用户的密码,输入完成后会显示传输完毕:
在这里插入图片描述
接着在hadoopSlave0节点上,将接收到的公钥加入授权:

mkdir ~/.ssh	# 如果不存在该文件夹,先创建
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub	# 加完就删除

在hadoopSlave1节点中也执行上的命令。执行完了之后,在hadoopMaster节点上就可以无密码登录代各个hadoopSlave节点,在hadoopMaster节点上执行下面命令:

ssh hadoopSlave0

在这里插入图片描述
输入exit即可退出。

  1. 配置集群环境

配置集群模式时,需要修改“/usr/local/hadoop/etc/hadoop”目录下的配置文件,包括workers、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml。

A. 修改workers文件

vim workers

该文件内容可以指定某几个节点作为数据节点,默认为localhost,我们将其删除并修改为hadoopSlave0和hadoopSlave1.当然也可以将hadoopMaster加进去,让hadoopMaster节点既做名称节点,也做数据节点,本文将hadoopMaster一起加进去作为数据节点。

hadoopMaster 
hadoopSlave0 
hadoopSlave1

B.修改core-site.xml文件

vim core-site.xml

fs.defaultFS:指定namenode的hdfs协议的文件系统通信地址,可以指定一个主机+端口
hadoop.tmp.dir:hadoop集群在工作时存储的一些临时文件存放的目录

	<configuration>
	        <property>
	                <name>fs.defaultFS</name>
	                <value>hdfs://hadoopMaster:9000</value>
	        </property>
	        <property>
	                <name>hadoop.tmp.dir</name>
	                <value>file:/usr/local/hadoop/tmp</value>
	        </property>
	</configuration>

C.修改hdfs-site.xml文件

vim hdfs-site.xml

dfs.namenode.name.dir:namenode数据的存放位置,元数据存放位置
dfs.datanode.data.dir:datanode数据的存放位置,block块存放的位置
dfs.repliction:hdfs的副本数设置,默认为3
dfs.secondary.http.address:secondarynamenode运行节点的信息,应该和namenode存放在不同节点

	<configuration>
	        <property>
	                <name>dfs.namenode.secondary.http-address</name>
	                <value>hadoopSlave0:50090</value>
	        </property>
	        <property>
	                <name>dfs.replication</name>
	                <value>3</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>

D.修改mapred-site.xml文件

vim mapred-site.xml

mapreduce.framework.name:指定mapreduce框架为yarn方式
mapreduce.jobhistory.address:指定历史服务器的地址和端口
mapreduce.jobhistory.webapp.address:查看历史服务器已经运行完的Mapreduce作业记录的web地址,需要启动该服务才行

	<configuration>
	        <property>
	                <name>mapreduce.framework.name</name>
	                <value>yarn</value>
	        </property>
	        <property>
	                <name>mapreduce.jobhistory.address</name>
	                <value>hadoopMaster:10020</value>
	        </property>
	        <property>
	                <name>mapreduce.jobhistory.webapp.address</name>
	                <value>hadoopMaster:19888</value>
	        </property>
	        <property>
	                <name>yarn.app.mapreduce.am.env</name>
	                <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
	        </property>
	        <property>
	                <name>mapreduce.map.env</name>
	                <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
	        </property>
	        <property>
	                <name>mapreduce.reduce.env</name>
	                <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
	        </property> 
	</configuration>

E.修改yarn-site.xml文件

vim yarn-site.xml
	<configuration>
	        <property>
	                <name>yarn.resourcemanager.hostname</name>
	                <value>hadoopMaster</value>
	        </property>
	        <property>
	                <name>yarn.nodemanager.aux-services</name>
	                <value>mapreduce_shuffle</value>
	        </property>
	</configuration>
  1. 分发文件

修改完上面五个文件后,将hadoopMaster节点上的hadoop文件复制到各个结点上。在hadoopMaster节点上执行下面命令:

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 hadoopSlave0:/home/hadoop

在这里插入图片描述
在其他hadoopSlave节点将接收的压缩文件解压出来,并授予权限,命令如下:

sudo rm -r /usr/local/hadoop    # 删掉旧的(如果存在)
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R rmc0924 /usr/local/hadoop
  1. Hadoop初始化

HDFS初始化只能在主节点上进行

cd /usr/local/hadoop
./bin/hdfs namenode -format

在这里插入图片描述
在初始化过程中,只要看到上面红框里面的信息,有个successfully formatted说明初始化成功。

  1. Hadoop集群启动

在hadoopMaster节点上执行下面命令:

cd /usr/local/hadoop
./sbin/start-dfs.sh
./sbin/start-yarn.sh
./sbin/mr-jobhistory-daemon.sh start historyserver

通过jps可以查看各个节点所启动的进程,如果按照本文的设置,正确启动的话,在hadoopMaster节点上会看到以下进程:
hadoopMaster节点进程
hadoopSlave0节点的进程:
hadoopSlave0节点进程
hadoopSlave1节点的进程:
在这里插入图片描述
另外还可以在hadoopMaster节点上使用下面命令查看数据节点是否正常启动。本文中使用三个节点作为数据节点,所以会有以下的信息:

在这里插入图片描述
在这里插入图片描述
当然我们也可以在浏览器中查看:
HDFS:http://192.168.131.151:9870/
YARN:http://192.168.131.151:8088/cluster

HDFS界面

在这里插入图片描述
点击DataNodes可以查看三个节点:
在这里插入图片描述
YARN界面

在这里插入图片描述
点击左侧导航栏Nodes可以查看结点
在这里插入图片描述
至此,Hadoop集群搭建完成,撒花!!!!!

9 执行分布式实例

在HDFS上创建一个文件夹/test/input

cd /usr/local/hadoop
./bin/hdfs dfs -mkdir -p /test/input

查看创建的文件夹

./bin/hdfs dfs -ls /

在这里插入图片描述

创建一个word.txt测试文件

vim word.txt

输入以下文本(我从《傲慢与偏见》里面抽出来两段话)

	Be not alarmed, madam, on receiving this letter, by the apprehension of its containing any repetition of those
sentiments or renewal of those offers which were last night so disgusting to you. I write without any intention of
paining you, or humbling myself, by dwelling on wishes which, for the happiness of both, cannot be too soon
forgotten; and the effort which the formation and the perusal of this letter must occasion, should have been spared,
had not my character required it to be written and read. You must, therefore, pardon the freedom with which I
demand your attention; your feelings, I know, will bestow it unwillingly, but I demand it of your justice.
	My objections to the marriage were not merely those which I last night acknowledged to have the utmost required
force of passion to put aside, in my own case; the want of connection could not be so great an evil to my friend as to
me. But there were other causes of repugnance; causes which, though still existing, and existing to an equal degree
in both instances, I had myself endeavored to forget, because they were not immediately before me. These causes
must be stated, though briefly. The situation of your mother's family, though objectionable, was nothing in
comparison to that total want of propriety so frequently, so almost uniformly betrayed by herself, by your three
younger sisters, and occasionally even by your father. Pardon me. It pains me to offend you. But amidst your
concern for the defects of your nearest relations, and your displeasure at this representation of them, let it give you
consolation to consider that, to have conducted yourselves so as to avoid any share of the like censure, is praise no
less generally bestowed on you and your eldersister, than it is honorable to the sense and disposition of both. I will
only say farther that from what passed that evening, my opinion of all parties was confirmed, and every inducement
heightened which could have led me before, to preserve my friend from what I esteemed a most unhappy
connection. He left Netherfield for London, on the day following, as you, I am certain, remember, with the design of
soon returning.

将word.txt上传到HDFS的/test/input文件夹中

./bin/hdfs dfs -put ~/word.txt /test/input

运行一个mapreduce的例子程序:wordcount

./bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /test/input /test/output

执行成功后如下所示,输出相关信息:
在这里插入图片描述
在YARN Web界面也可以查看:
在这里插入图片描述
查看运行结果:

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

在这里插入图片描述
由于只是进行词频统计,我没有对测试数据进行其他处理,所以有些单词会带逗号,这些都是小事,重点是,Hadoop集群搭建起来了,还能跑,这就舒服了,嘻嘻嘻嘻嘻嘻。

10 关闭集群

接下来就是关闭集群,输入以下命令:

cd /usr/local/hadoop
./sbin/stop-yarn.sh
./sbin/stop-dfs.sh
./sbin/mr-jobhistory-daemon.sh stop historyserver
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43650672/article/details/116485851

智能推荐

行转列-程序员宅基地

文章浏览阅读63次。DECLARE @sql VARCHAR(8000)SET @sql='' --初始化变量@sqlSELECT @sql=@sql+','+课程 FROM tb GROUP BY 课程 --变量多值赋值SET @sql=stuff(@sql,1,1,'')--去掉首个','SET @sql='select * from tb pivot (max(分数) for 课程 in ('+@s...

Android 屏幕保持唤醒_andrion设备关闭屏幕后仍然可以触摸唤醒-程序员宅基地

文章浏览阅读398次。一、 相关概念1. 出于节电的需要,一般应用在用户一段时间无操作的情况下屏幕变暗,然后进后休眠状态2. 用户只能在”设置->声音和显示”中设置所有应用默认的屏幕亮度和进行待机的时间3. 电源管理的实现分内核应用两部分,通过下面介绍的接口,我们可以设置应用程序的电源管理,以控制与其休眠相关的状态(是否需要进入休眠,调整c_andrion设备关闭屏幕后仍然可以触摸唤醒

java中的字符,字符串,数字之间的转换_controller字符串转数字安全-程序员宅基地

文章浏览阅读2k次。java中的字符,字符串,数字之间的转换string 和int之间的转换string转换成int :Integer.valueOf(" “)int转换成string : String.valueOf(int i )或者Integer.toString(int i)或者i+” “//i为int类型其中三者的效率为:Integer.toString(int i) >String.v..._controller字符串转数字安全

Vue-router 结合 element-ui 制作动态导航栏 + 面包屑_elementui实现动态的纵向导航栏-程序员宅基地

文章浏览阅读4.3w次,点赞11次,收藏84次。效果图如下: 主要思路: 一开始我的想法是根据左侧导航栏的点击事件动态的改变上方的面包屑,但后来发现如果直接通过 URL 访问的话导航栏和面包屑都是处于初始状态的。因此我想到通过 route 的值同时改变导航栏和面包屑。首先,我们定义 route 文件,注意将 Router 的模式设为 history,否则跳转时 URL 上会带有 # 符号,导致获取到的 route 值不正确,代码如下..._elementui实现动态的纵向导航栏

OPENSTACK Train版本安装大集合_openstack train版本下载-程序员宅基地

文章浏览阅读3.8k次。OPENSTACK Train版本安装大集合1. 服务器安装centos7 操作系统2. 配置网络-ip地址及注意事项3 centos7开启ssh服务-事倍功半的效果4. Centos7使用wget修改为阿里云镜像源5. 开始按照官网安装train 版本5.1 官网地址5.2 安装过程几个注意事项1. 服务器安装centos7 操作系统服务器的基本配置要满足要求,如cpu 内存等,一般服务器都..._openstack train版本下载

linux中文件查找locate,whereis,find介绍_linux 查找 locate源码文件 where-程序员宅基地

文章浏览阅读284次。文件查找命令find按照名字查找文件find / -name 文件(目录)名按照时间查找文件-mtime n :n 为数字,意义为在 n 天前癿『一天内』被更改过内容的档案; -mtime +n :列出在 n 天前(不含 n 天本身)被更改过内容的档案档名;-mtime -n :列出在 n 天内(含n 天本身)被更改过内容的档案档名。例如find /ho_linux 查找 locate源码文件 where

随便推点

如何屏蔽CSDN-程序员宅基地

文章浏览阅读854次。如何过滤掉csdn相关文章_屏蔽csdn

计算机电子表格的优点,信息技术《电子表格的特点及应用》的说课稿-程序员宅基地

文章浏览阅读518次。信息技术《电子表格的特点及应用》的说课稿一、 说教材(一)、地位、作用和特点本课是海南出版社的海南省中小学信息技术七年级下册第二章第一节,内容是电子表格的特点及应用,是学生学习word软件和powerpoint软件办公软件的基础上,再继续学习的电子表格软件。教材是先从日常生活中的电子表格的应用举例,到介绍电子表格处理软件,再结合word文档处理软件与excel电子表格处理软进行对比,总结出电子表格..._表格的云南人民出版社七年级9册信息技术教材特点

SpringCloud之Config 分布式配置中心-程序员宅基地

文章浏览阅读314次。分布式系统面临的—配置问题微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。SpringCloud提供了ConfigServer来解决这个问题,我们每一个微服务自己带着一个application.yml,上百个配置文件的管理…/(ㄒoㄒ)/~~...

修改mysql用户密码的方法总结_mysql修改密码时0 row affected-程序员宅基地

文章浏览阅读475次。修改mysql密码是管理web服务器经常需要做的事情。MySQL管理员帐号默认是root用户,密码为空。mysqladmin命令修改root密码如果你从没设置过MySQL的密码,使用root用户来连接MySQL服务器不需要输入密码。第一次设置root密码可以使用以下命令:mysqladmin -u root password NEWPASSWORD如_mysql修改密码时0 row affected

Spring Tools的安装配置_sprinttools-程序员宅基地

文章浏览阅读257次。Spring Tools(sts)是基于eclipse的开发环境, 用于开发Spring应用程序。下载地址:spring tool suite官网:http://spring.io/tools/stsspring tool suite官网下载:http://spring.io/tools/sts/alleclipse官网下载:http://www.eclipse.org/downloads..._sprinttools

关于vim的复制粘贴_vim复制其他文件-程序员宅基地

文章浏览阅读1.2k次。今天被vim的复制粘贴弄得很烦,它不像windows那样,每次复制会把以前的内容覆盖。所以有时粘贴出来的东西并不是你想要的。在不同终端中,用vim打开的两个文件之间的复制粘贴1. 用同一个终端,直接使用这个命令:vim file1 file2这样就可以直接用y和p复制粘贴了。但是这样比较麻烦,需要在两个文件之间切换。2. 之所以不能直接用_vim复制其他文件

推荐文章

热门文章

相关标签