前言
由于项目的需要,hadoop2.2.0与hbase0.98.5的集群搭建已经有一段时间了。今日重新研究了一遍整个集群的搭建,对整个搭建过程有了进一步的理解。
准备工作
- 时间的同步
- 主节点上使用
ssh-keygen
生成密钥,并使用ssh-copy-id
将公钥拷贝到其他机器。注意主节点自己也需要安装ssh server
,并且自己对自己也要能无密码登录 -
JAVA_HOME
的设置
1. hdfs
以前搭建这个平台主要是使用hbase作为存储数据库,所以只使用了hadoop的hdfs。其核心配置文件有三个:hadoop-env.sh
,core-site.xml
,hdfs-site.xml
。(当然,yarn框架也使用到了hadoop-env.sh
和core-site.xml
,这里分开看。)下面分开来看:
hadoop-env.sh
这个文件主要配置如java路径、hadoop配置文件目录、日志目录等环境变量,最简单的配置是只修改java路径(JAVA_HOME
)而不修改其他。不过今天我想重启集群时发现stop-hdfs.sh
脚本无法关闭集群,网上找到的原因是集群进程的pid号默认放在/tmp
目录下导致pid号的定期删除,而管理脚本找不到pid号导致管理失败。于是考虑将pid放到自己定义的目录下。hadoop-env.sh文件中定义了一个HADOOP_PID_DIR
变量,于是可以简单地在.bashrc
文件中加入该变量即可。如果不行,在hadoop-env.sh
中直接定义该变量。core-site.xml
这个文件核心设置如下:
xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> <description>指明了默认的hdfs的路径和端口。在HBase指明在hdfs上的存储位置时用的就是这个路径</description> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/user/tmp/hadoop</value> <description>hadoop的一些临时文件存放目录。其他一些目录也使用了该目录作为基础</description> </property> </configuration>
我配置了这两个参数后系统就可以正常工作了。详细的官网配置地址在此处。
- hdfs-site.xml
核心配置如下:
xml
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>/home/user/tmp/hadoop/dfs/name</value> <description>名字节点数据的存放目录</description> </property> <property> <name>dfs.datanode.data.dir</name> <value>/home/user/tmp/hadoop/dfs/data</value> <description>数据节点数据的存放目录</description> </property> <property> <name>dfs.replication</name> <value>3</value> <description>hdfs备份的数目</description> </property> </configuration>
配置很简单。详细配置在此处。
2.yarn
hadoop 2.2.0采用了第二代架构yarn,和第一代相比有着不小的改变。其配置文件有yarn-env.sh
,yarn-site.xml
,mapred-site.xml
。
yarn-env.sh
这个文件也是设置如java路径等环境变量。可以在文件中或者直接在.bashrc
中设置如JAVA_HOME
或者YARN_PID_DIR
(设置pid的存放目录)等变量。pid默认存放在/tmp
目录下,丢失也会导致stop-yarn.sh
等脚本的失效。(stop-yarn.sh
脚本实际上调用的是yarn-daemon.sh
,其中可以发现YARN_PID_DIR
变量)。yarn-site.xml
核心配置如下:
xml
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>localhost</value> <description>resourcemanager的主机名。默认为0.0.0.0。被很多其他的参数作为基础</description> </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> </configuration>
如上的三条配置即可成功运行。详细配置见此处。
- mapred-site.xml
xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>localhost:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>localhost:19888</value> </property> </configuration>
该配置文件主要配置以下和mapreduce任务相关的配置。甚至后面两条关于address的配置也不是必须的,不过我没去尝试。完整配置在这里。
3. hadoop其他配置文件
其他配置文件包括slaves
,masters
。很简单,不详述。
配置完成后使用scp命令同步到其他节点。先使用hadoop namenode -format
格式化名字节点后,在启动脚本start-dfs.sh
看是否成功。
4. zookeeper
前一段时间安装的hbase用的是自带的zookeeper
。后来发现还是独立配置zookeeper要方便些,于是就接触了一下zookeeper
的安装。其配置文件只有zoo.cfg,官网给出的单机配置如下:
configuration
tickTime=2000 dataDir=/home/user/tmp/zookeeper clientPort=2181
集群配置也不复杂,官网很详细,也不赘述。有一点注意的是集群数目最好是奇数。由于其选举的算法,奇数是最优的。
zookeeper默认的启动日志zookeeper.out
是放在当前目录下的(zkEnv.sh中设置ZOO_LOG_DIR
变量,zkServer.sh中指定zookeeper.out文件),所以可以在zkEnv.sh中设置ZOO_LOG_DIR变量指定自己的日志存放路径。
启动使用zkServer.sh start
命令。
5. hbase
hbase的配置文件有hbase-env.sh
和hbase-site.xml
。其他的配置如regionservers
很简单,不赘述。hbase配置时还需要注意调整hosts
文件以及系统的打开文件数目等的限制。见我的上次总结。
hbase-env.sh
最好在其中设置JAVA_HOME
而不是用系统的JAVA_HOME
参数(官方文档好像有提到这一点)。可以在其中设置HBASE_PID_DIR
以修改pid的存放路径。由于使用独立的zookeeper,还需要设置export HBASE_MANAGES_ZK=false
来禁止使用自带的zookeeper。hbase-site.xml
xml
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://localhost:9000/hbase</value> <description>hbase数据存放位置。这里是放在了hdfs上。</description> </property> <property> <name>hbase.tmp.dir</name> <value>/home/user/tmp/hbase</value> <description>hbase的一些临时文件存放目录。</description> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> <description>设置为分布式</description> </property> <property> <name>hbase.zookeeper.quorum</name> <value>localhost</value> <description>设置zookeeper的集群。如果是独立zookeeper,则此处填写zookeeper集群的每台机器,用逗号隔开;如果是自带zookeeper,则填写要启动zookeeper服务的机器列表。自带zookeeper不要忘了设置hbase.zookeeper.property.dataDir设置临时文件存放目录</description> </property> </configuration>
hbase-site.xml的完整配置见此处。
小结
此处把整个集群安装的配置过了一遍,仅仅包含了最小化的设置。更为具体专业的设置还需要自己进一步深入学习了解。