hive写HBase报错org.apache.hadoop.hbase.RegionTooBusyException: StoreTooBusy,

在使用HiveOnTez通过Phoenix写入Hbase时遇到CommitException,原因是表的联合主键的第一个字段存在大量重复导致数据倾斜。切换到HiveOnMR执行,并设置map任务数量及max.split.size,成功将数据较慢地写入HBase。

Hive On Tez写通过Phoenix写Hbase时,报错:

aused by: org.apache.phoenix.execute.CommitException: org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException: Failed 10 actions: org.apache.hadoop.hbase.RegionTooBusyException: StoreTooBusy,1673417396340.7e890eda7bad66e304ce311bc81ca481.:0 Above parallelPutToStoreThreadLimit(10)

是因为表是联合主键,第一个字段出现了大量的重复,出现了数据倾斜。

将Hive On Tez改成Hive On MR来执行,并设置map数。

set hive.execution.engine=mr;

set mapred.map.tasks=1; 期望map数

set mapred.max.split.size=256000000000;

改成MapReduce的方式,花较长时间将数据写到了HBase。

出现 `Job aborted due to stage failure`,`Task 1 in stage 2.0 failed 4 times`,`org.apache.hadoop.hbase.DoNotRetryIOException: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.spark.SparkSQLPushDownFilter` 这类错误,通常是由于类路径问题导致 Spark 无法找到所需的 HBase 相关类。以下是可能的解决办法: ### 检查依赖 确保在 Spark 环境中包含了 HBaseHBase Spark 集成的相关依赖。如果使用的是 Maven 项目,可以在 `pom.xml` 中添加以下依赖: ```xml <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-spark</artifactId> <version>你的 HBase 版本号</version> </dependency> ``` 如果是使用 Spark 提交任务,可以通过 `--jars` 参数指定 HBase Spark 集成的 JAR 文件路径,例如: ```bash spark-submit --jars /path/to/hbase-spark-<version>.jar your_script.py ``` ### 检查环境变量 确保 HBaseHadoop 的环境变量配置正确。可以参考引用 [3] 中配置 Hadoop 环境变量的方法,配置 `HADOOP_CONF_DIR` 和 `YARN_CONF_DIR` 等环境变量。例如: ```bash export HADOOP_HOME=/u01/hadoop-2.6.1 export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$SQOOP_HOME/bin:$HIVE_HOME/bin:$HADOOP_HOME/bin ``` ### 检查 HBase 配置 确保 HBase 的配置文件(如 `hbase-site.xml`)正确配置,并且 Spark 能够访问这些配置文件。可以将 HBase 的配置文件复制到 Spark 的配置目录下,或者在 Spark 代码中显式指定 HBase 配置文件的路径。 ### 检查版本兼容性 确保 HBaseHadoop 和 Spark 的版本相互兼容。不同版本之间可能存在不兼容的问题,建议使用官方推荐的版本组合。 ### 示例代码 以下是一个简单的 Spark 代码示例,展示如何读取 HBase 表: ```python from pyspark import SparkConf, SparkContext conf = SparkConf().setMaster("local").setAppName("ReadHBase") sc = SparkContext(conf=conf) host = 'localhost' table = 'your_table_name' conf = {"hbase.zookeeper.quorum": host, "hbase.mapreduce.inputtable": table} keyConv = "org.apache.spark.examples.pythonconverters.ImmutableBytesWritableToStringConverter" valueConv = "org.apache.spark.examples.pythonconverters.HBaseResultToStringConverter" hbase_rdd = sc.newAPIHadoopRDD( "org.apache.hadoop.hbase.mapreduce.TableInputFormat", "org.apache.hadoop.hbase.io.ImmutableBytesWritable", "org.apache.hadoop.hbase.client.Result", keyConverter=keyConv, valueConverter=valueConv, conf=conf ) count = hbase_rdd.count() hbase_rdd.cache() output = hbase_rdd.collect() for (k, v) in output: print(k, v) ``` ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值