本文介紹如何使用MapReduce讀寫JindoFS上的資料。
JindoFS配置
以EMR-3.35版本為例,建立名為emr-jfs的命名空間,相關配置參數樣本如下:
- jfs.namespaces=emr-jfs
- jfs.namespaces.emr-jfs.oss.uri=oss://oss-bucket/oss-dir
- jfs.namespaces.emr-jfs.mode=block
MapReduce簡介
Hadoop MapReduce作業通常是通過HDFS進行讀寫,JindoFS目前已相容大部分HDFS介面,只需要將MapReduce作業的輸入、輸出目錄配置到JindoFS,即可實現讀寫JindoFS上的檔案 。
Hadoop MapReduce是一個使用簡易的軟體架構,基於它寫出來的應用程式能夠運行在由上千個商用機器組成的大型叢集上,並以一種可靠容錯的方式平行處理上T層級的資料集。一個MapReduce作業通常會把輸入的資料集切分為若干獨立的資料區塊,由Map任務以完全並行的方式處理它們。架構會對map的輸出先進行排序, 然後把結果輸入給reduce任務。通常作業的輸入和輸出都會被儲存在檔案系統中。 整個架構負責任務的調度和監控,以及重新執行已經失敗的任務。
作業的輸入和輸出
MapReduce作業通常會指明輸入或輸出的位置(路徑),並通過實現合適的介面或抽象類別提供map和reduce函數。Hadoop的job client再加上其他作業的參數提交給ResourceManager,進行調度執行。這種情況下,我們直接修改作業的輸入和輸出目錄即可實現JindoFS的讀寫。
MapReduce on JindoFS範例
以下是MapReduce作業通過修改輸入輸出實現JindoFS的讀寫的例子。
- Teragen資料產生範例Teragen是Example中產生隨機資料示範程式,在指定目錄上產生指定行數的資料,具體命令如下:
hadoop jar /usr/lib/hadoop-current/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar teragen <num rows> <output dir>替換輸出路徑,可以把資料輸出到JindoFS上:hadoop jar /usr/lib/hadoop-current/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar teragen 100000 jfs://emr-jfs/teragen_data_0 - Terasort資料產生範例Terasort是Example中資料排序示範範例,有輸入和輸出目錄,具體命令如下:
hadoop jar /usr/lib/hadoop-current/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar terasort <in> <out>替換輸入和輸出路徑,即可處理JindoFS上的資料:hadoop jar /usr/lib/hadoop-current/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar terasort jfs://emr-jfs/teragen_data_0/ jfs://emr-jfs/terasort_data_0