Hadoop2.6.5集群搭建

搭建虚拟机

以下搭建所需环境和资源包为

  • VMware
  • CentOS 7
  • Hadoop2.6.5.tar.gz
  • JDK1.8+

使用虚拟机安装3个CentOS7的主机模拟服务器,分别为master、slave1、slave2

  • 主节点需要额外的内存资源开销,所以在生产环境中给master节点多分配内存资源
  • 从节点需要额外的磁盘资源,所以在生产环境给每个slave节点多分配磁盘空间

如果通过克隆虚拟机等设置的虚拟机需要配置ip和mac地址,使mac地址不同(可以通过删除当前网卡并添加新网卡来完成)

网卡名称

  • eth0 第一块网卡(网络接口)
  • 你的第一个网络接口也可能叫做下面的名字
    • eno1 板载网卡
    • ens32 PCI-E网卡
    • enp0s3 无法获取物理信息的PCI-E网卡
    • CentOS 7 使用了 一致性网络设备命名 ,以上规则都不匹配则使用eth0

一致性网络设备命名,在家用设备中可以区分自己用的是哪种网卡,在服务器中就比较麻烦,网卡名字不同就很难进行批量化操作,所以我们要对网卡名称统一改为eth0、eth1、eth2…

vim /etc/default/grub

# 在第六行添加biosdevname=0和net.ifnames=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet biosdevname=0 net.ifnames=0"
GRUB_DISABLE_RECOVERY="true"

# 执行此命令,使启动文件读取
grub2-mkconfig -o /boot/grub2/grub.cfg

# 重启
reboot

网卡命名规则受biosdevname和net.ifnames两个参数的影响

biosdevname net.ifnames 网卡名
默认 0 1 ens32
组合1 1 0 em1
组合2 0 0 eth0

若原网卡名为ifcfg-ens32,修改为ifcfg-eth0后需要在/etc/sysconfig/network-scripts/目录中新增ifcfg-eth0文件设置网络信息(可以复制原ifcfg-ens32文件修改文件名)

主从机器配置

修改主机名

# master
vim /etc/hostname
master

# slave1
vim /etc/hostname
slave1

# slave2
vim /etc/slave2
slave2

配置主机文件

# master、slave1、slave2
vim /etc/hosts
192.168.180.10 master
192.168.180.11 slave1
192.168.180.12 slave2

关闭防火墙和SELinux

# 临时关闭防火墙
systemctl stop firewalld.service
# 永久关闭防火墙
systemctl disable firewalld.service

# 临时关闭selinux
setenforce 0
# 永久关闭selinux
vim /etc/selinux/config
SELINUX=disabled

SSH互信配置

# master、slave1、slave2生成密钥
ssh-keygen -t rsa

# master生成公钥
cat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keys
# 修改权限
chmod 600 /root/.ssh/authorized_keys
# 将slave1和slave2的公钥复制到master节点
ssh slave1 cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
ssh slave2 cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

# 复制公钥到slave1和slave2
scp /root/.ssh/authorized_keys root@slave1:/root/.ssh/authorized_keys
scp /root/.ssh/authorized_keys root@slave2:/root/.ssh/authorized_keys

# 免密SSH测试,在master执行
ssh slave1 ip addr
ssh slave2 ip addr

安装Java

Hadoop集群安装需提前在Linux中安装java

注意,如果不是minimal(最小化)安装的,有可能出现openjdk已安装的情况,会导致到软件冲突,我们在这里先将openjdk进行卸载

卸载openjdk

# 查看是否有rpm包安装的jdk
rpm -qa | grep java

# 卸载该rpm包的jdk, 再次检查时已经不存在
rpm - e - -nodeps java-1.8.0-openjdk-1.8.0.131.b12-1.el7_6.x86_64

安装JDK

# 解压JDK包
cd /usr/local/src
tar zxvf jdk-8u221-linux-x64.tar.gz

# 配置环境变量,
vim ~/.bashrc
# 在配置最后加入以下内容
export JAVA_HOME=/usr/local/src/jdk1.8.0_221
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

# 复制环境变量到其他节点
scp ~/.bashrc root@slave1:~/
scp ~/.bashrc root@slave2:~/

# 复制JDK包到其他节点
scp -r /usr/local/src/jdk1.8.0_221 root@slave1:/usr/local/src/
scp -r /usr/local/src/jdk1.8.0_221 root@slave2:/usr/local/src/

# 重新加载环境变量
source ~/.bashrc

# 测试是否配置成功
java -version

安装Hadoop集群

解压缩并在Hadoop中配置java环境变量

# 解压Hadoop包
cd /usr/local/src
tar xvzf hadoop-2.6.5.tar.gz

# 修改配置文件,在第26行添加Java的环境变量, 将25行注释
cd hadoop-2.6.5/etc/hadoop/
vim hadoop-env.sh
export JAVA_HOME=/usr/local/src/jdk1.8.0_221

# 修改配置文件,在第24行添加Java的环境变量
vim yarn-env.sh
export JAVA_HOME=/usr/local/src/jdk1.8.0_221

# 修改配置文件,添加从节点主机名
vim slaves
slave1
slave2

添加RPC、DFS、MR、资源管理配置

# 添加RPC配置
vim core-site.xml
<configuration>
	<!-- HDFS的默认访问路径,也是NameNode的访问地址 -->
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://master:9000</value>
	</property>
  <!-- Hadoop数据文件的存放目录 -->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>file:/usr/local/src/hadoop-2.6.5/tmp/</value>
	</property>
</configuration>

# 添加DFS配置
vim hdfs-site.xml
<configuration>
	<!-- SecondaryNode主机及端口号 -->
	<property>
		<name>dfs.namenode.secondary.http-address</name>
		<value>master:9001</value>
	</property>
  <!-- NameNode节点数据在本地文件系统的存放位置 -->
	<property>
		<name>dfs.namenode.name.dir</name>
		<value>file:/usr/local/src/hadoop-2.6.5/dfs/name</value>
	</property>
  <!-- DataNode节点数据在本地文件系统的存放位置 -->
	<property>
		<name>dfs.datanode.data.dir</name>
		<value>file:/usr/local/src/hadoop-2.6.5/dfs/data</value>
	</property>
  <!-- 文件在HDFS系统中的副本数 -->
	<property>
		<name>dfs.replication</name>
		<value>2</value>
	</property>
</configuration>

# 添加MR配置
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<configuration>
	<!-- 指定任务执行框架为YARN -->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
  <!-- 指定map的memory -->
  <property>
  	<name>mapreduce.map.memory.mb</name>
    <value>1536</value>
  </property>
  <!-- 指定动 JVM 虚拟机时,传递给虚拟机的启动参数,表示Java程序可以使用的最大堆内存数 -->
  <property>
  	<name>mapreduce.map.java.opts</name>
    <value>-Xmx1024M</value>
  </property>
  <!-- 指定reduce的memory -->
  <property>
  	<name>mapreduce.reduce.memory.mb</name>
    <value>3072</value>
  </property>
  <!-- 指定动 JVM 虚拟机时,传递给虚拟机的启动参数,表示Java程序可以使用的最大堆内存数 -->
  <property>
  	<name>mapreduce.reduce.java.opts</name>
    <value>-Xmx2560M</value>
  </property>
</configuration>

# 添加资源管理配置
vim yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
	<!-- 日志聚集功能 -->
	<property>
		<name>yarn.log-aggregation-enable</name>
		<value>true</value>
	</property>
	<!-- 日志保留时间设置7天 -->
	<property>
		<name>yarn.log-aggregation.retain-seconds</name>
		<value>604800</value>
	</property>
  <!-- NodeManager上运行的附属服务,配置成mapreduce_shuffle,才可运行MapReduce程序 -->
	<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>
  <!-- ResourceManager对客户端暴露的地址。客户端通过该地址向RM提交应用程序,杀死应用程序等 -->
	<property>
		<name>yarn.resourcemanager.address</name>
		<value>master:8032</value>
	</property>
  <!-- ResourceManager对ApplicationMaster暴露的访问地址。ApplicationMaster通过该地址向RM申请资源、释放资源等 -->
	<property>
		<name>yarn.resourcemanager.scheduler.address</name>
		<value>master:8030</value>
	</property>
  <!-- ResourceManager对NodeManager暴露的地址.。NodeManager通过该地址向RM汇报心跳,领取任务等 -->
	<property>
		<name>yarn.resourcemanager.resource-tracker.address</name>
		<value>master:8035</value>
	</property>
  <!-- ResourceManager对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等 -->
	<property>
		<name>yarn.resourcemanager.admin.address</name>
		<value>master:8033</value>
	</property>
  <!-- ResourceManager对外Web UI地址。用户可通过该地址在浏览器中查看集群各类信息 -->
	<property>
		<name>yarn.resourcemanager.webapp.address</name>
		<value>master:8088</value>
	</property>
  <!-- 单个可申请的最小内存资源量(MB) -->
  <property>
		<name>yarn.scheduler.minimum-allocation-mb</name>
		<value>2048</value>
	</property>
  <!-- 是否开启物理内存检查 -->
	<property>
		<name>yarn.nodemanager.pmem-check-enabled</name>
		<value>false</value>
	</property>
  <!-- 是否开启虚拟内存检查 -->
	<property>
		<name>yarn.nodemanager.vmem-check-enabled</name>
		<value>false</value>
	</property>
</configuration>

配置环境变量并格式化Namenode

# 创建临时目录和文件目录
mkdir /usr/local/src/hadoop-2.6.5/tmp
mkdir -p /usr/local/src/hadoop-2.6.5/dfs/name
mkdir -p /usr/local/src/hadoop-2.6.5/dfs/data

# 配置环境变量,在配置最后加入
vim ~/.bashrc
export HADOOP_HOME=/usr/local/src/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

# 复制环境变量到从节点
scp -r ~/.bashrc root@slave1:~/
scp -r ~/.bashrc root@slave2:~/

# 复制Hadoop包到从节点
scp -r /usr/local/src/hadoop-2.6.5 root@slave1:/usr/local/src/
scp -r /usr/local/src/hadoop-2.6.5 root@slave2:/usr/local/src/

# 重新加载环境变量
source ~/.bashrc

# 格式化Namenode
hadoop namenode -format

# 提示下列内容即是成功完成格式化
common.Storage: Storage directory /usr/local/src/hadoop-2.6.5/dfs/name has been successfully formatted

启动集群并测试

# 启动集群
/usr/local/src/hadoop-2.6.5/sbin/start-all.sh

# 查看服务进程,master、slave1、slave2
jps
# master:ResourceManager-Namenode-SecondaryNameNode
# slave:NodeManager-DataNode
# 测试

# 网页控制台(需要修改本地hosts文件 添加主机记录)
Windows C:\Windows\System32\drivers\etc\hosts
Linux /etc/hosts
Mac /etc/hosts

192.168.180.10 master
192.168.180.11 slave1
192.168.180.12 slave2

# 浏览器访问
http://master:8088/cluster

你可能感兴趣的:(大数据,大数据,hadoop,linux,java,centos)