同样的Java,完全不一样的HDInsight大数据开发体验

大数据的热潮一直居高不下,每个人都在谈。你也许不知道,早些年这个领域可是有个非常「惹眼球」的段子:


简单翻译一下:大数据就像青少年之间的【敏感词】:每个人都在谈,可没人真正知道该怎么做,但每个人都认为其他人正在做,所以所有人都说自己也正在做……反正前美国麻省理工大学(MIT)教授,现美国杜克大学(Duke University)教授 Dan Ariely 是这么说的

那么,具体该怎么做呢?今天,我要教教大家如何运用 Java 语言,为 HDInsight 上的 Hadoop 开发一个 MapReduce 程序,借此玩转大数据。


1首先开始科普

什么是 HDInsight

Azure HDInsight 是 Hortonworks Data Platform (HDP) 提供的 Hadoop 组件的云发行版,适用于对计算机集群上的大数据集进行分布式处理和分析。目前 HDInsight 可提供以下集群类型:Apache Hadoop、Apache Spark、Apache HBase、Apache Storm、Apache 交互式 Hive(预览版),以及其他包含脚本操作的自定义集群。

什么是 Hadoop

Hadoop 技术堆栈包括相关的软件和实用程序(Apache Hive、HBase、Spark 等),通常包含 Hadoop 分布式文件系统 (HDFS)、适用于作业计划和资源管理的 YARN、适用于并行处理的 MapReduce。Hadoop 最常用于已存储数据的批处理。


什么是 MapReduce

MapReduce 是一个旧软件框架,用于编写并行批量处理大数据集的应用程序。MapReduce 作业将分割大型数据集,并将数据组织成键值对进行处理。MapReduce作业在 YARN 上运行。

什么是 Java

这个真有必要解释?

通过 Azure HDInsight 服务使用 Hadoop,可以获得很多便利,例如:减少了设置和配置工作,提高了可用性和可靠性,可在不中断作业的情况下进行动态缩放,可灵活使用组件更新和当前版本,并且能与其他 Azure 服务(包括 Web 应用和 SQL 数据库)集成。

机智的你理解这些概念了么,接下来我们一起来用 Java 开发一个 MapReduce 程序,然后通过 HDInsight 服务运行吧。


2前期准备

首先你需要准备好 Java JDK 8 或更高版本以及 Apache Maven,随后按照下列方式配置开发环境:

1

设置环境变量

请在安装 Java 和 JDK 时设置以下环境变量(同时请注意检查这些环境变量是否已经存在并且包含正确的值):

JAVA_HOME -应该指向已安装 Java 运行时环境 (JRE)的目录。例如在macOS、Unix 或 Linux 系统上,值应该类似于 /usr/lib/jvm/java-7-oracle;在Windows 中,值类似于 c:\\ProgramFiles (x86)\\Java\\jre1.7。PATH - 应该包含以下路径:

JAVA_HOME(或等效路径)

JAVA_HOME\\bin(或等效路径)

安装 Maven 的目录

2

创建 Maven 项目


1、在开发环境中,通过中断会话或命令行将目录更改为要存储此项目的位置。

2、使用随同 Maven 一起安装的 mvn 命令,为项目生成基架。

此命令将使用 artifactID 参数指定的名称(此示例中为 wordcountjava)创建目录。此目录包含以下项:

pom.xml - 项目对象模型 (POM),其中包含用于生成项目的信息和配置详细信息。

src - 包含应用程序的目录。

3、删除 src/test/java/org/apache/hadoop/examples/apptest.java 文件,此示例不使用该文件。


3

添加依赖项

1、编辑 pom.xml 文件,并在<dependencies>部分中添加以下文本:/<dependencies>

这会定义具有特定版本(在<version> 中列出)的库(在<artifactid> 中列出)。编译时会从默认 Maven 存储库下载这些依赖项,此外也可使用 Maven 存储库搜索来查看详细信息。/<artifactid>/<version>

<scope>provided/<scope>会告知 Maven 这些依赖项不应与此应用程序一起打包,因为它们在运行时由 HDInsight 集群提供。


注意:使用的版本应与集群上存在的 Hadoop 版本匹配。有关版本的详细信息,请参阅 HDInsight 组件版本控制文档。

2、将以下内容添加到 pom.xml 文件中。 此文本必须位于文件中的 <project>.../<project>标记内;例如 和 之间。

第一个插件配置 Maven Shade Plugin,用于生成 uberjar(有时称为 fatjar),其中包含应用程序所需的依赖项。 它还可以防止在 jar 包中复制许可证,复制许可证在某些系统中可能会导致问题。

第二个插件配置目标 Java 版本。


注意:HDInsight 3.4 及更早版本使用 Java 7,HDInsight3.5 使用 Java 8。


3、保存 pom.xml 文件。



3创建 MapReduce 应用程序

1、转到 wordcountjava/src/main/java/org/apache/hadoop/examples 目录,并将App.java 文件重命名为 WordCount.java。

2、在文本编辑器中打开 WordCount.java 文件,然后将其内容替换为以下文本:

请注意,包名称为 org.apache.hadoop.examples,类名称为 WordCount。提交MapReduce 作业时需要使用这些名称。

3、保存文件。


4构建应用程序

1、如果尚未到达此目录,请更改为 wordcountjava 目录。

2、使用以下命令生成包含该应用程序的 JAR 文件:


此命令将清除任何以前构建的项目,下载任何尚未安装的依赖项,然后生成并打包应用程序。

3、命令完成后,wordcountjava/target 目录将包含一个名为 wordcountjava-1.0-SNAPSHOT.jar 的文件。

注意:wordcountjava-1.0-SNAPSHOT.jar 文件是一种 uberjar,其中不仅包含 WordCount 作业,还包含作业在运行时需要的依赖项。


5上传 jar 运行 MapReduce 作业

使用以下命令将该jar 文件上传到 HDInsight 头节点:

USERNAME 替换为集群的 SSH 用户名,将 CLUSTERNAME 替换为 HDInsight 集群名称。

此命令会将文件从本地系统复制到头节点。

随后通过下列步骤运行这个 MapReduce 作业:

1、使用 SSH 连接到 HDInsight。详细信息请参阅将 SSH 与 HDInsight 配合使用。

2、在 SSH 会话中,使用以下命令运行 MapReduce 应用程序:

此命令将启动 WordCountMapReduce 应用程序。输入文件是/example/data/gutenberg/davinci.txt,输出目录是 /example/data/wordcountout。输入文件和输出均存储到集群的默认存储中。

3、作业完成后,请使用以下命令查看结果:

用户会收到单词和计数列表,其包含的值类似于以下文本:

搞定收工!

我有一条不成熟的小建议

你看,使用 Java语言开发 MapReduce 程序也不是很难。

如果你更喜欢用其他语言,或者希望开发其他类型的 HDInsight 应用,那么这些资源应该能提供一些帮助:

开发 C# 流式处理 MapReduce 程序开发 Scalding MapReduce 作业使用 HDInsight 工具创建 Spark 应用开发 Python 流式处理程序

最后的最后,这篇教程大家看着可还满意?想看其他任务的教程,或者想要学习了解某项 Azure 服务的话,你知道该怎么办的!

最后说一下,想要学习大数据的限时领取免费资料及课程

领取方法:

还是那个万年不变的老规矩

1.评论文章,没字数限制,一个字都行!

3.私信小编:“大数据开发教程”即可!

谢谢大家,祝大家学习愉快!(拿到教程后一定要好好学习,多练习哦!)