一、hadoop2.0解决了什么:
1、1.0中NameNode单点故障问题,难以应用于在线场景
2、NameNode压力过大,内存受限,影响系统扩展性
3、解决了支持除了mapReduce之外的计算框架,比如Spark、Strom等
4、对于1.0的api仍可以使用
二、这里我们设计分布图做如下 1 表示存在于此机器上
以下的部署都是按照这里的设计分布的
三、下载hadoop
这里我下载的是2.5.0 因为2.5.2官方只提供了32位下载源码后还需要自己编译,这里就曲线救国来个2.5.0的
https://archive.apache.org/dist/hadoop/common/hadoop-2.5.0/
四、具体实现:
1、上传到服务器 rz 上传 tar-zxvf hadoop-2.5.0
2、查看当前版本 cd native 执行 file libhadoop.so.1.0.0查看是64位还是32位
3、修改配置文件,此时的配置文件不在conf而是在etc文件夹里,配置java环境变量
4、修改hdfs-site.xml文件
配置命名服务
<property>
<name>dfs.nameservices</name>
<value>myservice</value> 服务名
</property>
配置namenode的名字
<property>
<name>dfs.ha.namenodes.myservice</name>
<value>nn1,nn2</value> 这里的名字不是主机名只是一个名字
</property>
配置namenode的rpc协议和端口这里配置几个由上面的namenode决定
<property>
<name>dfs.namenode.rpc-address.myservice.nn1</name>
<value>192.168.68.132:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.myservice.nn2</name>
<value>192.168.68.133:8020</value>
</property>
配置两个namenode的http协议的端口
<property>
<name>dfs.namenode.http-address.myservice.nn1</name>
<value>192.168.68.132:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.myservice.nn2</name>
<value>192.168.68.133:50070</value>
</property>
配置JournalNodes地址
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://192.168.68.133:8485;192.168.68.134:8485;192.168.68.135:8485/myservice</value>
</property>
配置客户端使用的类----通过这个类去找到activenamenode
<property>
<name>dfs.client.failover.proxy.provider.myservice</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
配置ssh
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_dsa</value>
</property>
配置journalNode的工作目录
<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>
如果我们不使用hostname 直接使用ip 还需要添加如下配置
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>false</value>
</property>
5、core-site 文件中配置
配置Zookeeper集群
<property>
<name>ha.zookeeper.quorum</name>
<value>192.168.68.132:2181,192.168.68.134:2181,192.168.68.135:2181</value>
</property>
配置namenode入口
<property>
<name>fs.defaultFS</name>
<value>hdfs://myservice</value> 这里配置的是集群的名字
</property>
配置hadoop的临时目录
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop2</value>
</property>
6、配置datanode
7、启动JournalNodes 进入到sbin目录下启动JN ----这里我们配置三个所以启动三个
9、拷贝格式化后的文件到其他namenode上
启动好后执行命令 在没有格式化的namenode上执行 hdfs namenode -bootstrapStandby
在这台namenode上查看是否拷贝成功
10、格式化zkfc [root@localhost bin]# ./hdfs zkfc -formatZK
五、Zookeeper的部署和配置
1、Index of /dist/zookeeper/zookeeper-3.4.6下载
2、rz 上传 tar -zxvf zookeeper-3.4.6.tar.gz 解压
3、进入配置文件 复制zoo_sample.cfg
5、配置zk集群的唯一编号
如果当前机器为server.1那么文件里就写1
6、同时拷贝到其他服务器上进行配置
7、拷贝ZK到其他服务器做集群:如下
8、配置环境变量 指向ZK的bin目录
9、同样其他服务器也要配置
10、启动ZK
11、最后的效果: 跟我们当初设计的集群分布是一样的
12、创建文件夹和上传文件到hdfs
hadoop2.0到这里也就基本上部署完成了