在亚马逊 EMR 4.x 上使用猪的注意事项 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在亚马逊 EMR 4.x 上使用猪的注意事项

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。

删除 Pisto-Sandbox

从 Pig 0.16.0 开始,删除了在亚马逊 EMR 4.x 发行版上的 Pig 中可用的自定义 UDF。大多数 UDF 具有您可替换的等效函数。下表列出了已删除的 UDF 和等效函数。有关更多信息,请参阅 。内置函数在阿帕奇猪网站上。

已删除的 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,但没有等效:格式 ()、本地日期 ()、本地时间 ()、中心 ()、左键 ()、重复 ()、替换一次 ()、右键板 ()、条带 ()、条带结束 ()、条带开始 ()、条形开始 ()、交换案例 ()。

已停止使用 Grunt 命令

某些 Grunt 命令已从 Pig 0.16.0 开始停用。下表列出了 Pig 0.14.0 中的 Grunt 命令以及当前版本中的等效命令(如果适用)。

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 显式指定了其他用户。