取消
顯示的結果
而不是尋找
你的意思是:

newAPIHadoopRDD火花API不檢索聲數據寫入Hbase表

mshettar
新的貢獻者二世

閱讀與幾百HBase表記錄沒有保存(刷新)HDFS並不出現在火花。然而,被迫衝洗後記錄變得可見通過Hbase殼或係統引發衝洗(當Memstore穿過配置閾值的大小),和任何書麵初始衝洗後立即可見的火花。此外,記錄在衝洗前Memstore Hbase-client掃描的api是立即可見的。

注意:我們不能使用spark-hbase連接器作為模式預先是未知的。因此,我們采取使用newAPIHadoopRDD API

引發閱讀API

@transient val配置:配置= HBaseConfiguration.create () conf.set (“hbase.zookeeper。法定人數”,ZOOKEEPER_QUORUM);conf.set (“hbase.zookeeper.property。clientPort”, ZOOKEEPER_PORT);conf.set (TableInputFormat。spark.sparkContext INPUT_TABLE,“測試”)。名為[TableInputFormat], classOf newAPIHadoopRDD(參看,名為[ImmutableBytesWritable], classOf名為[結果])classOf

我們已經嚐試通過自定義掃描對象設置/取消幾個旗幟但沒有人工作。下麵,我們試圖迫使Hbase掃描Api來讀取replica-0但無濟於事。

/ /函數將掃描對象base64字符串def convertScanToString(掃描:掃描):字符串= {val原型= ProtobufUtil.toScan(掃描)Base64.encodeBytes (proto.toByteArray)} @transient val掃描= new掃描()scan.setReplicaId (0) @transient val scanStr = convertScanToString(掃描)@transient val配置:配置= HBaseConfiguration.create () conf.set (“hbase.zookeeper。法定人數”,ZOOKEEPER_QUORUM);conf.set (“hbase.zookeeper.property。clientPort”, ZOOKEEPER_PORT);conf.set (TableInputFormat。spark.sparkContext INPUT_TABLE,“測試”)。名為[TableInputFormat], classOf newAPIHadoopRDD(參看,名為[ImmutableBytesWritable], classOf名為[結果])classOf

Hbase後客戶端閱讀API檢索記錄存儲在Memstore前衝。

val表= connection.getTable (TableName.valueOf (Bytes.toBytes(“測試”)))= val掃描表。scan.asScala getScanner(新掃描())。foreach(結果= > {println(結果)})

2回答2

匿名
不適用

@Manjunath Shettar:

看來,相關的問題是事實,HBase表中的記錄尚未刷新到HDFS,仍然存儲在Memstore。火花的newAPIHadoopRDD API從HBase表讀取數據通過HBase的TableInputFormat,它隻讀取數據持久化(刷新)HDFS。

記錄成為可見的原因被迫衝洗後通過HBase殼或system-triggered平現在是數據持久化到HDFS, TableInputFormat可以讀取。同樣,任何數據寫在最初的衝洗是立即可見的火花,因為它是堅持TableInputFormat HDFS,可以閱讀。

HBase-client的掃描API可以從Memstore讀取數據之前衝洗,因為它直接訪問服務器Memstore HBase地區,繞過需要數據持久化到HDFS。

對於試圖強迫HBase掃描API來讀取replica-0,目前尚不清楚如何replica-0 HBase集群配置設置,是否正確配置和運行。如果replica-0沒有正確配置,然後設置replicaId 0在掃描對象可能沒有任何效果。如果replica-0正確配置,然後還可能需要配置HBase端讀取replica-0, HBase文檔中描述。

至於問題無法使用Spark-HBase連接器,因為模式預先是未知的,一種選擇是動態地推斷出前幾行數據的模式使用火花的DataFrame API。一旦推斷的模式,它可以用來閱讀剩下的數據從HBase表。另一個選擇是手動使用火花的StructType API指定模式,基於已知的HBase表的結構。

mshettar
新的貢獻者二世

嗨@suteja,

謝謝你的回應。我沒有說清楚了聲寫道可見初始衝洗後,我有下麵的解釋。我們的擔憂是關於第3步。/我們的假設,十聲記錄不應該看到火花讀取但在我們的例子中。

  1. Hbase寫100條記錄。(火花讀不可見)
  2. 刷新表。(100條記錄成為火花可見閱讀)
  3. 寫10記錄Hbase。數據還在Memstore但可見火花閱讀。
歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map