【大数据】搭建Hadoop集群,超级详细
目录
搭建完全分布式运行模式(开发重点)
1.1 Hadoop部署
1.2 配置集群
1.3 配置历史服务器
1.4 配置日志的聚集
1.5 分发Hadoop
1.6 群起集群
1.7 Hadoop群起脚本
第2章 调优
2.2.1 项目经验之HDFS存储多目录
2.2.2 集群数据均衡
2.2.3 项目经验之支持LZO压缩配置
2.2.4 项目经验之LZO创建索引
2.2.5 项目经验之基准测试
2.2.6 项目经验之Hadoop参数调优
完结撒花!!!
搭建完全分布式运行模式(开发重点)
分析:
1)准备3台客户机(关闭防火墙、静态IP、主机名称)
2)安装JDK
3)配置环境变量
4)安装Hadoop
5)配置环境变量
6)配置集群
7)单点启动
8)配置ssh
9)群起并测试集群
1.1 Hadoop部署
1)集群部署规划
注意:NameNode和SecondaryNameNode不要安装在同一台服务器
注意:ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
hadoop102 |
hadoop103 |
hadoop104 |
|
HDFS |
NameNode DataNode |
DataNode |
SecondaryNameNode DataNode |
YARN |
NodeManager |
ResourceManager NodeManager |
NodeManager |
2)用XShell工具将hadoop-3.1.3.tar.gz导入到opt目录下面的software文件夹下面
3)进入到Hadoop安装包路径下
[xiaoyuan@hadoop102 ~]$ cd /opt/software/
4)解压安装文件到/opt/module下面
[xiaoyuan@hadoop102 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
5)查看是否解压成功
[xiaoyuan@hadoop102 software]$ ls /opt/module/
hadoop-3.1.3
6)将Hadoop添加到环境变量
(1)获取Hadoop安装路径
[xiaoyuan@hadoop102 hadoop-3.1.3]$ pwd
/opt/module/hadoop-3.1.3
(2)打开/etc/profile.d/my_env.sh文件
[xiaoyuan@hadoop102 hadoop-3.1.3]$ sudo vim /etc/profile.d/my_env.sh
在profile文件末尾添加JDK路径:(shitf + g)
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
(3)保存后退出
:wq
(4)分发环境变量文件
[xiaoyuan@hadoop102 hadoop-3.1.3]$ sudo /home/xiaoyuan/bin/xsync /etc/profile.d/my_env.sh
(5)source一下,使之生效(3台节点)
[xiaoyuan@hadoop102 module]$ source /etc/profile.d/my_env.sh
[xiaoyuan@hadoop103 module]$ source /etc/profile.d/my_env.sh
[xiaoyuan@hadoop104 module]$ source /etc/profile.d/my_env.sh
1.2 配置集群
1)核心配置文件
配置core-site.xml
[xiaoyuan@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop
[xiaoyuan@hadoop102 hadoop]$ vim core-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为xiaoyuan-->
<property>
<name>hadoop.http.staticuser.user</name>
<value>xiaoyuan</value>
</property>
<!-- 配置该xiaoyuan(superUser)允许通过代理访问的主机节点 -->
<property>
<name>hadoop.proxyuser.xiaoyuan.hosts</name>
<value>*</value>
</property>
<!-- 配置该xiaoyuan(superUser)允许通过代理用户所属组 -->
<property>
<name>hadoop.proxyuser.xiaoyuan.groups</name>
<value>*</value>
</property>
<!-- 配置该xiaoyuan(superUser)允许通过代理的用户-->
<property>
<name>hadoop.proxyuser.xiaoyuan.users</name>
<value>*</value>
</property>
</configuration>
2)HDFS配置文件
配置hdfs-site.xml
[xiaoyuan@hadoop102 hadoop]$ vim hdfs-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
<!-- 测试环境指定HDFS副本的数量1 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
3)YARN配置文件
配置yarn-site.xml
[xiaoyuan@hadoop102 hadoop]$ vim yarn-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!-- yarn容器允许分配的最大最小内存 -->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
<!-- yarn容器允许管理的物理内存大小 -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<!-- 关闭yarn对虚拟内存的限制检查 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
4)MapReduce配置文件
配置mapred-site.xml
[xiaoyuan@hadoop102 hadoop]$ vim mapred-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
5)配置workers
[xiaoyuan@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
在该文件中增加如下内容:
hadoop102
hadoop103
hadoop104
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
1.3 配置历史服务器
为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
1)配置mapred-site.xml
[xiaoyuan@hadoop102 hadoop]$vi mapred-site.xml
在该文件里面增加如下配置。
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
1.4 配置日志的聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。
开启日志聚集功能具体步骤如下:
1)配置yarn-site.xml
[xiaoyuan@hadoop102 hadoop]$ vim yarn-site.xml
在该文件里面增加如下配置。
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
1.5 分发Hadoop
[xiaoyuan@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/
1.6 群起集群
1)启动集群
(1)如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)
[xiaoyuan@hadoop102 hadoop-3.1.3]$ bin/hdfs namenode -format
(2)启动HDFS
[xiaoyuan@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
(3)在配置了ResourceManager的节点(hadoop103)启动YARN
[xiaoyuan@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
(4)Web端查看HDFS的Web页面:http://hadoop102:9870/
1.7 Hadoop群起脚本
(1)来到/home/xiaoyuan/bin目录
[xiaoyuan@hadoop102 bin]$ pwd
/home/xiaoyuan/bin
(2)编辑脚本
[xiaoyuan@hadoop102 bin]$ vim hdp.sh
输入如下内容:
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
(3)修改脚本执行权限
[xiaoyuan@hadoop102 bin]$ chmod 777 hdp.sh
第2章 调优
2.2.1 项目经验之HDFS存储多目录
(1)给Linux系统新增加一块硬盘
把硬盘装好后,我们用 fdisk -l 查看下:
图中可以看出 /dev/sdb 是500G,新加的硬盘。
接下来我用命令 fdisk sdb 进行分区,输入 p 查看新硬盘分区,如图:
(2)生产环境服务器磁盘情况
(3)在hdfs-site.xml文件中配置多目录,注意新挂载磁盘的访问权限问题
HDFS的DataNode节点保存数据的路径由dfs.datanode.data.dir参数决定,其默认值为file://${hadoop.tmp.dir}/dfs/data,若服务器有多个磁盘,必须对该参数进行修改。如服务器磁盘如上图所示,则该参数应修改为如下的值。
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///dfs/data1,file:///hd2/dfs/data2,file:///hd3/dfs/data3,file:///hd4/dfs/data4</value>
</property>
注意:因为每台服务器节点的磁盘情况不同,所以这个配置配完之后,不需要分发
2.2.2 集群数据均衡
1)节点间数据均衡
(1)开启数据均衡命令
start-balancer.sh -threshold 10
对于参数10,代表的是集群中各个节点的磁盘空间利用率相差不超过10%,可根据实际情况进行调整。
(2)停止数据均衡命令
stop-balancer.sh
注意:于HDFS需要启动单独的Rebalance Server来执行Rebalance操作,所以尽量不要在NameNode上执行start-balancer.sh,而是找一台比较空闲的机器。
2)磁盘间数据均衡
(1)生成均衡计划(我们只有一块磁盘,不会生成计划)
hdfs diskbalancer -plan hadoop103
(2)执行均衡计划
hdfs diskbalancer -execute hadoop103.plan.json
(3)查看当前均衡任务的执行情况
hdfs diskbalancer -query hadoop103
(4)取消均衡任务
hdfs diskbalancer -cancel hadoop103.plan.json
2.2.3 项目经验之支持LZO压缩配置
1)hadoop-lzo编译
hadoop本身并不支持lzo压缩,故需要使用twitter提供的hadoop-lzo开源组件。hadoop-lzo需依赖hadoop和lzo进行编译,编译步骤如下。
2)将编译好后的hadoop-lzo-0.4.20.jar 放入hadoop-3.1.3/share/hadoop/common/
[xiaoyuan@hadoop102 common]$ pwd
/opt/module/hadoop-3.1.3/share/hadoop/common
[xiaoyuan@hadoop102 common]$ ls
hadoop-lzo-0.4.20.jar
3)同步hadoop-lzo-0.4.20.jar到hadoop103、hadoop104
[xiaoyuan@hadoop102 common]$ xsync hadoop-lzo-0.4.20.jar
4)core-site.xml增加配置支持LZO压缩
<configuration>
<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>
</configuration>
5)同步core-site.xml到hadoop103、hadoop104
[xiaoyuan@hadoop102 hadoop]$ xsync core-site.xml
6)启动及查看集群
[xiaoyuan@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
[xiaoyuan@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
7)测试-数据准备
[xiaoyuan@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /input
[xiaoyuan@hadoop102 hadoop-3.1.3]$ hadoop fs -put README.txt /input
8)测试-压缩
[xiaoyuan@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount -Dmapreduce.output.fileoutputformat.compress=true -Dmapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzopCodec /input /output
2.2.4 项目经验之LZO创建索引
1)创建LZO文件的索引
LZO压缩文件的可切片特性依赖于其索引,故我们需要手动为LZO压缩文件创建索引。若无索引,则LZO文件的切片只有一个。
hadoop jar /path/to/your/hadoop-lzo.jar com.hadoop.compression.lzo.DistributedLzoIndexer big_file.lzo
2)测试
(1)将bigtable.lzo(200M)上传到集群的根目录
[xiaoyuan@hadoop102 module]$ hadoop fs -mkdir /input
[xiaoyuan@hadoop102 module]$ hadoop fs -put bigtable.lzo /input
(2)执行wordcount程序
[xiaoyuan@hadoop102 module]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount -Dmapreduce.job.inputformat.class=com.hadoop.mapreduce.LzoTextInputFormat /input /output1
(3)对上传的LZO文件建索引
[xiaoyuan@hadoop102 module]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /input/bigtable.lzo
(4)再次执行WordCount程序
[xiaoyuan@hadoop102 module]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount -Dmapreduce.job.inputformat.class=com.hadoop.mapreduce.LzoTextInputFormat /input /output2
3)注意:如果以上任务,在运行过程中报如下异常
Container [pid=8468,containerID=container_1594198338753_0001_01_000002] is running 318740992B beyond the 'VIRTUAL' memory limit. Current usage: 111.5 MB of 1 GB physical memory used; 2.4 GB of 2.1 GB virtual memory used. Killing container.
Dump of the process-tree for container_1594198338753_0001_01_000002 :
解决办法:在hadoop102的/opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml文件中增加如下配置,然后分发到hadoop103、hadoop104服务器上,并重新启动集群。
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
2.2.5 项目经验之基准测试
在企业中非常关心每天从Java后台拉取过来的数据,需要多久能上传到集群?消费者关心多久能从HDFS上拉取需要的数据?
为了搞清楚HDFS的读写性能,生产环境上非常需要对集群进行压测。
HDFS的读写性能主要受网络和磁盘影响比较大。为了方便测试,将hadoop102、hadoop103、hadoop104虚拟机网络都设置为100mbps。
100Mbps单位是bit;10M/s单位是byte ; 1byte=8bit,100Mbps/8=12.5M/s。
测试网速:
(1)来到hadoop102的/opt/module目录,创建一个
[xiaoyuan@hadoop102 software]$ python -m SimpleHTTPServer
(2)在Web页面上访问
hadoop102:8000
1)测试HDFS写性能
(1)写测试底层原理
(2)测试内容:向HDFS集群写10个128M的文件
[xiaoyuan@hadoop102 mapreduce]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 128MB
2021-02-09 10:43:16,853 INFO fs.TestDFSIO: ----- TestDFSIO ----- : write
2021-02-09 10:43:16,854 INFO fs.TestDFSIO: Date & time: Tue Feb 09 10:43:16 CST 2021
2021-02-09 10:43:16,854 INFO fs.TestDFSIO: Number of files: 10
2021-02-09 10:43:16,854 INFO fs.TestDFSIO: Total MBytes processed: 1280
2021-02-09 10:43:16,854 INFO fs.TestDFSIO: Throughput mb/sec: 1.61
2021-02-09 10:43:16,854 INFO fs.TestDFSIO: Average IO rate mb/sec: 1.9
2021-02-09 10:43:16,854 INFO fs.TestDFSIO: IO rate std deviation: 0.76
2021-02-09 10:43:16,854 INFO fs.TestDFSIO: Test exec time sec: 133.05
2021-02-09 10:43:16,854 INFO fs.TestDFSIO:
注意:nrFiles n为生成mapTask的数量,生产环境一般可通过hadoop103:8088查看CPU核数,设置为(CPU核数 - 1)
- Number of files:生成mapTask数量,一般是集群中(CPU核数 - 1),我们测试虚拟机就按照实际的物理内存-1分配即可。(目标,让每个节点都参与测试)
- Total MBytes processed:单个map处理的文件大小
- Throughput mb/sec:单个mapTak的吞吐量
计算方式:处理的总文件大小/每一个mapTask写数据的时间累加
集群整体吞吐量:生成mapTask数量*单个mapTak的吞吐量
- Average IO rate mb/sec::平均mapTak的吞吐量
计算方式:每个mapTask处理文件大小/每一个mapTask写数据的时间
全部相加除以task数量
- IO rate std deviation:方差、反映各个mapTask处理的差值,越小越均衡
注意:如果测试过程中,出现异常
①可以在yarn-site.xml中设置虚拟内存检测为false
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
②分发配置并重启Yarn集群
(3)测试结果分析
①由于副本1就在本地,所以该副本不参与测试
一共参与测试的文件:10个文件 * 2个副本 = 20个
压测后的速度:1.61
实测速度:1.61M/s * 20个文件 ≈ 32M/s
三台服务器的带宽:12.5 + 12.5 + 12.5 ≈ 30m/s
所有网络资源都已经用满。
如果实测速度远远小于网络,并且实测速度不能满足工作需求,可以考虑采用固态硬盘或者增加磁盘个数。
②如果客户端不在集群节点,那就三个副本都参与计算
2)测试HDFS读性能
(1)测试内容:读取HDFS集群10个128M的文件
[xiaoyuan@hadoop102 mapreduce]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 128MB
2021-02-09 11:34:15,847 INFO fs.TestDFSIO: ----- TestDFSIO ----- : read
2021-02-09 11:34:15,847 INFO fs.TestDFSIO: Date & time: Tue Feb 09 11:34:15 CST 2021
2021-02-09 11:34:15,847 INFO fs.TestDFSIO: Number of files: 10
2021-02-09 11:34:15,847 INFO fs.TestDFSIO: Total MBytes processed: 1280
2021-02-09 11:34:15,848 INFO fs.TestDFSIO: Throughput mb/sec: 200.28
2021-02-09 11:34:15,848 INFO fs.TestDFSIO: Average IO rate mb/sec: 266.74
2021-02-09 11:34:15,848 INFO fs.TestDFSIO: IO rate std deviation: 143.12
2021-02-09 11:34:15,848 INFO fs.TestDFSIO: Test exec time sec: 20.83
(2)删除测试生成数据
[xiaoyuan@hadoop102 mapreduce]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -clean
(3)测试结果分析:为什么读取文件速度大于网络带宽?由于目前只有三台服务器,且有三个副本,数据读取就近原则,相当于都是读取的本地磁盘数据,没有走网络。
3)使用Sort程序评测MapReduce
(1)使用RandomWriter来产生随机数,每个节点运行10个Map任务,每个Map产生大约1G大小的二进制随机数
[xiaoyuan@hadoop102 mapreduce]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar randomwriter random-data
(2)执行Sort程序
[xiaoyuan@hadoop102 mapreduce]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar sort random-data sorted-data
(3)验证数据是否真正排好序了
[xiaoyuan@hadoop102 mapreduce]$
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar testmapredsort -sortInput random-data -sortOutput sorted-data
2.2.6 项目经验之Hadoop参数调优
1)HDFS参数调优hdfs-site.xml
The number of Namenode RPC server threads that listen to requests from clients. If dfs.namenode.servicerpc-address is not configured then Namenode RPC server threads listen to requests from all nodes.
NameNode有一个工作线程池,用来处理不同DataNode的并发心跳以及客户端并发的元数据操作。
对于大集群或者有大量客户端的集群来说,通常需要增大参数dfs.namenode.handler.count的默认值10。
<property>
<name>dfs.namenode.handler.count</name>
<value>10</value>
</property>
dfs.namenode.handler.count= ,比如集群规模为8台时,此参数设置为41。可通过简单的python代码计算该值,代码如下。
[xiaoyuan@hadoop102 ~]$ python
Python 2.7.5 (default, Apr 11 2018, 07:36:10)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> print int(20*math.log(8))
41
>>> quit()
2)YARN参数调优yarn-site.xml
(1)情景描述:总共7台机器,每天几亿条数据,数据源->Flume->Kafka->HDFS->Hive
面临问题:数据统计主要用HiveSQL,没有数据倾斜,小文件已经做了合并处理,开启的JVM重用,而且IO没有阻塞,内存用了不到50%。但是还是跑的非常慢,而且数据量洪峰过来时,整个集群都会宕掉。基于这种情况有没有优化方案。
(2)解决办法:
NodeManager内存和服务器实际内存配置尽量接近,如服务器有128g内存,但是NodeManager默认内存8G,不修改该参数最多只能用8G内存。NodeManager使用的CPU核数和服务器CPU核数尽量接近。
①yarn.nodemanager.resource.memory-mb NodeManager使用内存数
②yarn.nodemanager.resource.cpu-vcores NodeManager使用CPU核数
完结撒花!!!
朋友们内容到这就结束了,本篇的内容还是比较多的,有很多的配置,一步一步来,细心一点,还是不难的,如果有啥不会的朋友咱们可以一起谈论哈~
如果朋友你感觉文章的内容对你有帮助,可以点赞,关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,感谢朋友们的支持!
【大数据】搭建Hadoop集群,超级详细相关推荐
- 搭建Hadoop集群(超详细版)
用三台云服务器搭建hadoop完全分布式集群 硬件准备 集群配置 集群规划 Hadoop.Zookeeper.Java.CentOS版本 基础环境配置 关闭防火墙 修改主机名 主机映射 时间同步 查看 ...
- 大数据:Hadoop集群测试
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Hadoop集群测试 通过UI界面查看Hadoop运行状态 一.hadoop2和hadoop3端口区别表 2.查看HDFS集群状态 查 ...
- Java+大数据开发——Hadoop集群环境搭建(二)
1. MAPREDUCE使用 mapreduce是hadoop中的分布式运算编程框架,只要按照其编程规范,只需要编写少量的业务逻辑代码即可实现一个强大的海量数据并发处理程序 2. Demo开发--wo ...
- 云服务器大数据高可用集群搭建-----hadoop篇
目录 一.集群配置 二.集群规划 三.Hadoop.Zookeeper.Java.Centos版本 四.Linux配置 4.1 主机名配置 4.1.1 修改Linux主机名 4.1.2 修改linux ...
- 大数据介绍、集群环境搭建、Hadoop介绍、HDFS入门介绍
大数据介绍.集群环境搭建.Hadoop介绍.HDFS入门介绍 文章目录 大数据介绍.集群环境搭建.Hadoop介绍.HDFS入门介绍 1.课前资料 2.课程整体介绍 3.大数据介绍 3.1 什么是大数 ...
- 大数据导论实验一:搭建Hadoop集群
一.实验要求(10%) 搭建Hadoop集群,要求至少是3个节点的真分布式集群系统,包含1个NameNode,两个DataNode. 集群的安装配置大致为如下流程: 1)准备3台客户机(关闭防火墙.静 ...
- 阿里云 ECS 服务器上如何搭建 Hadoop 集群详细步骤图解
1.前言 在讲述Hadoop集群搭建之前,首先要了解Hadoop和集群两个名词,Hadoop是由Apache基金会开发的分布式系统基础架构,简单理解就是大数据技术应用的基础.集群可以理解为多台装有ha ...
- 云计算大数据之 Kafka集群搭建
云计算大数据之 Kafka集群搭建 版权声明: 本文为博主学习整理原创文章,如有不正之处请多多指教. 未经博主允许不得转载.https://blog.csdn.net/qq_42595261/arti ...
- 三台Ubuntu虚拟机搭建 Hadoop集群 (第一次搭)
最近因为要搭Hadoop集群,确实花了好大的心血在里面,因为我的Linux也是前两天速成的,好多东西都还是边查资料边搭.但我最终确实成功了,留了一点点小问题在里面.(当Hadoop集群start-al ...
- 大数据介绍及集群安装
大数据介绍及集群安装 第一部分 <大数据概述> 传统数据如何处理? 什么是大数据? 传统数据与大数据的对比 大数据的特点? 大数据前/后服务器系统安装部署区别是什么?. 大数据生态系统以及 ...
最新文章
- 如何在ASP.Net 中把图片存入数据库
- intellij idea使用的准备工作
- Oracle之SQL分析函数
- [蓝桥杯2017初赛]包子凑数-模拟+巧妙枚举
- 前端学习(1524):ES6模块导入和导出
- hevc/265 开源项目及相关
- [转载]LM算法的实现
- 【clickhouse】clickhouse TCP 方式发送数据 ClickHouse-Native-JDBC
- 前端抱怨API响应慢,怎么办?
- 常用HDFS java API
- SQL Server-【知识与实战IV】多表查询、个数计算、多重约束条件、两表间的交集、多表之间的关系分析
- 从零搭建完整python自动化测试框架(UI自动化和接口自动化 )——持续更新
- easyWeChat 6.X微信支付V3下载更新微信支付平台证书
- ECS架构 Entitas-CSharp学习之路(二)
- 王者勋章服务器维护中,【维护】4月1日官方维护公告(抢鲜服)
- Theano简单入门(三)
- 网易云音乐歌单制作词云图
- 音频之声道、采样位宽、采样率转换原理及其代码实现
- Unity使用Package Manager管理自定义插件
- vue项目中常用methods