本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon EMR 4.x 上使用 Pig 的考量
Pig 0.14.0 版安裝於使用 Amazon EMR 4.x 發行版本建立的叢集上。Pig 已在 Amazon EMR 5.0.0 中升級至版本 0.16.0。重大差異如下所列。
不同的預設執行引擎
Amazon EMR 4.x 發行版本上的 Pig 版本 0.14.0 使用 MapReduce 作為預設執行引擎。Pig 0.16.0 和更新版本使用 Apache Tez。您可以在 exectype=mapreduce
組態分類中明確設定 pig-properties
以使用 MapReduce。
捨棄 Pig 使用者定義函數 (UDF)
Amazon EMR 4.x 發行版本上的 Pig 中提供的自訂 UDF 從 Pig 0.16.0 開始捨棄。大部分的 UDF 都有您可以改用的功能。下表列出捨棄的 UDF 和同等函數。如需詳細資訊,請參閱 Apache Pig 網站上的內建函數
捨棄的 UDF | 同等函數 |
---|---|
FORMAT_DT(dtformat, date) |
GetHour(date)、GetMinute(date)、GetMonth(date)、GetSecond(date)、GetWeek(date)、GetYear(date)、GetDay(date) |
EXTRACT(string, pattern) |
REGEX_EXTRACT_ALL(string, pattern) |
REPLACE(string, pattern, replacement) |
REPLACE(string, pattern, replacement) |
DATE_TIME() |
ToDate() |
DURATION(dt, dt2) |
WeeksBetween(dt, dt2)、YearsBetween(dt, dt2)、SecondsBetween(dt, dt2)、MonthsBetween(dt, dt2)、MinutesBetween(dt, dt2)、HoursBetween(dt, dt2) |
EXTRACT_DT(format, date) |
GetHour(date)、GetMinute(date)、GetMonth(date)、GetSecond(date)、GetWeek(date)、GetYear(date)、GetDay(date) |
OFFSET_DT(date, duration) |
AddDuration(date, duration)、SubtractDuration(date, duration) |
PERIOD(dt, dt2) |
WeeksBetween(dt, dt2)、YearsBetween(dt, dt2)、SecondsBetween(dt, dt2)、MonthsBetween(dt, dt2)、MinutesBetween(dt, dt2)、HoursBetween(dt, dt2) |
CAPITALIZE(string) |
UCFIRST(string) |
CONCAT_WITH() |
CONCAT() |
INDEX_OF() |
INDEXOF() |
LAST_INDEX_OF() |
LAST_INDEXOF() |
SPLIT_ON_REGEX() |
STRSPLT() |
UNCAPITALIZE() |
LCFIRST() |
以下捨棄的 UDF 並無同等函數:FORMAT()、LOCAL_DATE()、LOCAL_TIME()、CENTER()、LEFT_PAD()、REPEAT()、REPLACE_ONCE()、RIGHT_PAD()、STRIP()、STRIP_END()、STRIP_START()、SWAP_CASE()。
停止使用的 Grunt 命令
部分 Grunt 命令從 Pig 0.16.0 開始停止。下表列出 Pig 0.14.0 中的 Grunt 命令和目前版本中的同等命令。
Pig 0.14.0 Grunt 命令 | 0.16.0 和更新版本中的 Pig Grunt 命令 |
---|---|
cat <non-hdfs-path>) |
fs -cat <non-hdfs-path>; |
cd <non-hdfs-path>; |
無同等 |
ls <non-hdfs-path>; | fs -ls <non-hdfs-path>; |
move <non-hdfs-path> <non-hdfs-path>; |
fs -mv <non-hdfs-path> <non-hdfs-path>; |
copy <non-hdfs-path> <non-hdfs-path>; |
fs -cp <non-hdfs-path> <non-hdfs-path>; |
copyToLocal <non-hdfs-path> <local-path>; |
fs -copyToLocal <non-hdfs-path> <local-path>; |
copyFromLocal <local-path> <non-hdfs-path>; |
fs -copyFromLocal <local-path> <non-hdfs-path>; |
mkdir <non-hdfs-path>; |
fs -mkdir <non-hdfs-path>; |
rm <non-hdfs-path>; |
fs -rm -r -skipTrash <non-hdfs-path>; |
rmf <non-hdfs-path>; |
fs -rm -r -skipTrash <non-hdfs-path>; |
為非 HDFS 主目錄移除的功能
Amazon EMR 4.x 發行版本上的 Pig 0.14.0 有兩種機制,可讓 hadoop
使用者以外沒有主目錄的使用者執行 Pig 指令碼。第一種機制是自動備援,如果主目錄不存在,則會將初始工作目錄設為根目錄。第二個機制是 pig.initial.fs.name
屬性,可讓您變更初始工作目錄。
這兩種機制自 Amazon EMR 版本 5.0.0 開始不再提供,使用者必須在 HDFS 上擁有主目錄。這不適用於 hadoop
使用者,因為主目錄是在啟動時佈建。使用 Hadoop jar 步驟執行的指令碼會預設為 Hadoop 使用者,除非使用 command-runner.jar
明確指定另一位使用者。