Hadoop 部署模式
集群环境介绍
CentOS release 6.4 (Final)
jdk 1.7.0_67 (默认已安装)
hadoop 拓扑划分(3节点):
192.168.2.53 | 192.168.2.54 | 192.168.2.55 |
---|---|---|
NameNode | NameNode | |
DataNode | DataNode | DataNode |
NodeManager | NodeManager | NodeManager |
ResourceManager | ResourceManager | ResourceManager |
JournalNode | JournalNode | JournalNode |
ZKFC | ZKFC |
/etc/hosts 文件配置如下 ;
ip | hostname |
---|---|
192.168.2.53 | hadoopnode1 |
192.168.2.54 | hadoopnode2 |
192.168.2.55 | hadoopnode3 |
**/opt/app/hadoop-2.5.0/etc/hadoop/hadoop-env.sh ** 配置JavaHome
Local(StandAlone)单机模式 hadoopnode1
安装目录为: /opt/app
//从apache 官网下载hadoop,这里选择2.5.0版本
// 解压安装包到指定目录
2. tar -zxvf hadoop-2.5.0.tar.gz -C /opt/app
// 创建input目录用于存储输入数据文件
3. mkdir input
// 运行hadoop jar 命令
// 将input文件下面的文件中包含 'dfs[a-z.]+' 的字符串给输出到output 文件夹中
4. bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar grep input output 'dfs[a-z.]+'
// 计算结果在/opt/app/hadoop-2.5.0/output目录下 , _SUCCESS为结果校验文件
5. cat /opt/app/hadoop-2.5.0/output/part-r-00000
命令解释
bin/hadoop hadoop 命令
jar 这个命令在jar包里面
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar 具体位置
grep grep 函数
input grep 函数的目标文件夹
output grep 函数结果的输出文件夹
‘dfs[a-z.]+’ grep 函数的匹配正则条件
伪分布式模式(hadoopnode1)
etc/hadoop/core-site.xml 配置
// 默认HDFS的老大 namenode的地址与通信端口
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
etc/hadoop/hdfs-site.xml 配置
// HDFS的每个Block的副本数
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
本地运行Mapreduce Job
格式化namenode ,一般配置在core-site.xml 中 hadoop.tmp.dir属性,也可以单独配置dfs.namenode.name.dir 存放fsimage 和edits
-
bin/hdfs namenode -format
在上述配置dir下初始化生成fsimage文件 ,edits文件会在hdfs启动之后生成 -
sbin/start-dfs.sh
启动 NameNode daemon and DataNode daemon and SecondaryNameNode -
http://hadoopnode1:50070/
通过web 访问hdfs namenode 情况 -
bin/hdfs dfs -mkdir input
bin/hdfs dfs -put etc/hadoop/*.xml input
hdfs上创建input目录,作为mapreduce输入数据
5.bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /input /output
/input : wordcount 数据文件
/output : wordcount 结果输出文件 (不能事先存在) -
bin/hdfs dfs -cat output/*
查看生成wordcount结果 -
sbin/stop-dfs.sh
停止hdfs相关服务3个 (namenode、datanode、SecondNameNode)
Run Mapreduce Job On Yarn
- etc/hadoop/mapred-site.xml:
指定mapreduce job运行在yran上
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- etc/hadoop/mapred-site.xml:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
- etc/hadoop/yarn-site.xml:
// map reduce 中间过程的算法
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
sbin/start-yarn.sh
启动 Node daemon and DataNode daemon and SecondaryNameNodehttp://hadoopnode1:8088/
主机名+端口号
通过web 接口 观察ResourceManager状态bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /input /output
sbin/stop-yarn.sh
停止yarn相关服务2个 (ResourceManager、NodeManager)
完全分布式模式(HA 三个节点)
1. hdfs-site.xml配置
// nameservices 名称
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
// nameservice 中 namenode 名称
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
// nn1所在节点的名称和通信端口号
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>hadoopnode1:8020</value>
</property>
// nn2所在节点的名称和通信端口号
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>hadoopnode2:8020</value>
</property>
// Namenode WEB HTTP SERVER address
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>hadoopnode1:50070</value>
</property>
// Namenode WEB HTTP SERVER address
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>hadoopnode2:50070</value>
</property>
// NAMENODE SHARED EDITS , journalnode 服务所在主机
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoopnode1:8485;hadoopnode2:8485;hadoopnode3:8485/ns1</value>
</property>
// HDFS PROXY CLIENT
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
// 同一时刻只有一个namenode是active , 提供服务。隔离namenode的机制 SSh and shell ,所有机制依次执行,只要有一个返回执行成功就停止
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
// 保障namenode所在的主机之间能够无密SSH登录
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
2. core-site.xml配置
// 默认HDFS CLUSTER 集群名称
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
// hdfs 临时文件存放路径,若没有指定namenode datanode路径,也存放在该路径下
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/app/hadoop-2.5.0/data/tmp</value>
</property>
<!--
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/app/hadoop-2.5.0/data/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/app/hadoop-2.5.0/data/dfs/data</value>
</property>
-->
// journalnode 共享编辑日志存放路径
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/app/hadoop-2.5.0/data/dfs/jn</value>
</property>
3. QJM (分布式日志管理)HA 启动
需要先将core-site.xml 、hdfs-site.xml 、slaves 三个配置文件同步拷贝至其他节点,在进行接下来的操作
1. 启动各个节点上的journalnode 服务
sbin/hadoop-daemon.sh start journalnode
2. 选择一台namenode ,默认选择nn1,进行格式化并启动
1. bin/hdfs namenode -format
2. sbin/hadoop-daemon.sh start namenode
3. 选择另外一台namenode ,默认选择nn2,同步nn1的元数据信息
1. bin/hdfs namenode -bootstrapStandby
4. 启动nn2
1. sbin/hadoop-daemon.sh start namenode
5. 将nn1 状态由Standby切换为Active
1. bin/hdfs haadmin -transitionToActive nn1
6. 启动所有节点的datanode服务
1. sbin/hadoop-daemon.sh start datanode
-
HA 测试
-
HDFS 上传下载文件
// hdfs 上创建目录 1. bin/hdfs dfs -mkdir -p /user/hadoop/conf // 上传文件到hdfs 2. bin/hdfs dfs -put etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml /user/hadoop/conf // 查看上传的文件是否可读 3. bin/hdfs dfs -text /user/hadoop/conf/core-site.xml ```
-
NameNode HA 测试(故障转移手动切换)
// nn1 active --> Standby 1. bin/hdfs haadmin -transitionToStandby nn1 // nn2 Standby --> active 2. bin/hdfs haadmin -transitionToActive nn2
// 分别从两个namenode节点的50070 端口 web 查看
-
4. QJM HA 故障自动转移
1. hdfs-site.xml 配置
//借助于 ZooKeeper 自动故障转移
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
2. core-site.xml 配置
// ZooKeeper 集群地址
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoopnode1:2181,hadoopnode2:2181,hadoopnode3:2181</value>
</property>
3. 启动测试
// 关停HDFS集群
1.sbin/stop-dfs.sh
// 同步配置文件至其他节点
2. scp etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml hadoop@hadoopnode2:/opt/app/hadoop-2.5.0/etc/hadoop/ hadoop@hadoopnode3:/opt/app/hadoop-2.5.0/etc/hadoop/
// 启动Zookeeper集群
3. bin/zkServer.sh start
// 在Zookeeper上 初始化HA State , 生成znode
4.bin/hdfs zkfc -formatZK
// 启动HDFS集群
5. sbin/start-dfs.sh
// 将active node kill , 测试故障是否转移
6. kill -9 9999
// 将kill 的node 单独启动,测试node 状态
7. sbin/hadoop-daemon.sh start namenode
Zookeeper集群DOWN ,不会影响hdfs 的服务,会影响hdfs故障的自动转移