Я пытаюсь запросить сохраненные данные, которые находятся в HBase, для использования Spark ML в AWS EMR. Должен ли я извлекать данные как RDD (как это делается ниже), или я должен использовать Phoenix, чтобы попытаться запросить данные в качестве Dataframe?
Я пытался как вставить данные в Spark через HBase RDD, так и через Phoenix. Однако я столкнулся с осложнениями с обоими методами.
import org.apache.hadoop.hbase.{ HBaseConfiguration, HColumnDescriptor, HTableDescriptor }
import org.apache.hadoop.hbase.client.{ HBaseAdmin, Put, Result, HTable }
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.mapred.TableOutputFormat
import org.apache.hadoop.hbase.mapreduce.TableOutputFormat
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.mapred.JobConf
import org.apache.hadoop.hbase.client.ConnectionFactory
import org.apache.hadoop.hbase.client.Result
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.rdd.{ PairRDDFunctions, RDD }
import org.apache.spark.streaming._
import org.apache.spark.streaming.StreamingContext._
import org.apache.spark._
import org.apache.spark.rdd.NewHadoopRDD
import org.apache.hadoop.fs.Path
val sparkConf = new SparkConf().setAppName("HBaseGet").setMaster("local[2]")
val sc = new SparkContext(sparkConf)
val conf = HBaseConfiguration.create()
val tableName = "test_hbase2"
System.setProperty("user.name", "hdfs")
System.setProperty("HADOOP_USER_NAME", "hdfs")
conf.set("hbase.master", "localhost:60000")
conf.setInt("timeout", 120000)
conf.set("hbase.zookeeper.quorum", "localhost")
conf.set("zookeeper.znode.parent", "/hbase-unsecure")
conf.set(TableInputFormat.INPUT_TABLE, tableName)
conf.set(TableInputFormat.SCAN_ROW_START, "row1");
conf.set(TableInputFormat.SCAN_ROW_STOP, "row2");
conf.addResource(new Path("/usr/hdp/current/hbase-client/conf/hbase-site.xml"))
println("Number of Records found : " + hBaseRDD.count())
После выполнения я не получаю никакого вывода, я получаю следующую ошибку:
org.apache.hadoop.hbase.client.RetriesExhaustedException: Can't get the location for replica 0