hadoop+spark集群搭建
文章目录
1、版本介绍
本次配置使用的版本是 VMware 16+hadoop 2.7.7+java 8u191+ubuntu 20.04.1+spark-3.0.1-bin-hadoop2.7+scala 2.12.12
master:ip地址 192.168.14.129(master、namenode)
slave1: ip地址 192.168.14.130(worker、datanode)
slave2: ip地址 192.168.14.131(worker、datanode)
参考链接:
http://dblab.xmu.edu.cn/blog/1177-2/
https://blog.csdn.net/qq_38038143/article/details/83050840
https://blog.csdn.net/u010171031/article/details/53484138
本文记录了尝试过程,**首先搭建的是hadoop的伪分布式,后面改成了集群。**如果一开始hadoop就想搭集群,则可参考链接1、3。如果你只想搭伪分布式,做到第四步就好啦~
2、安装java
放在目录/home/hadoop/java下
#解压jdk
sudo tar -zxvf jdk-8u191-linux-x64.tar.gz
#修改环境变量:
sudo vi ~/.bashsrc
在文件末尾追加一下内容:
#set oracle jdk environment
export JAVA_HOME=/home/hadoop/java/jdk1.8.0_191 ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
#使环境变量马上生效:
source ~/.bashrc
#查看Java版本,检查是否安装成功:
java -version
3、Hadoop配置
在目录/home/hadoop/hadoop下
3.1、解压文件
tar -zvxf hadoop-2.7.7.tar.gz
3.2、配置环境变量
#打开配置文件
vim ~/.bashrc
#追加内容
export HADOOP_HOME=/home/hadoop/hadoop/hadoop-2.7.7
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:
#使环境变量马上生效:
source ~/.bashrc
#查看hadoop版本,检查是否安装成功:
hadoop version
4.Hadoop伪分布
4.1 配置IP映射:
修改文件:sudo vim /etc/hosts
在文件中添加:(master 为主机名,根据自身linux设置)
127.0.0.1 master
重启网路:
service networking restart
4.2 免密登录:
安装ssh:
sudo apt-get install openssh-server
生成 ~/.ssh目录:
ssh master
# 输入密码登录后,执行exit退出
exit
执行命令,生成公钥、密钥:
ssh-keygen -t rsa #一直回车
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
再次执行登录命令:
ssh master
若不再使用命令即可登录,即免密登录成功。
4.3 修改Hadoop配置文件:
注:以下配置文件中的master是根据4.1 IP映射配置的127.0.0.1,将下列所有的master根据4.1中写的主机名修正。
4.3.1 core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hadoop/hadoop-2.7.7/tmp</value>
<description>注释</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
</configuration>
4.3.2 hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hadoop/hadoop-2.7.7/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hadoop/hadoop-2.7.7/dfs/data</value>
</property>
</configuration>
4.3.3 mapred-site.xml
由于配置文件只存在mapred-site.xml.template,所以先复制mapred-site.xml:
cp mapred-site.xml.template mapred-site.xml
在mapted-site.xml中添加:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobtracker.address</name>
<value>hadoop1:9001</value>
</property>
</configuration>
4.3.4 yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop1:8099</value>
</property>
</configuration>
4.4 启动Hadoop
4.4.1 创建目录:
cd /home/hadoop/hadoop/hadoop-2.7.7
mkdir -p dfs/{name,data} tmp
4.4.2 格式化
hdfs namenode -format
结果:
出现 0 则成功,1则失败。
注:若失败,检查上述配置是否错误,修正后,需要删除 dfs、tmp目录,然后新建dfs、tmp目录,再执行格式化命令。
4.4.3 启动HDFS
start-dfs.sh
浏览器可访问:localhost:50070
4.4.4 启动Yarn
start-yarn.sh
浏览器访问:master:8099/cluster。伪分布式搭建成功。
5、Hadoop集群
以第四步操作的虚拟机作为master
5.1 修改/etc/hosts文件,IP映射
配置如下:
127.0.0.1 localhost
192.168.14.129 master
192.168.14.130 slave1
192.168.14.131 slave2
5.2 修改配置文件
在hadoop安装目录下修改
5.2.1 修改etc/hadoop/slaves文件,添加
slave1
slave2
如图所示
5.2.2 修改hdfs-site.xml,内容如下
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hadoop/hadoop-2.7.7/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hadoop/hadoop-2.7.7/dfs/data</value>
</property>
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>false</value>
</property>
</configuration>
5.3 复制虚拟机
关闭master虚拟机,然后vmware->虚拟机->管理->克隆(克隆出两台独立的虚拟机slave1、slave2)
5.4配置slave节点
为了更好的区分主机,修改其显示的主机名,执行如下命令
sudo vim /etc/hostname
slave1的/etc/hostname改成如下配置:
slave1
slave2的/etc/hostname改成如下配置:
slave2
然后重启虚拟机,配置即生效。
5.5 配置ssh无密码登录本机和访问集群机器
三台主机电脑分别运行如下命令,测试能否连接到本地localhost
ssh localhost
在保证了三台主机电脑都能连接到本地localhost后,还需要让master主机免密码登录slave1和slave2主机。在master执行如下命令,将master的id_rsa.pub传送给两台slave主机
scp ~/.ssh/id_rsa.pub hadoop@slave1:/home/hadoop/
scp ~/.ssh/id_rsa.pub hadoop@slave2:/home/hadoop/
接着在slave01、slave02主机上将master的公钥加入各自的节点上,在slave01和slave02执行如下命令:
#将master公钥加入自己节点
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
#删除该文件
rm ~/id_rsa.pub
因为master主机和slave1、slave2主机的用户名一样,那么在master主机上直接执行如下测试命令,即可让master主机免密码登录slave1、slave2主机。
ssh slave1
登录成功如图:
5.6.启动集群
在master和slave1、slave2节点下执行步骤1、2(hadoop安装目录)
- 删除已有的 dfs tmp目录和logs日志。
rm -rf dfs tmp logs/*
2.新建 dfs tmp目录:
mkdir -p dfs/{name,data} tmp
格式化master节点(只需要格式化master,注:每次只能格式化一次,若还需第二次格式化则先删除,后创建dfs 和 tmp目录):
hdfs namenode -format
如果输出的status code为0说明格式化完成,若为1的话说明出现错误
然后启动集群
start-all.sh
可能需要等待一段时间,启动完成后会在可以通过jps命令查看
在master节点上会出现
DataNode
RecourceManager
Jps
NodeManager
NameNode
SecondaryNameNode
slave节点上会出现
DataNode
Jps
NodeManager
6 安装scala
6.1 下载
sclca的官方下载地址:http://www.scala-lang.org/download/
6.2 安装
直接把压缩文件解压缩到/home/hadoop目录下
sudo tar -xvf scala-2.12.12.tgz -C /hoom/hadoop
修改目录的名字为scala
sudo mv scala-2.12.12 scala
6.3 配置
然后我们需要在/etc/profile中添加SCALA_HOME属性
sudo vim /etc/profile
在最后添加
export SCALA_HOME=/home/hadoop/scala
export PATH=${SCALA_HOME}/bin:$PATH
重新载入配置source /etc/profile
后输入scala能进入scala控制台说明配置成功
7 安装spark
7.1 下载
官网下载地址:http://spark.apache.org/downloads.html
7.2 安装
直接把压缩文件解压缩到/home/hadoop目录下
sudo tar -xvf spark-3.0.1-bin-hadoop2.7.tar -C /hoom/hadoop
修改目录的名字为spark
sudo mv spark-3.0.1-bin-hadoop2.7 spark
修改权限
sudo chmod a+w -R spark
修改用户和用户组
sudo chown hadoop:hadoop -R hadoop
7.3 配置
首先在系统路径中添加安装路径,打开/etc/profile
sudo vim /etc/profile
在最下面添加
export SPARK_HOME=/home/hadoop/spark
export PATH=${SPARK_HOME}/bin:$PATH
通过source /etc/profile
更新系统配置
然后配置spark的集群环境
编辑/home/hadoop/spark/conf/spark-env.sh
vim /home/hadoop/spark/conf/spark-env.sh
添加上
export SCALA_HOME=/home/hadoop/scala
export JAVA_HOME=/home/hadoop/java/jdk1.8.0_191
export SPARK_MASTER_IP=192.168.14.129
export SPARK_WORKER_MEMORY=1g
export HADOOP_CONF_DIR=/home/hadoop/hadoop/hadoop-2.7.7/etc/hadoop
在/home/spark/spark/conf/slaves中添加节点的信息
slave1
slave2
8 slave安装scala和spark
将master节点的spark和scala目录打包发给slave1、slave2(最好放在和master上对应目录),然后在slave1、slave2下如步骤6、7中配置环境变量。
传文件如图:
slave机器中解压到当前目录就好,然后进行相应的环境变量配置。
9 启动hadoop&spark集群
要启动spark的集群需要先启动hadoop的集群,由于hadoop和spark的启动命令都是start-all.sh
所以如果直接使用start-all.sh会导致系统路径的冲突,所以启动的时候需要用绝对路径来启动(如果事先启动了可用stop-all.sh停止)
启动hadoop
/home/hadoop/hadoop/hadoop-2.7.7/sbin/start-all.sh
启动spark
/home/hadoop/spark/sbin/start-all.sh
如果启动成功,使用jps命令查看
master节点会出现
DataNode
RecourceManager
Jps
NodeManager
NameNode
SecondaryNameNode
Master
slave节点会出现
DataNode
Jps
NodeManager
Worker
9 集群测试
尝试在spark集群中跑个简单的测试程序,进入目录/home/hadoop/spark,输入以下命令:
./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://master:7077 /home/hadoop/spark/examples/jars/spark-examples_2.12-3.0.1.jar 100
打开集群管理页面查看应用运行情况,如下图所示:
master://8080
10 踩坑总结
10.1 步骤9中启动集群
描述:
原本想着在hadoop的安装目录和spark的安装目录下分别执行sbin/start-all.sh
可以区分出路径
但在spark下执行启动的是hadoop
结论:
启动spark需要绝对路径,hadoop不需要
10.2 slave1: ssh: connect to host slave1 port 22: No route to host
描述:
在一次挂起虚拟机在运行后,运行ssh slave1即报这个错。
在slave1的终端输入ifconfig显示inet127.0.0.1
解决:
重启机器就好了(hhh不明觉厉)
总算装完了!果然ddl是第一生产力