Pyspark訪問Hbase


作者:Syn良子 出處:http://www.cnblogs.com/cssdongl/p/7347167.html 轉載請注明出處

記錄自己最近抽空折騰虛擬機環境時用spark2.0的pyspark訪問Hbase1.2時遇到的問題及解決過程.


連接准備

快速用pyspark訪問Hbase中的表進行測試,代碼如下(注意,其中的host和inputtable是已經定義好的主機和表名變量)

spark = SparkSession.builder.master("yarn-client").appName("statistics").getOrCreate()

hbaseconf = {"hbase.zookeeper.quorum":host,"hbase.mapreduce.inputtable":inputtable}

keyConv = "org.apache.spark.examples.pythonconverters.ImmutableBytesWritableToStringConverter"

valueConv = "org.apache.spark.examples.pythonconverters.HBaseResultToStringConverter"

hbase_rdd = spark.sparkContext.newAPIHadoopRDD(\
"org.apache.hadoop.hbase.mapreduce.TableInputFormat",\
"org.apache.hadoop.hbase.io.ImmutableBytesWritable",\
"org.apache.hadoop.hbase.client.Result",\
keyConverter=keyConv, valueConverter=valueConv, conf=hbaseconf)

hbase_rdd.count()


發現問題

執行上面的pyspark代碼測試,結果報錯如下圖所示

額,看着這個熟悉的異常讓我莫名尷尬,ClassNotFoundException...那就是說此時spark訪問hbase時依賴的一些hbase jar包沒有在classpath中找到.那么將其加入classpath即可.

解決問題

找到hbase1.2根目錄下lib文件夾下的所有jar包,將其拷貝到spark所在節點的自己專門存放jar包的目錄下,我這里路徑假設是/home/hadoop/scripts/sparkStatistics/workJars/hbaseJars,然后有二種方法將其加入spark的classpath,如下

  • 修改spark-env.sh中的SPARK_CLASSPATH,比如
    export SPARK_CLASSPATH=/home/hadoop/scripts/sparkStatistics/workJars/hbaseJars/*

或者

  • 修改spark-defaults.conf,如下
    spark.executor.extraClassPath=/home/hadoop/scripts/sparkStatistics/workJars/hbaseJars/*
    spark.driver.extraClassPath=/home/hadoop/scripts/sparkStatistics/workJars/hbaseJars/*

二種方式都可以,但是第一種修改spark-env.sh的方式在spark1.0之前比較推薦,之后的版本建議用第二種方式.
我用的第二種方式,修改完成后重啟spark集群.測試pyspark代碼,訪問hbase表成功無異常.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM