大数据维护指南(1)

FI维护组每年遇到的问题几千,相信我们的经验能减少你们的走的弯路。针对大S的开发场景。我个人构建每周一学。主要讲解二次开发,开发过程中的注意点。

spark篇:
1、spark-submit 任务
spark-submit 任务由客户端提交。修改任何配置都只是需客户端Conf下的文件。包括访问hbase,hdfs的客户端参数。

2、如果想修改日志级别,可以修改下面文件的配置。log4j.properties针对dirver.   log4j.executor.properties主要是executor。

3、如果想知道spark-submit 需要添加参数以及参数的意义,执行spark-submit回车。

4、配置分配问题
     如果在dirver端,也就是RDD代码外部加载大量配置,需要将--driver-memory 调大。否则内存溢出。如:--driver-memory =20G
------------------------------------------------
    spark一个core会跑一个task。所以并行能力由num-executors * executor-cores决定。因此需要合理配置
--num-executors 40 
--executor-cores  NUM
一个core 会跑一个task,一个task的内存是executor-memory/executor-cores  .一般配置executor-cores:executor-memory =1:4.内存如果需要多,可以适量增加。不管怎么样,不建议单个executor的内存超过31G,所以相应executor-cores也不要太大。

num-executors 如果资源足够,可以配置足够大。如果不够也不用太担心,顶多就是运行时间长一点。不会导致错误。
--------------------------------------------------
如果你代码需要访问hbase,hdfs等。下面参数一定要加上,否则你肯定会遇到问题,如果还没有遇到,相信我,那只是时间问题。
 --principal PRINCIPAL
 --keytab KEYTAB  
另外通过如果spark访问hbase,就不要在代码里调用hbase的login代码。而是添加参数--conf  "spark.yarn.security.credentials.hbase.enabled=true" ,如果不访问hbase,就一定不要添加了,90%不会出问题,10%的概率你还是会遇到问题的。另外如果你访问hbase而没有添加,你迟早会遇到问题的。

5、keytab文件怎么来,如果不会(不能)下载,找管理员:通过下面命令可以看到--keytab 的值和principal的值。


6、如果有自己需要的特殊配置,如果是spark 配置通过如: --conf  “spark.hadoop.validateOutputSpecs =false” 添加。虽然修改spark-defalt.conf文件也能修改,但是你极有可能影响了别人的业务。如果是hbase,hdfs配置,建议自己安装一个客户端。


hbase 篇:

1、hbase shell ,可以通过help 看到命令,如果想知道具体命令怎么使用,可以通过 “输入命令,回车”,会返回具体的操作步骤。
如:scan 回车

2、如果在命令里看到没有权限,或者乱七八糟的错误,首先想想是否执行过认证
如:


3、hbase的访问不建议使用filter,即使是PrefixFilter。hbase 设计使然。如果业务一定要用。
PrefixFilter过滤器存在设计bug(以为好用其实没有达到理想的结果)。目前建议采用startkey+endkey替代。
其他filter一定会扫描全表。
filter,解决问题方案,
   1)filter+ 修改下面的参数,越大越好

    2)建议采用将所有数据拉回Map后,再做过滤,

4、建表时一定要分区 。一个region的大小由(hbase.hregion.max.filesize)决定,默认10G,所以一般尽量评估全部数据量。通过计算出应该预分的region个数。以减少后续自动分裂。分区决定了以后很多事情。而且要合理分区。

HDFS篇
1、hdfs单个目录下文件有限制 (dfs.namenode.fs-limits.max-directory-items)(1048576)所以写入时一定要注意
2、执行HDFS命令如果有内存溢出。执行如下:
    export HADOOP_CLIENT_OPTS="-Xmx10G"

3、Mapreduce 常用参数 
https://hadoop.apache.org/docs/r2.7.2/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

主要注意的参数如下:
-Dmapreduce.reduce.memory.mb
-Dmapreduce.reduce.cpu.vcores
-Dmapreduce.map.memory.mb
-Dmapreduce.map.cpu.vcores
-Dyarn.app.mapreduce.am.resource.mb   
-Dyarn.app.mapreduce.am.resource.cpu-vcores
mapreduce的map 和reduce个数如果比较多,经常会导致am内存溢出。-Dyarn.app.mapreduce.am.resource.mb     这个参数可以调大到20G。

spark+hbase+kafka篇

1、spark访问kafka 可以使用010的kafka,也可以是使用0.8的jar,但是一定不要混着用。另外建议尽量使用010的kafka jar包。
2、sparkStream的task 并行度由kakfa的partition决定。如果partition不够,spark资源给的再多也是无法。建议kafka设计时多分点partition
3、spark读hbase的并行度由hbase的region个数决定,同样,region不够,spark给多资源是浪费
4、mapreduce的类似,读hbase,regin决定map个数,写 region决定Reduce个数。比如bulkload的reduce个数有hbase的table region个数决定。所以设计表时候合理预分区。
5、spark+Mapreduce读hdfs的map个数由总文件大小/参数(dfs.blocksize)默认128M。但很不幸,对于小文件的。一个文件一个MAP。
例如:1个1M的文件会起一个Map
            1个129M的文件会起2个Map
所以尽量多生成大文件。如果是大文件,可以通过控制dfs.blocksize来控制map的个数。

下一篇,最优代码讲解:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值