Hadoop环境搭建
虚拟机配置
创建虚拟机
将文件中,关于监听端口、监听地址前的 # 号去除
开启允许远程登录
开启使用用户名密码来作为连接验证
开启 sshd 服务,输入 sudo service sshd start
centos7操作SSH/SSHD服务
查看状态:
systemctl status sshd.service
启动服务:
systemctl start sshd.service
重启服务:
systemctl restart sshd.service
开机自启:
systemctl enable sshd.service
生成密钥
ssh-keygen -t rsa
配置虚拟机网络
vi /etc/sysconfig/network-scripts/ifcfg-ens33
ONBOOT="yes"
PEERDNS="no"
查看防火墙状态
systemctl status firewalld
关闭防火墙
systemctl stop firewalld
# 永久关闭防火墙
systemctl disable firewalld
配置环境变量
vim /etc/profile
配置JAVA_HOME
##JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_271
export PATH=$PATH:$JAVA_HOME/bin
配置HADOOP_HOME
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export $PATH:$HADOOP_HOME/bin
export $PATH:$HADOOP_HOME/sbin
激活环境变量
source /etc/profile
伪分布式搭建
启动HDFS
配置
etc/hadoop/core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
hadoop-env.sh
# 修改JAVA_HOME路径
export JAVA_HOME=/opt/module/jdk1.8.0_271
hdfs-site.xml(选择性配置)
<!-- 指定HDFS副本的数量(每台服务器只备份一份数据) -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
启动集群
格式化NameNode
注:
-
第一次启动时格式化,之后不要总格式化
-
后面在格式化的时候要先关掉NameNode和DataNdoe的进程,然后删掉data和logs的数据,再进行格式化
bin/hdfs namenode -format
启动NameNode
sbin/hadoop-daemon.sh start namenode
启动DataNode
sbin/hadoop-daemon.sh startdatanode
访问HDFS
hadoop101:50070
hdfs下相关命令
# 创建文件夹
bin/hdfs dfs -mkdir -p /user/atguigu/input
# 上传文件(-input 本地路径 上传路径)
bin/hdfs dfs -put wcinput/wc.input /user/atguigu/input
启动Yarn
配置
yarn-env.sh
# 修改JAVA_HOME路径
export JAVA_HOME=/opt/module/jdk1.8.0_271
yarn-site.xml
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop101</value>
</property>
mapred-env.sh
# 修改JAVA_HOME路径
export JAVA_HOME=/opt/module/jdk1.8.0_271
mapred-site.xml(将模板文件mapred-site.xml.template重命名)
mv mapred-site.xml.template mapred-site.xml
<!-- 指定MR运行在YARN上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
启动集群
启动前要保证NameNode和DataNode处于启动状态
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
查看MapReduce
hadoop101:8088
配置历史服务器
mapred-site.xml
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop101:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop101:19888</value>
</property>
启动历史服务器
sbin/mr-jobhistory-daemon.sh start historyserver
访问
hadoop101:19888
配置日志的聚集
概念:应用运行完成后,将程序运行日志信息上传到HDFS系统上,方便查看程序运行情况,方便调试
注:开启日志聚集功能,需要重启NodeManager、ResourceManager、HistoryManager
配置
yarn-site.xml
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
完全分布式搭建
虚拟机准备
克隆三台虚拟机
编写集群分发脚本
xsync
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=103; host<105; host++)); do
echo ------------------- hadoop$host --------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
集群配置
部署规划
注:HDFS的NameNode、SecondaryNameNode和YARN的ResourceManager由于消耗内存大尽量不部署在同一节点下
hadoop102 | hadoop103 | hadoop104 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
配置集群
核心配置文件
core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
HDFS配置文件
hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>
YARN配置文件
yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
yarn-site.xml
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
MapReduce配置文件
mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
mapred-site.xml
<!-- 指定MR运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
在集群上分发配置好的Hadoop配置文件
xsync /opt/module/hadoop-2.7.2/
配置ssh无密登录
生成公钥和私钥
ssh-keygen -t rsa
将公钥拷贝到要免密登录的目标机器上
ssh-copy-id hadoop102
.ssh文件夹下(~/.ssh)的文件功能解释
known_hosts | 记录ssh访问过计算机的公钥(public key) |
---|---|
id_rsa | 生成的私钥 |
id_rsa.pub | 生成的公钥 |
authorized_keys | 存放授权过得无密登录服务器公钥 |
集群启动
配置slaves
vi /opt/module/hadoop-2.7.2/etc/hadoop/slaves
# 增加节点名称
hadoop102
hadoop103
hadoop104
# 同步所有节点配置文件
xsync slaves
第一次启动,删除data和logs,然后格式化
hadoop namenode -format
启动
注:NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN
sbin/start-dfs.sh
sbin/start-yarn.sh
集群时间同步
# 安装ntp
yum install -y ntp
# 配置 /etc/ntp.conf
编译源码
配置环境变量
##JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_271
export PATH=$PATH:$JAVA_HOME/bin
#MAVEN_HOME
export MAVEN_HOME=/opt/module/apache-maven-3.0.5
export PATH=$PATH:$MAVEN_HOME/bin
#ANT_HOME
export ANT_HOME=/opt/module/apache-ant-1.9.9
export PATH=$PATH:$ANT_HOME/bin
#LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/module/protobuf-2.5.0
export PATH=$PATH:$LD_LIBRARY_PATH
错误记录
原因:jdk的安装位数与系统安装位数不一致
解决办法:
1.查看系统位数
getconf LONG_BIT
2.重新安装对应对应位数的JDK
- 无法访问50070
原因:防火墙没有关闭
解决办法:
//查看防火墙状态
systemctl status firewalld
//关闭防火墙
systemctl stop firewalld