前面我們使用spark訪問了mysql以及hive,接下來我們將使用spark訪問hbase。
1 系統、軟件以及前提約束
- CentOS 7 64 工作站 作者的機子ip是192.168.100.200,主機名為danji,請讀者根據自己實際情況設置
- 已完成spark訪問mysql
https://www.jianshu.com/p/2b4471c03fea - 已完成spark訪問Hive
https://www.jianshu.com/p/3965abe4d593 - 已安裝hbase,並生成表和寫入記錄
https://www.jianshu.com/p/51fb48f7d1ea
作者生成的表為t1,列簇為f1,f1中的列包含name, age。請讀者根據實際情況設置。 - idea 2018.1
- 為去除權限對操作的影響,所有操作都以root進行,確保hbase啟動,spark啟動,hadoop啟動。
2 操作
- 1 在win10的idea中創建一個sbt項目
- 2 修改其中的build.sbt
name := "sbt-spark"
version := "0.1"
scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0"
libraryDependencies += "org.apache.hbase" % "hbase-client" % "1.1.5"
libraryDependencies += "org.apache.hbase" % "hbase-common" % "1.1.5"
libraryDependencies += "org.apache.hbase" % "hbase-server" % "1.1.5"
需要等待jar包下載完畢。
- 3 在src/main/scala中新建一個SparkOprHbase
import org.apache.hadoop.hbase._
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.hbase.util.Bytes
import org.apache.spark.{SparkConf, SparkContext}
object SparkOperateHBase {
def main(args: Array[String]) {
val conf = HBaseConfiguration.create()
val sc = new SparkContext(new SparkConf())
//設置查詢的表名
conf.set(TableInputFormat.INPUT_TABLE, "t1")
val stuRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat],
classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
classOf[org.apache.hadoop.hbase.client.Result])
stuRDD.cache()
//遍歷輸出
stuRDD.foreach({ case (_,result) =>
val key = Bytes.toString(result.getRow)
val name = Bytes.toString(result.getValue("f1".getBytes,"name".getBytes))
val age = Bytes.toString(result.getValue("f1".getBytes,"age".getBytes))
println("Row key:"+key+" Name:"+name+" Age:"+age)
})
}
}
- 4 使用sbt打包,生成sbt-spark_2.11-0.1.jar,並上傳到linux的/root目錄下
- 5 使用xshell登錄到linux,拷貝jar包
cd /root/spark-2.2.1-bin-hadoop2.7/jars
mkdir hbase
cd hbase
cp /root/hbase-1.2.6/lib/hbase-*.jar .
cp /root/hbase-1.2.6/lib/guava-12.0.1.jar .
pc /root/hbase-1.2.6/lib/htrace-core-3.1.0-incubating.jar .
cp /root/hbase-1.2.6/lib/htrace-core-3.1.0-incubating.jar .
cp /root/hbase-1.2.6/lib/protobuf-java-2.5.0.jar .
cp /root/hbase-1.2.6/lib/metrics-core-2.2.0.jar .
- 6 提交任務到spark
cd /root/spark-2.2.1-bin-hadoop2.7/bin
./spark-submit --driver-class-path /root/spark-2.2.1-bin-hadoop2.7/jars/hbase/*:/root/hbase-1.2.6/conf/* --class "SparkOperateHBase" /root/sbt-spark_2.11-0.1.jar
等待一段時間,查看打印結果。
以上就是spark訪問hbase的過程。