1. 云计算教程网首页
  2. 阿里云

通过HDP2.6 Hadoop读取和写入OSS数据

HDP(Hortonworks Data Platform) 是由 Hortonworks 发行的大数据平台,包含了 Hadoop、Hive、HBase 等开源组件。HDP 最新版本3.0.1 中的 Hadoop3.1.1 版本已经支持 OSS,但是低版本的 HDP 不支持 OSS。本文以 HDP2.6.1.0 版本为例,介绍如何配置 HDP2.6 版本支持读写 OSS。

准备工作

您需要拥有一个已搭建好的 HDP2.6.1.0 的集群。若没有已搭建好的 HDP2.6.1.0 集群,您可以通过以下方式搭建:

  • 查找参考文档利用 Ambari 搭建 HDP2.6.1.0 的集群。
  • 不使用 Ambari,自行搭建 HDP2.6.1.0 集群。

配置步骤

  1. 下载 HDP2.6.1.0 版本支持 OSS的支持包。
    说明 此支持包是根据HDP2.6.1.0中 Hadoop 的版本,打了 Apache Hadoop 对 OSS 支持的补丁后编译得到的,其他 HDP2 的小版本对 OSS 的支持将陆续提供。

  2. 将下载的支持包解压:
     [root@hdp-master ~]# tar -xvf hadoop-oss-hdp-2.6.1.0-129.tar
    hadoop-oss-hdp-2.6.1.0-129/
    hadoop-oss-hdp-2.6.1.0-129/aliyun-java-sdk-ram-3.0.0.jar
    hadoop-oss-hdp-2.6.1.0-129/aliyun-java-sdk-core-3.4.0.jar
    hadoop-oss-hdp-2.6.1.0-129/aliyun-java-sdk-ecs-4.2.0.jar
    hadoop-oss-hdp-2.6.1.0-129/aliyun-java-sdk-sts-3.0.0.jar
    hadoop-oss-hdp-2.6.1.0-129/jdom-1.1.jar
    hadoop-oss-hdp-2.6.1.0-129/aliyun-sdk-oss-3.4.1.jar
    hadoop-oss-hdp-2.6.1.0-129/hadoop-aliyun-2.7.3.2.6.1.0-129.jar
    
    
  3. hadoop-aliyun-2.7.3.2.6.1.0-129.jar 移至 ${/usr/hdp/current}/hadoop-client/ 目录内,其余的jar文件移至${/usr/hdp/current}/hadoop-client/lib/ 目录内。调整后,目录结构如下:
    [root@hdp-master ~]# ls -lh /usr/hdp/current/hadoop-client/hadoop-aliyun-2.7.3.2.6.1.0-129.jar
    -rw-r--r-- 1 root root 64K Oct 28 20:56 /usr/hdp/current/hadoop-client/hadoop-aliyun-2.7.3.2.6.1.0-129.jar
    
    [root@hdp-master ~]# ls -ltrh /usr/hdp/current/hadoop-client/lib
    total 27M
    ......
    drwxr-xr-x 2 root root 4.0K Oct 28 20:10 ranger-hdfs-plugin-impl
    drwxr-xr-x 2 root root 4.0K Oct 28 20:10 ranger-yarn-plugin-impl
    drwxr-xr-x 2 root root 4.0K Oct 28 20:10 native
    -rw-r--r-- 1 root root 114K Oct 28 20:56 aliyun-java-sdk-core-3.4.0.jar
    -rw-r--r-- 1 root root 513K Oct 28 20:56 aliyun-sdk-oss-3.4.1.jar
    -rw-r--r-- 1 root root  13K Oct 28 20:56 aliyun-java-sdk-sts-3.0.0.jar
    -rw-r--r-- 1 root root 211K Oct 28 20:56 aliyun-java-sdk-ram-3.0.0.jar
    -rw-r--r-- 1 root root 770K Oct 28 20:56 aliyun-java-sdk-ecs-4.2.0.jar
    -rw-r--r-- 1 root root 150K Oct 28 20:56 jdom-1.1.jar
    说明 本文中所有
    ${} 的内容为环境变量,请根据您实际的环境修改。

  4. 在所有的 HDP 节点执行以上操作。
  5. 通过 Ambari 来增加配置。没有使用 Ambari 管理的集群,可以修改core-site.xml。这里以 Ambari 为例,需要增加如下配置:通过HDP2.6 Hadoop读取和写入OSS数据
    配置项
    fs.oss.endpoint 填写需要连接的 OSS 的 Endpoint。

    例如:oss-cn-zhangjiakou-internal.aliyuncs.com

    fs.oss.accessKeyId 填写 OSS 的 AccessKeyId。
    fs.oss.accessKeySecret 填写 OSS 的 AccessKeySecret。
    fs.oss.impl Hadoop OSS 文件系统实现类。目前固定为:org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem
    fs.oss.buffer.dir 填写临时文件目录。

    建议值:/tmp/oss

    fs.oss.connection.secure.enabled 是否开启 HTTPS。开启 HTTPS 会影响性能。

    建议值:false

    fs.oss.connection.maximum 与 OSS 的连接数

    建议值:2048

    更多参数解释可参考 Hadoop-Aliyun module。

  6. 根据 Ambari 提示重启集群。
  7. 测试读写 OSS:
    • 测试读:
      hadoop fs -ls oss://${your-bucket-name}/
    • 测试写:
      hadoop fs -mkdir oss://${your-bucket-name}/hadoop-test

      若测试可以读写 OSS,则配置成功;若无法读写 OSS,请检查配置。

  8. 为了能够运行 MAPREDUCE 任务,还需更改hdfs://hdp-master:8020/hdp/apps/2.6.1.0-129/mapreduce/mapreduce.tar.gz包的内容,如果是 TEZ 类型的作业,则修改hdfs://hdp-master:8020/hdp/apps/2.6.1.0-129/tez/tez.tar.gz,其他类型的作业以此类推。将 OSS 的支持包放如上述压缩包,执行如下命令:
    [root@hdp-master ~]# sudo su hdfs
    [hdfs@hdp-master root]$ cd
    [hdfs@hdp-master ~]$ hadoop fs -copyToLocal /hdp/apps/2.6.1.0-129/mapreduce/mapreduce.tar.gz .
    [hdfs@hdp-master ~]$ hadoop fs -rm /hdp/apps/2.6.1.0-129/mapreduce/mapreduce.tar.gz
    [hdfs@hdp-master ~]$ cp mapreduce.tar.gz mapreduce.tar.gz.bak
    [hdfs@hdp-master ~]$ tar zxf mapreduce.tar.gz
    [hdfs@hdp-master ~]$ cp /usr/hdp/current/hadoop-client/hadoop-aliyun-2.7.3.2.6.1.0-129.jar hadoop/share/hadoop/tools/lib/
    [hdfs@hdp-master ~]$ cp /usr/hdp/current/hadoop-client/lib/aliyun-* hadoop/share/hadoop/tools/lib/
    [hdfs@hdp-master ~]$ cp /usr/hdp/current/hadoop-client/lib/jdom-1.1.jar hadoop/share/hadoop/tools/lib/
    [hdfs@hdp-master ~]$ tar zcf mapreduce.tar.gz hadoop
    [hdfs@hdp-master ~]$ hadoop fs -copyFromLocal mapreduce.tar.gz /hdp/apps/2.6.1.0-129/mapreduce/

验证配置

可通过测试 teragen 和 terasort,来检测配置是否生效。

  • 测试 teragen:
    [hdfs@hdp-master ~]$ hadoop jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teragen -Dmapred.map.tasks=100 10995116 oss://{bucket-name}/1G-input
    18/10/28 21:32:38 INFO client.RMProxy: Connecting to ResourceManager at cdh-master/192.168.0.161:8050
    18/10/28 21:32:38 INFO client.AHSProxy: Connecting to Application History server at cdh-master/192.168.0.161:10200
    18/10/28 21:32:38 INFO aliyun.oss: [Server]Unable to execute HTTP request: Not Found
    [ErrorCode]: NoSuchKey
    [RequestId]: 5BD5BA7641FCE369BC1D052C
    [HostId]: null
    18/10/28 21:32:38 INFO aliyun.oss: [Server]Unable to execute HTTP request: Not Found
    [ErrorCode]: NoSuchKey
    [RequestId]: 5BD5BA7641FCE369BC1D052F
    [HostId]: null
    18/10/28 21:32:39 INFO terasort.TeraSort: Generating 10995116 using 100
    18/10/28 21:32:39 INFO mapreduce.JobSubmitter: number of splits:100
    18/10/28 21:32:39 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1540728986531_0005
    18/10/28 21:32:39 INFO impl.YarnClientImpl: Submitted application application_1540728986531_0005
    18/10/28 21:32:39 INFO mapreduce.Job: The url to track the job: http://cdh-master:8088/proxy/application_1540728986531_0005/
    18/10/28 21:32:39 INFO mapreduce.Job: Running job: job_1540728986531_0005
    18/10/28 21:32:49 INFO mapreduce.Job: Job job_1540728986531_0005 running in uber mode : false
    18/10/28 21:32:49 INFO mapreduce.Job:  map 0% reduce 0%
    18/10/28 21:32:55 INFO mapreduce.Job:  map 1% reduce 0%
    18/10/28 21:32:57 INFO mapreduce.Job:  map 2% reduce 0%
    18/10/28 21:32:58 INFO mapreduce.Job:  map 4% reduce 0%
    ...
    18/10/28 21:34:40 INFO mapreduce.Job:  map 99% reduce 0%
    18/10/28 21:34:42 INFO mapreduce.Job:  map 100% reduce 0%
    18/10/28 21:35:15 INFO mapreduce.Job: Job job_1540728986531_0005 completed successfully
    18/10/28 21:35:15 INFO mapreduce.Job: Counters: 36
    ...
  • 测试 terasort:
    [hdfs@hdp-master ~]$ hadoop jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar terasort -Dmapred.map.tasks=100 oss://{bucket-name}/1G-input oss://{bucket-name}/1G-output
    18/10/28 21:39:00 INFO terasort.TeraSort: starting
    ...
    18/10/28 21:39:02 INFO mapreduce.JobSubmitter: number of splits:100
    18/10/28 21:39:02 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1540728986531_0006
    18/10/28 21:39:02 INFO impl.YarnClientImpl: Submitted application application_1540728986531_0006
    18/10/28 21:39:02 INFO mapreduce.Job: The url to track the job: http://cdh-master:8088/proxy/application_1540728986531_0006/
    18/10/28 21:39:02 INFO mapreduce.Job: Running job: job_1540728986531_0006
    18/10/28 21:39:09 INFO mapreduce.Job: Job job_1540728986531_0006 running in uber mode : false
    18/10/28 21:39:09 INFO mapreduce.Job:  map 0% reduce 0%
    18/10/28 21:39:17 INFO mapreduce.Job:  map 1% reduce 0%
    18/10/28 21:39:19 INFO mapreduce.Job:  map 2% reduce 0%
    18/10/28 21:39:20 INFO mapreduce.Job:  map 3% reduce 0%
    ...
    18/10/28 21:42:50 INFO mapreduce.Job:  map 100% reduce 75%
    18/10/28 21:42:53 INFO mapreduce.Job:  map 100% reduce 80%
    18/10/28 21:42:56 INFO mapreduce.Job:  map 100% reduce 86%
    18/10/28 21:42:59 INFO mapreduce.Job:  map 100% reduce 92%
    18/10/28 21:43:02 INFO mapreduce.Job:  map 100% reduce 98%
    18/10/28 21:43:05 INFO mapreduce.Job:  map 100% reduce 100%
    ^@18/10/28 21:43:56 INFO mapreduce.Job: Job job_1540728986531_0006 completed successfully
    18/10/28 21:43:56 INFO mapreduce.Job: Counters: 54
    ...

测试成功,配置生效。

参考文档

关于 Hadoop 更多内容,可参考:Hadoop 支持集成 OSS。

您也可以通过阿里云 EMR 访问 OSS。阿里云 EMR 基于开源生态,包括 Hadoop、Spark、Kafka、Flink、Storm 等组件,为您提供集群、作业、数据管理等服务的一站式企业大数据平台,并无缝支持 OSS。阿里云 EMR 与 OSS 紧密结合,针对开源生态访问 OSS,有多项技术优化,详情可参考 EMR 产品介绍。

发布者:佚, 佚名,转转请注明出处:https://www.cms2.cn/aliyun/2927.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code