从读取数据和写入数据两个方面:
1.写入数据:
(将结果RDD保存到HBase表中):
TableOutputFormat:
(RDD的数据变成key - value)
- key:rowkey,ImmutableBytesWritable
- value:Put
def saveAsNewAPIHadoopDataset(conf: Configuration): Unit
(属于PairRDDFunctions类中函数,所有RDD的类型必须是二元组)
RDD[(ImmutableBytesWritable,put)]
2.读取数据 (从HBase表中读取数据,分析数据)
TableInputFormat:
一条一条的数据读取, 每条变成key/value对:
- key:rowkey,ImmutableBytesWritable
- valule:Result
def newAPIHadoopRDD[K, V, F <: NewInputFormat[K, V]](
conf: Configuration = hadoopConfiguration,
fClass: Class[F],
kClass: Class[K],
vClass: Class[V]): RDD[(K, V)] = withScope
additionly:
spark序列化
- 现象
java.io.NotSerializableException: org.apache.hadoop.hbase.io.ImmutableBytesWritable - 原因
ImmutableBytesWritable不能进行序列化(Java中,如果类需要序列化需要实现Serializable)
解决
spark提供2中序列化,Java序列化和Kryo序列化