上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

Hadoop集成对象存储和HDFS磁盘文件存储

guduadmin14小时前

1.环境配置

1.1 版本说明

组件版本是否必须其他事项
Hadoop3.3.0+hadoop3.3.0之后原生支持国内主要对象存储
Hive3.1.3实测没有Hive也可以使用sparksql,使用hive更好的管理HDFS数据
spark3.3.1hive和spark整合后,语法为HSQL,自定义函数按照hive使用即可
cos未知

说明:由于部分生产日志过大,且需要对近期数据进行分析,HDFS文件存储成本较高,因此定于将近期热数据存储与hdfs,冷数据存储在更便宜的对象存储之上。

1.2 相关组件官网

Hadoop官网:https://hadoop.apache.org/docs/r3.3.4/hadoop-cos/cloud-storage/index.html

腾讯对象存储cos使用官网:https://cloud.tencent.com/document/product/436/6884

spark官网:https://spark.apache.org/docs/3.3.1/

1.3 cos与hadoop集成特征

  • 支持 Hadoop MapReduce 和 Spark 将数据写入 COS 并直接从 COS 中读取。

  • 实现了Hadoop文件系统的接口,提供了与HDFS相同的伪层次目录结构。

  • 支持大文件分段上传。单个文件最大支持19TB

  • 高性能和高可用性。Hadoop-COS 与 HDFS 的性能差异不超过 30%。

    1.4 使用限制

    对象存储不是文件系统,它有一些限制:

    1. 对象存储是一种键值存储,它天然不支持分层目录。通常,使用对象键中的目录分隔符来模拟分层目录,例如“/hadoop/data/words.dat”。

    2. COS 对象存储目前不支持对象的追加操作。这意味着您不能将内容附加到现有对象(文件)的末尾。

    3. 删除和重命名操作都是非原子的,这意味着操作会被中断,操作结果可能会处于不一致的状态。

    4. 对象存储有不同的授权模型:

    • 目录权限报告为 777。

    • 文件权限报告为 666。

    • 文件所有者被报告为本地当前用户。

    • 文件组也被报告为本地当前用户。

      1. 支持大文件(最大40TB)分段上传,但分段数量限制为10000。

      2. 每次列出的文件数量限制为 1000 个。

      2.Hadoop与HDFS集成

      详见本博客《最全Hadoop实际生产集群高可用搭建》

      3.Hadoop与yarn集成

      3.1 概念

      • Bucket:COS 中存储数据的容器,名称由用户自定义的 BucketName 和用户 AppID 组成。

      • Appid:用户维度的唯一资源标识符。

      • SecretId:用于验证用户身份的 ID

      • SecretKey:用于验证用户身份的密钥

      • Region:桶所在的区域。

      • CosN:Hadoop-COS 使用cosn作为其 URI 方案,因此 CosN 通常用来指代 Hadoop-COS。

        3.2 依赖关系

        • cos_api(5.4.10 或更高版本)
        • cos-java-sdk(推荐2.0.6版本)
        • joda-time(推荐2.9.9版本)
        • httpClient(推荐4.5.1或更高版本)
        • Jackson:jackson-core、jackson-databind、jackson-annotations(2.9.8 或更高版本)
        • bcprov-jdk15on(推荐1.59版本)

          3.3 属性配置

          如果您计划使用 COS 作为 Hadoop 或其他大数据系统的默认文件系统,则需要在 core-site.xml 中将fs.defaultFS配置为 Hadoop-COS 的 URI。Hadoop-COS 使用cosn作为其 URI 方案,并使用存储桶作为其 URI 主机。同时,您需要显式设置fs.cosn.userinfo.region来指示您的存储桶所在的区域。

          对于 Hadoop-COS,fs.defaultFS是一个选项。如果您只是暂时使用 COS 作为 Hadoop 的数据源,则无需设置该属性,只需在使用时指定完整的 URI 即可。例如:hadoop fs -ls cosn://testBucket-125236746/testDir/test.txt。

          fs.cosn.userinfo.region是 Hadoop-COS 的必需属性。原因是 Hadoop-COS 必须知道使用存储桶的区域,才能准确构造 URL 来访问它。

          COS支持多区域存储,不同区域默认有不同的访问域。建议根据自己的业务场景选择就近的存储区域,以提高对象上传下载速度。

          3.3.1 配置core-site.xml

          hadoop官网的配置名称有些问题,建议参考腾讯的官网来配置

           
              
              
                  fs.cosn.bucket.region
                  ap-xxx
                  The region where the bucket is located
              
          
          
                  fs.cosn.credentials.provider
                  org.apache.hadoop.fs.auth.SimpleCredentialProvider
          
              
                  fs.cosn.userinfo.secretId
                  xxxx
                  Tencent Cloud Secret Id 
              
              
                  fs.cosn.userinfo.secretKey
                  xxxx
                  Tencent Cloud Secret Key
              
          
          
                  fs.cosn.impl
                  org.apache.hadoop.fs.CosFileSystem
                  The implementation class of the CosN Filesystem
              
              
                  fs.AbstractFileSystem.cosn.impl
                  org.apache.hadoop.fs.CosN
                  The implementation class of the CosN AbstractFileSystem.
              
          
          
                  fs.cosn.tmp.dir
                  /tmp/hadoop_cos
                  Temporary files would be placed here.
              
              
                  fs.cosn.buffer.size
                  33554432
                  The total size of the buffer pool.
              
              
                  fs.cosn.block.size
                  8388608
                  
                  Block size to use cosn filesysten, which is the part size for MultipartUpload. Considering the COS supports up to 10000 blocks, user should estimate the maximum size of a single file. For example, 8MB part size can allow  writing a 78GB single file.
                  
              
              
                  fs.cosn.maxRetries
                  3
                  
                The maximum number of retries for reading or writing files to COS, before throwing a failure to the application.
                  
              
              
                  fs.cosn.retry.interval.seconds
                  3
                  The number of seconds to sleep between each COS retry.
              
          

          3.3.2 属性配置介绍

          特性描述默认值必需的
          fs.defaultFS配置Hadoop使用的默认文件系统。没有任何
          fs.cosn.credentials.provider此选项允许用户指定如何获取凭据。如果未指定,凭证提供程序的默认顺序为:1. org.apache.hadoop.fs.auth.SimpleCredentialsProvider2.org.apache.hadoop.fs.auth.EnvironmentVariableCredentialsProvider。没有任何
          fs.cosn.userinfo.secretId/secretKey您账户的API密钥信息没有任何是的
          fs.cosn.bucket.region桶所在区域。没有任何是的
          fs.cosn.implCosN 文件系统的实现类。没有任何是的
          fs.AbstractFileSystem.cosn.implCosN AbstractFileSystem 的实现类。没有任何是的
          fs.cosn.tmp.dir程序运行过程中,cosn生成的临时文件会存放在这里。/tmp/hadoop_cos
          fs.cosn.缓冲区大小缓冲池的总大小。要求大于或等于块大小。33554432
          fs.cosn.块大小文件块的大小。考虑到每个文件最多可以分为10000个上传的限制,必须根据使用的单个文件的最大大小来设置该选项。例如,8MB 的部分大小可以允许写入 78GB 的​​单个文件。8388608
          fs.cosn.upload_thread_pool文件流式传输到 COS 时并发上传的线程数。CPU核心数*3
          fs.cosn.read.ahead.block.size每个预读块的大小。524288 (512KB)
          fs.cosn.read.ahead.queue.size预读队列的长度。10
          fs.cosn.maxRetries在向应用程序抛出故障之前,向 COS 读取或写入文件的最大重试次数。3
          fs.cosn.重试.间隔.秒每次重试之间休眠的秒数3

          3.3.3 更新其他位置的core-site.xml

          hive和spark的core-site.xml文件并分发

          3.4 依赖包配置

          3.4.1 获取 Hadoop-COS 分发包及其依赖

          下载地址:Hadoop-COS release

          3.4.2 安装hadoop-cos

          1. 将hadoop-cos-{hadoop.version}-x.x.x.jar和cos_api-bundle-5.x.x.jar 拷贝到 $HADOOP_HOME/share/hadoop/tools/lib下。

          NOTE: 根据hadoop的具体版本选择对应的jar包,若release中没有提供匹配版本的jar包,可自行通过修改pom文件中hadoop版本号,重新编译生成。

          1. 修改 hadoop_env.sh 在 $HADOOP_HOME/etc/hadoop目录下,进入 hadoop_env.sh,增加如下内容,将 cosn 相关 jar 包加入 Hadoop 环境变量:
          for f in $HADOOP_HOME/share/hadoop/tools/lib/*.jar; do
            if [ "$HADOOP_CLASSPATH" ]; then
              export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$f
            else
              export HADOOP_CLASSPATH=$f
            fi
          done
          
          1. 将hadoop-cos-{hadoop.version}-x.x.x.jar和cos_api-bundle-5.x.x.jar 拷贝到 $HIVE_HOME/lib下

          4.测试使用

          4.1 hadoop测试

          hadoop fs -ls -R cosn://examplebucket-1250000000000/<路径>
          hadoop fs -ls -R /<路径>(配置了fs.defaultFS选项为 cosn:// 后)
          #例如:
          hadoop fs -ls -R cosn://hdfs-test-1252681929/
          -rw-rw-rw-   1 root root       1087 2018-06-11 07:49 cosn://hdfs-test-1252681929/LICENSE
          drwxrwxrwx   - root root          0 1970-01-01 00:00 cosn://hdfs-test-1252681929/hdfs
          drwxrwxrwx   - root root          0 1970-01-01 00:00 cosn://hdfs-test-1252681929/hdfs/2018
          -rw-rw-rw-   1 root root       1087 2018-06-12 03:26 cosn://hdfs-test-1252681929/hdfs/2018/LICENSE
          -rw-rw-rw-   1 root root       2386 2018-06-12 03:26 cosn://hdfs-test-1252681929/hdfs/2018/ReadMe
          drwxrwxrwx   - root root          0 1970-01-01 00:00 cosn://hdfs-test-1252681929/hdfs/test
          -rw-rw-rw-   1 root root       1087 2018-06-11 07:32 cosn://hdfs-test-1252681929/hdfs/test/LICENSE
          -rw-rw-rw-   1 root root       2386 2018-06-11 07:29 cosn://hdfs-test-1252681929/hdfs/test/ReadMe
          

          4.2 hive及spark测试

          hive测试

          -- 测试数据分区插入对象存储
          CREATE TABLE `student1`(
          id int, name string
            )
          PARTITIONED BY (
            `part_day` string)
          ROW FORMAT SERDE
            'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
          STORED AS INPUTFORMAT
            'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
              OUTPUTFORMAT
            'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
          LOCATION
            'cosn://hdfs-test-1252681929/test/student1';
          set spark.yarn.queue=xxxx;
          insert into table student1 values(1,'abc','20231217');
          

          spark类似

网友评论

搜索
最新文章
热门文章
热门标签