目录
Hadoop配置(非HA)
配置
Hadoop-env.sh
Hdfs
Yarn
MapReduce
Worker文件
启动和验证
问题
Hadoop配置(非HA)
Hadoop是分布式的高可用批处理框架,CDH的Hadoop自带Hbase,Hive等其他组件,但Apache包仅带有分布式文件系统HDFS和资源调度Yarn,及批处理计算框架Mapred,其他组件如Hbase和Hive需要自己适配安装配置;
Hadoop的版本为Apache Hadoop 3.0.3,将tar.gz压缩包解压后放在/home/stream家目录,介绍下解压后的几个文件:
bin:Hadoop最基本的管理脚本和使用脚本的目录,这些脚本是sbin目录下管理脚本的基础实现,用户可以直接使用这些脚本管理和使用Hadoop;
etc:Hadoop配置文件所在的目录,包括core-site,xml、hdfs-site.xml、mapredsite.xml等配置文件;
include:对外提供的编程库头文件(具体动态库和静态库在lib目录中),这些头文件均是用C++定义的,通常用于C++程序访问HDFS或者编写MapReduce程序;
lib:该目录包含了Hadoop对外提供的编程动态库和静态库,与include目录中的头文件结合使用;
libexec:各个服务对用的shell配置文件所在的目录,可用于配置日志输出、启动参数(比如JVM参数)等基本信息;
sbin:Hadoop管理脚本所在的目录,主要包含HDFS和YARN中各类服务的启动/关闭脚本;
share:Hadoop各个模块编译后的jar包所在的目录;
配置
Hadoop中Common、HDFS、Yarn和MapReduce各有对应的配置文件,用于保存对应模块中可配置的参数,这些配置文件均为XML格式且由两部分构成:系统默认配置文件和管理员自定义配置文件。
系统默认配置文件分别是core-default.xml、hdfs-default.xml、mapred-default.xml、yarn-default.xml,其中大部分属性值默认指定,链接如下:
自定义配置文件分别是core-site.xml、hdfs-site.xml、mapred-site.xml和yarn-site.xml,官网上其daemon的配置属性链接如下:
.Configuring the Hadoop Daemons
这些配置文件用于定义一些默认配置没有的属性或者覆盖默认配置文件中的默认值,这些配置一旦确定,便不能被修改(如果想修改,需重新启动Hadoop)。
core-default.xml和core-site.xml属于公共基础库的配置文件,默认情况下,Hadoop优先加载它们。
Hadoop-env.sh
只需要配置JAVA_HOME和HADOOP_HOME的值;
Hdfs
core-site.xml
需要定义默认Fs和临时文件夹及IO的缓冲大小;
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://172.19.72.155/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data01/hadoop</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
hdfs-site.xml
namenode的配置:
<configuration>
<property>
<name>dfs.namenode.rpc-address</name>
<value>172.19.72.155:8020</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>172.19.72.156:9868</value>
</property>
<property>
<name>dfs.namenode.secondary.hosts</name>
<value>172.19.72.156</value>
</property>
<property>
<name>dfs.secondarynamenode.hosts</name>
<value>172.19.72.156</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/data01/hdfs/nn</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.hosts</name>
<value>172.19.72.155</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>172.19.72.155:9870</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
</configuration>
datanode的配置:
<configuration>
<property>
<name>dfs.namenode.rpc-address</name>
<value>172.19.72.155:8020</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>172.19.72.156:9868</value>
</property>
<property>
<name>dfs.namenode.secondary.hosts</name>
<value>172.19.72.156</value>
</property>
<property>
<name>dfs.secondarynamenode.hosts</name>
<value>172.19.72.156</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/data01/hdfs/nn</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.hosts</name>
<value>172.19.72.155</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>172.19.72.155:9870</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/data01/hdfs/dn</value>
</property>
</configuration>
Yarn
Yarn是负责集群资源调度管理的组件,yarn的目标是实现“一个集群多个框架”,同一集群上部署一个统一的资源调度管理框架yarn,在yarn之上可以部署其他各种计算框架,比如MapRudece、Storm、Spark等,yarn为这些计算框架提供统一的资源管理服务(包括CPU、内存),并且能够根据各种计算框架的负载需求,调整各自占用的资源,实现集群资源共享和资源弹性收缩,从而提高集群利用率。不同框架共享底层存储从而避免了数据的跨集群移动,也大大降低了企业运维成本,总结为:
- 计算资源按需伸缩
- 不用负载应用混搭,集群利用率高
- 共享底层存储,避免数据跨集群迁移
yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.address</name>
<value>172.19.72.155:8081</value>
</property>
<property>
<name> yarn.resourcemanager.am.max-attempts</name>
<value>4</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>172.19.72.155:8082</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>172.19.72.155:8083</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>172.19.72.155:8084</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>172.19.72.155:8085</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>172.19.72.155</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>100</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.resourcemanager.nodes.include-path</name>
<value>HA-DLZX-E0407-csap,HA-DLZX-E0507-csap,HA-DLZX-E0408-csap,HA-DLZX-E0508-csap</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>90</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/data01/yarn/nodemanager</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/data01/yarn/logs</value>
</property>
<property>
<name>yarn.nodemanager.log.retain-seconds</name>
<value>10800</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
MapReduce
MapReduce是一种分布式的并行计算框架,用于大规模数据集(大于1T)的并行计算,它将复杂的、运行于大规模集群上的并行计算过程高度抽象到两个函数:Map和Ruduce,极大地方便了分布式编程工作,在编程人员不会分布式并行编程的情况下,也可以很容易将自己的程序运行在分布式系统上,完成海量数据的计算;
MapReduce设计理念是“计算向数据靠拢”,而不是“数据向计算靠拢”,因为在大规模数据下移动计算比移动数据更加经济,移动数据需要大量的网络传输开销。本着这一理念,在一个集群中,只要有可能MapRdeuce框架就会将Map程序就近地在HDFS数据所在节点运行,即计算节点和存储节点一起运行,从而减少了节点间的数据移动开销;
mapred-site.xml
<configuration>
<property>
<name> mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>1536</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx2014M</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>3072</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx2560M</value>
</property>
<property>
<name>mapreduce.task.io.sort</name>
<value>512</value>
</property>
<property>
<name>mapreduce.task.io.sort.factor</name>
<value>100</value>
</property>
<property>
<name>mapreduce.reduce.shuffle.parallelcopies</name>
<value>50</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>172.19.72.155:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>172.19.72.155:19888</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/data01/yarn/temp</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/data01/yarn/done</value>
</property>
</configuration>
Worker文件
列出所有工作节点的主机名或IP地址,每行一个。
List all worker hostnames or IP addresses in your etc/hadoop/workers file, one per line. Helper scripts (described below) will use the etc/hadoop/workers file to run commands on many hosts at once.
172.19.72.156
172.19.72.157
172.19.72.158
172.19.72.159
启动和验证
第一次启动hdfs需要格式化:
$HADOOP_HOME/bin/hdfs namenode -format
启动daemon实例:
$HADOOP_HOME/bin/hdfs --daemon start namenode
$HADOOP_HOME/bin/hdfs --daemon start datanode
$HADOOP_HOME/bin/yarn --daemon start resourcemanager
$HADOOP_HOME/bin/yarn --daemon start nodemanager
$HADOOP_HOME/bin/yarn --daemon start proxyserver
$HADOOP_HOME/bin/mapred --daemon start historyserver
关闭daemon实例后,启动组件:
$HADOOP_HOME/sbin/start-yarn.sh
$HADOOP_HOME/sbin/start-dfs.sh
使用jps查看相关组件进程是否存在,手动在hdfs上创建文件夹并上传文件,验证hdfs是否配置成功:
问题
1、xml中配置的hdfs、yarn、MR的data和log的路径权限, yarn的日志目录没有写权限造成yarn启动成功,但spark启动失败(卡住不动),解决办法是给yarn-site.xml配置中yarn.nodemanager.log-dirs的路径赋权;
2、core-site.xml的配置中fs.defaultFs的值和主机不一致问题,按照官网配置fs.defaultFS的值是hdfs://172.19.72.15:9000,有提示报错:java.io.IOException: Failed on local exception;去掉fs.defaultFs中端口号成功;
<property>
<name>fs.defaultFS</name>
<value>hdfs://172.19.72.155/</value>
</property>
3、未解决:运行的时候发现出现:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 错误,在配置文件hadoop-env.sh中增加:
exportHADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"