簡體   English   中英

本地測試 Spark Sql 查詢

[英]Test Spark Sql Queries Local

最近我在一個 Spark 應用程序中工作,作為項目的一部分,從 HBase 服務器讀取數據集,Spark sql 修改讀取的數據並保存到 Kafka。

我面臨的問題是我無法在本地測試 spark.sql。 每次我必須提交應用程序jar並在服務器中運行。 在 Sql 中,我們有工具來測試本地環境中的所有查詢。

有沒有辦法或其他工具可以通過從 HBase 讀取數據來在本地測試 spark sql?

我試過 hbaseExplorer 但它沒有解決問題。

謝謝,

如果您正在談論對 Spark SQL 查詢進行單元測試。 您始終可以在本地創建 DataSet 並針對它們運行查詢

scala> val df = List(( 1 , false , 1.0 ),
 |         (2 , true , 2.0 )
 |         ).toDF("col1", "col2","col3" )
 df: org.apache.spark.sql.DataFrame = [col1: int, col2: boolean ... 1 more field]
 scala> df.registerTempTable("myTable")
 scala> sql("select sum(col3) from myTable").show
 +---------+
 |sum(col3)|
 +---------+
 |      3.0|
 +---------+

使用Apache Phoenix

如果您有權訪問Apache Phoenix ,請在本地打開 spark-shell 並使用 JDBC 連接詳細信息連接到Apache Phoenix

使用Direct Connection to HBase您也可以直接從本地spark-shell連接HBase ,如果您的集群是安全的或啟用了 kerbrose,這有點困難。

使用Export Sample Data (簡單的方法,也會節省大量時間。)

出於測試目的,

  1. 將 HBase 中的示例數據導出為jsoncsv或您喜歡的任何其他格式
  2. 將該數據下載到您的本地系統中。
  3. 使用 spark shell 使用此命令創建與 HBase 表結構相同的表 - spark.sql('CREATE TABLE HbaseTable ..')
  4. 將下載的樣本數據加載到DataFrame
  5. DataFrame數據寫入新創建的表。

檢查以下步驟供您參考。


/tmp/spark > ls -ltr
total 0
drwxr-xr-x  14 srinivas  wheel  448 Nov 20 02:45 data
/tmp/spark > ls -ltr data
total 40
-rw-r--r--  1 srinivas  wheel  9 Nov 20 02:45 part-00000-4f5f5245-f664-426b-8204-a981871a1205-c000.json
-rw-r--r--  1 srinivas  wheel  9 Nov 20 02:45 part-00004-4f5f5245-f664-426b-8204-a981871a1205-c000.json
-rw-r--r--  1 srinivas  wheel  9 Nov 20 02:45 part-00002-4f5f5245-f664-426b-8204-a981871a1205-c000.json
-rw-r--r--  1 srinivas  wheel  9 Nov 20 02:45 part-00003-4f5f5245-f664-426b-8204-a981871a1205-c000.json
-rw-r--r--  1 srinivas  wheel  9 Nov 20 02:45 part-00001-4f5f5245-f664-426b-8204-a981871a1205-c000.json

在路徑/tmp/spark打開spark-shell

/tmp/spark > spark-shell

scala> val df = spark.read.json("/tmp/spark/data")
df: org.apache.spark.sql.DataFrame = [id: bigint]

scala> spark.sql("create table HBaseTable(id int) stored as orc")
res0: org.apache.spark.sql.DataFrame = []

scala> df.write.insertInto("HbaseTable")

scala> spark.sql("select * from HbaseTable").show(false)
+---+
|id |
+---+
|4  |
|3  |
|1  |
|5  |
|2  |
+---+
scala> :q
/tmp/spark > ls -ltr
total 8
drwxr-xr-x  14 srinivas  wheel  448 Nov 20 02:45 data
-rw-r--r--   1 srinivas  wheel  700 Nov 20 02:45 derby.log
drwxr-xr-x   9 srinivas  wheel  288 Nov 20 02:45 metastore_db
drwxr-xr-x   3 srinivas  wheel   96 Nov 20 02:46 spark-warehouse
/tmp/spark > ls -ltr spark-warehouse
total 0
drwxr-xr-x  12 srinivas  wheel  384 Nov 20 02:46 hbasetable
/tmp/spark > ls -ltr spark-warehouse/hbasetable
total 40
-rwxr-xr-x  1 srinivas  wheel  196 Nov 20 02:46 part-00002-5a3504cd-71c1-46fa-833f-76bf9178e46f-c000
-rwxr-xr-x  1 srinivas  wheel  196 Nov 20 02:46 part-00001-5a3504cd-71c1-46fa-833f-76bf9178e46f-c000
-rwxr-xr-x  1 srinivas  wheel  196 Nov 20 02:46 part-00003-5a3504cd-71c1-46fa-833f-76bf9178e46f-c000
-rwxr-xr-x  1 srinivas  wheel  196 Nov 20 02:46 part-00000-5a3504cd-71c1-46fa-833f-76bf9178e46f-c000
-rwxr-xr-x  1 srinivas  wheel  196 Nov 20 02:46 part-00004-5a3504cd-71c1-46fa-833f-76bf9178e46f-c000

注意- 從下一次開始,如果您想對您的 hbase 數據進行任何測試,您必須從/tmp/spark與您創建table同一目錄中打開您的 spark-shell,如果您在不同的位置打開 spark-shell,它將無法正常工作目錄並訪問HbaseTable表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM