一、集群环境
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
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
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
评论