Hadoop运维记录系列(十七)

上个月经过email,帮朋友的朋友解决了一个Cloudera的Spark-SQL没法访问HBase作数据分析的问题,记录一下。
sql


首先,对方已经作好了Hive访问HBase,因此spark-sql原则上能够经过调用Hive的元数据来访问Hbase。可是执行极慢,并且日志无报错。中间都是邮件沟通,先问了几个问题,是否启用了Kerberos,是否Hive访问Hbase正常,HBase shell访问数据是否正常等等,回答说没有用Kerberos,Hive访问Hbase正常,spark-sql读取Hive元数据也正常,Hbase shell也正常,就是spark-sql跑不了。shell


其次,对方有两套环境,实验室环境能够跑,可是生产环境不能跑,而后实验室和生产环境版本和各类xml配置都彻底同样,因此实在找不到不能跑的缘由了。apache


前期看日志,因为没有任何WARN或ERROR,因此很难排查,初步推断是因为配置错误形成的,可是哪里配置错误,由于都是邮件,没法肯定。后来对方又发过来一个日志,说约3小时后报错,显示以下。bash

Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times, most recent failure: Lost task 0.3 in stage 0.0 (TID 3, BData-h2): org.apache.hadoop.hbase.client.NoServerForRegionException: Unable to find region for in xxxxxxxx after 35 tries.

spark界面中的这段报错证实了确实是配置错误的这个推断,这个报错一般是因为Spark没法经过API访问Hbase的Region形成的。那么,若是是cloudera版的,都是预先就已经作好兼容性了,因此能够排除因兼容性问题致使的没法访问,那么只能有一个缘由就是配置错误。ide


接着对比了一下实验室环境和生产环境的spark启动日志,发现两边所加载的jar包不一致,推断是spark-env或者是hbase-env配置有出入致使的,将这一推断告知对方,并建议将hbase/lib/*和hbase-site.xml等文件写入到spark的SPARK_DIST_CLASSPATH中。因而对方将hbase/lib和/etc/hbase/conf路径添加到SPARK_DIST_CLASSPATH中,问题解决。oop


这个排错是个特别小的问题,可是本着可能会对他人有帮助,同时本身别忘了的原则,仍是记录一下。spa

相关文章
相关标签/搜索