关于hadoop3.0

 总算是有点时间了,捣鼓一下hadoop3.0的一些东西,听说3.0比spark快十倍?

一、安装配置

 前面的环境配置与解压安装大体一致。配置文件的异同如下:

1.集群节点配置文件
    3.0以前都是通过 安装目录/etc/hadoop/slaves 进行配置,3.0则是在同一目录下的workers配置,改个名?具体的配置方式与之前一样,每行一个节点名。
2.hadoop-env.sh
    之前只需配置此文件下的JAVA_HOME,现在除了必要的JAVA_HOME外还需修改如下:
    export JAVA_HOME=/usr/local/java/jdk1.8.0_65
    export HADOOP_HOME=/usr/local/hadoop/hadoop-3.1.1
    export HDFS_NAMENODE_USER=root
    export HDFS_DATANODE_USER=root
    export HDFS_SECONDARYNAMENODE_USER=root
    export YARN_RESOURCEMANAGER_USER=root
    export YARN_NODEMANAGER_USER=root
    就是配置你的hadoop用户。我是配置的root,如果配置个别用户的话,自行更改。
3.core-site.xml
    <property>
      <name>fs.defaultFS</name>
     <!-- 指定hdfs的namenode的通信地址 -->
      <value>hdfs://192.168.2.100:9000</value>
     </property>
     <property>
      <name>hadoop.tmp.dir</name>
        <!-- 以下为存放临时文件的路径 -->
      <value>/home/olicity/hadoop/tmp</value>
    </property>
    与之前版本一致
4.hdfs-site.xml
    <property>
       <name>dfs.name.dir</name>
       <value>/home/olicity/hadoop/dfs/name</value>
       <description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently.</description>
    </property>
    <property>
       <name>dfs.data.dir</name>
       <value>/home/olicity/hadoop/dfs/data</value>
       <description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.</description>
    </property>
    <property>
    <name>dfs.namenode.http-address</name>
    <value>centos0:50070</value>
    </property>
    <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>centos0:50090</value>
    </property>
    <property>
       <name>dfs.replication</name>
       <value>2</value>
    </property>
    <property>
          <name>dfs.permissions</name>
          <value>false</value>
          <description>need not permissions</description>
    </property>
    无差。
5.yarn-site.xml
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>centos0</value>
    </property>
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    <property>
      <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
      <value>org.apache.hadoop.mapred.ShuffleHandler</value>
     </property>
    <property>
        <name>yarn.nodemanager.resource.cpu-vcores</name>
    <!-- cpu个数 需要根据当前机器cpu设置 -->
        <value>1</value>
    </property>
    关于cpu的配置,记得之前看过2.2版本就提出过一个初步的实现方式,之前一直没配置过,3.0试一下。
6.mapred-site.xml
    <property>
        <name>mapred.job.tracker</name>
        <value>centos0:49001</value>
    </property>
    <property>
          <name>mapred.local.dir</name>
           <value>/home/olicity/hadoop/var</value>
    </property>
    
    <property>
           <name>mapreduce.framework.name</name>
           <value>yarn</value>
    </property>
    大同小异。其实只要配置mapreduce.framework.name也行。

 总体来看配置方面除了slave改名为worker和hadoop-env.xml配置用户外,别的地方都大同小异。
 接下来就是初始化同样的命令 hdfs namenode -format 。注意要是配置的root用户需要使用root用户进行初始化。同样,不报错返回“Exiting with status 0”即为成功。然后就是在namenode上start-all.sh或者dfs与yarn分开启动也行。最后在集群每台机器上分别jps查看进程启动情况。
 还有之前看过别人的配置,他在hadoop-env.xml下并没有配置用户,而是写在每个start-*.sh脚本中了。

二、文档和大佬们总结的变化

1.最低Java版本要求从Java7变为Java8  
2.HDFS支持纠删码(erasure coding)
    用来解决存储空间文件。EC技术既可以防止数据丢失,又能解决HDFS存储空间翻倍的问题。使得HDFS在不降低可靠性的前提下,节省一半存储空间。
    另外,在使用这个新特性时,用户还需要考虑网络和CPU开销。
3.YARN的时间线V.2服务
    提高时间线服务的可伸缩性和可靠性,通过引入流和聚合来增强可用性
    具体的一些原理和操作,还是看官方文档和大佬博客吧。
4.优化Hadoop Shell脚本,除了修复一些bug,还加入一些新特性
5.精简了内核,剔除了过期的API和实现,废弃hftp转由webhdfs替代。重构Hadoop Client Jar包,解决jar包冲突问题
6.支持等待容器和分布式调度
    在Hadoop3 中引入了一种新型执行类型,即等待容器,即使在调度时集群没有可用的资源,它也可以在NodeManager中被调度执行。在这种情况下,这些容器将在NM中排队等待资源启动,等待荣容器比默认容器优先级低,因此,如果需要,可以抢占默认容器的空间,这样可以提供机器的利用率。
7.MapReduce任务级别本地化优化
    MapReduce添加了映射输出收集器的本地化实现的支持。对于密集型的洗牌操作(shuffle-intensive)jobs,可以带来30%的性能提升。
8.支持多个NameNode节点
    namenode的高可用性
9.修改了多重服务的默认端口
    防止端口冲突
10.提供文件系统连接器(filesystem connnector),支持Microsoft Azure Data Lake和Aliyun对象存储系统
11.数据节点内置平衡器
    通过hdfs diskbalancer ClI来调用,解决单一DataNode管理多个磁盘情况下,添加或删除磁盘导致磁盘负载不均衡问题
12.重写了守护进程和任务的堆管理机制
    现在可以根据主机的内存大小进行自动调整,并且已经禁止HADOOP_HEAPSIZE变量
    Map和Reduce的堆大小的配置被简化了,所以不再需要任务配置作为一个Java选项指定。已经指定的两个现有配置不受此更改的影响
13.S3Gurad:为S3A文件系统客户端提供一致性和元数据缓存
14.HDFS的基于路由器互联
    HDFS Router-Based Federation添加了一个RPC路由层,为多个HDFS命名空间提供了一个联合视图。简化了现存HDFS客户端接入federated cluster的操作。
15.基于API配置的Capacity Scheduler queue configuration
16.YARN资源类型
    Yarn资源模型已经被一般化,可以支持用户自定义的可计算资源类型,而不仅仅是CPU和内存。比如,集群管理员可以定义像GPU数量,软件序列号、本地连接的存储的资源。然后,Yarn任务能够在这些可用资源上进行调度。

 差不多就这些,很多东西我还没细入研究过,主要看的是几处大的变动和效率的优化。

以下是hadoop-3.0的最新参数
Hadoop-3.0
· HADOOP
    · Move to JDK8+
    · Classpath isolation on by default HADOOP-11656
    · Shell script rewrite HADOOP-9902
    · Move default ports out of ephemeral range HDFS-9427
· HDFS
    · Removal of hftp in favor of webhdfs HDFS-5570
    · Support for more than two standby NameNodes HDFS-6440
    · Support for Erasure Codes in HDFS HDFS-7285
· YARN
· MAPREDUCE
    · Derive heap size or mapreduce.*.memory.mb automatically MAPREDUCE-5785

三、使用

 暂时还没在项目上使用,就简单写了个单词划分测试,具体效率的提升还是参照Hadoop3.0版本安装、性能研究

四、总结

 目前已经自己模拟搭建并跑起来了一个四台机器组成的集群,下一步准备捣鼓捣鼓源码那块吧,使用hadoop跑点实际应用的东西,还在筹划中。

五、相关链接

感谢一下几位大佬的博客:

猜你喜欢

转载自blog.csdn.net/weixin_43157082/article/details/83030110