这篇文件介绍如何搭建完全分布式的hadoop集群,一个主节点,两个数据节点。
目录速览
配置环境
1、系统环境
本次搭建节点服务器为本地的三个ubuntu server18.04,虚拟机配置截图如下:
三台机器的ip分别如下:
- 192.168.1.113
- 192.168.1.114
- 192.168.1.115
2、安装java环境
apt install openjdk-8-jdk-headless
配置JAVA环境变量,在当前用户根目录下的.profile文件最下面加入以下内容:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
注:当前用户的根目录其实也就是/home/your username目录下面,如果没有看到.profile文件,直接vim即可,实际上这个文件真实文件地址是etc目录下面,这里我们不深究
使用source命令让立即生效
source .profile
可以用一下命令测试是否配置成功
echo $JAVA_HOME
3、配置host
vim /etc/hosts
添加下面内容,根据个人服务器IP配置
# 注意每个机器都要配置三个
192.168.1.113 master
192.168.1.114 slave1
192.168.1.115 slave2
4、配置免密登录
生产秘钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
master免密登录到slave中
# 分别对应添加另外两个节点的就行
ssh-copy-id -i ~/.ssh/id_rsa.pub master
ssh-copy-id -i ~/.ssh/id_rsa.pub slave1
ssh-copy-id -i ~/.ssh/id_rsa.pub slave2
测试免密登陆
ssh master
ssh slave1
ssh slave2
Hadoop节点搭建
1、下载安装包,创建Hadoop目录
先配置master节点
#下载
wget http://apache.claz.org/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
#解压到 /usr/local 目录
sudo tar -xzvf hadoop-3.2.1.tar.gz -C /usr/local
#重命名文件夹
cd /usr/local/
sudo mv hadoop-3.2.1 hadoop
下载步骤最好是直接使用迅雷下载下来,然后用winscp传进去,这样比较快,wget速度真的很慢
2、配置Master节点的Hadoop环境变量
和配置JDK环境变量一样,编辑用户目录下的.profile
文件, 添加Hadoop环境变量:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
复制代码执行 source .profile 让立即生效
3、配置Master节点Hadoop配置文件
Hadoop 的各个组件均用XML文件进行配置, 配置文件都放在 /usr/local/hadoop/etc/hadoop
目录中:
- core-site.xml:配置通用属性,例如HDFS和MapReduce常用的I/O设置等
- hdfs-site.xml:Hadoop守护进程配置,包括namenode、辅助namenode和datanode等
- mapred-site.xml:MapReduce守护进程配置
- yarn-site.xml:资源调度相关配置
注意:vim复制的时候缩进比较麻烦,建议使用winscp的编辑器进行复制粘贴
a. 编辑core-site.xml文件,修改内容如下:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
复制代码参数说明:
- fs.defaultFS:默认文件系统,HDFS的客户端访问HDFS需要此参数
- hadoop.tmp.dir:指定Hadoop数据存储的临时目录,其它目录会基于此路径, 建议设置到一个足够空间的地方,而不是默认的/tmp下
如没有配置hadoop.tmp.dir参数,系统使用默认的临时目录:/tmp/hadoo-hadoop。而这个目录在每次重启后都会被删除,必须重新执行format才行,否则会出错。
b. 编辑hdfs-site.xml,修改内容如下:
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/hdfs/data</value>
</property>
</configuration>
复制代码参数说明:
- dfs.replication:数据块副本数
- dfs.name.dir:指定namenode节点的文件存储目录
- dfs.data.dir:指定datanode节点的文件存储目录
c. 编辑mapred-site.xml,修改内容如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
复制代码d. 编辑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.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME</value>
</property>
</configuration>
复制代码e. 编辑workers, 修改内容如下:
slave1
slave2
5、其他两个Slave节点的配置
将Master节点配置好的Hadoop打包,发送到其他两个节点:
#打包hadoop包
tar -cxf hadoop.tar.gz /usr/local/hadoop
这里要注意的是,spark自行替换为你们的用户名
scp ./hadoop.tar.gz spark@slave1:~
scp ./hadoop.tar.gz spark@slave2:~
复制代码在其他节点加压Hadoop包到/usr/local目录
sudo tar -xzvf hadoop.tar.gz -C /usr/local/
复制代码配置Slave1和Slaver2两个节点的Hadoop环境变量:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
使环境变量生效
source .profile
6、补充配置
修改三个节点的/usr/local/hadoop/etc/hadoop/hadoop-env.sh
,添加下面JAVA环境变量
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
对所有文件赋值777
# /usr/local
chmod -R 777 ./hadoop/
在/hadoop/sbin路径下:
将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
还有,start-yarn.sh,stop-yarn.sh顶部也需添加以下:
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
启动集群
1、格式化HDFS文件系统
进入Master节点的Hadoop目录,执行一下操作:
bin/hadoop namenode -format
2、启动集群
# /usr/local/hadoop/sbin
start-all.sh
可视化,替换主节点ip即可
http://192.168.1.113:9870/
http://192.168.1.113:8088/