搭建hadoop3.1.2 三节点完全分布式环境。
版本区别
Hadoop官网目前提供3.x和2.x两个系列的稳定版本。两者主要有下面几点区别:
Hadoop 2.x | Hadoop 3.x |
---|---|
1. Java版本6是最低要求。 | 最低要求是Java版本8。因为大多数依赖库文件都来自java8。 |
2. HDFS支持复制以实现容错功能。 | HDFS支持擦除编码。(擦除编码是一种用于持久存储信息的技术,与复制相比,可节省大量空间) |
3.引入了YARN时间轴服务 | YARN时间轴服务v.2(提高了可伸缩性和可靠性) |
4.带有Bug的有限Shell脚本。 | 许多新的Unix shell API,以及旧的错误已修复。 |
5.由于YARN,地图缩小变得很快。 | 地图缩小变得更快,特别是在地图输出收集器和混洗作业上减少了30%。 |
6.引入了辅助名称节点作为备用节点。 | 支持2个以上的namenode |
7.默认端口在Linux端口范围内冲突。这导致端口保留失败。 | 端口范围已优化。 |
8. Hadoop不支持Microsoft文件系统。 | Hadoop现在支持与Microsoft Azure Data Lake集成,以替代Hadoop兼容文件系统 |
9.单个DataNode管理多个磁盘。内部的磁盘可能会导致DataNode内部的严重偏斜。 | 添加了新功能内部DataNode平衡,可通过hdfs磁盘平衡器CLI调用该功能。 |
10.主机需要设置“ JAVA和Hadoop的堆大小”任务。 | 配置守护程序堆大小的新方法。值得注意的是,现在可以根据主机的内存大小进行自动调整,并且不建议使用HADOOP_HEAPSIZE变量 |
安装步骤
安装过程总体分为下面几个部分:
(1)准备需要的主机
(2)安装JDK 和hadoop
(3)配置Hadoop。
(4)配置SSH无密码连接。
(5)格式化HDFS。
(6)启动Hadoop并验证安装。
-
(1)准备需要的主机
本教程搭建三节点hadoop集群,需要三台主机。可以是虚拟机或者云主机。虚拟机需要配置好静态IP,并设置好主机名。(可以采用默认主机名,这里为配置管理方便使用下面主机名)
IP 主机名称 作用 192.168.111.200 master namenode 192.168.111.201 slaver01 datanode1 192.168.111.202 slaver02 datanode2 #查看主机名命令 cat /etc/hosts #修改主机名命令 hostnamectl set-hostname master
配置Hosts如下:
192.168.111.200 master 192.168.111.201 slaver01 192.168.111.202 slaver02
准备好主机后,开始下一步。
-
(2)安装JDK和Hadoop (三台机器都操作一遍)
安装jdk,下载比较稳定的jdk1.8安装包后解压到/opt下
tar -zxf jdk-8u201-linux-x64.tar.gz -C /opt/ cd /opt/ mv jdk1.8.0_201 java
安装hadoop3.1.2,下载hadoop3.1.2安装包后解压:
tar -zxf hadoop-3.1.2.tar.gz -C /opt/
配置环境变量
vim /etc/profile
添加如下内容:
#java环境变量 export JAVA_HOME=/opt/java export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar #hadoop环境变量 export HADOOP_HOME=/opt/hadoop-3.1.2 export PATH=.:$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
使环境变量生效
source /etc/profile
测试jdk和hadoop:安装成功会输出相关版本信息
java -version hadoop version
-
(3)配置hadoop(只在master操作,后边通过复制配置文件到另两台)
- 修改hadoop的java环境变量
vi /opt/hadoop-3.1.2/etc/hadoop/hadoop-env.sh
-
core-site.xml
vim /opt/hadoop-3.1.2/etc/hadoop/core-site.xml
配置下面信息:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/root/zx/bigdata</value> </property> <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property> </configuration>
-
hdfs-site.xml
vim /opt/hadoop-3.1.2/etc/hadoop/hdfs-site.xml
配置如下:
<configuration> <property> <name>dfs.datanode.data.dir</name> <value>/opt/hadoop-3.1.2/dfs/data</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/opt/hadoop-3.2.1/dfs/name</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
-
mapred-site.xml
vim /opt/hadoop-3.1.2/etc/hadoop/mapred-site.xml
配置如下:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.map.memory.mb</name> <value>4096</value> </property> <property> <name>mapreduce.reduce.memory.mb</name> <value>8192</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value> </property> </configuration>
-
yarn-site.xml
vim /opt/hadoop-3.1.2/etc/hadoop/yarn-site.xml
配置如下:
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master:8088</value> </property> <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> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8035</value> </property> </configuration>
-
workers
vim /opt/hadoop-3.1.2/etc/hadoop/workers
配置worker
slaver01 192.168.111.201 slaver02 192.168.111.202
-
配置命令脚本的用户权限
cd /opt/hadoop-3.1.2/sbin
start-dfs.sh 和stop-dfs.sh添加如下:
HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
star-yarn.sh和stop-yarn.sh添加:
YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
-
复制配置文件到另外两个从节点
for node in slaver01 slaver02; do scp /opt/hadoop-3.1.2/etc/hadoop/* $node:/opt/hadoop-3.1.2/etc/hadoop/; scp /opt/hadoop-3.1.2/sbin/* $node:/opt/hadoop-3.1.2/sbin/; done
-
(4)配置SSH无密码连接。
三节点上分别执行:(如果都已经有生成过公钥,可跳过)
ssh-keygen -t rsa
master节点执行:
master to slaver01
ssh-copy-id -i ~/.ssh/id_rsa.pub root@slaver01 ssh slaver01 chmod 600 ~/.ssh/authorized_keys exit
master to slaver02
ssh-copy-id -i ~/.ssh/id_rsa.pub root@slaver02 ssh slaver02 chmod 600 ~/.ssh/authorized_keys exit
master to master
shh master cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys exit
slaver01节点执行:
slaver01 to master
ssh-copy-id -i ~/.ssh/id_rsa.pub root@master ssh master chmod 600 ~/.ssh/authorized_keys exit
slaver01 to slaver02
ssh-copy-id -i ~/.ssh/id_rsa.pub root@slaver02 ssh slaver02 chmod 600 ~/.ssh/authorized_keys exit
slaver01 to slaver01
shh slaver01 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys exit
slaver02节点执行:
slaver02 to master
ssh-copy-id -i ~/.ssh/id_rsa.pub root@master ssh master chmod 600 ~/.ssh/authorized_keys exit
slaver02 to slaver01
ssh-copy-id -i ~/.ssh/id_rsa.pub root@slaver01 ssh slaver01 chmod 600 ~/.ssh/authorized_keys exit
slaver02 to slaver02
shh slaver02 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys exit
-
(4)格式化HDFS
hdfs namenode -format
-
(5)启动Hadoop并验证安装。
start-all.sh
通过jps命令可以查看java进程:
root@master:~# jps 16836 ResourceManager 17383 Jps 16328 NameNode
访问HDFS管理界面:
http://192.168.111.200:9870
访问hadoop管理界面:
http://192.168.111.200:8088
问题总结
jps命令失效
jps名令是查看系统java检查的命令。需要配置jdk的环境变量到 /root/.bash_profile中
vim /root/.bash_profile
//增加jdk的环境变量,可以通过 which java查看路径
source /root/.bash_profile
几种配置文件的区别
在CentOs中:
/etc/profile
/etc/bashrc
~/.bashrc
~/.bash_profile
在Ubuntu,Debian中:
/etc/profile
/etc/bash.bashrc
~/.bashrc
~/.profile
1./etc/profile
用来设置系统环境参数,比如$PATH. 这里面的环境变量是对系统内所有用户生效的。
2./etc/bashrc
这个文件设置系统bash shell相关的东西,对系统内所有用户生效。只要用户运行bash命令,那么这里面的东西就在起作用。
3.~/.bash_profile
用来设置一些环境变量,功能和/etc/profile 类似,但是这个是针对用户来设定的,也就是说,你在/home/user1/.bash_profile 中设定了环境变量,那么这个环境变量只针对 user1 这个用户生效.
4.~/.bashrc
作用类似于/etc/bashrc, 只是针对用户自己而言,不对其他用户生效。
一些命令
防火墙
centos:
systemctl status firewalld
1、直接关闭防火墙
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
ubuantu查看:
ufw status
ufw disable
端口进程相关
查看某端口占用情况
netstat -anp |grep 8787
查看某进程名或者进程id的应用
ps axu|grep 进程名称 或者id
查看某个端口进程的命令:lsof -i:端口号