Hadoop调优第一篇

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容简介   本书从Hadoop的缘起开始,由浅入深,结合理论和实践,全方位地介绍Hadoop这一高性能处理海量数据集的理想工具。全书共16章,3个附录,涉及的主题包括:Haddoop简介;MapReduce简介;Hadoop分布式文件系统;Hadoop的I/O、MapReduce应用程序开发;MapReduce的工作机制;MapReduce的类型和格式;MapReduce的特性;如何构建Hadoop集群,如何管理Hadoop;Pig简介;Hbase简介;Hive简介;ZooKeeper简介;开源工具Sqoop,最后还提供了丰富的案例分析。   本书是Hadoop权威参考,程序员可从中探索如何分析海量数据集,管理员可以从中了解如何安装与运行Hadoop集群。 目录 第1章 初识Hadoop  数据!数据!  数据存储与分析  与其他系统相比  关系型数据库管理系统  网格计算  志愿计算  1.3.4 Hadoop 发展简史  Apache HadoopHadoop生态圈 第2章 关于MapReduce  一个气象数据集  数据的格式  使用Unix工具进行数据分析  使用Hadoop分析数据  map阶段和reduce阶段  横向扩展  合并函数  运行一个分布式的MapReduce作业  Hadoop的Streaming  Ruby版本  Python版本  Hadoop Pipes  编译运行 第3章 Hadoop分布式文件系统  HDFS的设计  HDFS的概念  数据块  namenodedatanode  命令行接口  基本文件系统操作  Hadoop文件系统  接口  Java接口  从Hadoop URL中读取数据  通过FileSystem API读取数据  写入数据  目录  查询文件系统  删除数据  数据流  文件读取剖析  文件写入剖析  一致模型  通过 distcp并行拷贝  保持 HDFS 集群的均衡  Hadoop的归档文件  使用Hadoop归档文件  不足 第4章 Hadoop I/O  数据完整性  HDFS的数据完整性  LocalFileSystem  ChecksumFileSystem  压缩  codec  压缩和输入切分  在MapReduce中使用压缩  序列化  Writable接口  Writable类  实现定制的Writable类型  序列化框架  Avro  依据文件的数据结构  写入SequenceFile  MapFile 第5章 MapReduce应用开发  配置API  合并多个源文件  可变的扩展  配置开发环境  配置管理  辅助类GenericOptionsParser,Tool和ToolRunner  编写单元测试  mapper  reducer  本地运行测试数据  在本地作业运行器上运行作业  测试驱动程序  在集群上运行  打包  启动作业  MapReduce的Web界面  获取结果  作业调试  使用远程调试器  作业调优  分析任务  MapReduce的工作流  将问题分解成MapReduce作业  运行独立的作业 第6章 MapReduce的工作机制  剖析MapReduce作业运行机制  作业的提交  作业的初始化  任务的分配  任务的执行  进度和状态的更新  作业的完成  失败  任务失败  tasktracker失败  jobtracker失败  作业的调度  Fair Scheduler  Capacity Scheduler  shuffle和排序  map端  reduce端  配置的调优  任务的执行  推测式执行  重用JVM  跳过坏记录  任务执行环境 第7章 MapReduce的类型与格式  MapReduce的类型  默认的MapReduce作业  输入格式  输入分片与记录  文本输入  二进制输入  多种输入  数据库输入(和输出)  输出格式  文本输出  二进制输出  多个输出  延迟输出  数据库输出 第8章 MapReduce的特性  计数器  内置计数器  用户定义的Java计数器  用户定义的Streaming计数器  排序  准备  部分排序  总排序  二次排序  联接  map端联接  reduce端联接  边数据分布  利用JobConf来配置作业  分布式缓存  MapReduce库类 第9章 构建Hadoop集群  集群规范  网络拓扑  集群的构建和安装  安装Java  创建Hadoop用户  安装Hadoop  测试安装  SSH配置  Hadoop配置  配置管理  环境设置  Hadoop守护进程的关键属性  Hadoop守护进程的地址和端口  Hadoop的其他属性  创建用户帐号  安全性  Kerberos和Hadoop  委托令牌  其他安全性改进  利用基准测试程序测试Hadoop集群  Hadoop基准测试程序  用户的作业  云上的Hadoop  Amazon EC2上的Hadoop 第10章 管理Hadoop  HDFS  永久性数据结构  安全模式  日志审计  工具  监控  日志  度量  Java管理扩展(JMX)  维护  日常管理过程  委任节点和解除节点  升级 第11章 Pig简介  安装与运行Pig  执行类型  运行Pig程序  Grunt  Pig Latin编辑器  示例  生成示例  与数据库比较  PigLatin  结构  语句  表达式  1.4.4 类型  模式  函数  用户自定义函数  过滤UDF  计算UDF  加载UDF  数据处理操作  加载和存储数据  过滤数据  分组与连接数据  对数据进行排序  组合和分割数据  Pig实战  并行处理  参数代换 第12章 Hive  1.1 安装Hive  1.1.1 Hive外壳环境  1.2 示例  1.3 运行Hive  1.3.1 配置Hive  1.3.2 Hive服务  1.3.3 Metastore  1.4 和传统数据库进行比较  1.4.1 读时模式(Schema on Read)vs.写时模式(Schema onWrite)  1.4.2 更新、事务和索引  1.5 HiveQL  1.5.1 数据类型  1.5.2 操作和函数  1.6 表  1.6.1 托管表(Managed Tables)和外部表(External Tables)  1.6.2 分区(Partitions)和桶(Buckets)  1.6.3 存储格式  1.6.4 导入数据  1.6.5 表的修改  1.6.6 表的丢弃  1.7 查询数据  1.7.1 排序(Sorting)和聚集(Aggregating)  1.7.2 MapReduce脚本  1.7.3 连接  1.7.4 子查询  1.7.5 视图(view)  1.8 用户定义函数(User-Defined Functions)  1.8.1 编写UDF  1.8.2 编写UDAF 第13章 HBase  2.1 HBasics  2.1.1 背景  2.2 概念  2.2.1 数据模型的“旋风之旅”  2.2.2 实现  2.3 安装  2.3.1 测试驱动  2.4 客户机  2.4.1 Java  2.4.2 Avro,REST,以及Thrift  2.5 示例  2.5.1 模式  2.5.2 加载数据  2.5.3 Web查询  2.6 HBase和RDBMS的比较  2.6.1 成功的服务  2.6.2 HBase  2.6.3 实例:HBase在Streamy.com的使用  2.7 Praxis  2.7.1 版本  2.7.2 HDFS  2.7.3 用户接口(UI)  2.7.4 度量(metrics)  2.7.5 模式设计  2.7.6 计数器  2.7.7 批量加载(bulkloading) 第14章 ZooKeeper  安装和运行ZooKeeper  示例  ZooKeeper中的组成员关系  创建组  加入组  列出组成员  ZooKeeper服务  数据模型  操作  实现  一致性  会话  状态  使用ZooKeeper来构建应用  配置服务  具有可恢复性的ZooKeeper应用  锁服务  生产环境中的ZooKeeper  可恢复性和性能  配置 第15章 开源工具Sqoop  获取Sqoop  一个导入的例子  生成代码  其他序列化系统  深入了解数据库导入  导入控制  导入和一致性  直接模式导入  使用导入的数据  导入的数据与Hive  导入大对象  执行导出  深入了解导出  导出与事务  导出和SequenceFile 第16章 实例分析  Hadoop 在Last.fm的应用  Last.fm:社会音乐史上的革命  Hadoop a Last.fm  用Hadoop产生图表  Track Statistics程序  总结  Hadoop和Hive在Facebook的应用  概要介绍  Hadoop a Facebook  假想的使用情况案例  Hive  问题与未来工作计划  Nutch 搜索引擎  背景介绍  数据结构  Nutch系统利用Hadoop进行数据处理的精选实例  总结  Rackspace的日志处理  简史  选择Hadoop  收集和存储  日志的MapReduce模型  关于Cascading  字段、元组和管道  操作  Tap类,Scheme对象和Flow对象  Cascading实战  灵活性  Hadoop和Cascading在ShareThis的应用  总结  在Apache Hadoop上的TB字节数量级排序  使用Pig和Wukong来探索10亿数量级边的 网络图  测量社区  每个人都在和我说话:Twitter回复关系图  degree(度)  对称链接  社区提取 附录A 安装Apache Hadoop  先决条件  安装  配置  本机模式  伪分布模式  全分布模式 附录B Cloudera’s Distribution for Hadoop 附录C 准备NCDC天气数据

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值