2017-06-02 75 views
0

我使用的是Hive和Cassandra,表結構和數據在Hive和Cassandra中都是相同的。將會有近100萬條記錄。我的要求是我需要檢查Cassandra和Hive中的每一行是否具有相同的數據。如何比較Java中的Hive和Cassandra數據時有大約100萬條記錄

  1. 我可以直接比較兩個結果集對象嗎? (一個結果集包含Cassandra數據,另一個結果集來自Hive)
  2. 如果我們遍歷resultset對象,那麼resultset對象可以一次保存100萬條記錄嗎?會有任何性能問題嗎?
  3. 我們在處理如此龐大的數據時需要注意什麼?

回答

2

那麼,一些初始條件對我來說似乎很陌生。 首先,1M記錄對於現代RDBMS並不是什麼大問題,特別是當我們不想實時查詢響應時。其次,Hive和Cassandra表結構的事實是相同的。 Cassandra的範例是查詢優先建模,對於Hive以外的其他場景非常有用。
但是,對於您的問題:
1.是的。您可以編寫Java程序(就像我在標籤列表中看到Java一樣),它將通過JDBC連接到Hive和Cassandra,並逐個比較結果集項目。
但是您需要確定Hive和Cassandra的物品順序是相同的。這可以通過Hive查詢來完成,因爲Cassandra排序的方式並不多。
2.結果集只是一個遊標。它不會收集整個數據在內存中,只是一些記錄(它是可配置的)。
3. 1M或記錄它不是一個龐大的數據,但是,如果你想處理數十億條記錄,就是這樣。但是我不能爲您提供一個銀彈,以回答所有涉及大量數據的問題,因爲每個案例都是特定的。

無論如何,對於您的情況,我有一些擔心:
我沒有最新的Cassandra的JDBC驅動程序功能和限制的詳細信息。
您尚未提供表結構和未來數據增長和複雜性的詳細信息。我的意思是現在你在單個數據庫中有10行1M列,但後來你可以在10個Cassandra節點的集羣中有100M行。
如果這不是問題,那麼你可以嘗試你的解決方案。否則,爲了簡單比較,我建議執行以下操作:
1.將Cassandra的數據導出到Hive。
2.比較兩個Hive表中的數據。
我相信這將是直接和更強大的。

但上述內容並未解決關於您的任務的工具(Hive和Cassandra)選擇的問題。你可以找到更多關於典型的Cassandra使用案例here,以確保你做出了正確的選擇。

相關問題