# Data Engineer
主要的工作內容是對資料的處理,如何取得資料、如何存放資料、如何整理資料.如果在資料量不多的情況下,可以寫程式看是從什麼地方取得,處理過後存成檔案、或個熟悉的 DB 存,效能跟硬體上都會是太大的問題.但在當數據非常大的情況下,所有的情況都必須考量了.
如何取得資料 ?
資料來源又有分為 batch 以及 streaming 兩種方式.batch 的方式例如每小時會送 1T 的檔案進來,那寫的程式就必須保證能在一小時以內把這 1T 的資料消化完.否則下一個小時又有 1T 進來,最後就會導致後面的檔案一直排隊永遠處理不完.streaming 的話例如 sensor 會一直不斷發送訊號出來,直到該 sensor 也許哪天壞掉才會停止.這種會一直源源不絕的送進來的資料就可以稱為 streaming data.那程式就必須保證能消化每次送來的資料.否則也會造成永遠處理不完的情況. batch data 就像跑 for 迴圈,會知道 max 的值(1T),知道何時會停止.而 streaming data 就像是無窮迴圈,會不斷的一直執行.
如何存放資料 ?
從上面的例子來看假設每一小時 1T 的檔案,很順利的能夠在一小時處理完,但一天下來就會有 24T 的檔案要存,硬碟很快的就會容量不夠.streaming data 也是一樣,假設每秒來個 100M,一分鐘就 6G,一小時也就 360G 一直執行下來硬碟也是很快就不夠了.
如何整理資料 ?
前兩項的問題如果都解決,資料都存好了.那接下來就要來思考如何使用這些資料,不然存在那邊沒有使用也是無法產生資料的價值.但日積月累存下來的這些資料會變得非常龐大,查詢時一定會變得非常緩慢.而且又會根據分析的內容,也許要跑些複雜的演算法.能夠整理出有價值的資料,提供給人或系統使用,當然是越快越好.才能夠提早分析或運用.所以處理的效能又是一個問題.
所以想當一位 Data Engineer 必須要不斷思考如何解決上面的三項問題.
那資料整理好資後,Data Scientist 就可以運用整理好的資料來做分析或著 train model.所以 Data Engineer 也會很常要與 Data Scientist 合作.
當要處理 Data 的流程如果再分細一點可以分為
1. 生-資料源(影片、照片、Log、DB...)
2. 流-網路協定(syslog、FTP...)
3. 蒐-前處理(Fluentd、Sqoop...)
4. 存-儲存方式(HDFS、HBase、Cassandra...)
5. 取-取得方式(File Input/Otput、DB Input/Output、Thrift...)
6. 算-資料處理(Map Reduce、Spark、Pig...)
7. 析-資料分析(Hive、Spark、Impala...)
8. 用-視覺化(kibana、grafana、tableau...)
9. 看-解讀(Web、Mobile、App...)
11. 變-行動
如果是 streaming data 的話 4、5 項會變成
4. 佇-串流佇列
5. 濾-串流過濾
Data Engineer 的工作主要會是 1 ~ 6 項,7 ~ 10 則偏向 Data Scientist 的工作.所以當 Big Data 以及 AI 時代的來臨,如何建立好這一串完善的流程與架構是非常重要的一件事.
Job Description
---
接著來挑一些有關要找 Data Engineer 的公司需要的工作內容
- 負責 Big Data 處理,開發和維護客制化的搜尋引擎,確保毎天 1+ Billion 的文件在自然語言、電腦視覺及 AI 模組分析的過程中,能即時且精確的供前端搜尋使用 !
- 深入理解主流數據挖掘演算法及原理,能夠根據業務場景建立挖掘模型,選擇最高效的演算法實現。
- Develop, operate, and monitor ETL for data collection, cleansing, processing, storage, and analytics
- Develop data visualization to track data usage, server status, and represent data insights
- 設定並實作 Data Pipeline,將不同來源及不同特性的資料,自動化統一整理和歸納
- 協助開發資料分析介面 Data Visualization
- 規劃大數據資料倉儲與應用平台(如:機器學習平台、商業智慧工具)架構
Required Skills & Experience
---
Data Engineer 需要的技術,看了許多公司其實非常廣,這裡列出一些,但對於這些技術主要也是圍繞在處理資料(spark、kafka、Flink...)、儲存資料(NoSQL、HDFS...)、運算資料(spark、MapReduce...).
- Good programming skills in Python, Java, or Scala,GO or C
- Experience in NoSQL, e.g. Cassandra, HBase, and cloud computing
- Experience in message queue, e.g. Kafka, RabbitMQ.
- Experience in Apache Spark or Apache Flink.
- Familiar with Hadoop ecosystem, Spark, Kafka, Hive
Preferred Qualifications
---
偏好的一些資格
- Strong algorithmic background
- Good understanding of fundamentals of SQL / NoSQL; Experience working with large datasets is a plus
- Familiar with parallel computing
- Machine Learning / Text mining / Hadoop ecosystem / ELK / Big Data 相關開發經驗尤佳
Prepare
---
面試時可以多準備的一些東西
- LeetCode
- codingame
- Data structure
- Algorithmic
- English
技術非常多,可以先看看想去公司的職缺都需要哪些技術,再從那些技術做準備.了解技術時可以從下面幾點去學習 :
1. 特色
2. 核心概念
3. 優點(適合用在哪裡)
4. 缺點(不適合用在哪裡)
5. 遇過問題以及解決方式
others
---
這邊列出一些聽到的技術
- apache Airflow
- apache Superset
- apache predictionio
- apache nifi
- AWS EMR
- Amazon DynamoDB
My Learn
---
- hadoop(HDFS、Yarn)
- spark
- kafka
- redis
- cassandra
- scala、go
- docker
- grafana、prometheus
- zeepline
###### tags: `Data Engineer`