引言
搭建hadoop2.X完全分布式,感觉里面的坑蛮多的。以hadoop2.5为例,搭建过程涉及hdfs ,zookeeper 和hbase的搭建。
配置参考http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html
1.准备四台虚拟机(node1,node2,node3,node4)
1.安装zookeeper
1.1 安装在node1,node2,node3上面,
Cp zoo.sample.cfg zoo.cfg
1.2 vi zoo.cfg
dataDir=/opt/zookeeper
server.1 =node1:2888:3888
server.2 =node2:2888:3888
server.3 =node3:2888:3888
接着在 /opt/zookeeper 目录下面建一个myid 针对每个node对应不同的是
node1 /opt/zookeeper/myid/1
node2 /opt/zookeeper/myid/2
node3 /opt/zookeeper/myid/3
1.2将环境路径加到/etc/profile中
Vi /etc/profile
加入:
Export ZOOKEEPER_HOME=/opt/zookeeper-3.4.9
追加到环境变量$Path中:
Export PATH=$PATH:….$ZOOKEEPER_HOME/bin/
Source /etc/profile
1.3 启动和关闭
zkServer.sh stop/start
2.将已经编译好的hadoop2.5.2_64 放到root目录下面。创建软链
Ln -sf /root/hadoop2.5.2 /home/hadoop-2.5
3.配置hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_111 #配置jdk在hadoop中引用的路径
4.配置slaves
Node1
node2
node4
5.配置hadoop2.5 core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://humdeef</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-2.5</value>
</property>
Hdfs-site.xml :
<configuration>
<property>
<name>dfs.nameservices</name>
<value>humdeef</value>
</property>
<property>
<name>dfs.ha.namenodes.humdeef</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.humdeef.nn1</name>
<value>node1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.humdeef.nn2</name>
<value>node2:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.humdeef.nn1</name>
<value>node1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.humdeef.nn2</name>
<value>node2:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node2:8485;node3:8485;node4:8485/humdeef</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.humdeef</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 主要用来免密码登入用的-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/jn/data</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
5.格式化节点
先要启动三个journalnode,./hadoop-daemon.sh start journalnode
随便找一台namenode(node1,node2)节点 执行bin/hdfs namenode -format
为了元数据,copy到其他namenode,在这台已经格式化的节点上开启namenode
./hadoop-daemon.sh start namenode
在其他namenode节点上面,执行./hdfs namenode -bootstrapStandby
6.初始化 zkfc
Bin/hdfs zkfc -formatZK
7.启动&停止
./start-dfs.sh
./stop-dfs.sh
到此已经搭建ha hdfs完毕
注意如果 jps没有看到zkfc,可能是要执行 service iptables stop (关闭防火墙 centos7 不是这个命令,当然你也可以在7里面安装iptable,自己试着谷歌,百度。。。。。)
8.测试
创建文件
./hadoop dfs -mkdir -p /usr/file
上传文件
./hadoop dfs -put /root/jdkxxx.rpm /usr/file
9.配置mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
10 配置yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</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>
11.启动和关闭
./start-yarn.sh
./stop-yarn.sh
3.hbase集群部署
参看文档 :http://abloz.com/hbase/book.html(中文哦)
3.1修改hbase-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_111
export HBASE_MANAGES_ZK=false
3.2 修改hbse-site.xml
<property>
<name>hbase.rootdir</name>
<value>hdfs://humdeef/hbase</value> <!-- humdeef是hadoop集群的名字-->
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>node1,node1,node3</value> <!--放了zookeeper的机器ip-->
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/zookeeper</value> <!-- zookeeper的工作目录-->
</property>
3.3 将hadoop的配置文件hdfs-site.xml copy到hnase/conf下面
cp -a /root/hadoop-2.5/conf/hdfs-site.xml /home/hbase/conf/
3.4 配置regionservers
Node1
Node2
Node3
Node4
3.5启动hbase
./start-hbase.sh
./stop-hbase.sh
说明:启动可以随便在哪一条机器上面启动,在哪台启动,那台就是hmaster.
还有就是会出现hbase莫名关闭的问题,时间不匹配的原因。
解决办法:
# Yuminstall ntpdate
# ntpdate cn.pool.ntp.org
# hwclock --systohc
3.6 访问页面
Node1:60010
Hbase的默认端口是60010 配置里面有。
说明:
四台机器的免密码我就不做了,免密码的配置可参考:http://www.cnblogs.com/fefjay/p/5978419.html