spark 連線hbase
阿新 • • 發佈:2019-02-06
一、環境準備
1、複製HBase目錄下的lib檔案 到 spark目錄/lib/hbase。spark 依賴此lib
清單如下:guava-12.0.1.jar htrace-core-3.1.0-incubating.jar protobuf-java-2.5.0.jar 這三個jar加上以hbase開頭所有jar,其它就不必了。全部複製會引起報錯。
2、修改spark配置檔案(spark-env.sh),在最後面增加一行
export SPARK_CLASSPATH=/usr/local/spark-1.5.1-bin-hadoop2.4/lib/hbase/*
重啟spark叢集,然後執行操作
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin ;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;
#主要是下面幾個包
import org.apache .hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.client.Result
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
val conf = HBaseConfiguration.create()
conf.set(TableInputFormat.INPUT_TABLE,"thd")
val rdd = sc.newAPIHadoopRDD(conf,classOf[TableInputFormat],classOf[ImmutableBytesWritable],classOf[Result])
此時如果檢視rdd.take(1)執行得到後可能會報錯
ERROR Executor: Exception in task 0.0 in stage 14.0 (TID 14)
java.io.NotSerializableException: org.apache.hadoop.hbase.io.ImmutableBytesWritable
rdd裡的內容需要轉化成string
執行rdd.map(_.toString)
之後正常,從而可以利用spark對hbase進行rdd操作了…