总算是有点时间了,捣鼓一下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跑点实际应用的东西,还在筹划中。
五、相关链接
感谢一下几位大佬的博客: