1、虚拟机虚拟linux 系统机器4台,分别标记为node1,node2,node3,node4,安装centos 6.5 linux OS, 修改机器的/etc/hosts和/etc/sysconfig/network配置。
2、部署节点,4台机器的节点分布如下表
Machine | Namenode | Datanode | JournalNode | ZooKeeper | ZKFC | RM | NM | total |
Node1 | √ | ╳ | ╳ | ╳ | √ | √ | ╳ | 3 |
Node2 | √ | √ | √ | √ | √ | ╳ | √ | 6 |
Node3 | ╳ | √ | √ | √ | ╳ | ╳ | √ | 4 |
Node4 | ╳ | √ | √ | √ | ╳ | ╳ | √ | 4 |
total | 2 | 3 | 3 | 3 | 2 | 1 | 3 | 17 |
ZKFC:ZOOkeeper failover configure, RM:resourcemanager, NM:node manager
3、下载zookeeper 及hadoop2.6
目前,最新版Zookeeper 3.4.6,地址:http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/
Hadoop2.6,目前,官网上只有32位的hadoop 安装文件,如果需要64位的必须要编译官网上的64位源码,编译过程非常耗费时间,一般要花上2个小时以上(视网速而定),编译后的64位的hadoop2.6-x64.tar.gz 文件, 地址:http://pan.baidu.com/s/1kT9wUiz
4、配置文件
Core-site.xml:
<property> <name>hadoop.native.lib</name> <value>true</value> </property> <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</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/hadoop2</value> </property> |
Hdfs-site.xml
<property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>node1:8020</value> </property>
<property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>node2:8020</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>node1:50070</value> </property>
<property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>node2:50070</value> </property> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node2:8485;node3:8485;node4:8485/mycluster</value> </property> <property> <name>dfs.client.failover.proxy.provider.mycluster</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_dsa</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> <property> <name>dfs.datanode.data.dir</name> <value>/var/hadoop</value> </property> |
Mapred-site.xml
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> |
Yarn-site.xml
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
<property> <name>yarn.nodemanager.aux-services.mapredce.shuffle.class</name> <value>org.apacvhe.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>node1</value> </property> |
5、Operating theHadoop Cluster
1、 To start a Hadoop cluster youwill need to start both the HDFS and YARN cluster.
1.1、 配置hadoop 中的slaves,每行1个
1.2、 启动三个zookeeper:./zkServer.sh start1
1.3、 启动三个journalNode:./Hadoop-daemon.sh startjournalnode
1.4、在其中之一namenode 上格式化:./hdfs namenode –format
1.5、 启动上面的namenode
1.6、 在另外一台namenode 上执行:./hdfs namnode -bootstrapStandby
1.7、启动第二个namenode
1.8、 在其中一个namenode上初始化zkfc: ./hdfs zkfc –formatZK
1.9、停止上面所有节点:./stop-dfs.sh
1.10、 全面启动:./start-dfs.sh
1.11、 Jps 查看启动的进程
1.12、 启动资源管理器yarn-daemon.sh start resourcemanager
1.13、 启动节点管理器start NodeManagers on all slaves:./yarn-daemon.sh start nodemanager
1.14、 再次使用jps查看启动的进程,是否安装预先设计好的节点启动。
1.15、最后,如果安装完毕,以后启动使用3个命令。
2、其他
首先,启动zookeeper
./zkServer.sh start
其次,启动HDFS
./start-dfs.sh start
最后,启动YARN
./start-yarn.sh start
3、 关闭hadoop,采用相反的过程。
./stop-yarn.sh stop
./stop-dfs.sh stop
./zkServer.sh stop
6、页面查看HDFS、YARN
HDFS:namenode1: http://node1:50070
Namenode2: http://node2:50070
YARN:ResourceNode:http://node1:8088
备注:在本地机器上,windows/system32/etc/hosts 文件中已经配置了node1,node2,node3,node4的IP地址,所以直接用hostname代替了IP address.
7、免密码登录
1、 各台机器上执行下面命令
$ ssh-keygen -tdsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub>> ~/.ssh/authorized_keys
2、 将node1 的id_dsa.pub 合并到其他机器的~/.ssh/authorized_keys中
$ scp ~/.ssh/id_dsa.pub root@node2:~
$ scp ~/.ssh/id_dsa.pub root@node3:~
$ scp ~/.ssh/id_dsa.pub root@node4:~
3、 Node2、node3、node4分别执行命令:
$ cat ~/id_dsa.pub >>~/.ssh/authorized_key
4、 在hdfs-site.xml配置中增加
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_dsa</value>
</property>
8、常见问题
1. 防火墙问题
错误:ipc.Client: Retrying connect to server:
原因:防火墙阻止了RPC 协议的通信,所以报错。
措施:service iptables stop (当然可以配置防火墙,使得开放相应的端口)
2. 版本问题
错误:
14/10/10 08:35:55 INFO namenode.NameNode: createNameNode [-format]
Java HotSpot(TM) Server VM warning: You have loaded library /home/hadoop/hadoop-2.5.1/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
14/10/10 08:35:56 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
原因:JDK 版本与hadoop 不匹配。如本文中,所使用的JDK 是32位的JDK1.8_11,而hadoop2.6 是64位的,导致出现上述错误。
措施:安装64位的JDK,修改hadoop配置文件 hadoop-env.sh 中的JAVA_HOME设置。同时修改JDK环境,修改/etc/profile文件。重启后,错误消失。
3. Datanode 无法启动
错误:无Datanode 节点
原因:每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,所以造成namenode节点上的namespaceID与datanode节点上的namespaceID不一致。启动失败.
措施:修改hdfs-site.xml文件,指定datanode文件存放目录,默认会存放到临时目录中。然后,所有datanode机器上的tmp目录下的hadoop有关指令全部删除(rm –rf Hadoop*),在hdfs-site.xml 文件中增加:
<property>
<name>dfs.datanode.data.dir</name>
<value>/var/hadoop</value>
</property>
(确保/var/Hadoop 文件存在,如果不存在,新建一个。当然,可以任意设置存放地址)
错误:提示no datanode,no namenode等等之类的信息
原因:进程的pid文件默认都是保存在系统的/tmp目录下面,系统每个一段时间就会清楚/tmp下面的内容,于是ls /tmp看了一下,果然没有相关进程的pid文件了。才导致了stop-all.sh无法停止集群的原因。
措施:
1 在集群各个节点的/var目录下面创建一个文件夹: mkdir -p /var/hadoop/pids,记得更改这个文件夹的权限,chown -R hadoop:hadoop/var/hadoop,将这个目录及子目录的拥有者改为你的当前用户,不然执行start-all.sh的时候当前用户会没有权限创建pid文件(root下可以省略这一步)
2 修改hadoop-env.sh增加:export HADOOP_PID_DIR=/var/hadoop/pids
3 修改yarn-env.sh增加:export YARN_PID_DIR=/var/hadoop/pids
最后,不仅仅是修改master的所有env文件,集群中slaves的所有节点的这些文件都要修改!
5、启动hive出错
错误:[ERROR] Terminal initialization failed; falling back to unsupported
原因:Hive has upgradedto Jline2but jline0.94 existsinthe Hadoop lib.
措施:进入到hadoop安装目录下的share/hadoop/yarn/lib下删除 jline的jar文件。再启动hive即可。