Category: Big Data & Machine Learning

apache-spark

[BigData] 客製化 Apache Spark 在 ARM64 架構上

在創建以 Spark 為基礎的應用程式的時候,基本上都會直接下載 Spark 官網打包好的程式碼,在官網上的 Spark 是以 Intel x86 架構為主的,由於 Java 並沒有架構上的差異,所以之前在 Spark K8S 並沒有遇到一樣的問題,但是在一次實務上驅動 Spark Standalone 的時候遇到以下的錯誤訊息,主要是跟 External Shuffle Service 有關,這個錯誤並不會出現在以 Spark K8S 為方式驅動的應用,但是 External Shuffle Manager 會遇到,所以筆者才會需要利用 Spark 提供的 make-distribution.sh 檔案去重新打包 Apache Spark 在 ARM64 架構上。

詳細內容

[GPU] 加速主成分分析 (PCA)

檸檬爸幾年前有分享過一篇主成分分析 (Principle Component Analysis) 原理的文章,由於 PCA 其實就是矩陣的運算,所以非常適合使用分散式運算來做加速,不論是 Spark 或是 GPU 的架構都很適合,Spark MLlib 本身就可以加速 PCA 等機器學習的運算,使用 cuML + GPU 根據 Nvidia Blog 的數據,加速的效果更加明顯,本篇想要紀錄如何導入 GPU 到 PCA 等等傳統的機器學習運算?

詳細內容
apache-spark

[BigData] 實作 Spark 將 MSSQL 檔案平行匯出

Spark 2.1.0 之後,JDBC (Java Database Connectivity) 被引入作為一個 Spark 應用的其中一種輸入,在數位轉型的過程中我們很常需要將企業中的資料倉儲匯入資料湖庫,為了省去資料轉換的功夫,最好的方法就是直接將 RDBMS 的資料直接轉進 Datalake 裡面,本篇希望紀錄在 Spark 3.3.0 環境中將 MSSQL 的巨量資料轉移到地端的資料湖庫中的過程與 TroubleShooting。

詳細內容

[GCP] Spark Hadoop Access with Requester Pays

在生醫領域有很多開放資料都是存在 Google Cloud Platform (GCP),有時候要避免大量複製檔案,我們會想要直接使用 gs:// 開頭的開放資料當作 Spark Table 的後端路徑,與 AWS 與 Azure 不同的是 GCP Dataproc 提供了一個使用者付費的方式,顧名思義就是資料的傳輸費用是由使用者去支付的,本篇紀錄如何設定 Spark Cluster 的設定檔透過 Spark SQL 的方式直接使用公開的資料,減少複製檔案與儲存帶來的成本。

詳細內容

在 K8S 上簡單實現 Nvidia GPU Time-Slicing

Nvidia 的 GPU 目前是市場上使用的主流,在雲的世界裡面,由於大部分的使用場景是按需 (On Demand),因此 K8S 慢慢地也是雲端管理資源的一個利器,如何在 Kubernetes 上調用 GPU 的資源相對地也越來越普遍,本篇整理了目前網路上可以看到 Nvidia GPU 於操作方法,並且介紹一種簡單實現 GPU Time-Slicing 的設定。

詳細內容

[BigData] PySpark on Jupyter Lab

Jupyter Notebook/Lab 是一個常用的互動式介面協助各種程式碼的開發我們在上一篇『建立自己的 Jupyter Notebook 伺服器』有稍微介紹過,一般常見的使用場景是在開發 python 的程式,但是 Jupyter Server 的 Kernel 功能可以擴充更多的互動式開發環境,例如 R, PySpark, SparkR, SparklyR 等等,檸檬爸最早接觸的是將 PySpark 註冊到 Jupyter Lab 裡面,實作的程式碼是透過 AZTK 的 Repository 學習到的,後來進一步將其擴充到 R 等等的使用場景,本篇將會呈現如何部署一個有 PySpark 核心的 Jupyter Lab。

詳細內容

[BigData] 整合 BeeGFS 到 K8S 生態系

雖然公有雲的服務例如 AWS, Azure, GCP 已經逐漸普及了,但是私有雲 HPC 的市場還是一直有相對的份額,不同於公有雲的儲存服務,在佈建私有雲的時候,儲存  (Storage) 的解決方案仍然是一個需要花費大量心力的議題,本篇紀錄如何將 HPC 儲存方案之一的 BeeGFS 掛載到 K8S 的生態系裡面。

詳細內容

[GPU] Native Rapids UDF – Create Custom UDF

在上一篇我們成功實作了 HiveUDF,為了要進一步利用 GPU 加速,我們需要去實作 evaluateColumnar 這一個函數,參考 Spark Rapids 的 Github 與 ColumnView 裡面的範例,針對我們想做到的 UDF 我們沒有發現適合的函數去實作針對一個 Array[String] 的過濾程式,所以我們需要自己去實作 Tutorial 裡面所謂的 Native Code Examples,Tutorial 裡面針對 HiveUDF 只有提供一個範例是 StringWordCount,本篇我們紀錄藉由這個範例去實作一個支援 GPU 的 HiveUDF。

詳細內容

[Spark] Define and Register Hive UDF with Spark Rapids

在上一篇我們介紹如何透過 Spark Rapids 去利用 GPU 加速執行 SQL,我們遇到了幾個問題並一一解決,最後我們成功在 Spark Thrift Server 上面啟動了 Spark Rapids 的功能,並且使用 pyHive 將 SQL 的 Request 送進 Spark Cluster 裡面,為了要更進一步完全使用 GPU 的資源,在執行 SQL command 的時候如果遇到沒有支援 Spark Rapids 的 UDF (User-Defined Function) 的時候,會拖慢整體的速度,讓使用 GPU 的效果沒有發揮出來,因此本篇想要紀錄如何實作並定義一個 Hive UDF。

詳細內容