网站首页> 文章专栏> Hadoop生态圈安装
Hadoop生态圈安装
路人王 天津 2019-11-01 170 0 0

一、集群环境

1.1 三台Centos 7.6配置

1.网络 nat 模式,ip地址请自行配置好静态IP,还有VMWare8的网卡的网关微【192.168.52.1】。
如:

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:AA:69:4B
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.52.200
NETMASK=255.255.255.0
GATEWAY=192.168.52.1
DNS1=8.8.8.8

2.配置好每台机器的主机名

vim /etc/hostname
systemctl restart systemd-hostnamed

3.配置主机名域名映射

# vi /etc/hosts
192.168.52.200  hadoop1  
192.168.52.201  hadoop2  
192.168.52.202  hadoop3    

4.关闭所有机器的防火墙

systemctl stop firewalld
systemctl disable firewalld

5.配置好所有机器的两两互相免密登录SSH
每台机器执行一下一系列以下命令:

ssh-keygen 
ssh-copy-id  hadoop1
ssh-copy-id  hadoop2
ssh-copy-id  hadoop3

不配置也可以。

1.2 三台安装JDK1.8

1.tar -zxvf 1.8-... -C /usr/local/ 2.环境变量

# vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_101
export PATH=$PATH:$JAVA_HOME/bin
# source /etc/profile

二、Hadoop-HDFS安装

2.1 hadoop-2.8.5.tar.gz

1.解压命令
tar -zxvf hadoop-2.8.5.tar.gz -C /apps/

2.2 修改hadoop-env.sh

/root/apps/hadoop-2.8.5/etc/hadoop

# 修改 export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/local/java/jdk1.8.0_101

2.3 修改core-site.xml

默认的文件系统为 HDFS

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.52.200:9000</value>
</property>
</configuration>

2.4 hdfs-site.xml

自动创建,无需手动

<property>
<name>dfs.namenode.name.dir</name>
<value>/apps/hdpdata/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/apps/hdpdata/data</value>
</property>

2.5 集群分发

scp -r  hadoop-2.8.5/  hadoop2:$PWD
scp -r  hadoop-2.8.5/  hadoop3:$PWD

2.6 三台配置环境变量

# vi /etc/profile
export HADOOP_HOME=/root/apps/hadoop-2.8.5
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# source /etc/profile

2.7 hadoop1 NameNode格式化

在NameNode节点上去做格式化,其他节点不做 第一次启动之前去做 元数据信息

hadoop namenode -format

2.8 hadoop1启动NameNode

hadoop-daemon.sh  start  namenode
# hadoop-daemon.sh  stop  namenode

访问:http://192.168.52.200:9000

2.9 hadoop1,2,3都可以启动DataNode

hadoop-daemon.sh start datanode
# hadoop-daemon.sh stop datanode

2.10 目前集群问题

1.集群可以无限扩容DataNode.
2.不能缩容,因为有的数据在DataNode中,不启动的话会影响数据的完整性,或者直接启动失败。
解决办法:格式化NameNode,删除DataNode的工作目录数据。
3.远程登录问题? ssh hadoop3 "hadoop-daemon.sh start datanode"
如果集群太多呢? 解决办法: 配置免密登陆

2.11 配置一键启动Name,DataNode

修改hadoop1配置文件slaves

# vi  slaves
hadoop1
hadoop2
hadoop3

一键启动:

start-dfs.sh
stop-dfs.sh

但是SecondNameNode 默认在本机。

2.12 配置hadoop2为SecondaryNameNode

修改hadoop1,2,3的配置文件hdfs-site.xml

<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop2:50090</value>
</property>

三、HDFS命令

3.1 hadoop fs命令

1.【默认3副本】
2.【数据块大小128M】

# 查看hdfs目录
hadoop fs -ls /

# 上传到HDFS的根目录
hadoop fs -put xxxx  /

# 下载命令
hadoop fs -get /xxx  /root/

# 创建、移动、删除文件夹
hadoop fs -mkdir  /aaa
hadoop fs -mv /hdfs路径1  /hdfs路径2
hadoop fs -rm -r /aaa

# 查看文件内容
hadoop fs -cat /demo.txt
hadoop fs -tail /demo.txt 

3.2 java-windows开发

需要windows中解压hadoop相应的hadoop-2.8.5版本,配置好环境变量。
网络中下载winutils编译后的hadoop-2.8.5,将其覆盖过去。

在这里插入代码片

四、Yarn

4.1 功能机制

ResourceManager 任务调度
Node Manager 创建容器,运行程序。

hadoop1  ResourceManager  NodeManager
hadoop2 NodeManager
hadoop3 NodeManager

4.2 三台机器修改yarn-site.xml

<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

4.3 启动Yarn

# hadoop1
yarn-daemon.sh start resourcemanager 
# hadoop1,2,3
yarn-daemon.sh start nodemanager 

4.4 一键启动

# hadoop1 启动,会自动读取slaves启动nodemanager,但是resourcemanager只在命令发送的那个hadoop1启动
start-yarn.sh
# start-yarn.sh

访问:http://hadoop1:8088

4.5 【三台】修改yarn-site.xml配置NodeManager的内存

linux服务器有时候内存不够用,使用命令 free -m 查看,不到几个G,但是yarn集群默认工作的节点每个是8G【8192】,会分配不好,需要手动配置一下。 根据自己的机器,实际配好资源管理
比如:2G内存,2核【虚拟出来的,也可以多加】

# vi yarn-site.xml
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>

<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>2</value>
</property>

在这里插入图片描述

五、Hadoop-HA

5.1 NameNode单点故障

挂掉后,HDFS就不能工作了,现在需要改为高可用集群,NameNode需要增加一个节点。一个对外服务,一个不对外服务,发生故障时候才会对外服务。
有状态的节点进行数据同步。
Active
StandBy

5.2 zookeeper-HA集群借助实现选举

功能:监听节点信息 k-v ,通知信息

1.解压安装
tar -zxvf zookeeper-3.4.5 -C /root/apps/
2.进入conf目录
cp zoo_simple.cfg  zoo.cfg  
3.数据目录【提前创建好集群的三个目录1,2,3】,在每台机器的zkdata目录写入自己的ID号
dataDir=/root/zkdata
echo 1 > /root/zkdata/myid
# echo 2 > /root/zkdata/myid
# echo 3 > /root/zkdata/myid
4.集群配置
server.1=192.168.52.200:2888:3888  
server.2=192.168.52.201:2888:3888  
server.3=192.168.52.202:2888:3888 
5.集群分发
scp -r zookeeper/ hadoop2:$PWD  
scp -r zookeeper/ hadoop3:$PWD  
# echo 2 > /root/zkdata/myid
# echo 3 > /root/zkdata/myid
6.逐台启动 hadoop1,2,3
bin/zkStart.sh start
7.查看状态
bin/zkStart status

5.3 Hadoop-HA机制

在这里插入图片描述 在这里插入图片描述

5.4 Hadoop-HA集群规划【7台】

hadoop1:   datanode    namenode      zookeeper     nodemanager       zkfc
hadoop2:   datanode    namenode      zookeeper     nodemanager       zkfc  
hadoop3:   datanode                  zookeeper     resourcemanager 
hadoop4:   datanode                                nodemanager    
hadoop5:   datanode    journalnode                 nodemanager  
hadoop6:   datanode    journalnode                 nodemanager  
hadoop7:   datanode    journalnode                 nodemanager  

配置好主机名域名映射,SSH等等【略】

5.5 删除之前的hadoop1,2,3 hdpdata数据目录

rm -rf /root/hdpdata

5.6 【7台】修改core-site.xml

不能指定是哪个机器是 NameNode
指定zookeeper地址

<property>
<name>fs.defaultFS</name>
<value>hdfs://hap21:9000</value>
</property>

<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>

5.7 【7台】修改hdfs-site.xml

<configuration>
<!--指定hdfs的nameservice为bi, 需要和core-site. xm1中的保持一 致-->
<property>
<name>dfs.nameservices</name>
<value>hdp21</value>
</property>
<!-- hdp21下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.hdp21</name>
<value>nn1,nn2</value>
</property>

<!-- nn1的RPC通信地址-->
<property>
<name>dfs.namenode.rpc-address.hdp21.nn1</name>
<value>hadoop1:9000</value>
</property>
<!-- nn1的http通信地址-->
<property>
<name>dfs.namenode.http-address.hdp21.nn1</name>
<value>hadoop1:50070</value>
</property>

<!-- nn2的RPC通信地址-->
<property>
<name>dfs.namenode.rpc-address.hdp21.nn2</name>
<value>hadoop2:9000</value>
</property>
<!-- nn2的http通信地址-->
<property>
<name>dfs.namenode.http-address.hdp21.nn2</name>
<value>hadoop2:50070</value>
</property>

<!--指定NameNode的edits元数据在机器本地磁盘的存放位置-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/hdpdata/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/root/hdpdata/data</value>
</property>

<!--指定NameNode的共享edits元数据在JournalNode.上的存放位置- - - >
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>gjournal://hadoop5:8485;hadoop6:8485;hadoop7:8485/hdp21</value>
</property>
<!--指定JournalNode在本地磁盘存放数据的位置-->
<property>
<name>dfs.journalnode.edits.dir</name>
<va1ue>/root/hdpdata/journaldata</value>
</property>
<!--开启NameNode失败自动切换-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--配置失败自动切换实现方式-->
<property>
<name>dfs.client.failover.proxy.provider.hdp21</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!--使用sshfence隔离机制时需要ssh免登陆-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!--配置sshfence隔离机制超时时间-->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>

5.8 修改mared-site.xml

设置在那台机器上提交任务,可以不修改,自行提交就好了。

5.9 修改yarn-site.xml

<configuration>
<!--开启RM高可用-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id干>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!--指定RM的名字- . - >
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!--分别指定RM的地址-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop3</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop4</value>
</property>
<!--指定zk集群地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

5.10 hdfs yarn两个集群的slaves

5.10.1 hadoop1 的slaves【启动hdfs集群各节点】

vi slaves
hadoop1
...
hadoop7
hadoop1 SSH 免密到1234567

5.10.3 hadoop3 的slaves【启动yarn集群各节点】

vi slaves
hadoop1
...
hadoop7
hadoop3 SSH 免密到1234567

5.11 Hadoop-HA启动步骤!!!!

5.11.1 启动zookeeper集群【hadoop1~3】

bin/zkServer.sh start 

5.11.2 journalnode集群【hadoop5~7】

hadoop-daemon.sh start journalnode

5.11.3 初次才会格式化NameNode【hadoop1】

hadoop namenode -format

格式化后生成的目录 /root/hadpdata
一定要拷贝到hadoop2中去!!!!!!!!!!! 元数据目录要一模一样。

5.11.4 初次才会格式化zkfc【hadoop1】

hadoop zkfc -formatZK

5.11.5 启动hdfs集群【hadoop1】

start-dfs.sh

5.11.6 启动yarn集群【hadoop3】

start-yarn.sh

但是只有一台resourcemanager,可以手动在启动一台resourcemanager

yarn-daemon.sh start resourcemanager

评论

评论  分享  打赏