文档章节

hadoop、hbase、zookeeper伪集群搭建

晓阳
 晓阳
发布于 2014/11/18 13:39
字数 2647
阅读 112
收藏 0

1、hadoop

core-site.xml


<property>

<name>fs.defaultFS</name>

<value>hdfs://redhat:9000</value>

</property>


默认值: /tmp 
说明: 尽量手动配置这个选项,否则的话都默认存在了里系统的默认临时文件/tmp里。并且手动配置的时候,如果服务器是多磁盘的,每个磁盘都设置一个临时文件目录,这样便于mapreduce或者hdfs等使用的时候提高磁盘IO效率。

<property>

<name>hadoop.tmp.dir</name>

<value>/home/hadoop/cdh4.5.0/hadoop/tmp</value>

</property>


默认值: 0 
说明: 这个是开启hdfs文件删除自动转移到垃圾箱的选项,值为垃圾箱文件清除时间。一般开启这个会比较好,以防错误删除重要文件。单位是分钟。

<property>

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

<value>1440</value>

</property>


<property>

<name>io.compression.codecs</name>

<value>com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.SnappyCodec</value>

</property>


<property>

<name>io.compression.codec.lzo.class</name>

<value>com.hadoop.compression.lzo.LzoCodec</value>

</property>


hdfs-site.xml


<property>

<name>dfs.replication</name>

<value>1</value>

</property>


如果这是一个以逗号分隔的目录列表,那么数据将被存储在所有命名的目录,通常在不同的设备。

<property>

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

<value>file:/home/hadoop/cdh4.5.0/hadoop/dfs/data</value>

</property>


<!-- dfs.datanode.max.xcievers对于datanode来说,就如同linux上的文件句柄的限制,当datanode上面的连接数超过配置中的设置时,datanode就会拒绝连接 -->

<property>

<name>dfs.datanode.max.xcievers</name>

<value>4096</value>

</property>


<property>

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

<value>file:/home/hadoop/cdh4.5.0/hadoop/dfs/name</value>

</property>


<!-- datanode允许磁盘损坏的个数,datanode在启动时候会使用dfs.data.dir下配置的文件夹(用于存储block的),若是有一些不可以用且个数大于上面配置的那个值就启动失败 -->

<property>

<name>dfs.datanode.failed.volumes.tolerated</name>

<value>0</value>

</property>


<!-- balancer时,hdfs移动数据的速度,默认值为1M/S的速度,一般情况下设置为10M,设置的过大会影响当前job的运行 -->

<property>

<name>dfs.balance.bandwidthPerSec</name>

<value>10485760</value>

</property>


<!-- 控制Datanode的白名单,仅仅在dfs.hosts文件中指定的Datanode有权限连接到Namenode上 -->

<!-- 如果该参数不指定,那么默认所有的Datanode都可以连接到Namenode上 -->

<property>

<name>dfs.hosts</name>

<value>/home/hadoop/cdh4.5.0/hadoop/etc/hadoop/slaves</value>

</property>    


<!-- 每个需要下线的机器,一行一个,这个将阻止他们去连接Namenode -->

<property>

<name>dfs.hosts.exclude</name>

<value>/home/hadoop/cdh4.5.0/hadoop/etc/hadoop/exclude</value>

</property>


<!-- datanode上用于处理RPC的线程数,默认为3,较大集群,可适当调大些,比如8,需要注意的是,每添加一个线程,需要的内存增加 -->

<property>

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

<value>50</value>

</property>


默认值:10 
说明:hadoop系统里启动的任务线程数,这里改为40,同样可以尝试该值大小对效率的影响变化进行最合适的值的设定。

<property>

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

<value>50</value>

</property>


<!-- 这个是块大小的设置,也就是说文件按照多大的size来切分块 -->

默认值:67108864 
说明: 这个就是hdfs里一个文件块的大小了,默认64M,这里设置134217728,即128M,太大的话会有较少map同时计算,太小的话也浪费可用map个数资源,而且文件太小namenode就浪费内存多。根据需要进行设置。

<property>

<name>dfs.blocksize</name>

<value>256m</value>

</property>


<!-- 这样是为了保证每个磁盘写入点能预留1K的空间来,而不是让DN将每个磁盘写入点写满,以导致M/R写local文件是发生磁盘空间不够而失败,甚至启动DN时也有可能失败(DN在启动时会初使化本地临时目录),1024=1K -->

<property>

<name>dfs.datanode.du.reserved</name>

<value>3221225472</value>

</property>


<!-- 该路径必须安全地阻止无优先级进程进行中间人攻击(MITM攻击,man-in-the-middle attack),每个套接字路径必须是root拥有或者DN用户拥有,不能使用人人都可以写或者用户组 -->

<!-- 如果没有找到libhadoop或者版本不匹配,则会报异常 -->

<property>

<name>dfs.domain.socket.path</name>

<value>/var/run/hadoop-hdfs/dn_PORT</value>

</property>


<property>

<name>dfs.client.read.shortcircuit</name>

<value>true</value>

</property>


<property>

<name>dfs.support.append</name>

<value>false</value>

</property>


设为true表示hdfs启用权限控制

<property>

<name>dfs.permissions</name>

<value>false</value>

</property>


hadoop-env.sh


export JAVA_HOME=${JAVA_HOME}

export HADOOP_NAMENODE_OPTS="-Xmx8g -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_NAMENODE_OPTS"

export HADOOP_DATANODE_OPTS="-Xmx4g -Dhadoop.security.logger=ERROR,RFAS $HADOOP_DATANODE_OPTS"


export HADOOP_SECONDARYNAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_SECONDARYNAMENODE_OPTS"


export HADOOP_JOBTRACKER_OPTS="-Xmx1g -Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS"

export HADOOP_TASKTRACKER_OPTS="-Xmx10g -Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS"


export HADOOP_CLIENT_OPTS="-Xmx128m $HADOOP_CLIENT_OPTS"


export HADOOP_PID_DIR=/app/tmp

export JAVA_HOME=/usr/java/jdk1.7.0_03


mapred-site.xml


<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>


(mapred做本地计算所使用的文件夹,可以配置多块硬盘,逗号分隔)

<property>

<name>mapred.local.dir</name>

<value>file:/home/hadoop/cdh4.5.0/hadoop/mapred/local</value>

</property>


<property>

<name>mapred.job.tarcker</name>

<value>hdfs://redhat:9001</value>

</property>


以MB为单位,默认100M,这个值比较小
map节点没运行完时,内存的数据过多,要将内存中的内容写入洗盘,这个设置就是设置内存缓冲的大小,在suffle之前
这个选项定义了map输出结果在内存里占用buffer的大小,当buffer达到某个阈值(后面那条配置),会启动一个后台线程来对buffer

的内容进行排序,然后写入本地磁盘(一个spill文件)

根据map输出数据量的大小,可以适当的调整buffer的大小,注意是适当的调整,并不是越大越好,假设内存无限大,

io.sort.mb=1024(1G), 和io.sort.mb=300 (300M),前者未必比后者快:
(1)1G的数据排序一次
(2)排序3次,每次300MB
一定是后者快(归并排序)

<property>

<name>io.sort.mb</name>

<value>512</value>

</property>


同时打开的文件句柄的数量,默认是10
当一个map task执行完之后,本地磁盘上(mapred.local.dir)有若干个spill文件,map task最后做的一件事就是执行merge sort,

把这些spill文件合成一个文件(partition,combine阶段)。
执行merge sort的时候,每次同时打开多少个spill文件,就是由io.sort.factor决定的。打开的文件越多,不一定merge sort就越

快,也要根据数据情况适当的调整。
注:merge排序的结果是两个文件,一个是index,另一个是数据文件,index文件记录了每个不同的key在数据文件中的偏移量(即partition)。
在map节点上,如果发现map所在的子节点的机器io比较重,原因可能是io.sort.factor这个设置的比较小,io.sort.factor设置小的

话,如果spill文件比较多,merge成一个文件要很多轮读取操作,这样就提升了io的负载。io.sort.mb小了,也会增加io的负载。

<property>

<name>io.sort.factor</name>

<value>100</value>

</property>


<property>

<name>mapreduce.map.output.compress</name>

<value>true</value>

</property>


<property>

<name>mapreduce.map.output.compress.codec</name>

<value>org.apache.hadoop.io.compress.SnappyCodec</value>

</property>


说明:每个reduce并行下载map结果的最大线程数

Reduce task在做shuffle时,实际上就是从不同的已经完成的map上去下载属于自己这个reduce的部分数据,

由于map通常有许多个,所以对一个reduce来说,下载也可以是并行的从多个map下载,这个并行度是可以调整的,

调整参数为:mapred.reduce.parallel.copies(default 5)。

默认情况下,每个只会有5个并行的下载线程在从map下数据,如果一个时间段内job完成的map有100个或者更多,

那么reduce也最多只能同时下载5个map的数据,

所以这个参数比较适合map很多并且完成的比较快的job的情况下调大,有利于reduce更快的获取属于自己部分的数据。

<property>

<name>mapred.reduce.parallel.copies</name>

<value>50</value>

</property>


<!-- 用于设置TaskTracker启动的子任务  -->

这个参数是配置每个map或reduce使用的内存数量。默认的是200M。

<property>

<name>mapred.child.java.opts</name>

<value>-Xmx1024m</value>

</property>



yarn-site.xml


<property>

<name>yarn.resourcemanager.address</name>

<value>redhat:8090</value>

</property>


<property>

<name>yarn.resourcemanager.scheduler.address</name>

<value>redhat:8091</value>

</property>


<property>

<name>yarn.resourcemanager.resource-tracker.address</name>

<value>redhat:8092</value>

</property>


<property>

<name>yarn.resourcemanager.admin.address</name>

<value>redhat:8093</value>

</property>


<property>

<name>yarn.resourcemanager.webapp.address</name>

<value>redhat:8094</value>

</property>


<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce.shuffle</value>

</property>



2、hbase

hbase-site.xml


<property>

<name>hbase.zookeeper.quorum</name>

<value>redhat</value>

</property>


<property>

<name>hbase.rootdir</name>

<value>hdfs://redhat:9000/hbase</value>

</property>


是否以分布式方式运行

<property>

<name>hbase.cluster.distributed</name>

<value>true</value>

</property>


zookeeper是hbase集群的"协调器"。由于zookeeper的轻量级特性,因此我们可以将多个hbase集群共用一个zookeeper集群,以节约大量的服务器。多个hbase集群共用zookeeper集群的方法是使用同一组ip,修改不同hbase集群的"zookeeper.znode.parent"属性,让它们使用不同的根目录。比如cluster1使用/hbase-c1,cluster2使用/hbase-c2,等等。 

<property>

<name>zookeeper.znode.parent</name>

<value>/hbase</value>

</property>


<property>

<name>hbase.regionserver.handler.count</name>

<value>80</value>

</property>


<property>

<name>hbase.hregion.max.filesize</name>

<value>4294967296</value>

</property>


原来是因为region server在写入时会检查每个region对应的memstore的总大小是否超过了memstore默认大小的2倍(hbase.hregion.memstore.block.multiplier决定),如果超过了则锁住memstore不让新写请求进来并触发flush,避免产生OOM。

<property>

<name>hbase.hregion.memstore.block.multiplier</name>

<value>2</value>

</property> 


减少因内存碎片导致的Full GC,提高整体性能。

<property>

<name>hbase.hregion.memstore.mslab.enabled</name>

<value>true</value>

</property>


hbase有一个参数hbase.hstore.blockingStoreFiles=30,当region下的hfile达到30个的时候是会阻塞写的。那我都bolck住写了,为什么region里hfile会到700这么多呢?原来还有另一个参数hbase.hstore.blockingWaitTime=30000.hbase考虑到对应用的影响不会长时间block住写,30秒后会恢复。

<property>

<name>hbase.hstore.blockingStoreFiles</name>

<value>7</value>

</property>


表示文件大小小于该值的store file 一定会加入到minor compaction的store file中

<property>

<name>hbase.hstore.compaction.min.size</name>

<value>83886080</value>

</property>


提高以下两个属性的值,以增加执行compaction的线程数:

hbase.regionserver.thread.compaction.large  

hbase.regionserver.thread.compaction.small

<property>

<name>hbase.regionserver.thread.compaction.large</name>

<value>10</value>

</property>


<property>

<name>hbase.regionserver.thread.compaction.small</name>

<value>5</value>

</property>


生成一个SplitRequest执行线程,通过splits线程池执行此线程,

线程池大小通过hbase.regionserver.thread.split配置,默认为1

<property>

<name>hbase.regionserver.thread.split</name>

<value>5</value>

</property>


默认值:0.2

说明:storefile的读缓存占用Heap的大小百分比,0.2表示20%。该值直接影响数据读的性能。

调优:

当然是越大越好,如果读比写多,开到0.4-0.5也没问题。如果读写较均衡,0.3左右。如果写比读多,果断默认吧。设置这个值的时候,你同时要参考 hbase.regionserver.global.memstore.upperLimit ,该值是memstore占heap的最大百分比,两个参数一个影响读,一个影响写。如果两值加起来超过80-90%,会有OOM的风险,谨慎设置。

<property>

<name>hfile.block.cache.size</name>

<value>0.2</value>

</property>


<property>

<name>hbase.regionserver.codecs</name>

<value>snappy</value>

</property>


<property>

<name>dfs.domain.socket.path</name>

<value>/var/run/hadoop-hdfs/dn_PORT</value>

</property>


<property>

<name>dfs.client.read.shortcircuit</name>

<value>true</value>

</property>


<property>

<name>hbase.hregion.memstore.flush.size</name>

<value>134217728</value>

</property>



3、zookeeper

zoo.cfg


tickTime=2000


initLimit=10

syncLimit=5

clientPort=2181

dataDir=/home/hadoop/cdh4.5.0/zookeeper/data

dataLogDir=/home/hadoop/cdh4.5.0/zookeeper/logs


© 著作权归作者所有

共有 人打赏支持
晓阳
粉丝 9
博文 69
码字总数 52360
作品 0
徐汇
程序员
加载中

评论(2)

晓阳
晓阳
不要拷贝文章中配置可能会有错误
晓阳
晓阳
hadoop启动格式化namenode : hadoop namenode -format
hbase——安装配置hbase

1.下载hbase的压缩包,解压出来。 2.检查hbase包和hadoop包版本是否一致,替换成hadoop核心jar包。将hadoop集群的hadoop-1.2.1-core.jar替换hbase的lib目录下的hadoop核心包,主要目的是防止...

cjun1990
2015/04/15
0
0
HADOOP HBASE配置注意事项

1、yum安装的jdk工具1.8版本,在配置hbase1.2版本需要在hbase-env.sh配置文件中注释掉下面的内容: export HBASEMASTEROPTS="$HBASEMASTEROPTS -XX:PermSize=128m -XX:MaxPermSize=128m" exp...

断臂人
07/11
0
0
大数据平台搭建-hbase集群的搭建

本系列文章主要阐述大数据计算平台相关框架的搭建,包括如下内容: 虚拟服务器安装 基础环境安装 zookeeper集群的搭建 kafka集群的搭建 hadoop/hbase集群的搭建 spark集群的搭建 flink集群的...

molyeo
07/25
0
0
搭建Zookeeper与Hbase过程及遇到的问题总结

我的经验是最好放在hadoop一块,这样可以做个全盘拷贝与管理。比如之前安装的hadoop在/usr/hadoop目录下,那就把这2个组件放在一块,比如统一放在:/usr/hadoop/...或 /home/hadoop/...这样以...

hanzhankang
2013/05/09
0
0
Ubuntu10.04LTS配置Hadoop1.0.1+HBase 0.92.0

(关于Hadoop的单机和伪分布式配置参见:http://my.oschina.net/unclegeek/blog/40042)当写这篇文章的时候,最新版的hadoop是1.0.1版本,支持了许多新的特性,使得hbase持久化不易丢失数据。...

怪蜀黍
2012/03/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

day58-20180816-流利阅读笔记-待学习

苹果市值破万亿,iPhone 会涨价吗? Lala 2018-08-16 1.今日导读 苹果教父乔布斯曾经说过:“活着就是为了改变世界。”虽然他在 56 岁时就遗憾离世,但他极具创新和变革的精神早已深埋进苹果...

aibinxiao
32分钟前
4
0
[雪峰磁针石博客]python3快速入门教程1 turtle绘图-2函数

菲波那契序列: >>> # Fibonacci series:... # the sum of two elements defines the next... a, b = 0, 1>>> while b < 10:... print(b)... a, b = b, a+b...112......

python测试开发人工智能安全
今天
0
0
java环境变量配置最正确的方式

原贴:https://blog.csdn.net/qq_40007997/article/details/79784711,十分详细,亲测有效

kitty1116
今天
0
0
49.Nginx防盗链 访问控制 解析php相关 代理服务器

12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配置(502的问题) 12.16 Nginx代理 扩展 502问题汇总 http://ask.apelearn.com/question/9109 location优先级 http://blog....

王鑫linux
今天
2
0
Nginx防盗链、访问控制、解析php相关配置、Nginx代理

一、Nginx防盗链 1. 编辑虚拟主机配置文件 vim /usr/local/nginx/conf/vhost/test.com.conf 2. 在配置文件中添加如下的内容 { expires 7d; valid_referers none blocked server_names *.tes......

芬野de博客
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部