CDH集群配置

6 篇文章 1 订阅

原理

目前的CDH集群安装的配置主要考虑的是内存和CPU核数的分配,因为内存和CPU的配置直接影响集群的性能。其他的配置则跟集群整体规划有关,如NameNode,ResourceManager,zookeeper等安装在哪;block块的大小;以及是否需要开启CDH本身提供的一些功能等等。所以以下会分两个部分描述集群的配置文件:内存和CPU参数部分,其他常用配置部分。最后给出整个集群的详细配置参数以及含义。

内存参数部分

安装集群主要考虑的还是根据集群可使用的硬件资源(内存和CPU内核以及硬盘)划分map和Reduce对资源的使用。主要参数如下:
单个节点的物理内存多大;
该节点需要给系统预留的内存和CPU内核是多少;
该节点上需要启动哪些程序(如DataNode,NodeManager,HBase_resgionserver等),以及需要为这些程序留出多少内存和CPU;
节点的物理内存和CPU内核个数减去2,3中需要的内存和CPU核数剩余的内存和CPU核数就是可以给Hadoop集群运行Map和reduce使用的内存和CPU核数,对应集群的参数就是:
yarn.nodemanager.resource.memory-mb###单个节点上分配给集群可以使用的内存
yarn.nodemanager.resource.cpu-vcores ###单个节点上分配给集群可以使用的cpu核数
yarn.nodemanager.resource.memory-mb和yarn.nodemanager.resource.cpu-vcores这两个参数确定之后,就可以根据自己集群的状况(map和Reduce中处理数据的大小和预计所需的cpu核数)确定每个Mpa和Reduce所需的内存和CPU核数的确切数值。
主要涉及的配置文件为yarn-site.xml和mapreduce-site.xml具体的相关配置项如下(注:以下只列出了与内存和cpu相关的配置项,其他的配置项请参考文章最后):
yarn-site.xml(以下配置不是线上的真正配置仅供参考)
yarn.nodemanager.resource.cpu-vcores=16 ###单个节点上分配给集群可以使用的cpu核数(如4个物理核,一个物理核对应四个虚拟核,故总共16个核可用)
yarn.nodemanager.resource.memory-mb=20480 ###单个节点上分配给集群可以使用的内存资源为20G
yarn.scheduler.minimum-allocation-vcores=1 ###container可使用的最小核数(包含虚拟核 )
yarn.scheduler.maximum-allocation-vcores=2 ###container最大可以使用的核数(包含虚拟核)
yarn.scheduler.increment-allocation-vcores=1 ###container每次增加的核数
yarn.scheduler.minimum-allocation-mb=1024 ###container最小可以使用的内存
yarn.scheduler.maximum-allocation-mb=8192 ###container最大可以使用的内存
yarn.scheduler.increment-allocation-mb=512 ###container每次增加的内存
yarn.app.mapreduce.am.command-opts=-Xmx820m ###APPMaster的虚拟机参数。个人认为是实际分配给AppMaster的内存。等于yarn.scheduler.minimum-allocation-mb80%
mapreduce-site.xml(以下配置不是线上的真正配置仅供参考)
yarn.app.mapreduce.am.resource.cpu-vcores=1 ###一个AppMaster可以使用的核数
yarn.app.mapreduce.am.resource.mb=1024 ###一个AppMaster占用的内存。
mapreduce.map.cpu.vcores=1 ###一个Map可以使用的核数
mapreduce.map.memory.mb=1024 ###一个Map占用的内存大小,建议等于Contain内存大小:yarn.scheduler.minimum-allocation-mb
mapreduce.map.java.opts=-Xmx820m ##map的虚拟机参数,个人理解:实际运行Map时初始一次性分配给Map的内存大小。等于mapreduce.map.memory.mb
80%
mapreduce.reduce.cpu.vcores=1 ###一个Reduce可以使用的核数
mapreduce.reduce.memory.mb=2048 ###一个Reduce占用的内存大小,建议设成contain内存大小的两倍:yarn.scheduler.minimum-allocation-mb2。或者等于contain内存大小。
mapreduce.reduce.java.opts=-Xmx1639m ##map的虚拟机参数,个人理解:实际运行Map时初始一次性分配给Map的内存大小。等于mapreduce.map.memory.mb
80%
mapreduce.task.io.sort.mb=256 ###Map Task缓冲区所占内存大小。任务排序的缓冲区。
此外,需要留意的是,horntonworks给出推荐配置(下载地址链接:wget http://public-repo-1.hortonworks.com/HDP/tools/2.1.1.0/hdp_manual_install_rpm_helper_files-2.1.1.385.tar.gz )中会将硬盘的数量作为主要的参数,与CDH官方给的配置参考( https://www.cloudera.com/documentation/enterprise/5-3-x/topics/cdh_ig_yarn_tuning.html )有所区别。以上资源相关的配置文件中以CDH的官方文档为主,同时在配置Reduce的内存时参考horntonworks的配置,将reduce的内存配置成map的2倍,将虚拟机的内存设置成reduce的80%。

集群配置文件

集群安装和调整时主要需要修改的配置文件有5个:
hadoop-env.sh;hadoop环境变量的相关配置
Core-site.xml; 集群的相关配置
hdfs-site.xml;HDFS的相关配置
mapreduce-site.xml;mapReduce的相关配置
yarn-site.xml;yarn的相关配置
Hadoop-env.sh
包含集群中常用的一些HAdoop的环境变量,只需要修改HADOOP_PID_DIR,HADOOP_SECURE_DN_PID_DIR,JAVA_HOME三个即可,其他的一般使用默认即可。HADOOP_PID_DIR,HADOOP_SECURE_DN_PID_DIR若不指定,默认的地址是/tmp目录下,但是若集群运行较长时间没有重启过,且在此期间/tmp目录被清空过,则会造成无法使用Hadoop原生的stop-dfs.sh stop-all.sh等命令关闭集群,只能手动的去将所有进程一个个kill掉(此问题只存在于手动编译安装CDH,使用yum安装时不存在该问题)。
Core-site.xml
配置文件如下;
fs.defaultFS= hdfs://ns1
dfs.permissions.superusergroup= hadoop
hadoop.tmp.dir= /data/dfs/hadoop_tmp #在格式化HDFS时,会自动创建该目录
io.file.buffer.size= 131072 #這是读写 sequence file 的 buffer size, 可减少 I/O 次数。在大型的 Hadoop cluster,建议可设定为 65536 到 131072
ha.zookeeper.quorum= zookeeper01.yscredit.com:2181,zookeeper02.yscredit.com:2181,zookeeper03.yscredit.com:2181、#zookeeper集群的地址列表
hadoop.proxyuser.root.hosts=*
hadoop.proxyuser.root.groups=*
hadoop.proxyuser.hdfs.hosts=*
hadoop.proxyuser.hdfs.groups=*
hadoop.proxyuser.hive.hosts=*
hadoop.proxyuser.hive.groups=*
hadoop.proxyuser.hue.hosts=*
hadoop.proxyuser.hue.groups=*
hadoop.proxyuser.oozie.hosts=*
hadoop.proxyuser.oozie.groups=*
hadoop.proxyuser.httpfs.hosts=*
hadoop.proxyuser.httpfs.groups=*
hadoop.proxyuser.solr.hosts=*
hadoop.proxyuser.solr.groups=*
hadoop.proxyuser.hbase.hosts=*
hadoop.proxyuser.hbase.groups=*
hadoop.http.staticuser.user=hdfs
fs.trash.checkpoint.interval=0 #以分钟为单位的垃圾回收检查间隔
fs.trash.interval= 1440 #以分钟为单位的垃圾回收检查间隔
fs.permissions.umask-mode=002 #设置新创建文件的umask码
dfs.client.read.shortcircuit=true
dfs.client.read.shortcircuit.skip.checksum=false
hdfs-site.xml
dfs.webhdfs.enabled= true #建议设为true,否则就不能使用webhdfs的一些命令
dfs.replication= 3 #block的备份个数,默认是3份
dfs.namenode.name.dir= /data/dfs/namenode #存放 name table
dfs.namenode.edits.dir= ${dfs.namenode.name.dir} #存放edit文件
dfs.datanode.data.dir= /data/data1,/data/data2/ #DataNode上存放block的硬盘地址
dfs.blocksize= 268435456 #block块的大小
dfs.permissions.enabled= true #是true表明使用权限系统
dfs.namenode.acls.enabled= true #设置为true表示HDFS支持ACLs
httpfs.proxyuser.hue.hosts= * #打开hue用户对hdfs的访问权限
httpfs.proxyuser.hue.groups= *
dfs.nameservices= ns1 #命名nameservice为ns1,名字与core-site.xml中fs.defaultFS配置名称要一致
dfs.ha.namenodes.ns1= nn1,nn2 #ns1中包含哪些namenode节点
dfs.namenode.rpc-address.ns1.nn1= master01.yscredit.com:8020 #nn1的rpc地址
dfs.namenode.http-address.ns1.nn1= master01.yscredit.com:50070#nn1的hdfs访问地址
dfs.namenode.rpc-address.ns1.nn2= master02.yscredit.com:8020#nn2的rpc地址
dfs.namenode.http-address.ns1.nn2= master02.yscredit.com:50070#nn2的hdfs访问地址
dfs.journalnode.http-address= 0.0.0.0:8480 #jornalnode的http地址
dfs.journalnode.rpc-address= 0.0.0.0:8485 #
dfs.namenode.shared.edits.dir= qjournal://slave01.yscredit.com:8485;slave02.yscredit.com:8485;slave03.yscredit.com:8485/ns1
dfs.journalnode.edits.dir= /data/dfs/journalnode
ipc.client.connect.max.retries= 30
dfs.client.failover.proxy.provider.ns1= org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.automatic-failover.enabled= true
ha.zookeeper.quorum= zookeeper01.yscredit.com:2181,zookeeper02.yscredit.com:2181,zookeeper03.yscredit.com:2181
ha.zookeeper.session-timeout.ms= 2000 #
dfs.ha.fencing.methods= sshfence #namenode高可用的方式
dfs.ha.fencing.ssh.private-key-files= /root/.ssh/id_rsa
dfs.ha.fencing.ssh.connect-timeout= 30000
dfs.client.read.shortcircuit= true
dfs.client.read.shortcircuit.skip.checksum= false
dfs.client.read.shortcircuit.streams.cache.size= 256 # block 路径的Cache

dfs.client.read.shortcircuit.streams.cache.expiry.ms= 300000 # cache超时参考文件:https://zhidao.baidu.com/question/519874521313818405.html
dfs.block.local-path-access.user= root,hueadmin,hive,hue,hdfs,oozie,yarn,mapred,impala
dfs.datanode.max.transfer.threads= 8192
dfs.client.block.write.replace-datanode-on-failure.enable= true
dfs.client.block.write.replace-datanode-on-failure.policy= DEFAULT
dfs.client.block.write.replace-datanode-on-failure.best-effort= true
dfs.datanode.hdfs-blocks-metadata.enabled= true
dfs.datanode.data.dir.perm= 750
dfs.client.file-block-storage-locations.timeout= 60000
dfs.client.use.legacy.blockreader.local= false
dfs.domain.socket.path= /var/run/hadoop-hdfs/dn_socket
dfs.client.domain.socket.data.traffic= false
mapreduce-site.xml
mapreduce.framework.name= yarn #所使用的框架,不用修改
#历史记录的配置——开始
mapreduce.jobhistory.address= master01.yscredit.com:10020
mapreduce.jobhistory.webapp.address= master01.yscredit.com:19888
mapreduce.jobhistory.done-dir= /history/done
mapreduce.jobhistory.intermediate-done-dir= /history/done_intermediate
#历史记录的配置——结束
#内存和CPU的配置——开始
yarn.app.mapreduce.am.resource.cpu-vcores=3
mapreduce.map.memory.mb= 12288
mapreduce.map.java.opts= -Xmx9216m
mapreduce.reduce.memory.mb= 12288
mapreduce.reduce.java.opts= -Xmx9216m
yarn.app.mapreduce.am.resource.mb= 12288
yarn.app.mapreduce.am.command-opts= -Xmx9216m
mapreduce.task.io.sort.mb= 1792
mapred.child.java.opts= -XX:-UseGCOverheadLimit
#内存和CPU的配置——结束
yarn-site.xml
yarn.nodemanager.aux-services= mapreduce_shuffle
yarn.nodemanager.aux-services.mapreduce.shuffle.class= org.apache.hadoop.mapred.ShuffleHandler
yarn.nodemanager.local-dirs= file:///var/lib/hadoop-yarn/cache/${user.name}/nm-local-dir
yarn.nodemanager.log-dirs= file:///var/log/hadoop-yarn/containers
yarn.application.classpath= $HADOOP_CONF_DIR,
H A D O O P C O M M O N H O M E / ∗ , HADOOP_COMMON_HOME/*, HADOOPCOMMONHOME/,HADOOP_COMMON_HOME/lib/,
H A D O O P H D F S H O M E / ∗ , HADOOP_HDFS_HOME/*, HADOOPHDFSHOME/,HADOOP_HDFS_HOME/lib/
,
H A D O O P M A P R E D H O M E / ∗ , HADOOP_MAPRED_HOME/*, HADOOPMAPREDHOME/,HADOOP_MAPRED_HOME/lib/,
H A D O O P Y A R N H O M E / ∗ , HADOOP_YARN_HOME/*, HADOOPYARNHOME/,HADOOP_YARN_HOME/lib/

yarn.nodemanager.localizer.address= 0.0.0.0:23344 #之前使用默认的会报错,所以使用该端口
yarn.nodemanager.webapp.address= 0.0.0.0:23999
yarn.log-aggregation-enable= true
yarn.log.server.url= http://master01.yscredit.com:19888/jobhistory/logs
#ResourceManager的相关配置及其高可用——开始
yarn.resourcemanager.connect.retry-interval.ms= 2000
yarn.resourcemanager.ha.enabled= true
yarn.resourcemanager.ha.automatic-failover.enabled= true
yarn.resourcemanager.ha.automatic-failover.embedded= true
yarn.resourcemanager.cluster-id= yarn-cluster
yarn.resourcemanager.ha.rm-ids= rm1,rm2
yarn.resourcemanager.ha.id= rm1 #当前节点时rm1节点,在另一个RM节点上该项应改为rm2
yarn.resourcemanager.scheduler.class= org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
yarn.resourcemanager.recovery.enabled= true
yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms= 5000
yarn.resourcemanager.store.class= org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
yarn.resourcemanager.zk-address= zookeeper01.yscredit.com:2181,zookeeper02.yscredit.com:2181,zookeeper03.yscredit.com:2181
yarn.resourcemanager.address.rm1= master01.yscredit.com:8032
yarn.resourcemanager.address.rm2= master02.yscredit.com:8032
yarn.resourcemanager.scheduler.address.rm1= master01.yscredit.com:8030
yarn.resourcemanager.scheduler.address.rm2= master02.yscredit.com:8030
yarn.resourcemanager.admin.address.rm1= master01.yscredit.com:8033
yarn.resourcemanager.admin.address.rm2= master02.yscredit.com:8033
yarn.resourcemanager.resource-tracker.address.rm1= master01.yscredit.com:8031
yarn.resourcemanager.resource-tracker.address.rm2= master02.yscredit.com:8031
yarn.resourcemanager.webapp.address.rm1= master01.yscredit.com:8088
yarn.resourcemanager.webapp.address.rm2= master02.yscredit.com:8088
yarn.resourcemanager.webapp.https.address.rm1= master01.yscredit.com:8090
yarn.resourcemanager.webapp.https.address.rm2= master02.yscredit.com:8090
#ResourceManager的相关配置及其高可用——结束

timeline-service配置——开始

yarn.timeline-service.enabled=true ##tez日志系统会用到
yarn.timeline-service.hostname= master02.yscredit.com #在master02上启动
yarn.timeline-service.http-cross-origin.enabled= true
yarn.resourcemanager.system-metrics-publisher.enabled= true
yarn.timeline-service.address= master01.yscredit.com:10200
yarn.timeline-service.webapp.address= master02.yscredit.com:8188
yarn.timeline-service.webapp.https.address= master02.yscredit.com:8190
yarn.timeline-service.handler-thread-count=15

timeline-service配置——结束

#内存和CPU的相关配置——开始
yarn.scheduler.minimum-allocation-mb= 12288
yarn.scheduler.maximum-allocation-mb= 49152
yarn.nodemanager.resource.memory-mb= 49152
yarn.scheduler.increment-allocation-mb= 512
yarn.nodemanager.resource.cpu-vcores= 12
yarn.scheduler.minimum-allocation-vcores= 1
yarn.scheduler.maximum-allocation-vcores=16
yarn.scheduler.increment-allocation-vcores=1
yarn.nodemanager.vmem-check-enabled= false
#内存和CPU的相关配置——结束
附:启动和停止命令(线上)
1、关闭集群:有两种方式
第一种,一次性关闭hdfs和yarn:/opt/hadoop-2.6.0-cdh5.8.0/sbin/stop-all.sh
第二种,分两步单独关闭hdfs和yarn:
只关闭hdfs:/opt/hadoop-2.6.0-cdh5.8.0/sbin/stop-dfs.sh
只关闭yarn: /opt/hadoop-2.6.0-cdh5.8.0/sbin/stop-yarn.sh
2、启动集群:有两种方式,
第一种,一次性启动hdfs和yarn:/opt/hadoop-2.6.0-cdh5.8.0/sbin/start-all.sh
第二种,分两步单独启动hdfs和yarn:
只启动hdfs: /opt/hadoop-2.6.0-cdh5.8.0/sbin/start-dfs.sh
只启动yarn:/opt/hadoop-2.6.0-cdh5.8.0/sbin/start-yarn.sh
3、启动Hive:
nohup /opt/hive-1.1.0-cdh5.8.0/bin/hive --service metastore 1>/opt/logs/hive_metastore.log 2>&1 &
nohup /opt/hive-1.1.0-cdh5.8.0/bin/hive --service hiveserver2 --hiveconf hive.server2.thrift.port=10000 1>/opt/logs/hive.log 2>&1 &
4、hue:
查看hue是否在运行:ps -f -u hue
重启hue: nohup /opt/hue/hue/build/env/bin/supervisor 1>/ opt/logs/hue.log 2>&1 &
5、oozie的重启:
关闭ooize: /opt/oozie-4.1.0-cdh5.8.0/bin/oozie-stop.sh
启动oozie: /opt/oozie-4.1.0-cdh5.8.0/bin/oozie-start.sh
6、单独启动NameNode进程
关闭当前节点的NameNode:/opt/hadoop-2.6.0-cdh5.8.0/sbin/hadoop-daemon.sh stop namenode
启动当前节点的NameNode:/opt/hadoop-2.6.0-cdh5.8.0/sbin/hadoop-daemon.sh start namenode
7、单独启动DataNode进程
关闭当前节点的DataNode:/opt/hadoop-2.6.0-cdh5.8.0/sbin/hadoop-daemon.sh stop datanode
启动当前节点的DataNode:/opt/hadoop-2.6.0-cdh5.8.0/sbin/hadoop-daemon.sh start datanode
8、单独启动NodeManager进程
关闭当前节点的NodeManager:/opt/hadoop-2.6.0-cdh5.8.0/sbin/yarn-daemon.sh stop nodemanager
启动当前节点的NodeManager:/opt/hadoop-2.6.0-cdh5.8.0/sbin/yarn-daemon.sh start datanode
9、单独启动ResourceManager进程
关闭当前节点的ResourceManager:/opt/hadoop-2.6.0-cdh5.8.0/sbin/yarn-daemon.sh stop resourcemanager
启动当前节点的ResourceManager:/opt/hadoop-2.6.0-cdh5.8.0/sbin/yarn-daemon.sh start resourcemanager

yarn

mapreduce.map.memory.mb、mapreduce.reduce.memory.mb 这个参数默认是0,说明上说通过map和reduce任务的最大堆大小和堆与容器的比值来确定需要的物理内存量。否则就按1G来算。亲测,生产环境中,这个参数设为0会报heap space和物理内存 + 虚拟内存的错,将这2个值根据内存(320G)分别设为100G后,就可以正常运行了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值