【zeppelin】一 zeppelin提交pyspark代码,结果note.json信息太大致使当前notebook无法打开,问题排查与解决过程

版权声明:转载请标明出处。 https://blog.csdn.net/u010720408/article/details/89471026

执行pyspark 的programma片段结果说明

使用RDD的相关运算算子,实现亿级数据用户、设备等相关常用信息。

本以为有zeppelin设置的1000行配置限制与10240000kb没有什么问题。

但因为某步草走,导致结果在ui中显示超过1000行,且致使notebook的note.json超大,超过10MB。

复现问题

后来新建notebook,复现同样问题,note.json瞬间从几十kb 到十几MB,①是结果太大,②异常信息太大,导致note.json中msg中的“data”的value特别特别大。(测试过json只有几百行)

解决尝试 (银行业,太严格只能zeppelin、ambari页面操作)

①一开始只知道hdfs上有note.json,把该json 导到本地文件,在zeppelin的shell环境中尝试sed -i ‘s/[ ]“data”: "."/ “data”:""’/ 替换,再删除hdfs上 该note.json,再把修改的上传上去。
(hdfs 文件无法覆盖,只有追加;)
替换后文件恢复到正常大小。(“data”,对应的就是要print到页面的信息)

结果没有效果,后追踪原因:zeppelin有本地的notebook/AE8CDF1/note.json 这样的文件,与hdfs是对应缓存的,改hdfs没有用。

②尝试ambari中 修改zepelin env 中 msg.limit 改为102400000MB,弹出Consistency Check Failed, 也就是不一致性。

原因(未测试):可能hdsf中与local下 note.json等不一致,也可能是没有local某个目录的权限

③至于为什么不删除notebook,里面大片大片sql、scala、python代码,不像删除和手动输入。删除notebook,重建是最好的,删除之间 从 hdsf 或 local中导出来,手写(notepad替换处理\n等字符)即可。

在使用替换note.json文件后,引发zeppelin重启一直失败

自己当时还不知道local 到hdfs 缓存与一致性,以为都是在hdfs上,(因为当时zeppelin server是有两个的,部署在不同机器上,映射到前端两个port,两个url进去都是同样的notebook的页面,自认为是在hdfs上共享的了,其实不是,只是刚好都在hdfs上缓存,hdsf上的文件也会慢慢影响到local文件,这其中到底怎么个互相影响机制,我也没找到相关文章。)

自己替换后,不像之前测试,直接zeppelin重启一致失败,

扫描二维码关注公众号,回复: 6187919 查看本文章

ambari中 看到的日志是: File Not Found exception : /user/zepplein/interpreter.json

看不出什么玩意,最后让系统管理运维兄弟传来日志看到的ERROR:

ERROR [ ] ***  ZeppelinServer.java *** Error while stopping servlet container
java.lang.NullPointerException
        at org.apache ***
***
MultiException stack 1 of 1
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated object at line 35 column 9
at com.google.gson.Gson.fromJson(Gson.java:805)

后面一直重启失败都是gson相关的报错,无奈只能让系统管理运维兄弟保存出问题的哪个notebook的note.json并传给我,然后删除 hdfs和local上的该文件。

后面发现 hdfs上有这notebook的note.json,但是local上没有,这代表两处不一致,然后zeppelin自己做主删除了local上的,然后就一直重启失败。

note.json打开看了,“data”:"" 替换少了个", 还以为是多了空格导致的。

都怪太自信,前面测试都cat 查看了 替换字符串的结果,后面正式就没查看

总结:

①要细心,替换前查看
②有两处都有文件,自己不了解zeppelin,瞎搞,要换,应当两处都换,但生产环境下使用不便,应当去开发/测试环境去试过后再做(这次也是因为同时要压测jvm性能进行调优,所有大数据组件都关了,本人就直接生产上试了,那只一个note.json居然让整个zeppelin挂,都不捕获异常处理,太自己为是了)
③搞出事了,只能乖乖回归手动时代,去从note.json中提取出之前的代码再敲上去了。代价很痛苦。

猜你喜欢

转载自blog.csdn.net/u010720408/article/details/89471026