题目一、运维与管理
  HDFS 调优;(hdfs-site.xml 配置hadoop的hdfs的参数,/usr/hadoop/hadoop-2.7.3/etc/hadoop)
  Yarn 调优; (yarn-site.xml配置yarn的参数/usr/hadoop/hadoop-2.7.3/etc/hadoop))
  MapReduce 调优; (主要是性能调优)
  集群权限管理;
  开启集群。
 一.调优
 HDFS调优: 平台(hdfs-site.xml 配置hadoop的hdfs的参数,/usr/hadoop/hadoop-2.7.3/etc/hadoop)(不怕大文件,怕很多小文件)
 dfs.namenode.handle.count (hdfs-site.xml)(namenode中用户RPC调用的线程数)
 默认为10,公式20logN,eg:20结点=26
 格式:dfs.namenode.handle.count
10
2. dfs.datanode.handler.count (hdfs-site.xml)(datanode中用于处理RPC·调用的线程数)
 默认为3,推荐20(生产环境)
 格式:dfs.datanode.handler.count
3
3. dfs.repalication (hdfs-site.xml) (数据块默认副本数(备份数,复制因子))
 默认为3,每个datanode上只能有一个副本数
 格式:dfs.repalication
3
4. dfs.block.size (hdfs-site.xml)(hdfs数据块的大小(hadoop1.0默认64mb,hadoop2.0默认128mb))
 如果大部分文件大小在200~256之间吗,那么数据块的大小就可以设置为256mb,其余可以默认,数据块太小会增加namenode的压力,数据块太小会增加数据定位的时间,这个值和磁盘的转速有关
 格式:dfs.block.size
128
5. dfs.datanode.data.dir (hdfs-site.xml) (hdfs数据存储的目录)
 我们可以设置多个磁盘目录,增加磁盘IO的性能,多个目录可以用逗号来进行分割
 格式:dfs.datanode.data.dir
6. hadoop.tmp.dir (core-site.xml)(hadoop的临时目录,默认是在系统的根目录下面的tmp)
 推荐设置多个 目录,提高hdfs和MapReduce的IO效率
 格式:hadoop.tmp.dir
7. io.file.buffer.size (core-site.xml)(hdfs文件缓冲区的大小,core-site.xml)
 默认为4096,即4k,推荐值为131072,即128k
 格式:io.file.buffer.size
131072
8. fs.trash.interval (core-site.xml) (hdfs清理回收站的时间周期,单位为min)
 默认为0(0表示不使用回收站的特性),推荐4—7(10080 min)天,也可以手动去清理
 格式:fs.trash.interval
10080
9. dfs.datanode.du.reserved (hdfs-site.xm)(datanode保留的空间大小(单位为字节))
 默认情况下,datanode会占用全部可用的磁盘空间,这个配置项可以使datanode保留部分的磁盘空间,让其他的程序去使用,推荐稍微空出点空间,5—10GB即可
 格式:

     dfs.datanode.du.reserved
     10737418240 
  10. dfs.datanode.socket (服务监控的时间)
 默认为3s,生产环境调到30s
 格式:dfs
3
11. dfs.support.append (hdfs-site.xml、hbase-site.xml) (开启hdfs追加同步,可以优秀的配合habsede的数据同步和持久化)
 默认值为true
 格式:dfs.support.append
true
12. dfs.datanode.max.transfer.threads (hdfs-site.xml )(优化DataNode允许最大文件打开数)
 默认值为4096,设置为4096或者更高
 格式:dfs.datanode.max.transfer.threads
4096
13. dfs.image.transfer.timeout (hdfs-site.xml)(优化延迟高的数据操作的等待时间)
 默认为60000毫秒,建议设置更大的值,以确保socket不会被timeout掉
 格式:dfs.image.transfer.timeout
60000
14. mapreduce.map.output.compress (mapreduce.site.xml)
 mapreduce.map.output.compress.code (优化数据的写入效率)
 开启这两个数据可以大大提高文件的写入效率,减少写入时间。
 第一个属性值修改为true;第二个属性值修改为:org.apche.hadoop.io.compress.GzipCodec 或者其他压缩方式
 格式:mapreduce.map.output.compress
true
mapreduce.map.output.compress.code
org.apche.hadoop.io.compress.GzipCodec
 15. hbase.regionserver.handler.count (hbase.site.xml) (设施RPC监听数量) 默认值为30,可以根据客户端请求数进行调整,读写请求多时,增加此值 格式: 
hbase.regionserver.handler.count
30
16. hbase.hregion.max.filesize (hbase-site.xml) (优化HStore文件大小)
 默认值为10737418240(10GB),如果需要图运行hbase的mr任务,可减小此值
 格式:hbase.hregion.max.filesize
10737418240
17. hbase.client.write.buffer (hbase-site.xml) (优化客户端缓存)
 用户指定客户端缓存,增大该值可以减少RPC调用次数,但是会消耗更多的内存,反之则反之。一般我们需要设定一定缓存大小,以达到减少RPC的次数的目的。
 格式:hbase.client.write.buffer
18. hbase.client.scanner.caching (hbase.site.xml)(扫描hbase所需的行数)
 值越大,消耗内存越大
 格式:hbase.client.scanner.caching
19. 机架感知 (rack-aware配置,启用hdfs机架感知的功能可以优化数据块备份的分布,增强hdfs的性能和可靠性)
 减少服务和结点同时宕机的概率,步骤如下:
 NameNode所在节点的/home/bigdata/apps/hadoop/etc/hadoop的core-site.xml配置文件中配置一个选项:topology.script.file.name
/usr/hadoop/hadoop-2.7.3/etc/hadoop/topology.sh
 在上面value路径上vi topology.sh,内容如下:(创建sh脚本topology.sh) 
#!/bin/bash
 HADOOP_CONF=/usr/software/hadoop-2.7.3/sh
 while [ $# -gt 0 ] ; do
 nodeArg={HADOOP_CONF}/topology.data
 result=""
 while read line ; do
 ar=( {ar[0]}" = “{ar[1]}” = “{ar[2]}”
 fi
 done
 shift
 if [ -z “result”
 fi
 done
 在此要注意的是,要给topology.sh赋予可执行权限
 chond 777 topology.sh
 配置机架数据 (topolopy.data) (/usr/hadoop/hadoop-2.7.3/etc/hadoop/toplogy.data)
 第一列为IP地址, 第二列为主机名,第三列为机架位置
 120.27.4.193 master /master/rack1120.25.225.181 slave1 /dd/rack1
120.25.81.15 slave2 /dd/rack2
 120.25.81.15 slave3 /dd/rack2
 重启hadoop (先关闭,再开启)
 输入命令:hdfs dfsadmin -printTopology
 Yarn调优:
 cup参数1. yarn.nodemanager.resource.cpu-vcores(默认是8,该节点服务器上yarn可以使用的虚拟CPU个数,推荐将值配置与物理核心个数相同,如果节点CPU核心不足8个,要调小这个值,yarn不会智能的去检测物理核心数)
2.yarn.scheduler.minimum-allocation-vcores (默认为1,单个任务最小可申请的虚拟核心数)
3.yarn.scheduler.maximum-allocation-vcores(默认为4,单个任务最大可申请的虚拟核心数,如果申请资源时,超过这个配置,会抛出InvalidResourceRequestException)
Memory参数
 4. yarn.nodemanager.resource.memory-mb(默认为8G,设置该节点上yarn可使用的内存,如果节点内存资源不足8G,要减少这个值,yarn不会智能的去检测内存资源,一般这个设置yarn的可用内存资源)5.yarn.scheduler.minimum-allocation-mb (默认1024MB,单个任务最小申请物理内存量,根据自己的业务设定)
6. yarn.scheduler.maximum-allocation-mb (默认为8291MB,单个任务最大申请物理内存量)
MapReduce调优: (怕数据倾斜)(主要是性能调优)(mapred-default.xml)
 1.数据输入(合并小文件方式)
 //如果不设置InputFormat,它默认用的是TextInputformat.classjob.setInputFormatClass(CombineTextInputFormat.class);

    CombineTextInputFormat.setMaxInputSplitSize(job, 4194304);

    CombineTextInputFormat.setMinInputSplitSize(job, 2097152);2.Map阶段
 减少溢写(spill)次数,减少磁盘IO
 mapreduce.task.io.sort.mb (默认100Mb,实际开发中可设置大一些)
 mapreduce.map.sort.split.precent (一般默认值为80%(写0.8),也可直接设置为100%)
 格式:减少合并(merge)次数,缩短mr处理时间
 mapreduce.task.io.sort.factor (排序文件时,一次最多合并的留数,实际开发中可把这个值设置为100)
 格式:在map之后,不影响业务逻辑前提下,先进行combine处理,减少 I/O
 mapreduce.task.min.num.spills.for.combine (默认值为3,运行combiner时,所需的最少溢出文件数,如果已指定combiner)
 格式:3.Reduce阶段
 mapreduce.job.reduce.slowstart.completedmapsv (默认值0.05,当map task 在执行到5%,就开始为reduce申请资源)
 格式:mapred.job.reduce.input.buffer.percent (默认值为0.0 ,在reduce过程中,内存中保存map输出的空间占整个堆空间的比例,如果reducer需要的内存较少,可以增加这个值来最小化访问磁盘的次数)
 格式:4.Shuffle阶段
 Shuffle过程尽量多地提供内存空间,以防止出现内存溢出现象
 mapred.map.child.java.opts (默认值 -Xmx200吗,在用户不设置的情况下,会以最大1G jvm heap size 启动map task,有可能导致内存溢出,所以最简单的方式就是设大参数,一般设置为 -Xmx1024m)
 格式:mapreduce.reduce.child.java.opts (默认值 -Xmx200吗,在用户不设置的情况下,会以最大1G jvm heap size 启动reduce task,有可能导致内存溢出,所以最简单的方式就是设大参数,一般设置为 -Xmx1024m)
 格式:其他参数调优:(参数配置都在mapred-default.xml)
 mapreduce.map.memory.mb (默认值1024,一个Map Task实际使用的资源上限,如果Map Task实际使用超过这个值吗,则会被强制杀死)
 格式:mapreduce.reduce.memory.mb (默认值为1024一个Reduce Task实际使用的资源上限,如果Map Task实际使用超过这个值吗,则会被强制杀死)
 格式:mapreduce.map.cpu.vcores (默认值为1,每各Map task可使用的最多cpu core数目)
 格式:mapreduce.reduce.cpu.vcores (默认值为1,每各Reduce可使用的最多cpu core数目)
 格式:mapreduce.reduce.shuffer.parallelcopies (默认值为4,每次Map Task 最大重试次数,一旦重试次数超过该值,则认为Map Task 运行失败)
 格式:mapreduce.reduce.maxattempts (默认值为4,每各Reduce Task 最大重试次数,一旦重试参数超过该值,则认为Map Task 运行失败)
 格式:二.集群权限管理 ()
 1. 配置Service Level Authorizationhadoop.security.authorization (core-site.xml)(hadoop.security.authorization=true则开启ServiceLevel Authorization,若为false则不经过任何验证,所有用户拥有全部权限。(修改此配置需要重启hadoop))
 格式:

 hadoop.security.authorization
 true

 2. Service LevelAuthorization有9个可配置的属性,每个属性可指定拥有相应访问权限的用户或者用户组。这9个ACL属性如下(hadoop-policy.xml)
 security.client.protocol.acl
 security.client.datanode.protocol.acl
 security.datanode.protocol.acl
 security.inter.datanode.protocol.acl
 security.namenode.protocol.acl
 security.inter.tracker.protocol.acl
 security.job.submissing.protocol.acl
 security.task.umbilical.protocol.acl
 security.refresh.policy.protocol.acl这9个属性的配置方法相同,具体如下:
 每个可配置多个用户,用户之间用“,”分割;可配置多个用户组,分组之间用“,”分割,用户和分组之间用空格分割,如果只有分组,前面保留一个空格,如:

 security.job.submission.protocol.acl
 alice,bobgroup1,group2

 默认情况下,这9个属性不对任何用户和分组开放。
 该配置文件可使用以下命令动态加载:
 (1)    更新namenode相关属性:bin/hadoop dfsadmin –refreshServiceAcl
 (2)    更新jobtracker相关属性:bin/hadoopmradmin –refreshServiceAcl2.  调度器配置
 mapred.jobtracker.taskScheduler (mapred-site.xml) (启用Access Contol onJob Queues需选择一个支持多队列管理的调度器,所以mapred.jobtracker.taskScheduler只能为CapacityTaskScheduler或FairScheduler。)

 mapred.jobtracker.taskScheduler
 org.apache.hadoop.mapred.CapacityTaskScheduler

 mapred.queue.names (mapred-site.xml) (配置队列)

 mapred.queue.names
 default,hadoop,stat,query

 3、 Access Contol on JobQueues配置
 mapred.acls.enabled (mapred-site.xml)Access Contol on Job Queues开关
 mapred.acls.enabled=true开启,为false关闭。

 mapred.acls.enabled
 true

 具体ACL属性在mapred-queue-acl.xml里,如:

 mapred.queue.stat.acl-submit-job
 user1,user2 group1,group2

 表示user1,user2和group1,group2可以向stat queue提交job。4、 DFS permission配置
 dfs.permission (hdfs-site.xml )
 dfs.permission是否开启文件权限验证,true开启,false不进行读写权限验证。(注:dfs.permission开启与否dfs permission信息都不会改变后丢失,chown、chgrp、chmod操作也始终会验证权限,dfspermission信息只在namenode里,并不在danode里与blocks关联)
 用chown、chgrp、chmod修改文件/目录的属主、属组和权限。

 dfspermission 
 true

 补:Job ACL
 Job ACL默认值配置在mapred-site.xml里,如下:

 mapreduce.job.acl-view-job
 user1


 mapreduce.job.acl-modify-job
 user1

 表示,默认情况下,user1用户拥有job的查看和修改权限。 
 Job提交者可以指定mapreduce.job.acl-view-job和mapreduce.job.acl-modify-job值,提交时指定的值会覆盖默认值。
 Job提交者、superuser、集群管理员(mapreduce.cluster.administrators)、JobQueue管理员始终拥有该权限。三.开启集群
 关闭防火墙
 systemctl stop firewalld
 启动zookeeper(/usr/zookeeper/zookeeper-3.4.10)
 bin/zkServer.sh start //开启
 bin/zkServer.sh stop //关闭
 bin/zkServer.sh status //查看
 启动hadoop(/usr/hadoop/hadoop-2.7.3)
 sbin/start-all.sh
 jps
 可以通过hdfs dfsadmin -report来查看节点数也可浏览器查看                  
 启动hive
 在slave1(服务端)  hive service metastore
 在master(客户端) bin/hive --servivce metastore