分布式引擎维护常见问题

编辑
文档创建者:doreen0813 (83193 )     浏览次数:216次     编辑次数:5次     最近更新:doreen0813 于 2018-11-01     

目录:

1、Alluxio问题类编辑

1.1 hdfs租约未释放,alluxio无法启动

现象:

其他分布式引擎服务(hdfs,spark,zookeeper)可以正常启动,但是ALLUXIO服务无法启动

场景:

Alluxio服务无法启动,查看Alluxio Master的日志(日志默认的路径为/home/hdfs/data/alluxio/logs/master.log)中有如下显示:ERROR logger.type (HdfsUnderFileSystem.java:open) - 1 try to open hdfs://ns/alluxio/journal/BlockMaster/completed/log.00000000000000000001 : Cannot obtain block length for LocatedBlock

日志截图:

222

问题原因分析:

由于HDFS中的租约未释放导致的,在HDFS中alluxio的日志文件处于written的状态,需要手动去hdfs的节点机器上释放相应的租约。  

解决方案:

执行如下命令:hdfs debug recoverLease -path /alluxio/journal/BlockMaster/completed/log.00000000000000000001,释放文件租约。

注意需要切换到hdfs用户,上述文件是示例实际文件按照具体的日志文件,可能会存在多个文件的情况。   

备注:如上述方案解决不了请联系帆软技术支持。(现有的alluxio中已经处理过这个问题,不在会出现租约问题。)

1.2 alluxio启动,master的WebUI可以访问,但是没有worker

现象:alluxio启动,master的WebUI可以访问,但是没有worker。

问题原因分析:alluxio启动的时候主节点存在切换的情况,而workers依旧连接的旧的master。导致新的master没有注册到worker。worker需要等待超时才会重新连接,而默认的超时时间为10min,可用过ambari页面配置该时间。

解决方案:用过ambari页面配置时间alluxio.security.authentication.socket.timeout.ms=30000

1.3 alluxio写入不成功

现象:

其他分布式引擎服务(hdfs,spark,zookeeper)正常,但是ALLUXIO写入失败

场景:

当alluxio内存快用完的时候,alluxio无法写入

2017-12-13 14:33:06,762 ERROR logger.type (BlockDataServerHandler.java:handleBlockWriteRequest) - Error writing remote block : Failed to allocate 983018 bytes after 3 retries for blockId 18155783061504

日志截图:

222

问题原因分析:

alluxio内存不足的时候会将内存的内容换出到磁盘以释放空间,但是释放的空间会被别的线程用掉,导致出错线程虽然一直在释放,但是却拿不到可用空间。

解决方案:

在alluxio-site.properties中增加配置,alluxio.worker.tieredstore.retry=50,重启alluxio即可。

1.4 alluxio block id已经存在

现象:

其他分布式引擎服务(hdfs,spark,zookeeper)正常,但是ALLUXIO写入失败

场景:

spider 的 log 中Failed to cache: java.io.IOException: Error writing blockId: 3058218041344, sessionId: 3591269729003750361, address: BIDB114/91.12.75.114:29999, message: Failed to write block.

日志截图:

222

在 alluxio 的 worker 日志中有以下异常:

222

问题原因分析:

block id 在 worker 已经存在,导致创建的时候抛出异常;

解决方案:

1.关闭 BI,关闭 Allxuio;

2.在每台机器上执行

alluxio getConf alluxio.worker.tieredstore.level1.dirs.path

获得 HDD 的路径

(如果 alluxio 路径不存在,尝试执行:/usr/hdp/2.6.2.0-205/alluxio/bin/alluxio getConf alluxio.worker.tieredstore.level1.dirs.path)

3.该路径下会有一个 alluxioworker 文件夹,删除该文件夹下的全部文件;

4.重启 alluxio,重启BI;

注:1.没有抽取完成的需要重新抽取,已经抽取完的不影响; 2.可以对 Master 进行 format,不需要对 Worker 做 format。Worker 的 format会将 HDFS 中持久化的数据一并删除,这样需要重写导数。

2、HDFS问题类编辑

2.1 做过了HA的HDFS服务无法正常启动

现象:

Ambari启动做过HA的HDFS以后出现了两个NameNode都是StandBy的情况,hdfs服务无法正常启动

场景:

ambari启动后,发现两个NameNode都是StandBy的,并且无法正常启动

日志截图:

222

问题原因分析:

由于HDFS异常结束,JouranlNode状态异常导致,在JournalNodes中有edits_inporgress_xxxxxx的文件存在,这写文件需要被移除

解决方案:

在所有的hdfs安装JouranlNodes的节点上查看 /hadoop/hdfs/journal/ns/current/ 文件目录是否有edits_inporgress_xxxxxx这样的文件,移除即可

rm /hadoop/hdfs/journal/ns/current/edits_inporgress_xxxxxx

3、Spark问题类编辑

3.1 分布式计算的时候spark获取不到资源

现象:

alluxio抽数正常,但是在分布式计算的时候spark获取不到资源(在memory和cores都配置正确的情况下

场景:

获取不到worker资源,控制台不停的输出以下warning:WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

日志截图:

222

问题原因分析:

当BI工程所在的机器有多个网卡(IP)或者设置过了vpn以后,sparkconf获取到了没法连接到spark分布式的ip

解决方案:

在BI分布式的配置文件distributed.properties中指定的IP,加入参数distributed.spark.driver.host=可以连接到spark分布式的IP

3.2 Spark界面发现有存在遗留的app占用着资源

现象:

FineBI连接了分布式,在关闭BI并重新打开后,发现BI登录不上有报错,此时检查Spark界面发现有存在遗留的app占用着资源。

222

问题原因分析:

在关闭FineBI后,Spark分布式中仍然遗留着app占用了资源,导致重新打开BI后,新的app申请不到资源,登录不上。

解决方案:

检查Spark界面发现确实有遗留的app占用着资源,点击kill将遗留的app关掉,如下图:

222

3.3 分布式锁和spark资源不足,导致互锁

现象:

用kettle删除数据,正常流程删除几万大概在10多s,偶尔会出现卡住, 然后报错,修改默认锁等待时间为10min,卡住时间也变为大概10min

场景:

多个应用一起操作一个分布式引擎的时候,spark资源不足。

222

可以直接看spark UI界面,看有无spark资源等待,如有,并且报错信息或者行号与锁有关(也可以直接到zookeeper查看锁资源占用),则基本确定是此问题。

问题原因分析:

spark资源是application级别的,kettle启动 -> 资源占用 kettle关闭 -> 资源释放

lock资源是运行级别的 开始运行 -> 加锁 运行完毕 -> 解锁

1. 先启动 kettle1 -> (运行一下,会成功) 它会先占用spark的资源 (运行的时候加锁,运行完成锁释放)
2. 然后再启动 kettle2,spark内存不够,等待资源
3. kettle2 点执行 -> kettle2会取得锁,但是取到锁之后想拉spark任务,是等待状态
4. kettle1再点执行 -> kettle1虽然有spark资源,但是呢,取不到锁
锁等待时间配置为了10min,10分钟过后报错。 (第二次执行失败)
如果有人把别处的kettle2关闭了,这时候kettle1 就又好了

上面的kettle1和kettle2可能不是同一个人,也可以不是同一个机器,只要是操作同一个表就有问题

解决方案:有如下很多种

1. 保证不会同时运行两个kettle应用。根据客户现场实际情况,一般不会出现多个kettle同时导入的场景,如果有此情况,想办法在不同的时间运行;如果客户比较特殊,不得不同时,见下

2. Kettle采用本地spark,不用共享的spark资源:在分布式配置文件(distributed.properties)文件中设置:distributed.spark.local.mode=true

3. 减少Kettle的Spark资源占用,令spark server的资源可以同时启动多个kettle而不需要等待: 在分布式配置文件(distributed.properties)文件中,根据spark服务器的实际资源,配置内存( 如distributed.spark.executor.memory=2g) 和 核心数(如 distributed.spark.executor.cores=4)

注:此问题并不是只在kettle场景下出现,比如部署多台FineBI分布式引擎,spark资源分配不足,导致有FineBI机器没有分配到spark资源,也极有可能出现上述问题 (解决方案同上第3点,修改分布式配置文件,改内存和核心数占用,或者联系开发人员,重新规划spark server的整体资源分配)。  

3.4 spark 临时目录空间不足

现象:

FineBI连接了分布式,抽数失败。并且日志中报错如下:

14:40:23 http-nio-37799-exec-24 ERROR [standard] Job aborted due to stage failure: Task 0 in stage 2454.0 failed 4 times, most recent failure: Lost task 0.3 in stage 2454.0 (TID 18375, i-8m7ope9g, executor 2): java.io.FileNotFoundException: /tmp/spark-903244ba-4d5a-446f-b67e-8e95309c68b6/executor-cd591197-d452-4421-a776-93c6404d18b9/blockmgr-3deab159-41ec-472f-86ee-5a7626e85622/31/shuffle_1121_0_0.data.4d7755e7-0a8f-49d0-88e2-58b8daeb46c2 (No such file or directory)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(FileOutputStream.java:270)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
    at org.apache.spark.storage.DiskBlockObjectWriter.initialize(DiskBlockObjectWriter.scala:103)
    at org.apache.spark.storage.DiskBlockObjectWriter.open(DiskBlockObjectWriter.scala:116)
    at org.apache.spark.storage.DiskBlockObjectWriter.write(DiskBlockObjectWriter.scala:237)
    at org.apache.spark.util.collection.WritablePartitionedPairCollection$$anon$1.writeNext(WritablePartitionedPairCollection.scala:56)
    at org.apache.spark.util.collection.ExternalSorter.writePartitionedFile(ExternalSorter.scala:699)
    at org.apache.spark.shuffle.sort.SortShuffleWriter.write(SortShuffleWriter.scala:72)
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:96)
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:53)
    at org.apache.spark.scheduler.Task.run(Task.scala:109)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:345)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:748)

原因分析:

spark 临时目录空间不足;

解决方案:

1、登录ambari页面;

2、找到spark的配置页面;

3、确认spark_worker_dir的路径是不是在最大的磁盘下(不在的话,重新配置到最大空间的路径下);

4、在spark-env中的content内加入,如果存在则改为如下,不存在则直接新增:
export SPARK_WORKER_DIR={{spark_worker_dir}}
export SPARK_LOCAL_DIRS={{spark_worker_dir}}

如下图:
222
注:如果已经是配置在最大磁盘空间,且磁盘空间不足。则需要沟通扩容。 

4、其他分类编辑

4.1 Windows系统安装BI,连接分布式引擎,可以抽数但是模板编辑、预览出不来数据

现象:

222

问题原因分析:

BI和分布式之间存在通信。而BI所在的windows系统的防火墙未将BI应用允许访问。导致分布式无法访问到BI的端口,从而spark计算失败。

解决方案:

设置windows系统的防火墙,将BI设置为允许访问。参考如下,具体环境也可自行查找操作方式。

222

4.2 BI所有的组件,正常运行后崩溃,进程退出

现象:

BI所有的组件(BI本身,分布式引擎组件(spark,alluxio,hdfs)),正常运行后崩溃,进程退出,检查崩溃日志,发现是mmap失败,提示内存不足

场景:

以BI崩溃为例,容易发生在抽数过程中,BI的tomcat进程崩溃了,检查日志发现是mmap失败,并且可能出现BI启动会立刻崩溃,同样是mmap失败,提示内存不足,但是free检查发现系统有足够的内存

222

检查系统参数sysctl -a | grep "vm.overcommit_memory"为2

问题原因分析:

linux 内存分配限制,系统申请的内存总额(不是实际使用内存)超过限制,无法正常申请

解决方案:

修改内存申请限制策略为0

编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效

或者sysctl vm.overcommit_memory=1

4.3 Ambari启动任一服务都报错

现象:

用ambari启动分布式引擎的任一服务都启动失败,报错如下:

222

问题原因分析:

/usr/hdp 目录下放置了非ambari配置的文件

解决方案:

检查报错机器的/usr/hdp目录,应该只有两个文件夹,如下图:

222

将多余文件删除即可。

4.4 spark任务失败,报错Remote RPC client disassociated

现象:

spark运行过程中,出现任务失败的情况,具体报错是Remote RPC client disassociated。检查linux系统日志(/var/log/messages),对应时间点有杀死进程日志

222

222

问题原因分析:

使用内存超过linux上限,导致linux oom killer 杀掉进程

解决方案:

调整组件内存大小,如alluxio mem调小

4.5 Ambari添加节点,连不上ambari repo

现象:

ambari添加节点,连接ambari repo时失败

222

问题原因分析:

http服务未启动

解决方案:

执行service httpd start命令启动http服务,如果启动失败,可能是selinux未关闭。通过getenforce来进行检查,setenforce 0 进行selinux的关闭

注:该设置为自动化部署脚本问题,在新版本中已经修复。


附件列表


主题: 部署集成
标签: 暂无标签 编辑/添加标签
如果您认为本文档还有待完善,请编辑

文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

本文档是否有用? [ 去社区提问 ]