【三】hadoop分布式配置(HA高可用)
环境ubuntu16.04 这里有4台虚拟机ABCA的IP 192.168.2.103B的IP 192.168.2.104C的IP 192.168.2.106D的IP 192.168.2.107 节点配置情况如下 NNDNZKZKFCJN...
环境ubuntu16.04
这里有4台虚拟机ABC
A的IP 192.168.2.103
B的IP 192.168.2.104
C的IP 192.168.2.106
D的IP 192.168.2.107
节点配置情况如下
| NN | DN | ZK | ZKFC | JN | RM | NM |
Node1 | Y |
| Y | Y |
| Y |
|
Node2 | Y | Y | Y | Y | Y |
| Y |
Node3 |
| Y | Y |
| Y |
| Y |
Node4 |
| Y |
|
| Y |
| Y |
ZKFC必须和NN在同一个机器上。DM最好和DN在同一个机器上。
1.前期准备(每台机器)
2.修改ABCD虚拟机的hostname
vi /etc/hostname
A的hostname改为 node1
B的hostname改为 node2
C的hostname改为 node3
D的hostname改为 node4
3.修改虚拟机的Hosts
vi /etc/hosts
加入以下内容(四台加一样的)
192.168.2.103 node1
192.168.2.104 node2
192.168.2.106 node3
192.168.2.107 node4
4.查看每台机器是否能相互ping通
5. 创建用户和用户组(四台机器都一样的操作)
创建用户组 addgroup hadoop
创建用户 adduser -ingroup hadoop hadoop
6.给hadoop用户添加权限(四台机器都一样的操作)
vi /etc/sudoers
在root ALL=(ALL:ALL) ALL下面添加一行
hadoop ALL=(ALL:ALL) ALL
7.四台机器以hadoop用户登录
su hadoop
8.安装JAVA(四台机器都一样的操作)
安装步骤:Linux安装JAVA
9.配置SSH让各节点之间实现相互免密码登录
如果没有请看配置步骤:SSH免密码登录
10.hadoop安装(如无特别说明,四台机器都一样的操作)
创建路径
mkdir /app/hadoop
cd /app/hadoop
下载(直接在/app/hadoop里面下载)
wget http://mirror.bit.edu.cn/apache/hadoop/common/stable/hadoop-2.9.0.tar.gz
解压
tar -zxvf hadoop-2.9.0.tar.gz
创建文件夹
mkdir /app/hadoop/dfs
mkdir /app/hadoop/dfs/name
mkdir /app/hadoop/dfs/data
mkdir /app/hadoop/tmp
修改配置文件 hadoop-env.sh
vi /app/hadoop/hadoop-2.9.0/etc/hadoop/hadoop-env.sh
修改JAVA_HOME的值
export JAVA_HOME=/app/java/jdk1.8.0_101
修改配置文件slaves 配置datanode
vi /app/hadoop/hadoop-2.9.0/etc/hadoop/slaves
将内容改为
node2
node3
node4
修改配置文件core-site.xml
vi /app/hadoop/hadoop-2.9.0/etc/hadoop/core-site.xml
<configuration>
<!-- namenode的入口 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoopcluster</value>
</property>
<!-- 配置HDFS的工作目录(元数据加载在这里) -->
<property>
<name>hadoop.tmp.dir</name>
<value>/app/hadoop/tmp</value>
</property>
<!-- 配置zookeeper的集群 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
</configuration>
修改配置文件hdfs-site.xml
创建JournalNode在本地磁盘存放数据的位置
mkdir /app/hadoop/journaldata
vi /app/hadoop/hadoop-2.9.0/etc/hadoop/hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>hadoopcluster</value>
</property>
<!-- 配置所有的NameNode的名字,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.hadoopcluster</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC协议的IP和端口 -->
<property>
<name>dfs.namenode.rpc-address.hadoopcluster.nn1</name>
<value>node1:8020</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.hadoopcluster.nn1</name>
<value>node1:50070</value>
</property>
<!-- nn2的RPC协议的IP和端口 -->
<property>
<name>dfs.namenode.rpc-address.hadoopcluster.nn2</name>
<value>node2:8020</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.hadoopcluster.nn2</name>
<value>node2:50070</value>
</property>
<!-- 配置NameNode的元数据在JournalNode上的存放位置 配置所有JournalNode的IP和端口 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node2:8485;node3:8485;node4:8485/hadoopcluster</value>
</property>
<!-- 配置JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/app/hadoop/journaldata</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 客户端使用这个类去找到active namenode-->
<property>
<name>dfs.client.failover.proxy.provider.hadoopcluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_dsa.pub</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
修改配置文件mapred-site.xml
cd /app/hadoop/hadoop-2.9.0/etc/hadoop
scp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
</property>
在windows中的eclipse运行提交到linux上的集群,需要添加一下配置
不然报错/bin/bash: line 0: fg: no job control
<property>
<name>mapreduce.app-submission.cross-platform</name>
<value>true</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>
/app/hadoop/hadoop-2.9.0/etc/hadoop,
/app/hadoop/hadoop-2.9.0/share/hadoop/common/*,
/app/hadoop/hadoop-2.9.0/share/hadoop/common/lib/*,
/app/hadoop/hadoop-2.9.0/share/hadoop/hdfs/*,
/app/hadoop/hadoop-2.9.0/share/hadoop/hdfs/lib/*,
/app/hadoop/hadoop-2.9.0/share/hadoop/mapreduce/*,
/app/hadoop/hadoop-2.9.0/share/hadoop/mapreduce/lib/*,
/app/hadoop/hadoop-2.9.0/share/hadoop/yarn/*,
/app/hadoop/hadoop-2.9.0/share/hadoop/yarn/lib/*
</value>
</property>
修改配置文件yarn-site.xml
cd /app/hadoop/hadoop-2.9.0/etc/hadoop
vi yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- 开启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>node1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node2</value>
</property>
<!-- 启用RM重启的功能-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
<description>启用RM重启的功能,默认为false</description>
</property>
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
<description>用于状态存储的类,采用ZK存储状态类</description>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
<!-- 指定做中间数据调度的时候使用的是哪一种机制 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>node1:8088</value>
<description>提供给web页面访问的地址,可以查看任务状况等信息</description>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>node2:8088</value>
<description>提供给web页面访问的地址,可以查看任务状况等信息</description>
</property>
<!-- 配置通讯的地址和端口,有多少个RM就配置多少组property -->
<!-- RM1-->
<property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>node1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>node1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>node1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address.rm1</name>
<value>node1:8033</value>
</property>
<!-- RM2 -->
<property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>node2:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>node2:8031</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>node2:8032</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address.rm2</name>
<value>node2:8033</value>
</property>
</configuration>
在windows中的eclipse运行提交到linux上的集群,需要添加一下配置
不然报错/bin/bash: line 0: fg: no job control
<property>
<name>yarn.application.classpath</name>
<value>
/app/hadoop/hadoop-2.9.0/etc/hadoop,
/app/hadoop/hadoop-2.9.0/share/hadoop/common/*,
/app/hadoop/hadoop-2.9.0/share/hadoop/common/lib/*,
/app/hadoop/hadoop-2.9.0/share/hadoop/hdfs/*,
/app/hadoop/hadoop-2.9.0/share/hadoop/hdfs/lib/*,
/app/hadoop/hadoop-2.9.0/share/hadoop/mapreduce/*,
/app/hadoop/hadoop-2.9.0/share/hadoop/mapreduce/lib/*,
/app/hadoop/hadoop-2.9.0/share/hadoop/yarn/*,
/app/hadoop/hadoop-2.9.0/share/hadoop/yarn/lib/*
</value>
</property>
配置环境变量
sudo vi /etc/profile
在文件末尾加上
export HADOOP_HOME=/app/hadoop/hadoop-2.9.0
export PATH=:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
使修改的环境变量生效
source /etc/profile
配置完成后
启动zookeeper集群,即在node1,node2,node3上启动:
cd /app/zookeeper/bin
./zkServer.sh start
启动journalnode,即在node2,node3,node4上启动:
cd /app/hadoop/hadoop-2.9.0/sbin
./hadoop-daemon.sh start journalnode
在任意一台有namenode的机器上格式化namenode(这里在node1上):
cd /app/hadoop/hadoop-2.9.0/bin
./hdfs namenode -format
启动这个已经格式化了的namenode(node1)
cd /app/hadoop/hadoop-2.9.0/sbin
./hadoop-daemon.sh start namenode
把这个namenode(node1)上的元数据文件拷贝到其他namenode(node2)上去:
在没有格式化namenode(node2)的机器上执行:
cd /app/hadoop/hadoop-2.9.0/bin
./hdfs namenode -bootstrapStandby
在任意一台namedoe(node1)上格式化ZKFC
cd /app/hadoop/hadoop-2.9.0/bin
./hdfs zkfc -formatZK
停止HDFS所有服务
cd /app/hadoop/hadoop-2.9.0/sbin
./stop-dfs.sh
启动hadoop
(只在namenode(node1))
cd /app/hadoop/hadoop-2.9.0/sbin
./start-all.sh
四台机器输入jps查看是否正确启动
node1
node2
node3
node4
11.在hadoop集群运行任务(只用在namenode上面执行,即是node1)
在HDFS上创建路径
cd /app/hadoop/hadoop-2.9.0/bin
hdfs dfs -mkdir -p /data/input
将要计数的文件放到HDFS上
hdfs dfs -put ~/wordcount.txt /data/input
查看是否将文件放到了HDFS上
hdfs dfs -ls /data/input
运行单词统计任务
cd /app/hadoop/hadoop-2.9.0
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.0.jar wordcount /data/input /data/output/wordcount
查看结果
hdfs dfs -cat /data/output/wordcount/part-r-00000
图形化信息界面用node1的IP
http://node1:50070
http://node2:50070
http://node1:8088
更多推荐
所有评论(0)