热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ConfiguringHeterogeneousStorageinHDFS

Hadoop在2.6.0版本中引入了一个新特性异构存储.异构存储可以根据各个存储介质读写

Hadoop在2.6.0版本中引入了一个新特性异构存储.异构存储可以根据各个存储介质读写特性的不同发挥各自的优势.一个很适用的场景就是冷热数据的存储.针对冷数据,采用容量大的,读写性能不高的存储介质存储,比如最普通的Disk磁盘.而对于热数据而言,可以采用SSD的方式进行存储,这样就能保证高效的读性能,在速率上甚至能做到十倍于或百倍于普通磁盘读写的速度,甚至可以把数据直接存放内存,懒加载入hdfs.HDFS的异构存储特性的出现使得我们不需要搭建两套独立的集群来存放冷热2类数据,在一套集群内就能完成.所以这个功能特性还是有非常大的实用意义的.下面我介绍一下异构存储的类型,以及如果灵活配置异构存储!

  • 超冷数据存储,非常低廉的硬盘存储 - 银行票据影像系统场景
  • 默认存储类型 - 大规模部署场景,提供顺序读写IO
  • SSD类型存储 - 高效数据查询可视化,对外数据共享,提升性能
  • RAM_DISK - 追求极致性能
  • 混合盘  - 一块ssd/一块hdd + n sata/n sas

HDFS Storage Type
  • storage types:

    • ARCHIVE - Archival storage is for very dense storage and is useful for rarely accessed data. This storage type is typically cheaper per TB than normal hard disks.

    • DISK - Hard disk drives are relatively inexpensive and provide sequential I/O performance. This is the default storage type.

    • SSD - Solid state drives are useful for storing hot data and I/O-intensive applications.

    • RAM_DISK - This special in-memory storage type is used to accelerate low-durability, single-replica writes.

Storage Policies
  • HDFS has six preconfigured storage policies.

    • Hot - All replicas are stored on DISK.

    • Cold - All replicas are stored ARCHIVE.

    • Warm - One replica is stored on DISK and the others are stored on ARCHIVE.

    • All_SSD - All replicas are stored on SSD.

    • One_SSD - One replica is stored on SSD and the others are stored on DISK.

    • Lazy_Persist - The replica is written to RAM_DISK and then lazily persisted to DISK.

Setting a Storage Policy for HDFS
  • Setting a Storage Policy for HDFS Using Ambari
     设置存储策略,每个Datanode 使用存储类型,在目录中声明,配置异构存储步骤:

    • 添加“dfs.storage.policy.enabled”属性,改变默认值为true

    • 为每个datanode设置存储目录,声明存储类型,例如:

      dfs.storage.policy.enabled = true
      dfs.datanode.data.dir = [DISK]/data01/hadoop/hdfs/data,[DISK]/data03/hadoop/hdfs/data,[DISK]/data04/hadoop/hdfs/data,[DISK]/data05/hadoop/hdfs/data,[DISK]/data06/hadoop/hdfs/data,[DISK]/data07/hadoop/hdfs/data,[DISK]/data08/hadoop/hdfs/data,[DISK]/data09/hadoop/hdfs/data,[DISK]/data10/hadoop/hdfs/data,[DISK]/data11/hadoop/hdfs/data,[DISK]/data12/hadoop/hdfs/data,[DISK]/data02/hadoop/hdfs/data,[SSD]/data13/ssd/hadoop/hdfs/data,[RAM_DISK]/data14/dn-tmpfs

    • 开启一个终端session,登陆到hdfs某个节点,切换到hdfs用户,通过如下命令设置存储策略,让hdfs目录和配置的存储策略对应,默认写即为普通盘。

      • HDFS command

          $ hdfs storagepolicies -setStoragePolicy -path -policy
          path_to_file_or_directory -policy policy_name

      • HDFS SSD

          $ mount /dev/nvme0n1 /data13/ssd
          $ hadoop fs -mkdir /ssd
          $ hdfs storagepolicies -setStoragePolicy -path /ssd -policy ALL_SSD
             Set storage policy ALL_SSD on /ssd
          $ hdfs storagepolicies -getStoragePolicy -path /ssd
          The storage policy of /ssd:
          BlockStoragePolicy{ALL_SSD:12, storageTypes=[SSD], creatiOnFallbacks=[DISK], replicatiOnFallbacks=[DISK]}

      • HDFS RAM

         $ mkdir /data14/dn-tmpfs -p
         $ sudo mount -t tmpfs -o size=70g tmpfs /data14/dn-tmpfs
         $ hadoop fs -mkdir /ram
         $ hdfs storagepolicies -setStoragePolicy -path /ram -policy LAZY_PERSIST

    • mover存储策略对应目录

      $ hdfs mover -p

    • restart hadoop

Managing Storage Policies
  • getStoragePolicy

    $ hdfs storagepolicies -getStoragePolicy -path path_to_policy

  • listPolicies

    $ hdfs storagepolicies -listPolicies

Test
  • iperf 检测主机间网络带宽

    yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    yum install iperf -y
    yum install ifstatus -y

    如下,在第一个机器启动一个监听,去另外一个服务器压测,网络带宽;可以看到网络带宽:10Gbits

    [root@bigdata-server-1 ~]# iperf -s
    ------------------------------------------------------------
    Server listening on TCP port 5001
    TCP window size: 85.3 KByte (default)
    ------------------------------------------------------------
    [  4] local 192.168.0.64 port 5001 connected with 192.168.0.64 port 51085
    [ ID] Interval       Transfer     Bandwidth
    [  4]  0.0-10.0 sec  24.8 GBytes  21.3 Gbits/sec
    [  5] local 192.168.0.64 port 5001 connected with 192.168.0.63 port 48903
    [  5]  0.0-10.0 sec  10.9 GBytes  9.38 Gbits/sec
    [root@bigdata-server-2 ~]# iperf -c bigdata-server-1
    ------------------------------------------------------------
    Client connecting to bigdata-server-1, TCP port 5001
    TCP window size: 19.3 KByte (default)
    ------------------------------------------------------------
    [  3] local 192.168.0.63 port 48903 connected with 192.168.0.64 port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0-10.0 sec  10.9 GBytes  9.38 Gbits/sec

  • hdfs NFSGateway
    把hdfs通过它提供的gateway接口mount到Linux本地,往里面dd压测,看性能表现。

    [root@bigdata-server-1 ~]# mkdir /hdfs
    [root@bigdata-server-1 ~]# mount -t nfs -o vers=3,proto=tcp,nolock localhost:/ /hdfs
    [hdfs@bigdata-server-1 hdfs]$ dd if=/dev/zero of=/hdfs/test/test004 bs=10M count=1000
    记录了1000+0 的读入
    记录了1000+0 的写出
    10485760000字节(10 GB)已复制,122.15 秒,85.8 MB/秒

  • hdfs fuse

    $ yum install hadoop_2_3_4_0_3485-hdfs-fuse.x86_64
    $ mkdir /mnt/hdfs
    [hdfs@bigdata-server-1 bin]$ ./hadoop-fuse-dfs hadoop-fuse-dfs#dfs://bigdata-server-1:8020 /mnt/hdfs fuse allow_other,usetrash,rw 2 0
      ./hadoop-fuse-dfs: line 7: /usr/lib/bigtop-utils/bigtop-detect-javahome: No such file or directory
      ./hadoop-fuse-dfs: line 18: /usr/lib/bigtop-utils/bigtop-detect-javalibs: No such file or directory
      /usr/hdp/2.3.4.0-3485/hadoop/bin/fuse_dfs: error while loading shared libraries: libjvm.so: cannot open shared object file: No such file or directory
    [hdfs@bigdata-server-1 hdfs]$ tail -2 /etc/profile
    export LD_LIBRARY_PATH=/usr/hdp/current/hadoop-client/bin/../lib:/usr/hdp/2.3.4.0-3485/usr/lib:/usr/jdk64/jdk1.7.0_67/jre/lib/amd64/server
    export PATH=.:/usr/hdp/current/hadoop-client/bin:$PATH
    [hdfs@bigdata-server-1 hdfs]$ hadoop-fuse-dfs hadoop-fuse-dfs#dfs://localhost:8020 /mnt/hdfs
    [hdfs@bigdata-server-1 hdfs]$ df -h|tail -1
     fuse_dfs                          177T  575G  176T   1% /mnt/hdfs
    [hdfs@bigdata-server-1 hdfs]$ dd if=/dev/zero of=/mnt/hdfs/test004 bs=10M count=1000
    记录了1000+0 的读入
    记录了1000+0 的写出
    10485760000字节(10 GB)已复制,64.8231 秒,162 MB/秒

  • 单盘ssd,sata性能

    [root@bigdata-server-1 ssd]# dd if=/dev/zero of=/data12/test004 bs=1M count=100000
    记录了100000+0 的读入
    记录了100000+0 的写出
    104857600000字节(105 GB)已复制,458.219 秒,229 MB/秒
    [root@bigdata-server-1 ~]# dd if=/dev/zero of=/data13/ssd/test004 bs=1M count=100000
    记录了100000+0 的读入
    记录了100000+0 的写出
    104857600000字节(105 GB)已复制,78.6155 秒,1.3 GB/秒

  • iostat
    常见用法:

    iostat -d -k 1 5         查看磁盘吞吐量等信息。
    iostat -d -x -k 1 5     查看磁盘使用率、响应时间等信息
    iostat –x 1 5            查看cpu信息。

  • DFSTestIO

    • SSD

      $ time hadoop jar hadoop-mapreduce-client-jobclient-tests.jar TestDFSIO -Dtest.build.data=/ssd -write -nrFiles 4 -fileSize 50000
      $ time hadoop jar hadoop-mapreduce-client-jobclient-tests.jar TestDFSIO -Dtest.build.data=/ssd -read -nrFiles 4 -fileSize 50000

    • SATA

      $ time hadoop jar hadoop-mapreduce-client-jobclient-tests.jar TestDFSIO -Dtest.build.data=/sata -write -nrFiles 4 -fileSize 50000
      $ time hadoop jar hadoop-mapreduce-client-jobclient-tests.jar TestDFSIO -Dtest.build.data=/sata -read -nrFiles 4 -fileSize 50000

    • RAM

      $ time hadoop jar hadoop-mapreduce-client-jobclient-tests.jar TestDFSIO -Dtest.build.data=/ram -write -nrFiles 4 -fileSize 50000
      $ time hadoop jar hadoop-mapreduce-client-jobclient-tests.jar TestDFSIO -Dtest.build.data=/ram -read -nrFiles 4 -fileSize 50000

MapReduce Performance on SSDs/SATA/RAM/SSD-SATA

测试hdfs异构存储性能结果白皮书,后续内容发布…

FAQ
  • 1、ambari Version 2.2.2.0 和 HDP-2.4.2.0-258 版本,安装后配置多种异构存储类型,[RAM_DISK]方式ambari配置界面验证失败,无法通过!此为一个bug!
    • 详情访问:https://issues.apache.org/jira/browse/AMBARI-14605

参考:

  • Configuring Heterogeneous Storage in HDFS: https://www.cloudera.com/documentation/enterprise/latest/topics/admin_heterogeneous_storage_oview.html#admin_heterogeneous_storage_config

  • The Truth About MapReduce Performance on SSDs: http://blog.cloudera.com/blog/2014/03/the-truth-about-mapreduce-performance-on-ssds/

  • Memory Storage Support in HDFS: http://aajisaka.github.io/hadoop-project/hadoop-project-dist/hadoop-hdfs/MemoryStorage.html

  • Archival Storage, SSD & Memory: http://aajisaka.github.io/hadoop-project/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html

  • How to configure storage policy in Ambari?: https://community.hortonworks.com/questions/2288/how-to-configure-storage-policy-in-ambari.html

  • Using NFS with Ambari 2.1 and above: https://community.hortonworks.com/questions/301/using-nfs-with-ambari-21.html

  • Disaster recovery and Backup best practices in a typical Hadoop Cluster:https://community.hortonworks.com/articles/43575/disaster-recovery-and-backup-best-practices-in-a-t-1.html

原创文章,转载请注明: 转载自whoami的博客
本博客的文章集合:
http://www.itweet.cn/archives/



推荐阅读
  • 本文详细记录了一次 HBase RegionServer 异常宕机的情况,包括具体的错误信息和可能的原因分析。通过此案例,探讨了如何有效诊断并解决 HBase 中常见的 RegionServer 挂起问题。 ... [详细]
  • 本文详细介绍如何在Android模拟器上安装TaintDroid的过程,包括解决源代码链接失效及服务器文件变动等问题,旨在帮助后续用户避免不必要的麻烦。 ... [详细]
  • 深入解析Pytest Fixture与Conftest的高级应用
    本文详细探讨了Pytest中的Fixture机制及其在conftest.py文件中的全局配置应用,涵盖Fixture的基本概念、定义、多种使用场景以及作用域等内容,适合希望深入了解Pytest测试框架的开发者。 ... [详细]
  • 本文详细介绍了如何处理Oracle数据库中的ORA-00227错误,即控制文件中检测到损坏块的问题,并提供了具体的解决方案。 ... [详细]
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • ipvsadm命令简介:ipvsadm是LVS在应用层的管理命令,我们可以通过这个命令去管理LVS的配置。在fedora14、Linux6.0之后系统中 ... [详细]
  • 本文介绍了Windows驱动开发的基础知识,包括WDF(Windows Driver Framework)和WDK(Windows Driver Kit)的概念及其重要特性,旨在帮助开发者更好地理解和利用这些工具来简化驱动开发过程。 ... [详细]
  • TunnelWarfareTimeLimit:1000MS MemoryLimit:131072KTotalSubmissions:7307 ... [详细]
  • Hadoop集群搭建:实现SSH无密码登录
    本文介绍了如何在CentOS 7 64位操作系统环境下配置Hadoop集群中的SSH无密码登录,包括环境准备、用户创建、密钥生成及配置等步骤。 ... [详细]
  • HDFS数据读写流程详解
    本文详细解析了HDFS(Hadoop分布式文件系统)中的数据读写过程,包括从客户端发起请求到最终完成数据传输的每一个关键步骤。 ... [详细]
  • 本文提供了一个详尽的前端开发资源列表,涵盖了从基础入门到高级应用的各个方面,包括HTML5、CSS3、JavaScript框架及库、移动开发、API接口、工具与插件等。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 本文介绍如何通过整合SparkSQL与Hive来构建高效的用户画像环境,提高数据处理速度和查询效率。 ... [详细]
author-avatar
feify_fei512_478
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有