MRS HADOOP/SPARK 代码访问OBS方式介绍
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 案例说明
例如我们使用MapReduce的wordcount任务:
访问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
- 点赞
- 收藏
- 关注作者
评论(0)