文档章节

hadoop、hbase、zookeeper伪集群搭建

晓阳
 晓阳
发布于 2014/11/18 13:39
字数 2647
阅读 111
收藏 0
点赞 0
评论 2

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
Apache HBase 2.0.0 发布,Hadoop 数据库

Apache HBase 2.0.0 发布了,HBase 2.0.0 是 HBase 的第二个主要版本。 此次更新信息如下: 一个新的区域分配管理器(“AMv2”), 用于配置读取和/或写入路径以运行堆外的装置,以及可选的内...

雨田桑 ⋅ 05/03 ⋅ 0

Hbase的应用场景、原理及架构分析

Hbase概述 hbase是一个构建在HDFS上的分布式列存储系统。HBase是Apache Hadoop生态系统中的重要 一员,主要用于海量结构化数据存储。从逻辑上讲,HBase将数据按照表、行和列进行存储。 如图所...

xiangxizhishi ⋅ 2017/07/22 ⋅ 0

Hadoop2.6+Zookper3.4+Hbase1.0部署安装

继hadoop完全分布式安装后,再结合zookper+hbase安全。 在之前环境配置下继续进行。 一、zookper安装 1.1 下载并解压软件 1.2 修改配置文件 配置文件参数详解可参考zookeeper参数 1.3 创建目...

KaliArch ⋅ 05/23 ⋅ 0

遇到的问题--java连接hbase的thrift2报错readtimeout

遇到问题 java连接hbase的thrift2报错readtimeout 原因分析 java连接hbase的thrift2报错readtimeout原因有多种, 一是排除网络和防火墙问题 二是检测thrift2服务是否正常或者假死 三是thrif...

q383965374 ⋅ 04/23 ⋅ 0

Hbase+Phoenix 安装及基本操作

1.安装Hbase: 解压:tar-zxvf hbase-1.2.1-bin.tar.gz 重命名:mvhbase-1.2.1 hbase 2.配置环境变量 exportJAVAHOME=/usr/local/software/jdk1.8.066 exportCLASSPATH=.:$JAVAHOME/lib/dt.j......

sinadrew ⋅ 04/12 ⋅ 0

hadoop及hbase集群启停的几种方式

1、生产环境集群 2、web管理页面 hadoop web管理页面(主备) http://192.168.10.101:50070 http://192.168.10.102:50070 hbase web管理页面(主备) http://192.168.10.101:16010 http://1......

断臂人 ⋅ 06/07 ⋅ 0

Hadoop HBase存储原理结构学习

一、简介 history started by chad walters and jim 2006.11 G release paper on BigTable 2007.2 inital HBase prototype created as Hadoop contrib 2007.10 First useable Hbase 2008.1 H......

qq_15037231 ⋅ 04/16 ⋅ 0

Hbase regionserver 逐个挂掉的问题分析

最近遇到一个比较诡异的问题,一个regionserver由于GC的原因,导致与zookeeper链接超时,最终被踢出集群。但是,接下来的现象,才是噩梦的开始!!! 一个regionserver由于GC的原因,导致与z...

hsbxxl ⋅ 06/01 ⋅ 0

zookeeper 实际使用场景举例

本人所在的项目组,目前在两个地方使用到了zookeeper,分别是 1.定期理财平台:理财涉及到一个额度的问题,不同的渠道(如网站、手机、微信等)使用的是同一个额度,需要确保每个渠道看到的都...

kim_o ⋅ 06/10 ⋅ 0

深入解读HBase2.0新功能之AssignmentManagerV2

背景 AssignmentManager模块是HBase中一个非常重要的模块,Assignment Manager(之后简称AM)负责了HBase中所有region的Assign,UnAssign,以及split/merge过程中region状态变化的管理等等。...

正研 ⋅ 06/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Python爬虫,抓取淘宝商品评论内容

作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿“德州扒鸡”...

python玩家 ⋅ 19分钟前 ⋅ 0

MySQL 内核深度优化

MYSQL数据库适用场景广泛,相较于Oracle、DB2性价比更高,Web网站、日志系统、数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务...

java高级架构牛人 ⋅ 42分钟前 ⋅ 0

用户登录信息-钉子效果(基于jquery2.0)

本js效果使用jquery2.0,清晰的分解用户登录信息的(钉子效果),该效果直接用在作者网站(www.phpkhbd.com)上。 里面的难点有:定时器,延时。 大致效果如下: 一开始: 鼠标放上去的时候:...

宁哥实战课堂 ⋅ 43分钟前 ⋅ 0

解决yum安装报错Protected multilib versions

使用yum安装报错Protected multilib versions原因是因为多个库不能共存,不过更新的话也并不行,但是可以在安装命令后面加上如下一段命令: --setopt=protected_multilib=false 案例: 比如需...

北岩 ⋅ 54分钟前 ⋅ 0

为什么要学习Typescript???

简单来说 目前的typescript就是未来的javascript 为什么?? 这要从ECMA-262标准的第4版说起 对了 我们说的ES5 其实是ECMAScript3.1这个替代性建议被扶正了而已... 那么 第4版标准是什么? 看看...

hang1989 ⋅ 59分钟前 ⋅ 0

linux安装ipfs

一、下载ipfs # cd /usr/local/ipfs/ # wget https://dist.ipfs.io/go-ipfs/v0.4.15/go-ipfs_v0.4.15_linux-amd64.tar.gz # tar -zxvf go-ipfs_v0.4.15_linux-amd64.tar.gz 二、安装ipfs # ......

八戒八戒八戒 ⋅ 今天 ⋅ 0

jvm程序执行慢诊断手册

生产环境最多的几种事故之一就是程序执行慢,如果是web服务的话,表现就是响应时间长。本文分享,从业多年形成的排查守则。 诊断步骤 系统资源查看 首先是系统资源查看,而且必须是在第一步。...

xpbob ⋅ 今天 ⋅ 0

YII2 advanced 高级版本项目搭建-添加API应用以及多应用

一、YII安裝 安裝yii可以用composer安裝,也可以在yii中文社区下载归档文件安装 composer安装就不介绍了,因为要安装composer,比较麻烦,当然安装了composer是最好的,以后安装yii的插件要用...

botkenni ⋅ 今天 ⋅ 0

在jdk1.8的环境下模拟永久代内存溢出

相信不少小伙伴在看深入理解Java虚拟机的时候,作者给我们举例一个demo来发生PermGen space 1、通过List不断添加String.intern(); 2、通过设置对应的-XX:PermSize与-XX:MaxPermSize(更快看到...

虾几把写 ⋅ 今天 ⋅ 0

开发OpenDaylight组件的完整流程

在前面介绍学习了OpenDaylight的几个重要模块后,这里再来介绍下完整开发一个模块的过程。 OSGI的bundles提供被其他OSGI组件调用的服务。这个教程中展示的是Data Packet Service去解析数据包...

wangxuwei ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部