【大数据】搭建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 ResourceManagerHistoryManager

开启日志聚集功能具体步骤如下:

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(注意格式化之前,一定要先停止上次启动的所有namenodedatanode进程,然后再删除datalog数据)

[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核数


完结撒花!!!

        朋友们内容到这就结束了,本篇的内容还是比较多的,有很多的配置,一步一步来,细心一点,还是不难的,如果有啥不会的朋友咱们可以一起谈论哈~

        如果朋友你感觉文章的内容对你有帮助,可以点赞关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,感谢朋友们的支持!

        

  • 14
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值