# 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`