HTML5技术

C#码农的大数据之路 - 使用C#编写MR作业 - hystar(4)

字号+ 作者:H5之家 来源:H5之家 2017-06-08 08:00 我要评论( )

代码改自文档中提交Job的代码,原文档中使用MapReduceJobSubmissionParameters提交JVM平台语言编写的jar文件。上面的例子使用MapReduceStreamingJobSubmissionParameters作为替换来提交Hadoop Streaming任务。 代码

代码改自文档中提交Job的代码,原文档中使用MapReduceJobSubmissionParameters提交JVM平台语言编写的jar文件。上面的例子使用MapReduceStreamingJobSubmissionParameters作为替换来提交Hadoop Streaming任务。
代码中的存储账户关联的容器可以使用Azure PowerShell快速查看。使用Azure PowerShell需要首先安装。在管理员提升的PowerShell窗口中执行:

Install-Module AzureRM

第一次使用Install-Module可能会提示需要安装NuGet提供程序,按Y继续就可以了。(PowerShell基于.NET,所以其扩展组件也被托管在NuGet上)
如果提示不受信任的存储库,也按Y继续即可。
成功安装基于PowerShell的Azure Resource Management工具后,在使用与账户相关的命令前都要先登录:

Login-AzureRmAccount

按提示输入相关信息,登陆成功后就可以执行查询命令了。必须获取HDInsight集群关联的存储账户。

Get-AzureRmHDInsightCluster -ClusterName "testmr"

返回信息中会包含如下内容,这就是我们想要的。

DefaultStorageAccount : hdinsighthystar.blob.core.windows.net DefaultStorageContainer : testmr-2017-03-26t03-57-40-342z

程序准备完后,在提交任务前,我们还需要将两个exe文件与输入上传到Azure Blob存储中。
向Azure Blob存储中拷贝文件有n多种方式,详见此文档。最直观的方式是使用宇宙第一IDE - VS中的Azure插件。Azure插件更新较频繁,请确保使用最新版的软件。本文编写时最新版本为Azure SDK for .NET 2.9.6。
安装插件后,在Cloud Explorer中可以看到容器(在服务器资源管理器中Azure结点也能看到存储账户的容器),右键快捷菜单中选择查看容器。

打开容器浏览界面,点击上传按钮打开上传对话框,选择要上传的文件,并输入路径。
注意输入路径会自动创建文件夹,这也是使用此插件来创建文件夹的唯一方式。

点击确定上传即可。
其他向Blob上传文件的方式还包括使用Azure CLI,AzCopy应用程序及Azure PowerShell。
另外由于Azure Blob存储与HDFS兼容,也可以直接使用hadoop fs命令来操作Azure Blob存储。
比如:

hadoop fs -put /home/testfile.txt wasbs://CONTAINER@ACCOUNT.blob.core.windows.net/testpath/

其中的容器名与账户名可以通过前文介绍的Azure PowerShell命令来获取。
如果本地Windows中没有安装hadoop,可以通过远程桌面连接到HDInsight集群,将文件复制到远程机器,并在远程桌面中使用hadoop导入文件到Azure Blob存储。(远程桌面环境下导入可以省略wasbs://CONTAINER@ACCOUNT.blob.core.windows.net,直接使用相对路径)

一切准备妥当后,运行SubmitNet项目,就可以提交任务:

测试结束后要记得删除集群:

删除HDInsight集群,不会同时删除存储账户,存储账户只要存在也会按照使用量计费,区域香港的话,每个容器每天要0.01港币。
所以,存储账户几乎不占成本,可以保留,以后创建新集群时直接选择现有存储账户的容器,可以直接执行其中的任务,查看其中的文件。

基于Windows的Azure HDInsight将于未来几个月内停止服务。但我们上面介绍的内容只要做一定就该就可以迁移到基于Linux的HDInsight中。首先,提交任务部分的代码是几乎不需要变(需要变的是指定Map和Reduce任务的参数,后文有说明),只要我们还在Windows系统中提交任务即可。使用.NET编写的Map和Reduce程序需要进行一定修改以便可以在.NET Core下运行。这个在下一小节有详细介绍。

.NET Core

随着.NET Core的日益完善,基于.NET Core开发可以让C# MapReduce程序运行在基于Linux的大数据集群中的程序已经成为可能。在Azure HDInsight(基于Linux)中(Ubuntu16.04)甚至都已经预装了.NET Core。参照上一小节的方法,我们可以让.NET Core编写的MR任务运行在基于Linux的HDInsight中。
首先我们在Azure中创建一个集群基于Linux的HDInsight集群。Linux版的HDInsight使用Ambari作为门户页面(关于Ambari的介绍,官方文档在此),而没有了像Windows版中那样一个页面,同时为了安全考虑YARN,JobHistory及存储的Web管理界面也没有直接暴露出来。访问这些页面需要使用SSH与Linux集群建立隧道,这个道理和我们平时用SSH搭梯子FQ是一样的(官方文档在此)。
首先做一点准备工作,使用https://[cluster-name].azurehdinsight.net这个地址(或直接在集群主页点击仪表盘或Ambari视图)打开Ambari,登陆后,查找并记录下headnode0主机的地址。

如图,Hosts标签页中名称hn0开头的就是我们要找的结点。点开查看详情:

记录下这个ip,后面可以直接使用ip来登陆这个结点。

楼主一般比较喜欢用SecureCRT作为终端,使用BitviseSSH来搭梯子。(虽然它们各自都可以完成另一方的工作,但个人还是喜欢这样搭配使用)
使用BitviseSSH建立与HDInsight Linux集群的通道设置方式见下图:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 数据库表设计,没有最好只有最适合(邻接表、路径枚举、嵌套集、闭包表) - 小小情意

    数据库表设计,没有最好只有最适合(邻接表、路径枚举、嵌套集、闭包

    2017-06-08 08:00

  • HTML5笔记3——Web Storage和本地数据库 - 邹琼俊

    HTML5笔记3——Web Storage和本地数据库 - 邹琼俊

    2017-06-07 16:00

  • Redis中的数据结构与常用命令 - 雪飞鸿

    Redis中的数据结构与常用命令 - 雪飞鸿

    2017-06-04 11:03

  • 每天4亿行SQLite订单大数据测试(源码) - 大石头

    每天4亿行SQLite订单大数据测试(源码) - 大石头

    2017-06-02 13:01

网友点评