- Hadoop常见的端口
- Hadoop生态圈
- Hadoop配置文件以及简单的Hadoop集群搭建
- Hadoop参数调优
- 项目经验之基准测试
- Hadoop宕机
- Hadoop 高可用配置
Hadoop 常见的端口
dfs.namenode.http-address:50070
dfs.datanode.http-address:50075
SecondaryNameNode辅助名称节点端口号:50090
dfs.datanode.address:50010
fs.defaultFS:8020 或者9000
yarn.resourcemanager.webapp.address:8088
历史服务器web访问端口:19888
Hadoop 生态圈


然后就是各个组件的介绍了,简单的介绍一下就好了。比如说:
- Flume: 一个高可用的,高可靠的,分布式的海量数据日志采集,聚合和传输的系统;
- Zookeeper: 是一个基于观察者模式设计的分布式服务管理框架,他负责存储和管理大家都关心的数据,然后接受管擦者的注册,一旦这些数据的状态发生了变化,Zookeeper就将负责通知已经在Zookeeper上注册的观察者做出相应的反应。
Hadoop配置文件以及简单的Hadoop集群搭建
(1)配置文件:
core-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property>
<property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property> <property> <name>io.compression.codecs</name> <value> org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.DefaultCodec, org.apache.hadoop.io.compress.BZip2Codec, org.apache.hadoop.io.compress.SnappyCodec, com.hadoop.compression.lzo.LzoCodec, com.hadoop.compression.lzo.LzopCodec </value> </property>
<property> <name>io.compression.codec.lzo.class</name> <value>com.hadoop.compression.lzo.LzoCodec</value> </property> <property> <name>io.compression.codecs</name> <value>org.apache.hadoop.io.compress.SnappyCodec</value> </property> </configuration>
|
hdfs-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <configuration>
<property> <name>dfs.replication</name> <value>3</value> </property>
<property> <name>dfs.image.transfer.timeout</name> <value>3600000</value> <description>如果对于某一次数据操作来讲,延迟非常高,socket需要等待更长的时间,建议把该值设置为更大的值(默认60000毫秒),以确保socket不会被timeout掉。</description> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>slave02:50090</value> </property>
<property> <name>dfs.client.block.write.replace-datanode-on-failure.enable</name> <value>true</value> </property> <property> <name>dfs.client.block.write.replace-datanode-on-failure.policy</name> <value>NEVER</value> </property> </configuration>
|
mapred-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>slave01:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>slave01:19888</value> </property> <property> <name>mapreduce.map.output.compress</name> <value>true</value> </property> <property> <name>mapreduce.map.output.compress.codec</name> <value>org.apache.hadoop.io.compress.SnappyCodec</value> </property> </configuration>
|
yarn-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>slave01</value> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>
<property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> </configuration>
|
hadoop-env.sh,yarn-env.sh,mapred-env.sh这三个文件,我们主要配置一下 JAVA_HOME 的路径。
slaves
这个文件,我们用于配置 DataNode 的节点。
(2)简单的集群搭建过程:
- JDK安装
- 配置SSH免密登录
- 配置hadoop核心文件
- 格式化namenode
Hadoop参数调优
1)在hdfs-site.xml文件中配置多目录,最好提前配置好,否则更改目录需要重新启动集群.
2)NameNode有一个工作线程池,用来处理不同DataNode的并发心跳以及客户端并发的元数据操作. dfs.namenode.handler.count=20 * log2(Cluster Size)
,比如集群规模为10台时,此参数设置为60.
3)编辑日志存储路径dfs.namenode.edits.dir设置与镜像文件存储路径 dfs.namenode.name.dir
尽量分开,达到最低写入延迟
4)服务器节点上YARN可使用的物理内存总量,默认是8192(MB),注意,如果你的节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能的探测节点的物理内存总量。yarn.nodemanager.resource.memory-mb
5)单个任务可申请的最多物理内存量,默认是8192(MB).yarn.scheduler.maximum-allocation-mb
.
项目经验之基准测试
搭建完Hadoop集群后需要对HDFS读写性能和MR计算能力测试。测试jar包在hadoop的share文件夹下。
Hadoop宕机
1)如果MR造成系统宕机。此时要控制Yarn同时运行的任务数,和每个任务申请的最大内存。调整参数:yarn.scheduler.maximum-allocation-mb
(单个任务可申请的最多物理内存量,默认是8192MB)
2)如果写入文件过量造成NameNode宕机。那么调高Kafka的存储大小,控制从Kafka到HDFS的写入速度。高峰期的时候用Kafka进行缓存,高峰期过去数据同步会自动跟上。
Hadoop 高可用配置
配置 HDFS-HA集群
- 配置core-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13
| <configuration>
<property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property>
<property> <name>hadoop.tmp.dir</name> <value>/opt/ha/hadoop-2.7.2/data/tmp</value> </property> </configuration>
|
- 配置 hdfs-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| <configuration> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property>
<property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property>
<property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>hadoop102:9000</value> </property>
<property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>hadoop103:9000</value> </property>
<property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>hadoop102:50070</value> </property>
<property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>hadoop103:50070</value> </property>
<property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/mycluster</value> </property>
<property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property>
<property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/corp/.ssh/id_rsa</value> </property>
<property> <name>dfs.journalnode.edits.dir</name> <value>/opt/hadoop-2.7.2/data/jn</value> </property>
<property> <name>dfs.permissions.enable</name> <value>false</value> </property>
<property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> </configuration>
|
再将我们的配置分发到各个节点上去。
配置HDFS-HA自动故障转移
(1)在hdfs-site.xml中增加
1 2 3 4
| <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property>
|
(2)在core-site.xml文件中增加
1 2 3 4
| <property> <name>ha.zookeeper.quorum</name> <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value> </property>
|
1)关闭所有HDFS服务:
(2)启动Zookeeper集群:
(3)初始化HA在Zookeeper中状态:
(4)启动HDFS服务:
(5)在各个NameNode节点上启动DFSZK Failover Controller,先在哪台机器启动,哪个机器的NameNode就是Active NameNode
1
| sbin/hadoop-daemin.sh start zkfc
|
配置Yarn-HA
Yarn-HA的工作机制:

配置 yarn-site.xml 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| <configuration>
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
<property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.cluster-id</name> <value>cluster-yarn1</value> </property> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>hadoop102</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>hadoop103</value> </property> <property> <name>yarn.resourcemanager.zk-address</name> <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value> </property> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property>
</configuration>
|
启动HDFS
(1)在各个JournalNode节点上,输入以下命令启动journalnode服务:
1
| sbin/hadoop-daemon.sh start journalnode
|
(2)在[nn1]上,对其进行格式化,并启动:
1 2
| bin/hdfs namenode -format sbin/hadoop-daemon.sh start namenode
|
(3)在[nn2]上,同步nn1的元数据信息:
1
| bin/hdfs namenode -bootstrapStandby
|
(4)启动[nn2]:
1
| sbin/hadoop-daemon.sh start namenode
|
(5)启动所有DataNode
1
| sbin/hadoop-daemons.sh start datanode
|
(6)将[nn1]切换为Active
1
| bin/hdfs haadmin -transitionToActive nn1
|
启动YARN
(1)在hadoop102中执行:
(2)在hadoop103中执行:
1
| sbin/yarn-daemon.sh start resourcemanager
|
(3)查看服务状态
1
| bin/yarn rmadmin -getServiceState rm1
|