hadoop 部署和调优
一、集群安装
1.在所有的机器上建立相同的用户名,如:hadoop。
$adduser hadoop
$passwd hadoop
2.在/etc/hosts中添加机器名和IP
hadoop@hadoop23:~/hadoop/hadoop-1.2.1/conf$ cat /etc/hosts
127.0.0.1 localhost
#127.0.1.1 hadoop23
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.4.22 hadoop22
192.168.4.23 hadoop23
3. 在所有机器上安装ssh,然后相互分发,让整个集群都免密码登录。
安装openssh-server:
$sudo apt-get install openssh-server
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
将公钥拷贝到集群中其他的机器
scp ~/.ssh/id_dsa hadoop23@192.168.4.23:/home/hadoop/
关闭防火墙
service iptables stop
4.安装JDK,设置JAVA_HOME环境变量
建议安装64位的JDK.
设置JAVA_HOME
$vi /etc/profile
export JAVA_HOME=/home/hadoop/jdk
Export PATH=$PATH:$JAVA_HOME
$source /etc/profile
5.安装HADOOP ,设置HADOOP_HOME环境变量
解压:$ tar –zvxf hadoop-1.2.1.tar.gz
设置HADOOP_HOME
vi /etc/profile
Export HADOOP_HOME=/home/hadoop/hadoop-1.2.1
Export PATH=$PATH:$HADOOP_HOME
Source /etc/profile
每一台机器上都走完以上的步骤之后,执行下面。
6.NameNode 格式化
$hadoop namenode -format
7.启动集群
$start-all.sh
查看集群是否起来:jps 会在master 节点上看到namenode ,JobTraker ,secondNameNode 进程;在slave节点上看到datanode ,TaskTraker 进程。
二、配置
Core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/data</value>
<description>A base for other temporary directories.</description>
</property>
<!-- file system properties -->
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.4.23:9999</value>
</property>
</configuration>
Mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>192.168.4.23:9001</value>
</property>
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx2048m</value>
</property>
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>3</value>
<description>The maximum number of map tasks that will be run
simultaneously by a task tracker.
</description>
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>1</value>
<description>The maximum number of reduce tasks that will be run
simultaneously by a task tracker.
</description>
</property>
<property>
<name>mapred.jobtracker.taskScheduler</name>
<!--<value>org.apache.hadoop.mapred.JobQueueTaskScheduler</value>-->
<value>org.apache.hadoop.mapred.FairScheduler</value>
<description>The class responsible for scheduling the tasks.</description>
</property>
<property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property>
<property>
<name>mapred.child.env</name>
<value>JAVA_LIBRARY_PATH=/home/hadoop/hadoop/lib/native/Linux-amd64-64</value>
</property>
<property>
<name>mapreduce.map.output.compress.codec</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
<property>
<name>mapred.map.tasks.speculative.execution</name>
<value>false</value>
</property>
<property>
<name>mapred.task.timeout</name>
<value>6000000</value>
<description>The number of milliseconds before a task will be terminated if it neither reads an input, writes an output, nor updates its status string.
</description>
</property>
</configuration>
Hdfs-site.xm
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
三、集群优化
mapred.task.timeout 6000000
fs.checkpoint.period 默认(3600秒),如果HDFS存取的次数频繁,可以减小该值。
fs.checkpoint.size editlog 超过该值时会触发二级命名节点,默认64G
io.file.buffer.size 默认4096 SequenceFile 的buffer size,大型系统建议65536 到 131072
ipc.client.connection.maxidletime HFDS Clinet 最大连接个数。
fs.trash.interval 清掉垃圾箱的时间
hadoop.native.lib native libraries 并自动 load 进來使用,例如压缩类的 libraries 像 GZIP, LZO 等等。
dfs.block.size
dfs.safemode.threshold.pct 只有当99.9% 的 blocks 达到最小的 dfs.replication.min 数量(默认是3)才会离开safe mode.在 dfs.replication.min 设的比较大或 data nodes 数量比较多时会等比较久。
Dfs.namenode.handler.count 默认值 10
设定 namenode server threads 的数量,这些 threads 會用 RPC 跟其他的 datanodes 沟通。当 datanodes 数量太多时会发現很容易出現 RPC timeout,解決方法是提升网络速度或提高这个值,但要注意的是 thread 数量多也表示 namenode 消耗的内存也随着增加
dfs.datanode.handler.count默认3 datanode 的线程
dfs.datanode.max.xcievers 默认256 datanode默认的可以处理的最大文件数量
dfs.datanode.du.reserved 默认是0
默认值表示 data nodes 会使用整个磁盘,写满之后会导致无法再写入 M/R jobs。如果还有其他程式共用这些目录也会受到影响。建议保留至少 1073741824(1G) 的空间。
Io.sort.mb 默认100M map中间结果的buffer
Io.sort.record.percent 默认0.05 io.sort.mb中用来保存map output记录边界的百分比,其他缓存用来保存数据。
Io.sort.spill.percent map开始做spill的阈值
Io.sort.factor 做merge操作时同时操作stream的上限。
Min.num.spill.for.combine 合并函数运行的最小spill数
Mapred.reduce.parallel.copies 默认5 每个reduce并行下载map结果的最大线程数
Mapred.reduce.copy.backoff reduce下载线程最大等待时间(in sec)
Mapred.job.shuffle.input.buffer.percent 默认0.7 用来缓存shuffle数据的reduce task heap百分比
Mapred.job.shuffle.merge.percent 默认0.66 缓存的内存中多少百分比后开始做merge 操作。
Mapred.job.reduce.input.buffer.percent sort完成后reduce计算阶段用来缓存数据的百分比
Mapred.map.tasks 每一个Job的map数量,尽量和机器数匹配。默认是数据分块大小。
Mapred.reduce.tasks 每个Job ,reduce 的数量,尽量和机器数匹配。
四、Job调优
Mapred.child.java.opts 一般不要太大,不要超过2G,如果超过,需要改进程序。
Mapred.min.split.size 这个配置项决定了每个 Input Split的最小值,也间接决定了一个Job的map 数目。
Io.sort.mb 不要太大,如果设置成1G,很明显要排序会很费劲,如果设置小点,如30M,则会很快。
io.sort.spill.percent
这个值就是上述buffer的阈值,默认是0.8,既80%,当buffer中的数据达到这个阈值,后台线程会起来对buffer中已有的数据进行 排序,然后写入磁盘,此时map输出的数据继续往剩余的20% buffer写数据,如果buffer的剩余20%写满,排序还没结束,map task被block等待。
Io.sort.factor
同时打开的文件句柄的数量,默认是10
当 一个map task执行完之后,本地磁盘上(mapred.local.dir)有若干个spill文件,map task最后做的一件事就是执行merge sort,把这些spill文件合成一个文件(partition),有时候我们会自定义partition函数,就是在这个时候被调用的。
执行merge sort的时候,每次同时打开多少个spill文件,就是由io.sort.factor决定的。打开的文件越多,不一定merge sort就越快,所以也要根据数据情况适当的调整。
补充:merge排序的结果是两个文件,一个是index,另一个是数据文件,index文件记录了每个不同的key在数据文件中的偏移量(这就是partition)
mapred.reduce.parallel.copies
Reduce到每个完成的Map Task copy数据(通过RPC调用),默认同时启动5个线程到map节点取数据。这个配置还是很关键的,如果你的map输出数据很大,有时候会发现map早就 100%了,reduce一直在1% 2%。。。。。。缓慢的变化,那就是copy数据太慢了,5个线程copy 10G的数据,确实会很慢,这时就要调整这个参数了,但是调整的太大,又会事半功倍,容易造成集群拥堵,所以 Job tuning的同时,也是个权衡的过程,你要熟悉你的数据!
mapred.job.shuffle.input.buffer.percent
当 指定了JVM的堆内存最大值以后,上面这个配置项就是Reduce用来存放从Map节点取过来的数据所用的内存占堆内存的比例,默认是0.7,既 70%,通常这个比例是够了,但是我们讨论的还是大数据的情况,所以这个比例还是小了一些,0.8-0.9之间比较合适。(前提是你的reduce函数不 会疯狂的吃掉内存)
mapred.job.shuffle.merge.percent(默认值0.66)
mapred.inmem.merge.threshold(默认值1000)
这是两个阈值的配置项,第一个指的从Map节点取数据过来,放到内存,当达到这个阈值之后,后台启动线程(通常是Linux native process)把内存中的数据merge sort,写到reduce节点的本地磁盘;
第二个指的是从map节点取过来的文件个数,当达到这个个数之后,也进行merger sort,然后写到reduce节点的本地磁盘;这两个配置项第一个优先判断,其次才判断第二个thresh-hold。
从 实际经验来看,mapred.job.shuffle.merge.percent默认值确实太小了,完全可以设置到0.8左右;第二个默认值 1000,完全取决于map输出数据的大小,如果map输出的数据很大,默认值1000反倒不好,应该小一些,如果map输出的数据不大(light weight),可以设置2000或者以上,都没问题。
hadoop 部署和调优的更多相关文章
- Hadoop作业性能指标及參数调优实例 (二)Hadoop作业性能调优7个建议
作者:Shu, Alison Hadoop作业性能调优的两种场景: 一.用户观察到作业性能差,主动寻求帮助. (一)eBayEagle作业性能分析器 1. Hadoop作业性能异常指标 2. Hado ...
- hadoop 集群调优实践总结
调优概述# 几乎在很多场景,MapRdeuce或者说分布式架构,都会在IO受限,硬盘或者网络读取数据遇到瓶颈.处理数据瓶颈CPU受限.大量的硬盘读写数据是海量数据分析常见情况. IO受限例子: 索引 ...
- 七、Hadoop学习笔记————调优之Hadoop参数调优
dfs.datanode.handler.count默认为3,大集群可以调整为10 传统MapReduce和yarn对比 如果服务器物理内存128G,则容器内存建议为100比较合理 配置总量时考虑系统 ...
- hadoop集群调优-OS和文件系统部分
OS and File System 根据Dell(因为我们的硬件采用dell的方案)关于hadoop调优的相关说明,改变几个Linux的默认设置,Hadoop的性能能够增长大概15%. open f ...
- 六、Hadoop学习笔记————调优之操作系统以及JVM
内核参数overcommit_memory 它是 内存分配策略 可选值:0.1.2.0, 表示内核将检查是否有足够的可用内存供应用进程使用:如果有足够的可用内存,内存申请允许:否则,内存申请失败,并 ...
- Elasticsearch集群架构的部署和调优(一)
[root@es-node1 ~]# mkdir /usr/java[root@es-node1 ~]# tar zxvf jdk1.8.0_131.tar.gz -C /usr/java/ [roo ...
- hadoop之 参数调优
一. hdfs-site.xml 配置文件 1. dfs.blocksize 参数:hadoop文件块大小描述:新文件的默认块大小,以字节为单位,默认 134217728 字节.可以使用以下后缀(大小 ...
- hadoop集群调优-hadoop settings and MapReduce
Hadoop Settings 由于Hadoop节点的系统配置,一些hadoop的设置可以减少运行系统中的瓶颈.首先,提高Java运行时的堆内存容量,也要和系统中的整体内存容量相关:其次,保持hado ...
- 八、Hadoop学习笔记————调优之Hive调优
表1表2的join和表3表4的join同时运行 此法需要关注是否有数据倾斜(大量数据集中在某一区间段)
随机推荐
- Throughtput收集器
介绍 JVM里面的Throughtput收集器是一款关注吞吐量的垃圾收集器.该收集器是唯一一个实现了UseAdaptiveSizePolicy策略的收集器,允许用户通过指定最大暂停时间和垃圾收集时间占 ...
- 弹出层之2:JQuery.BlockUI
JQuery.BlockUI是众多JQuery插件弹出层中的一个,它小巧(原版16k,压缩后10左右),容易使用, 功能齐全,支持Iframe,支持Modal,可定制性高也意味他默认谦虚的外表. jQ ...
- java记事本开发
今天我想要分享的是一个用java写的一个记事本程序.我知道现在市面上有各种各样的记事本了,但是我发现有的写的功能不够完善,或者是代码层次结构不够清晰,有的甚至看了之后云里雾里的,有的还不乏了非常明显的 ...
- 【伯乐在线】FACEBOOK产品设计总监:设计APP时的14个必考题
最近看到Facebook产品设计总监Julie Zhuo拷问产品的14个问题,非常靠谱.其中有3个问题堪称致命拷问: 1.使用前:这款产品是如何吸引到你的注意力的?2.开始使用:使用这款产品是轻松愉悦 ...
- 关于bootstrap在IE8下不能支持自适应的问题
说到这个问题,我就想吐槽下IE了,开发这么多版本,每个版本都有一些这样那样的问题不支持,别的正常的浏览器咋都能支持呢?真是垃圾浏览器!!!! 说归说,但是IE现在用的人多啊,怎么办?这个问题还是得解决 ...
- Swift如何取得View所属的ViewController
从VC取得View很容易,但有些情况下我们需要从View反向获取VC. 不过在一些特殊的场合,Cocoa库帮我们想的很周到,比如在自定义View过渡动画的时候: func animateTransit ...
- Hexo写博客
hexo配置github Git Install hexo-deployer-git. $ npm install hexo-deployer-git –save 配置_config.yml文件 de ...
- listener.ora--sqlnet.ora--tnsnames.ora的关系以及手工配置举例(转载:http://blog.chinaunix.net/uid-83572-id-5510.ht)
listener.ora--sqlnet.ora--tnsnames.ora的关系以及手工配置举例 ====================最近看到好多人说到tns或者数据库不能登录等问题,就索性总结 ...
- EJB通过ANT提高EJB应用的开发效率、开发具有本地接口的无状态bean、开发有状态bean
把jboss集成进eclipse 关闭Jboss控制台按Ctrl+c,在MyEclipse→Servers→Jboss里面可以配置JBoss. 通过ANT提高EJB应用的开发效率 在HelloWorl ...
- Windows2008 R2上完全卸载Oracle操作步骤
Windows2008 R2上完全卸载Oracle操作步骤 1.关闭Oracle所有的服务,按[win+R]运行[services.msc]找到所有Oracle开头的服务,点击停止. 2.使用Orac ...