改配置是基于已经安装好Hadoop的前提下的。

1. 安装zookeeper

下载安装zookeeper,我的版本是zookeeper-3.4.6

2. 配置zookeeper

置文件存放在$ZOOKEEPER_HOME/conf/目录下,将zoo_sample.cfd文件名称改为zoo.cfg,  

① 更改其中的数据目录

dataDir=/opt/zookeeper

② 添加zookeeper节点

server.1=ubuntu1:2888:3888

server.2=ubuntu2:2888:3888

server.3=ubuntu3:2888:3888

③ 在所有机器上添加zookeeper节点

在所有机器的/opt/zookeeper/目录下添加myid文件,里面的内容为改机器的server值,比如上面的ubuntu1,里面的内容为1

④ 拷贝zookeeper到所有的机器

⑤ 在所有的机器上启动zookeeper

zkServer start

Jps 后 出现QuorumPeerMain说明启动成功

3. 配置Hadoop

配置core-site.xml hdfs-site.xml

Core-site.xml

<property>

        <name>fs.defaultFS</name>

        <value>hdfs://mycluster</value>

    </property>

<property>

   <name>ha.zookeeper.quorum</name>

   <value>ubuntu1:2181,ubuntu2:2181,ubuntu3:2181</value>

 </property>

    <property>

        <name>hadoop.tmp.dir</name>

        <value>/opt/hadoop2/tmp</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>ubuntu1:8020</value>

</property>

<property>

  <name>dfs.namenode.rpc-address.mycluster.nn2</name>

  <value>ubuntu2:8020</value>

</property>

<property>

  <name>dfs.namenode.http-address.mycluster.nn1</name>

  <value>ubuntu1:50070</value>

</property>

<property>

  <name>dfs.namenode.http-address.mycluster.nn2</name>

  <value>ubuntu2:50070</value>

</property>

<property>

  <name>dfs.namenode.shared.edits.dir</name>

  <value>qjournal://ubuntu1:8485;ubuntu2:8485;ubuntu3: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>/home/daiwei/.ssh/id_rsa</value>

</property>

<property>

  <name>dfs.journalnode.edits.dir</name>

  <value>/opt/hadoop2/tmp/to/journal/node/local/data</value>

</property>

 <property>

   <name>dfs.ha.automatic-failover.enabled</name>

   <value>true</value>

 </property>

 <property>

    <name>dfs.name.dir</name>

 <value>/opt/hadoop2/dfs/name</value>

</property>

<property>

    <name>dfs.data.dir</name>

    <value>/opt/hadoop2/dfs/data</value>

</property>

    <property>

        <name>dfs.replication</name>

        <value>2</value>

    </property>

<property>

  <name>dfs.webhdfs.enabled</name>

  <value>true</value>

 </property>


以上配置时需要关闭所有节点

4. 格式化一台机子上的NameNode

① 格式化时需要先删除以前的所有数据,包括nameNodedataNode的所有数据。数据的具体位置见hdfs-site.xml

② 开启journalnode

开启所有机器上的

hadoop-daemon.sh start journalnode

③ 格式化数据

hdfs namenode -format

5. 在另外一台机子上复制NameNode

① 启动已经格式化的那台机器的NameNode

hadoop-daemon.sh start bamenode

② 在另外一个NameNode上复制元数据

hdfs namenode -bootstrapStandby

6. 启动其他

① 先关闭所有的其他节点

② 开启全部节点

Start-all.sh

详细见参考,视频见腾讯课堂,23/24/25三节

问题:

1. 无法启动NameNode,且日志无法产看

日志为 ulimit ***,是因为以前初始化过NameNode,删除NameNode的元数据,重新格式化就可以了。

2. 无法启动DataNode,且日志无法产看

和第一个问题一样,删除dataNode的数据就可以了。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐