- Hadoop集群的搭建(虚拟机版)
- Hadoop集群的搭建(公网服务器版)
- Hadoop集群的使用
- HadoopIO
准备工作
博主安装环境:云服务器CentOS7、hadoop2.10、jdk8
配置ssh免密登陆
免密登陆:
通过ssh命令登陆远程主机时,不需要手动输入密码
但是在登陆过程中需要密码,即在登陆过程中自动获取密码
ssh远程登录工具可以生产两种密钥,公钥用于加密,私钥用于解密
配置ssh免密登陆的过程:
假设你只有一台主机
- 在主机上执行ssh-keygen命令,生产公钥和私钥
- 在主机上,将公钥添加(追加)到认证密钥文件中
cat .ssh/id_rsa.pub >> .ssh/authorized_keys
- 配置完毕可以用下列命令验证
ssh localhost
注意:
.ssh 目录的权限必须是700
.ssh/authorized_keys 文件权限必须是600
否则公钥认证不会生效。
配置主机名和IP的映射
该步骤可以跳过
配置时请注意内网、外网
执行命令sudo vi /etc/hosts
添加内容
内网IP地址 主机名
最好在Windows中也进行配置
外网IP地址 主机名
C:\windows\System32\drivers\etc\hosts
创建目录
在每台主机上创建存放软件和软链接的目录
创建目录sudo mkdir -p /opt/softwares /opt/links
修改权限(一般不用修改)sudo chown -R root:root /opt/*
搭建集群
Hadoop集群分为:
- 单机模式:不需要启动任何服务
- 伪分布式:只有一个计算机节点,主节点和从节点的服务都在该节点上启动
- 全分布式:有多个计算机节点,主节点和从节点的服务启动在不同的计算机节点上
下面只讲伪分布式的搭建过程
全分布式博主也没有试过
安装JDK
解压JDK的安装包到/opt/softwares目录中tar zxvf jdk-8u261-linux-x64.tar.gz -C /opt/softwares
创建JDK安装路径的软链接到/opt/links目录中ln -sf /opt/softwares/jdk1.8.0_261 /opt/links/jdk
配置环境变量vi ~/.bashrc
加入以下内容
####_JAVA_CONF_####
export JAVA_HOME=/opt/links/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${PATH}:${JAVA_HOME}/bin:${JRE_HOME}/bin
执行命令使配置生效source ~/.bashrc
检测是否安装成功java -version
安装Hadoop
解压tar zxvf hadoop-2.10.0.tar.gz -C /opt/softwares/
创建软链接ln -sf /opt/softwares/hadoop-2.10.0 /opt/links/hadoop
配置环境变量vi ~/.bashrc
####_HADOOP_CONF_####
export HADOOP_HOME=/opt/links/hadoop
export HADOOP_USER_NAME=用户名
export PATH=${PATH}:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
执行命令使配置生效source ~/.bashrc
检测是否安装成功hadoop version
配置Hadoop
以下文件皆在/opt/links/hadoop/etc/hadoop目录下
配置文件中IP地址请一定要用内网IP
hadoop-env.sh
将第25行的JAVA_HOME的路径改为绝对路径
core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 用于配置HDFS集群的主节点的IP和端口 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://内网IP地址:9000</value>
</property>
</configuration>
hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- HDFS中数据块的备份个数 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- HDFS中数据块的大小(默认128M) -->
<property>
<name>dfs.blocksize</name>
<value>32M</value>
</property>
<!-- HDFS集群中主节点产生数据的存放位置 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///root/.bigdata/data/nn</value>
</property>
<!-- HDFS集群中从节点产生数据的存放位置 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///root/.bigdata/data/dn</value>
</property>
<!-- HDFS集群中【SecondaryNameNode】产生数据的存放位置 -->
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///root/.bigdata/data/snn</value>
</property>
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>file:///home/用户名/.bigdata/data/snn</value>
</property>
<!--Hadoop Web UI界面 -->
<property>
<name>dfs.http.address</name>
<value>内网IP地址:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>内网IP地址:50090</value>
</property>
</configuration>
mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 配置MR程序的运行平台 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 配置访问MR程序运行的历史记录的IP和端口 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>内网IP地址:10020</value>
</property>
<!-- 配置通过浏览器访问MR程序运行的历史记录的IP和端口 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>内网IP地址:19888</value>
</property>
<!-- 从配置层面优化MR程序 -->
<property>
<name>mapreduce.job.ubertask.enable</name>
<value>true</value>
</property>
</configuration>
yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 配置YARM集群主节点的IP地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>内网IP地址</value>
</property>
<!-- 配置MR程序中的数据混洗【Shuffle】方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!-- 配置YARM集群中从节点产生的数据的存放位置 -->
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>file:///root/.bigdata/data/nm</value>
</property>
</configuration>
格式化HDFS集群
HDFS集群的格式化【一般情况下只做一次,并且只在主节点上做】:
命令:hdfs namenode -format
说明:
此操作只能执行一次
有些时候由于集群性能等问题,可能会导致HDFS集群的数据出现错乱,此时需要重新格式化集群
在重新格式化集群之前,要删除【在删除之前需要停止整个集群】集群中每个主机上的“/root/.bigdata/data/*”目录
执行以下命令即可:rm -r /root/.bigdata/data/*
# 该操作在所有的节点上做hdfs namenode -format
# 该操作只在主节点上做
启动/停止集群
查看节点是否启动成功的命令:jps
HDFS集群
- 主节点【NameNode】:
hadoop-daemon.sh start/stop namenode
- 从节点【DataNode】:
hadoop-daemon.sh start/stop datanode
- 第二名字节点【SecondaryNameNode】:
hadoop-daemons.sh start/stop secondarynamenode
- Web界面 外网IP地址:50070
YARN集群
- YARN集群依赖于HDFS集群,所以要先启动HDFS集群,再启动YARN集群
- 主节点【ResourceManager】:
yarn-daemon.sh start/stop resourcemanager
- 从节点【NodeManager】:
yarn-daemon.sh start/stop nodemanager
- MR程序作业运行历史记录服务器:
mr-jobhistory-daemon.sh start/stop historyserver
- YARN集群作业运行历史日志代理服务器:
yarn-daemon.sh start/stop proxyserver
- Web界面 外网IP地址:8088
一键启动/停止
start/stop-all.sh
:可用但已经过时- HDFS集群:
start/stop-dfs.sh
- YARN集群:
start/stop-yarn.sh
:不包含日志服务节点 - 要启动时包含WebAppProxyServer
需要修改start-yarn.sh,将35行的注释去掉
常见问题
集群启动超时
大概率是 配置文件里 使用的不是内网IP
把外网IP改成内网IP即可
如果使用的是主机名
就把/etc/hosts里的映射改为内网IP
一键启动需要输入密码
.ssh 目录的权限必须是700
.ssh/authorized_keys 文件权限必须是600
否则公钥认证不会生效。
无法访问50070端口
首先看无法访问的原因是 拒绝访问 还是 连接时间超时
如果是拒绝访问 那么就是端口没有放开的原因
检查云服务器安全组+防火墙(宝塔面板) 放开端口就行
如果是连接时间超时
检查Windows下IP映射是否正确,这里要外网IP
检查域名是否完成备案,IP地址是否输错
Hadoop Web UI中无法上传文件
按F12 或者 右击->检查 进入开发者模式
查看upload资源URL
因为上传资源时URL使用的是主机名
如果在Windows下没有配置映射 用的就是内网IP地址
在Windows hosts中做IP映射即可
SSH端口更改无法连接
在 hadoop-env.sh 中,添加
export HADOOP_SSH_OPTS="-p 端口"
Comments 2 条评论
博主 Father
这篇该更新了
博主 7e2寒假
@Father 更新什么?