前言
记录一下学习搭建Hadoop环境时看的一些文章
正文
1,单机模式
- 【Hadoop基础教程】2、Hadoop之单机模式搭建:这个文章是Hadoop1.2.1的配置方法,但用在2.x系列上也好用。这个博客里的相关Hadoop的文章都可以看看,写的很清楚,就是版本老了点。
- Hadoop单机模式和伪分布式搭建教程CentOS:2.6版本的Hadoop的配置文章
Macos 上安装 Hadoop
- 把 hadoop 包放到某个目录下后,要修改目录的权限
sudo chown -R you:yourgroup /usr/local/hadoop/
- 其它文章
Mac下Hadoop的安装和启动:可以参考这个文章来安装。
Mac OS X Yosemite安装Hadoop 2.6记录:这个文章有个运行 hadoop mapreduce 的例子。
2,伪分布式
- Hadoop单机模式和伪分布式搭建教程CentOS:2.6版本的Hadoop的配置文章
- 【Hadoop基础教程】3、Hadoop之伪分布式环境搭建:版本是Hadoop1.2.1,可以参考一下。但JobTracker和TaskTracker相关的可以不看,因为在Hadoop2.x以后,JobTracker和TaskTracker都变成了ResourceManager和NodeManager。
- Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04:这个教程版本是2.6.0,还没有看,但博客观看体验非常好,有需要的可以看看。
3,完全分布式安装与配置
基本配置:
- Hadoop2.3完全分布式安装与配置 :2.3版本的Hadoop的配置文章
- 【Hadoop基础教程】4、Hadoop之完全分布式环境搭建:版本是Hadoop1.2.1,可以参考一下。但JobTracker和TaskTracker相关的可以不看,因为在Hadoop2.x以后,JobTracker和TaskTracker都变成了ResourceManager和NodeManager。
- Hadoop2.2.0中配置SecondaryNameNode:这个文章把SecondaryNamenode的每个配置项的作用都解释的很好,推荐
- hadoop2.X如何将namenode与SecondaryNameNode分开配置:这是关于配置SecondaryNameNode的文章
- Hadoop集群安装配置教程_Hadoop2.6.0_Ubuntu/CentOS:这个教程版本是2.6.0,还没有看,但博客观看体验非常好,有需要的可以看看。
- Hadoop Cluster Setup:官方的教程,还没有看过,有时间看看
CUP和内存配置:
- YARN的内存和CPU配置:如果在小内存和CPU的机器上配置环境的话,要看这个文章。因为如果配置不好的话,Yarn无法给Mapreduce分配资源,从而程序无法进行。
- Hadoop YARN中内存和CPU两种资源的调度和隔离
注意:
(1)在配置完全分布式时,原来以为Slave机器在配置core-site.xml和hdfs-site.xml等文件时,可以少配置很多东西。但其实不是,也需要配置很多东西。就有一个篇解决Slave配置中问题的文章中写的一部分:
把Master中的core-site.xml和hdfs-site.xml文件拷贝一份到slave机器。
这段说明可以看出,Master机器和Slave机器在基础配置里还是有很多东西要一样的。
(2)如果想在本机用虚拟机进做环境的话,一定要设置好“内存”和“CPS”的参数。因为如果这个设置不好的话,会有下面的两种情况:
- 程序会一直停留有Pending的状态,不能进入到Running状态,因为没有资源能够分配。我刚才开始搭建环境的时候,给Master和Slave虚拟机只分配了1G的内存,而没有修改“内存”和“CPU”相关的相关配置(这些参数的默认值有很多就超过了1G)。
- 到了Running状态,启动log始终显示
mapreduce.Job: map 0% reduce 0%
。这是因为yarn.nodemanager.resource.memory-mb
配置的最小值必须为4096,但我只设置了1024。把虚拟机的内存设置为5120(1024 x 5)后,再把内存的相关参数扩大后,就可以运行了。
关于map 0% reduce 0%
参考: - MapReduce in Hadoop 2.2.0 not working
- Map reduce job getting stuck at map 0% reduce 0%
(3)Master和Slave上的几个conf配置文件不需要全部同步,如果确定都是通过Master去启动和关闭,那么Slave机器上的配置不需要去维护。但如果希望在任意一台机器都可以启动和关闭Hadoop,那么就需要全部保持一致了。
(4)Master和Slave机器上的/etc/hosts中必须把集群中机器都配置上去,就算在各个配置文件中使用的是IP。这个吃过不少苦头,原来以为如果配成IP就不需要去配置Host,结果发现在执行Reduce的时候总是卡住,在拷贝的时候就无法继续下去,不断重试。另外如果集群中如果有两台机器的机器名如果重复也会出现问题。
(5)如果在新增了节点或者删除节点的时候出现了问题,首先就去删除Slave的hadoop.tmp.dir,然后重新启动试试看,如果还是不行那就干脆把Master的hadoop.tmp.dir删除(意味着dfs上的数据也会丢失),如果删除了Master的hadoop.tmp.dir,那么就需要重新namenode –format。
上面的(3)~(5)参考:Hadoop中的集群配置和使用技巧
4,测试搭建的环境:
(1)使用命令:jps
使用$HADOOP_HOME/sbin目录下的:start-dfs.sh和start-yarn.sh命令,启动hdfs和yarn后,在Master机器上,使用JPS命令后,能看到以下的进程:
- ResourceManager
- NameNode
在Slave机器上,使用JPS命令后,能看到以下的进程:
- DataNode
- SecondaryNameNode
- nodemanager
因为我把SecondaryNamenode配置到了Slave机器上,所以显示在Slave上面。
(2)测试WEB服务
用下面的url查看Web服务是否启动:
- 通过web查看资源(ResourceManager)(http://192.168.0.201:8088):查看任务执行情况
- 查看HDFS状态(http://192.168.0.201:50070):HDFS的WEB管理画面
(3)运行程序
参考下面的文章来运行测试程序。下面文章最下面的部分,写了如何运行Hadoop自带的程序,来测试搭建的环境。
Ubuntu上搭建Hadoop环境(单机模式+伪分布模式):
5,配置文件的中使用的设置的解释
core-site.xml
:
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-master:9000</value>
</property>
<!-- secondarynamenode setting -->
<property>
<name>fs.checkpoint.period</name>
<value>3600</value>
</property>
<property>
<name>fs.checkpoint.size</name>
<value>67108864</value>
</property>
fs.defaultFS
:定义NameNode的URI和端口
hadoop.tmp.dir
:SecondaryNamenode就生成在这个目录中,所以这个目录的权限一定要给Hadoop用户
fs.checkpoint.period
:表示多长时间记录一次hdfs的镜像。默认是1小时
fs.checkpoint.size
:定义了edits日志文件的最大值,一旦超过这个值会导致强制执行备份(即使没到检查点的最大时间间隔)。默认值是64MB
hdfs-site.xml
:
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/hdfs/data</value>
</property>
<!-- secondary namenode setting -->
<property>
<name>dfs.http.address</name>
<value>hadoop-master:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop-slave-1:50090</value>
</property>
dfs.replication
:分布式文件系统数据块复制数。一般来说,设置3(份)就可以。
dfs.namenode.name.dir
:NameNode 持久存储命名空间及事务日志的本地文件系统路径。
dfs.datanode.data.dir
:DataNode存放块数据的本地文件系统路径,逗号分割的列表。
dfs.http.address
:NameNode节点开放的HTTP服务,是由Secondary 节点获取fsimage ,edits 文件的通道
dfs.namenode.secondary.http-address
:Secondary 节点开放的HTTP服务,是由NameNode节点获取新的fsimage 文件的通道
mapred-site.xml
:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
mapreduce.framework.name
:新框架支持第三方 MapReduce 开发框架以支持如 SmartTalk/DGSG 等非 Yarn 架构,注意通常情况下这个配置的值都设置为 Yarn,如果没有配置这项,那么提交的 Yarn job 只会运行在 locale 模式,而不是分布式模式。
yarn-site.xml
:
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
yarn.resourcemanager.hostname
:ResourceManager的主机名
yarn.nodemanager.aux-services
:NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序
6,hadoop 环境变量作用
-
HADOOP_CONF_DIR
当 spark 想要使用本地 hadoop 配置的时候(core-site.xml、hdfs-site.xml 等),在spark-env.sh
里设置 HADOOP_CONF_DIR。HADOOP_CONF_DIR 指向 hadoop 配置目录。
例如:export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
-
HADOOP_OPTS
Hadoop启动时的JVM参数,默认是以server模式启动,可以加入-X或-XX之类的参数