Hadoop调优第一篇_hadoop_namenode_opts-程序员宅基地

技术标签: 笔记  hdfs  hadoop  big data  

1.hdfs核心参数——回收站设置

第一步,在调优前我们需要对namenode与datanode的内存配置进行参数化设置。通过hadoop-env.sh查看namenode与datdanode的具体参数。相关参数设置如下

export HDFS_NAMENODE_OPTS=”-Dhadoop.security.logger=INFO,RFAS -Xmx1024m”

export HDFS_DATANODE_OPTS=”-Dhadoop.security.logger=ERROR,RFAS -Xmx1024m”

此次是将namenode和datanode的内存均分配为1G,不设置该参数则JVM会根据服务器自动分配内存大小。

第二步设置namenode心跳并发配置(所谓的心跳并发是检验namenode是否正常运行),在hdfs-site.xml中设置参数,如下:

<property>

       <name>dfs.namenode.handler.count</name>

       <value>10</value>                         

</property>

该值的设置需要根据实际企业需要来设置。一般如果有三台datanode则需要loge3,为什么这里需要datanode的数量,因为namenode是管理datanode,一个namenode下可能管理2-3个datanode。就像master配置的是namenode,slave1、slave2配置的是datanode。在比赛的时候可以根据python公式计算相关内容。

第三步回收机制设置。

当我们使用hdfs dfs -rm -r 删除某个文件时。可以实现上我们在window系统上删除某个文件,将其放在了回收站的功能,也可以让liunx自动去检索回收站的内容,将回收站的内容每隔一段时间清空。实现的配置文件需要在core-site.xml中设置.

<property>

       <name>fs.trash.interval</name>

       <value>0</value>

</property>

此处设置为0,则是禁用回收站功能,当然我们也可以设置为其他值,这里的单位是分钟。如设置n,则表示该将文件通过hdfs dfs -rm -r 删除文件后,该文件还能在回收站存活n分钟。但是我们如何检验文件是否在回收站中的存货时间是否超过设置的n值呢?此时就需要另外一个参数设置了

<property>

       <name>fs.trash.checkpoint.interval</name>

       <value>m</value>

</property>

此时的m小于n的值。

将文件从回收站中恢复可以通过下面命令,怎样找到回收站呢?当你设置好了,使用hdfs dfs -rm -r 删除文件时会提示你,所删除的文件在哪。你可以根据相关文件的目录还原文件,避免误删。还原命令:

hdfs dfs -mv 删除路径 还原路径

注意:不是所有的操作都可以进入回收站的。如通过代码执行程序或者直接在web页面上删除文件不会进入回收站。还有如果使用hdfs dfs -rm -r -skipTrash方法也是直接跳过回收站删除文件的。

2.集群压测

当我们配置好hadoop相关文件,想测试一下hadoop的读写性能可以使用哪些办法呢?

其实很简单

hadoop jar /usr/Hadoop/Hadoop-2.7.7/share/Hadoop/mapreduce/Hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 10MB

此时测试的是写的能力,测试10次,每次测试文件的大小为10MB

读的能力仅将-write替换成-read就行。当我们每次测试时需要在其他目录下,因为每次测试会产生一个文件,里面记录着测试的日志文件。

清除测试的办法就是

hadoop jar /usr/Hadoop/Hadoop-2.7.7/share/Hadoop/mapreduce/Hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -clean

3.hdfs多目录(与高可用不一样,做此操作时需要将在hdfs-site.xml原始的namenode与datanode目录下的配置文件删了)

多目录就是在某个节点上增加namenode或datanode的数量,一开始我们在配置环境时,每个节点上只有一个namenode或者datanode。现在老板有需求,想要每个节点上不止一个namenode和datanode。一个节点上多个namenode可以提高节点的可靠性,同一节点的多个namenode内容是相同的。而datanode则不同,是为了增加硬盘的存储容量。在实际中真正存储数据的是datanode。hdfs-site.xml配置文件如下:

<property>

       <name>dfs.namenode.name.dir</name>

       <value>file://${hadoopt.tmp.dir}/dfs/name1,file://${hadoopt.tmp.dir}/dfs/name2</value>

</property>

<property>

       <name>dfs.datanode.data.dir</name>

       <value>file://${hadoopt.tmp.dir}/dfs/data1,file://${hadoopt.tmp.dir}/dfs/data2</value>

</property>

在重新配置namenode与datanode时需要停止hadoop集群,重新格式化.

4.hdfs-集群扩容与缩容(增删节点)

(1)增加节点(slave3)

vim slaves

slave3

传到slave1,slave2,slave3上

在slave3上重新启动datanode与nodemanager

hadoop-daemon.sh start datanode

yarn-daemon.sh start nodemanager

在master上刷新节点hdfs dfsadmin -refreshNodes

(2)删除节点(删除slave2)

master:

<!—设置master,slave1为白名单,即可以使用的节点,黑名单slave2-->

vim whitelist

master

slave1

vim blacklist

slave2

<!—设置白名单后,其他节点也可以使用,但是只能上传文件.显示正在工作的节点只用master,slave1。不会将真实数据传到其他节点上-->

vim hdfs-site.xml(最后增加)首次增加增删节点需要重启hadoop集群

<!—添加白名单-->

<property>

       <name>dfs.hosts</name>

       <value>file:/usr/hadoop/hadoop-2.7.7/etc/hadoop/whitelist</value>

</property>

<!—添加黑名单-->

<property>

       <name>dfs.hosts.excludes</name>

       <value>file:/usr/hadoop/hadoop-2.7.7/etc/Hadoop/blacklist</value>

</property>

刷新节点命令:

hdfs dfsadmin -refreshNodes

如果总是在某一个节点上提交任务,会导致该节点的数据量远大于其他节点。数据量会不均衡。当该节点出故障时,所有数据都会遗失,因此怎样才能保证每个节点上都有数据,使用下面命令.

sbin/start-balance.sh threshold 10

对于参数10,代表的是集群中各个节点的磁盘空间利用率相差不超过10%,可根据实际情况进行调整。

停止数据均衡命令

sbin/stop-balance.sh

6.存储优化(hadoop3.x版本)

hdfs storagepolicies -listPolicies                                                   ##查看存储策略

hdfs storagepolicies -setStoragePolicy -path xxx -policy xxx         ##为指定路径设置指定的存储策略

hdfs storagepolicies -getStoragePolicy -path xxx                        ##获得指定路径的存储策略

hdfs storagepolicies -unsetStoragePolicy -path xxx                      ##取消指定路径的存储策略

存储策略的设置是为了适应现实生活中,我们访问不同数据的实际情况。有些数据我们经常性访问读取,有些数据暂时性访问读取,有些数据不访问读取。因此我们需要对每个节点设置相应的存储策略。存储策略的设置每个节点可能不同,需要根据题目要求或者实际要求来设置。一般在每个节点的hdfs-site.xml中添加存储策略的设置。在设置存储策略时,我们需要开启存储策略的设置。怎样对每个节点设置相关的存储策略,直接在datanode.dir的值前面加上相关的存储设备。为什么只在datanode上设置存储策略呢?因为在实际情况中datanode才是存储数据的

存储设备和存储策略可以根据上面的图来解释。从高到低访问的速度越慢。

<property>

       <name>dfs.replication</name>

       <value>4</value>

</property>

<!—开启存储策略-->

<property>

       <name>dfs.storage.policy.enabled</name>

       <value>true</value>

</property>

slave1:

<!—对slave1设置存储策略,注意,“ssd,”后结尾没有回车。为了格式好看加上回车,请读者复制的时候将回车删除-->

<property>

       <name>dfs .datanode.data.dir</name> 

     <value>[SSD]file://use/hadoop/hadoop-2.7.7/hdfs/ssd,

[DISK]file://usr/hadoop/hadoop-2.7.7/hdfs/disk,[RAM_DISK]file://usr/hadoop/hadoop-2.7.7/hdfs/ram_disk,[ARCHIVE]file://usr/hadoop/hadoop-2.7.7/hdfs/archive</value>

</property>

默认的存储策略是host,一个sdd和多个disk。设置完存储策略后需要重新格式化,启动集群,上传文件到hadoop上。

更改存储策略方法

首先查看数据存储在哪

hdfs fsck /xxx -files -blocks -locations

此时可以根据文件存储的位置查看存储策略,再修改存储策略

hdfs storagepolicies -setStoragePolicy -path xxx -policy xxx

再次查看数据存储在哪?

hdfs fsck /xxx -files -blocks -locations

此时存储位置未发生变化,需要移动存储文件

hdfs mover xxx

最后可以发现存储策略发生更改了。

注意:如果想改变成Lazy_Persist需要更改部分参数。因为无论是在虚拟机中还是在本机中,对ram_disk有所限制。首先是内存大小的限制。可以通过hdfs-default.xml查看datanode的默认存储的数据大小。一般默认为0,因为内存访问虽然快,但是内存没有了整个数据都没了。

查看虚拟机默认的值

ulimit -a

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_50024279/article/details/121520995

智能推荐

OFDM802.11a的FPGA实现(七)一级交织:分组交织器(含verilog和matlab代码)

在前面的文章中讲解了卷积编码和删余,实现了1/2、2/3、3/4编码速率的输出。数据域在编码之后,下一个部分就是交织。今天对交织进行具体实现。

移动硬盘无法读取?学会这3个方法,快速解决问题!_新硬盘无法识别-程序员宅基地

文章浏览阅读648次。移动硬盘在目前工作和学习中都是一个比较重要的工具。如果遇到移动硬盘无法读取的情况,应该如何解决呢?小编给大家总结了几个简单有效的操作方法,记得收藏起来哦!_新硬盘无法识别

微信小程序红包 php,如何用微信小程序发红包-程序员宅基地

文章浏览阅读250次。在目前的小程序版本尚不支持发红包这个功能,开发者们表面笑嘻嘻,心里妈卖批!在这里,提供一种已经实践过的解决思路。详细解析,就是下面的几个步骤1、首先是在小程序里面的领红包入口2、点击后跳转webview, 附带当前的小程序的token给webview验证,webview 的src 指向具备付款能力的服务号的一个获取openid页面,根据附加的token来判断用户是否可以领取红包,此时用户拥有两个o..._小程序 可以用微信支付 现金红包php

视频教程-跟一夫学UI设计 APPUI综合设计与图标实战案例视频教程 photoshop绘制icon案例-UI-程序员宅基地

文章浏览阅读104次。跟一夫学UI设计 APPUI综合设计与图标实战案例视频教程 photoshop绘制icon案例 ..._app风格案例视频

vue 海康视频播放_vue-hkvideo-程序员宅基地

文章浏览阅读4k次,点赞4次,收藏22次。1. 下载并安装海康 web 插件https://open.hikvision.com/download/5c67f1e2f05948198c909700?type=102. 把上一步解压的三个 js, 复制到你的项目中, 根据路径, 自己引入到 index.html 中3. 建议运行它的 demo, 大概看看代码, 了解一下它的大致结构, 它的注解很详细, 3 分钟就能看完4. 贴上我的代码(我的是每次只显示一个画面, 点击摄像头切换画面)<temp.._vue-hkvideo

html li 鼠标经过变色,CSS实现li标签鼠标经过时改变背景颜色-程序员宅基地

文章浏览阅读5.3k次,点赞3次,收藏4次。很多时候需要用到这个css效果,实际上就用了一个li标签的热点样式,不仅是li标签,div等也可以的完整代码如下,div/css鼠标热点改变li标签背景颜色body{ background-color:#CCCC99; margin:0; padding:0; color:#fff;}ul{ margin:0; padding:50px;}li{ list-style:none; height:2..._ul li 样式 鼠标移入颜色

随便推点

vue.js的手脚架vue-cli项目搭建的步骤-程序员宅基地

文章浏览阅读90次。手脚架是什么?众所周知,现在的前端项目发展得越渐越大,我们前端程序员要从0开始去搭建一套完整的项目很费时,所以这时候前端工程的手脚架就出现了。我用得vue-cli也是其中之一,还有其他的我也说不清,我就说一下我接触比较多的这款vue-cli,但是所有手脚架的核心:都是为了能够快速搭建一个完整的项目的结构,开发者只需要在生成的项目结构的基础上进行开发即可,非常简单高效。然后..._如何上线vue-cli手脚架项目到服务器

python进程和线程-程序员宅基地

文章浏览阅读794次,点赞19次,收藏19次。2、multiprocessing.Process类的join()方法可以阻塞主进程,当子进程没有进行完成的时候,主进程hold。2、threading.Thread类的join()方法可以阻塞主进程,当子线程没有进行完成的时候,主线程hold。3、可以通过继承multiprocessing.Process并重写run()函数的方法来实现多线程。1、线程通过multiprocessing.Process类的start()方法启动。1、线程通过threading.Thread类的start()方法启动。

使用OkHttp 缓存 API 调用提高Android应用性能

要能够将 API 调用的响应本地存储到缓存中,首先,我们需要定义缓存并通知客户端。在下面的代码片段中,我们使用 okhttp 库中的 Cache 类定义了缓存。我们将此缓存的最大大小设置为 5 MB。然后,在初始化 okhttpclient 参数时使用cache()函数。.build()如果设备连接到互联网:如果最后一次 API 响应是在不到 30 分钟之前检索的,则显示缓存的响应;否则,获取新的响应并将其存储在缓存中。如果设备离线:使用最多 1 天前的 API 响应以保持应用程序功能。

一键实现在VS Code中绘制流程图

而其较为出众的一点,就是较好的可拓展性,即丰富的插件应用,这些应用可以极大地提高生产效率,并优化日常使用。可以发现,其整体格局和我们常见的流程图编辑应用较为类似,其主题颜色也与我们的VS Code保持一致,在这里为了编辑方便,我们还是将编辑器主题改为浅色。当然,其功能仍存在局限,不能够完全代替我们传统的图形绘制工具,但也可以作为我们日常工作的有益补充,帮助我们完成一些特定情景下的项目。整体布局也十分明晰,与我们常用的Visio极为类似:左侧为形状选项卡,中间为画布容器,右侧为样式编辑。

go http框架下的静态资源代理实现(压缩,缓存验证自定义)

之前在说了我的第一版静态资源代理,后面我又完善了一下:照着以上思路,可以在其他语言其他框架中实现,因为对框架没有依赖,都是使用的一些基本功能。

RecyclerView实现吸顶效果项目实战(三):布局管理器LayoutManager-程序员宅基地

文章浏览阅读338次,点赞4次,收藏6次。架构师不是天生的,是在项目中磨练起来的,所以,我们学了技术就需要结合项目进行实战训练,那么在Android里面最常用的架构无外乎 MVC,MVP,MVVM,但是这些思想如果和模块化,层次化,组件化混和在一起,那就不是一件那么简单的事了,我们需要一个真正身经百战的架构师才能讲解透彻其中蕴含的深理。此时,RecyclerView第一个item是添加进Adapter中的最后一个,最后一个item是第一个加进Adapter的数据,RecyclerView会自动滑到末尾,另外item整体是依靠下方的。