对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件;E-MapReduce(EMR)构建于云服务器ECS上,基于开源的Apache Hadoop和Apache Spark,可以方便地使用Hadoop和Spark生态系统中的其他周边系统(例如,Apache Hive、Apache Pig和HBase等)来分析和处理数据;E-MapReduce还可以与阿里云的云数据存储系统OSS进行数据传输,把二者各自优势结合起来,使存储计算分离,方便快捷搭建大数据计算环境,实现大数据分析需求。
前提条件
• 已注册阿里云账号,详情请参见注册阿里云账号。
• 已开通E-MapReduce服务和OSS服务。
• 已完成云账号的授权,详情请参见角色授权。
步骤一:创建EMR集群及相关配置
在使用spark 操作oss中的数据之前,您需要在本地安装MAVEN、JAVA、SCALA环境,以及在E-MapReduce上创建Hadoop集群。
1、在本地安装JAVA、MAVEN、SCALA环境;
2、登录阿里云E-MapReduce控制台,创建Hadoop集群(可选服务中必选spark、smartdata、bigboot、knox服务)
3、在创建集群时,设置knox账号密码,挂载公网 及设置集群登录密码;
4、集群创建之后,在集群服务smartdata smartdata-site配置oss数据源;
增加两个配置项,分别为fs.jfs.cache.oss-accessKeyId、fs.jfs.cache.oss-accessKeySecret;
然后点击保存,以及右上方操作中重启组件;
5、登录hadoop集群header节点,验证oss 数据源是否生效
hadoop fs -ls oss://your-bucket-name/dir/ #测试读OSS
hadoop fs -mkdir oss://your-bucket-name/dir/ #测试写OSS
步骤二:使用EMR集群提交spark作业,读写OSS
1、编写spark代码,从OSS中读取json数据,然后向OSS写入delta格式数据,制作为jar包
import org.apache.spark.sql.{Row, SparkSession}
object WriteOSS {
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder
.appName("Spark OSS")
.getOrCreate()
val data=spark.read.json("oss://bucketname/test.json")
data.write.format("delta").save("oss://bucketname/test_delta_data")
}
}
2、把jar包上传至EMR集群上,然后把jar包放在本地hdfs下,或者利用hadoop命令把jar包上传到oss中都可
• 使用scp工具把jar包传送到EMR集群的header节点上
• 把jar包拷贝到oss bucket下
./ossutil64 cp test.jar oss://bucket-name/dir
• 把jar包拷贝到本地集群hfs文件系统中
hadoop fs -put localfile hdfsfile
3、在数据开发中创建spark job作业
4、在test job编辑框中输入作业提交命令
--class OSSReadWrite --master yarn --deploy-mode client
--driver-memory 5g --num-executors 50 --executor-memory 3g
--executor-cores 3 --conf spark.default.parallelism=500
--conf spark.yarn.am.memoryOverhead=1g
--conf spark.yarn.am.memory=2g
oss://your-bucket-name/test.jar
5、运行作业,查看作业日志
总结
至此,我们就完成了从创建EMR hadoop集群,配置好OSS数据源,开发OSS读写作业,数据开发中创建test job,提交作业,并且查看运行日志一系列操作。
在此基础之上,我们可以根据个人需求,进行其他作业开发,分析利用OSS上存储的数据。