Hadoop1&集群环境搭建

1:Hadoop介绍

2:环境搭建

在 Hadoop 具体开始前, 先来搭建一下环境

  1. 创建虚拟机
    1. 安装虚拟机 VMWare
    2. 创建虚拟机
    3. 安装 CentOS
    4. 组成集群
  2. 配置每台主机
    1. 关闭防火墙
    2. 关闭 SELinux
    3. 设置主机名
    4. 重启
    5. 设置时钟同步服务
    6. 配置用户权限
    7. 免密登录
  3. 安装辅助软件
    1. JDK
    2. Zookeeper
  4. 安装 Hadoop
    1. 下载并解压
    2. 修改配置
    3. 分发到每个节点
    4. 格式化 HDFS
    5. 启动集群

创建虚拟机

1:通过ISO镜像安装

2: 直接复制安装好的虚拟机

注意事项:windows系统确认所有的关于VmWare的服务都已经启动,

确认好VmWare生成的网关地址,另外确认VmNet8网卡已经配置好了IP地址。

  1. 网络模式
  2. 内存设置
  3. 规划集群, 创建多台虚拟机
1. 网络模式详解
2. 内存设置
  • 需要三台虚拟机, 并且需要同时运行, 所以总体上的占用为: 每 台 虚 拟 机 内 存 × 3 每台虚拟机内存 \times 3 每台虚拟机内存×3
  • 在分配的时候, 需要在总内存大小的基础上, 减去1-2G作为系统内存, 剩余的除以3, 作为每台虚拟机的内存

每 台 机 器 的 内 存 = ( 总 内 存 − 4 ) ÷ 3 每台机器的内存 = \left ( 总内存 - 4\right ) \div 3 每台机器的内存=(总内存−4)÷3

3. 集群规划
IP主机名环境配置安装
192.168.85.33master1关防火墙和selinux, host映射, 时钟同步JDK, NameNode, ResourceManager, Zookeeper
192.168.85.44slave1关防火墙和selinux, host映射, 时钟同步JDK, DataNode, NodeManager, Zeekeeper
192.168.85.55slave2关防火墙和selinux, host映射, 时钟同步JDK, DataNode, NodeManager, Zeekeeper
4:设置ip和Mac地址

更改mac地址:

vim /etc/udev/rules.d/70-persistent-net.rules

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LxAuw9mi-1607657047553)(E:/Java_Study/assets/1555843415254.png)]

更改IP地址:

vim /etc/sysconfig/network-scripts/ifcfg-eth0

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3bZINZxG-1607657047563)(E:/Java_Study)]

修改主机名(重启后永久生效)

vi /ect/sysconfig/network

HOSTNAME=master1

设置ip和域名映射

vim /etc/hosts

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PDnqEebK-1607657047570)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201209112617330.png)]

##5:环境配置

5.1:三台虚拟机关闭防火墙

三台机器执行以下命令(root用户来执行)

service iptables stop   #关闭防火墙
chkconfig iptables off  #禁止开机启动
5.2三台机器关闭selinux
  • SELinux的工作模式
    • enforcing 强制模式
    • permissive 宽容模式
    • disable 关闭
# 修改selinux的配置文件
vi /etc/selinux/config
5.3 三台机器机器免密码登录
  • 为什么要免密登录
    • Hadoop 节点众多, 所以一般在主节点启动从节点, 这个时候就需要程序自动在主节点登录到从节点中, 如果不能免密就每次都要输入密码, 非常麻烦
  • 免密 SSH 登录的原理
    1. 需要先在 B节点 配置 A节点 的公钥
      1. A节点 请求 B节点 要求登录
    2. B节点 使用 A节点 的公钥, 加密一段随机文本
    3. A节点 使用私钥解密, 并发回给 B节点
    4. B节点 验证文本是否正确

第一步:三台机器生成公钥与私钥

在三台机器执行以下命令,生成公钥与私钥

ssh-keygen -t rsa

执行该命令之后,按下三个回车即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GpzvkoCF-1607657047573)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201209112733898.png)]

第二步:拷贝公钥到同一台机器

三台机器将拷贝公钥到第一台机器

三台机器执行命令:

ssh-copy-id master1

第三步:复制第一台机器的认证到其他机器

将第一台机器的公钥拷贝到其他机器上

在第一台机器上面指向以下命令

scp /root/.ssh/authorized_keys slave1:/root/.ssh

scp /root/.ssh/authorized_keys slave2:/root/.ssh

5.4三台机器时钟同步

为什么需要时间同步

  • 因为很多分布式系统是有状态的, 比如说存储一个数据, A节点 记录的时间是 1, B节点 记录的时间是 2, 就会出问题
## 安装
yum install -y ntp

## 启动定时任务
crontab -e

随后在输入界面键入

*/1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com;

##6:装辅助软件

6.1 每台主机安装jdk

查看自带的openjdk

rpm -qa | grep java

卸载系统自带的openjdk

rpm -e java-1.6.0-openjdk-1.6.0.41-1.13.13.1.el6_8.x86_64 tzdata-java-2016j-1.el6.noarch java-1.7.0-openjdk-1.7.0.131-2.6.9.0.el6_8.x86_64 --nodeps

上传jdk并解压然后配置环境变量

所有软件的安装路径

mkdir -p /opt/bigdata

所有软件压缩包的存放路径

mkdir -p /opt/bigdata

上传jdk到/export/softwares路径下去,并解压

tar -zxvf jdk-8u141-linux-x64.tar.gz -C ../bigdata/

配置环境变量

vim /etc/profile

export JAVA_HOME=/opt/bigdata/jdk1.8.0_141
export PATH=:$JAVA_HOME/bin:$PATH

修改完成之后记得 source /etc/profile生效

7:Zookeeper

7.2 Zookeeper安装
服务器IP主机名myid的值
192.168.85.33master11
192.168.85.44slave12
192.168.85.55slave23

第一步:下载zookeeeper的压缩包,下载网址如下

http://archive.apache.org/dist/zookeeper/

我们在这个网址下载我们使用的zk版本为3.4.9

下载完成之后,上传到我们的linux的/opt/bigdata路径下准备进行安装

第二步:解压

解压zookeeper的压缩包到/opt/bigdata路径下去,然后准备进行安装

cd /opt/bigdata

tar -zxvf zookeeper-3.4.9.tar.gz -C ../bigdata/ 

第三步:修改配置文件

第一台机器修改配置文件

cd /opt/bigdatazookeeper-3.4.9/conf/

cp zoo_sample.cfg zoo.cfg

mkdir -p /opt/bigdata/zookeeper-3.4.9/zkdatas/

vim zoo.cfg

dataDir=/opt/bigdata/zookeeper-3.4.9/zkdatas
# 保留多少个快照
autopurge.snapRetainCount=3
# 日志多少小时清理一次
autopurge.purgeInterval=1
# 集群中服务器地址
server.1=master1:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XmlPOoxz-1607657047580)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20201209150853974.png)]

第四步:添加myid配置

在第一台机器的

/opt/bigdata/zookeeper-3.4.9/zkdatas /这个路径下创建一个文件,文件名为myid ,文件内容为1

echo 2 > /opt/bigdata/zookeeper-3.4.9/zkdatas/myid

第五步:安装包分发并修改myid的值

安装包分发到其他机器

第一台机器上面执行以下两个命令

scp -r /opt/bigdata/zookeeper-3.4.9/ slave1:/export/servers/

scp -r /opt/bigdata/zookeeper-3.4.9/ slave2:/export/servers/

第二台机器上修改myid的值为2

echo 2 > /opt/bigdata/zookeeper-3.4.9/zkdatas/myid

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xRsIq7Ui-1607657047581)(E:/Java_Study/assets/wps4-1555914009906.jpg)]

第三台机器上修改myid的值为3

echo 3 > /export/servers/zookeeper-3.4.9/zkdatas/myid

第六步:三台机器启动zookeeper服务

三台机器启动zookeeper服务

这个命令三台机器都要执行

/opt/bigdata/zookeeper-3.4.9/bin/zkServer.sh start`

查看启动状态

/opt/bigdata/zookeeper-3.4.9/bin/zkServer.sh status`

##8:Hadoop

8.2 Hadoop的安装

集群的规划:

服务器IP192.168.85.33192.168.85.44192.168.85.55
主机名master1slave1slave2
NameNode是否否
SecondaryNameNode是否否
dataNode是是是
ResourceManager是否否
NodeManager是是是
  1. 上传并解压
  2. 修改配置文件
  3. 分发安装包
  4. 格式化HDFS
  5. 启动集群
1. 上传并解压
  1. 上传压缩包到/export/software目录
  2. cd /opt/bigdata
  3. tar xzvf hadoop-3.1.1.tar.gz -C ../servers

#####2. 修改配置文件

配置文件的位置在 hadoop/etc/hadoop

######core-site.xml

<configuration>
    <property>
		<name>fs.defaultFS</name>
		<value>hdfs://master1:8020</value>
	</property>
	<!-- 临时文件存储目录 -->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/opt/bigdata/hadoop/hadoop-3.1.1/datas/tmp</value>
	</property>
    <!--  缓冲区大小,实际工作中根据服务器性能动态调整 -->
	<property>
		<name>io.file.buffer.size</name>
		<value>8192</value>
	</property>
    <!--  开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟 -->
	<property>
		<name>fs.trash.interval</name>
		<value>10080</value>
	</property>
</configuration>

######hadoop-env.sh

export JAVA_HOME=/opt/bigdata/java/jdk1.8.0_161

######hdfs-site.xml

<configuration>
	<property>
		<name>dfs.namenode.name.dir</name>
		<value>file:///opt/bigdata/hadoop-3.1.1/datas/namenode/namenodedatas</value>
	</property>
	<property>
		<name>dfs.blocksize</name>
		<value>134217728</value>
	</property>
	<property>
		<name>dfs.namenode.handler.count</name>
		<value>10</value>
	</property>
	<property>
		<name>dfs.datanode.data.dir</name>
		<value>file:///opt/bigdata/hadoop-3.1.1/datas/datanode/datanodeDatas</value>
	</property>
	<property>
		<name>dfs.namenode.http-address</name>
		<value>master:50070</value>
	</property>
	<property>
		<name>dfs.replication</name>
		<value>3</value>
	</property>
	<property>
		<name>dfs.permissions.enabled</name>
		<value>false</value>
	</property>
	<property>
		<name>dfs.namenode.checkpoint.edits.dir</name>
		<value>file:///opt/bigdata/hadoop-3.1.1/datas/dfs/nn/snn/edits</value>
	</property>
	<property>
		<name>dfs.namenode.secondary.http-address</name>
		<value>master1.hadoop.com:50090</value>
	</property>
	<property>
		<name>dfs.namenode.edits.dir</name>
		<value>file:///opt/bigdata/hadoop-3.1.1/datas/dfs/nn/edits</value>
	</property>
	<property>
		<name>dfs.namenode.checkpoint.dir</name>
		<value>file:///opt/bigdata/hadoop-3.1.1/datas/dfs/snn/name</value>
	</property>
</configuration>

######mapred-site.xml

<configuration>
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
	<property>
		<name>mapreduce.map.memory.mb</name>
		<value>1024</value>
	</property>
	<property>
		<name>mapreduce.map.java.opts</name>
		<value>-Xmx512M</value>
	</property>
	<property>
		<name>mapreduce.reduce.memory.mb</name>
		<value>1024</value>
	</property>
	<property>
		<name>mapreduce.reduce.java.opts</name>
		<value>-Xmx512M</value>
	</property>
	<property>
		<name>mapreduce.task.io.sort.mb</name>
		<value>256</value>
	</property>
	<property>
		<name>mapreduce.task.io.sort.factor</name>
		<value>100</value>
	</property>
	<property>
		<name>mapreduce.reduce.shuffle.parallelcopies</name>
		<value>25</value>
	</property>
	<property>
		<name>mapreduce.jobhistory.address</name>
		<value>master1.hadoop.com:10020</value>
	</property>
	<property>
		<name>mapreduce.jobhistory.webapp.address</name>
		<value>master1.hadoop.com:19888</value>
	</property>
	<property>
		<name>mapreduce.jobhistory.intermediate-done-dir</name>
		<value>/opt/bigdata/hadoop-3.1.1/datas/jobhsitory/intermediateDoneDatas</value>
	</property>
	<property>
		<name>mapreduce.jobhistory.done-dir</name>
		<value>/opt/bigdata/hadoop-3.1.1/datas/jobhsitory/DoneDatas</value>
	</property>
	<property>
	  <name>yarn.app.mapreduce.am.env</name>
	  <value>HADOOP_MAPRED_HOME=/opt/bigdata/hadoop-3.1.1</value>
	</property>
	<property>
	  <name>mapreduce.map.env</name>
	  <value>HADOOP_MAPRED_HOME=/opt/bigdata/hadoop-3.1.1/</value>
	</property>
	<property>
	  <name>mapreduce.reduce.env</name>
	  <value>HADOOP_MAPRED_HOME=/opt/bigdata/hadoop-3.1.1</value>
	</property>
</configuration>

######yarn-site.xml

<configuration>
	<property>
		<name>dfs.namenode.handler.count</name>
		<value>100</value>
	</property>
	<property>
		<name>yarn.log-aggregation-enable</name>
		<value>true</value>
	</property>
	<property>
		<name>yarn.resourcemanager.address</name>
		<value>master1:8032</value>
	</property>
	<property>
		<name>yarn.resourcemanager.scheduler.address</name>
		<value>master1:8030</value>
	</property>
	<property>
		<name>yarn.resourcemanager.resource-tracker.address</name>
		<value>master1:8031</value>
	</property>
	<property>
		<name>yarn.resourcemanager.admin.address</name>
		<value>master1:8033</value>
	</property>
	<property>
		<name>yarn.resourcemanager.webapp.address</name>
		<value>master1:8088</value>
	</property>
	<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>master1</value>
	</property>
	<property>
		<name>yarn.scheduler.minimum-allocation-mb</name>
		<value>1024</value>
	</property>
	<property>
		<name>yarn.scheduler.maximum-allocation-mb</name>
		<value>2048</value>
	</property>
	<property>
		<name>yarn.nodemanager.vmem-pmem-ratio</name>
		<value>2.1</value>
	</property>
	<!-- 设置不检查虚拟内存的值,不然内存不够会报错 -->
	<property>
		<name>yarn.nodemanager.vmem-check-enabled</name>
		<value>false</value>
	</property>
	<property>
		<name>yarn.nodemanager.resource.memory-mb</name>
		<value>1024</value>
	</property>
	<property>
		<name>yarn.nodemanager.resource.detect-hardware-capabilities</name>
		<value>true</value>
	</property>
	<property>
		<name>yarn.nodemanager.local-dirs</name>
		<value>file:///opt/bigdata/hadoop-3.1.1/datas/nodemanager/nodemanagerDatas</value>
	</property>
	<property>
		<name>yarn.nodemanager.log-dirs</name>
		<value>file:///opt/bigdata/hadoop-3.1.1/datas/nodemanager/nodemanagerLogs</value>
	</property>
	<property>
		<name>yarn.nodemanager.log.retain-seconds</name>
		<value>10800</value>
	</property>
	<property>
		<name>yarn.nodemanager.remote-app-log-dir</name>
		<value>/opt/bigdata/hadoop-3.1.1/datas/remoteAppLog/remoteAppLogs</value>
	</property>
	<property>
		<name>yarn.nodemanager.remote-app-log-dir-suffix</name>
		<value>logs</value>
	</property>
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
	<property>
		<name>yarn.log-aggregation.retain-seconds</name>
		<value>18144000</value>
	</property>
	<property>
		<name>yarn.log-aggregation.retain-check-interval-seconds</name>
		<value>86400</value>
	</property>
	<!-- yarn上面运行一个任务,最少需要1.5G内存,虚拟机没有这么大的内存就调小这个值,不然会报错 -->
	<property>
        <name>yarn.app.mapreduce.am.resource.mb</name>
        <value>1024</value>
	</property>
</configuration>

######worker

master1
slave1
slave2
3. 创建数据和临时文件夹
mkdir -p /opt/bigdata/hadoop-3.1.1/datas/tmp
mkdir -p /opt/bigdata/hadoop-3.1.1/datas/dfs/nn/snn/edits
mkdir -p /opt/bigdata/hadoop-3.1.1/datas/namenode/namenodedatas
mkdir -p /opt/bigdata/hadoop-3.1.1/datas/datanode/datanodeDatas
mkdir -p /opt/bigdata/hadoop-3.1.1/datas/dfs/nn/edits
mkdir -p /opt/bigdata/hadoop-3.1.1/datas/dfs/snn/name
mkdir -p /opt/bigdata/hadoop-3.1.1/datas/jobhsitory/intermediateDoneDatas
mkdir -p /opt/bigdata/hadoop-3.1.1/datas/jobhsitory/DoneDatas
mkdir -p /opt/bigdata/hadoop-3.1.1/datas/nodemanager/nodemanagerDatas
mkdir -p /opt/bigdata/hadoop-3.1.1/datas/nodemanager/nodemanagerLogs
mkdir -p /opt/bigdata/hadoop-3.1.1/datas/remoteAppLog/remoteAppLogs
4. 分发安装包到其它机器
cd /export/servers
scp -r hadoop-3.1.1/ slave1:$PWD
scp -r hadoop-3.1.1/ slave2:$PWD
/opt/bigdata/hadoop/hadoop-3.1.1
5. 在每个节点配置环境变量
vi /etc/profile
export HADOOP_HOME=/opt/bigdata/hadoop/hadoop-3.1.1
export PATH=:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
6. 格式化HDFS
  • 为什么要格式化HDFS
    • HDFS需要一个格式化的过程来创建存放元数据(image, editlog)的目录
bin/hdfs namenode -format
7. 启动集群
# 会登录进所有的worker启动相关进行, 也可以手动进行, 但是没必要
/opt/bigdata/hadoop-3.1.1/sbin/start-dfs.sh
/opt/bigdata/hadoop-3.1.1/sbin/start-yarn.sh
mapred --daemon start historyserver

此时便可以通过如下三个URL访问Hadoop了

  • HDFS: http://192.168.85.33:50070/dfshealth.html#tab-overview
  • Yarn: http://192.168.85.33:8088/cluster

在这里插入图片描述

在这里插入图片描述

报错:设置hadoop-env.sh

export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"
export YARN_RESOURCEMANAGER_USER="root"
export YARN_NODEMANAGER_USER="root"

更多推荐