MRS HADOOP/SPARK 代码访问OBS方式介绍

举报
泽及天下不为仁 发表于 2020/05/24 21:19:24 2020/05/24
【摘要】 MRS HADOOP/SPARK 代码访问OBS方式介绍1 背景描述:MRS样例代码没有介绍如何访问OBS,在默认情况下使用的文件系统都是HDFS;如果访问OBS需要添加一些配置,代码使用过程中也有一些需要注意的地方2 配置OBS相关参数:需要在客户端配置文件core-site.xml里面添加以下参数:<property> <name>fs.obs.access.k...

MRS HADOOP/SPARK 代码访问OBS方式介绍

1      背景描述:

MRS样例代码没有介绍如何访问OBS,在默认情况下使用的文件系统都是HDFS;如果访问OBS需要添加一些配置,代码使用过程中也有一些需要注意的地方

2      配置OBS相关参数:

需要在客户端配置文件core-site.xml里面添加以下参数:

<property>
    <name>fs.obs.access.key</name>
    <value>ak</value>
</property>
<property>
    <name>fs.obs.secret.key</name>
    <value>sk</value>
</property>
<property>
    <name>fs.obs.endpoint</name>
    <value>obs-endpoint</value>
</property>

需要注意的是,此方式设置的aksk会明文暴露下文件中,谨慎使用

如果不想要明文显示可以设置ECS代理,参考指导文档<ECS委托方式访问OBS>https://support.huaweicloud.cn/usermanual-mrs/mrs_01_0643.html

3      代码指导:

代码基础参考MRS样例代码,获取方式参考指导文档<MapReduce服务样例工程构建方式>https://support.huaweicloud.cn/devg-mrs/mrs_06_0002.html

hadoop的文件系统对象是一个抽象类:org.apache.hadoop.fs.FileSystem

常用的获取FileSystem的方式是:

FileSystem fileSystem = FileSystem.get(conf);

此方法获取到的文件系统为配置项“fs.defaultFS”指定的文件系统类型

如果我们需要的是访问OBS的文件系统则需要使用另一个方法来获取FileSystem

FileSystem fileSystem = FileSystem.get(URI.create("obs://Bucket-Name/tmp"),conf);

此时获取到的文件系统就是对应OBS的文件系统

obs://Bucket-Name/tmp  

如果地址是s3a开头,这文件系统是S3aFileSystem

如果地址是obs开头,这文件系统是OBSFileSystem

此处一般都是传递过来一个文件地址参数,然后通过这个方法来自动识别文件系统

以上是对于hdfs API操作OBS文件的连接方式

如果是MapReduce任务需要读取/写入OBS的文件,可以直接将”obs://Bucket-Name/tmp”这样的地址传入,代码可以自动识别到文件系统并获取相应的文件,代码参考样例代码:

FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));

如果是spark任务需要读取/写入OBS的文件,使用以下方法可以自动识别到相应的文件系统:

textFile(args[0])–读取文件

saveAsTextFile(args[1])–保存文件

saveAsHadoopFile(args[2])—指定格式保存文件

 

4      案例说明

例如我们使用MapReducewordcount任务:
访问hdfs上的文件进行计算启动命令:

yarn jar hadoop-mapreduce-examples-*.jar wordcount /tmp/input /tmp/output

如果需要访问OBS,则可以改成:

yarn jar hadoop-mapreduce-examples-*.jar wordcount obs://Bucket-Name/tmp/input obs://Bucket-Name/tmp/output

 

spark任务也是类似的操作,以spark自带样例为例:

spark-submit --master yarn --deploy-mode client --class org.apache.spark.examples.JavaWordCount spark-examples_*.jar /tmp/input

如果需要访问OBS,则可以改成:

spark-submit --master yarn --deploy-mode client --class org.apache.spark.examples.JavaWordCount spark-examples_*.jar obs://Bucket-Name/tmp/input

 

 

 

 

 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。