hadoop高可用集群搭建-1

一、服务器访问环境

hadoop服务器4台主机,均使用ubuntu18-live-server版本,

本地localhost免密登录

ssh localhost步骤

1、ssh-keygen -t rsa

免密码登录

使用下面的命令即可免密码登录localhost

2、ssh-copy-id localhost

但是到了这里执行ssh localhost的时候依然提示我输入密码。我仔细分析了原因,一般来讲失败的原因有两个。

服务器之间免密登录

1、根据路径复制公钥到免密登录的主机

  scp id_rsa.pub 账号@hostip:/rootpath/.ssh/zkhd1

2、复制公钥到authorized_key

 cat zkhd1 >>authorized_keys

所有文件放置在/opt/sgb内

1、先授权4台主机opt所有权限 sudo chmod 777 /opt

2、第一台主机操作 cd /opt

3、第一台主机操作 mkdir sgb

hosts文件配置

注意注意注意

注释掉  #127.0.1.1 zkhd1 否则通过器名本机外机器不能访问服务

四台主机内网名称设置

192.168.2.161  zkhd1
192.168.2.162  zkhd2
192.168.2.163  zkhd3
192.168.2.164  zkhd4
 

二、java/hadoop环境搭建、以下先配置一台主机

1、解压hadoop-2.6.5.tar.gz  jdk-7u67-linux-x64.tar.gz文件

   tar xf hadoop-2.6.5.tar.gz

   tar xf jdk-7u67-linux-x64.tar.gz

2、配置环境变量

sudo vi /etc/profile

配置以下参数

export JAVA_HOME=/opt/sgb/jdk1.7.0_67
export JRE_HOME=/opt/sgb/jdk1.7.0_67/jre
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export HADOOP_PREFIX=/opt/sgb/hadoop-2.6.5
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin
 

source  /etc/profile

输入命令行下查看配置是否生效

hdfs

java

三、hadoop伪分布式

hadoop-env.sh

yarn-env.sh

mapred-env.sh

export JAVA_HOME=/opt/sgb/jdk1.7.0_67

hdfs-site.xml

<configuration>

    <property>

        <name>dfs.replication</name>

        <value>1</value>

    </property>

</configuration>
 

core-site.xml

<configuration>

    <property>

        <name>fs.defaultFS</name>

        <value>hdfs://zkhd1:9000</value>

    </property>

    <property>

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

        <value>/opt/dd</value>

    </property>

</configuration>
 

格式化

$ bin/hdfs namenode -format

启动服务

$ sbin/start-dfs.sh

查看进程

$ jps

  NameNode

  DataNode

  SecondaryNameNode

新建文件夹

$ bin/hdfs dfs -mkdir /user

上传文件

$ bin/hdfs dfs -put etc/hadoop input

运行任务

$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar grep input output 'dfs[a-z.]+'

下载运行结果

$  bin/hdfs dfs -get output output

关闭服务

$ sbin/stop-dfs.sh

三、分布式配置

1、备份目前的hadoop目录文件夹至hadoop-2.6.5-bk,开发可以使用伪分布式测试

cp -rf   /opt/sgb/hadoop-2.6.5    /opt/sgb/hadoop-2.6.5-bk

2、修改slaves 配置datanode从节点、zkhd1不需要配置

zkhd2

zkhd3

zkhd4

3、修改hdfs-site.xml配置secondnamenode,副本数2

<property>

        <name>dfs.namenode.secondary.http-address</name>

        <value>zkhd2:50090</value>

    </property>

<property>

        <name>dfs.replication</name>

        <value>2</value>

    </property>
 

4、删除已格式化节点/opt/dd

rm -rf  /opt/dd

5、分发服务器

    A、分发sgb文件夹  包含java、hadoop目录

scp -rf sgb skhd2:/opt/

scp -rf sgb skhd3:/opt/

scp -rf sgb skhd4:/opt/

B、分发配置文件,每台机器均要添加

sudo vi /etc/profile

配置以下参数

export JAVA_HOME=/opt/sgb/jdk1.7.0_67
export JRE_HOME=/opt/sgb/jdk1.7.0_67/jre
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export HADOOP_PREFIX=/opt/sgb/hadoop-2.6.5
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin
 

source  /etc/profile

输入命令行下查看配置是否生效

hdfs

java

6、主服务器格式化

$ bin/hdfs namenode -format

启动服务

$ sbin/start-dfs.sh

至此本地集群方式的hadoop hdfs可以使用

四、高可用hadoop集群改造

hosts     NameNode-1   NameNode-2    DataNode         ZK   ZKFC     JNN
zkhd1         有                                             有      有
zkhd2                     有            有             有    有      有 
zkhd3                                   有             有            有
zkhd4                                   有             有
 

1、zookeeper配置

1.1、解压zookeeper到/opt/sgb文件夹

tar xf zookeeper-3.4.6.tar.gz

1.2、修改/zookeeper-3.4.6/conf/zoo.cfg

dataDir=/opt/sgb/zk

server.1=zkhd2:2888:3888

server.2=zkhd3:2888:3888

server.3=zkhd4:2888:3888

1.3、在/opt/sgb/zk路径执行以下命令,id根据服务器id做调整

   mkdir zk

   echo 1 > myid

   zkhd2上执行echo 2 > myid

   zkhd3上执行 echo 3 > myid

   

1.4、环境变量配置   sudo vi /etc/profile

export JAVA_HOME=/opt/sgb/jdk1.7.0_67

export JRE_HOME=/opt/sgb/jdk1.7.0_67/jre

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export HADOOP_PREFIX=/opt/sgb/hadoop-2.6.5

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin:$PATH

export ZOOKEEPER_HOME=/opt/sgb/zookeeper-3.4.6

export ZOOBINDIR=$ZOOKEEPER_HOME/bin

export PATH=$ZOOBINDIR:$PATH

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

2、hadoop配置修改

     2.1、hdfs-site.xml

<configuration>
		<property>
			<name>dfs.replication</name>
			<value>2</value>
		</property>
	<property>
		<name>dfs.data.dir</name>
		<value>/opt/sgb/ha/data</value> 
		<final>true</final> 
    </property> 
    <property> 
		<name>dfs.name.dir</name>
		<value>/opt/sgb/ha/name</value> 
		<final>true</final> 
	</property>
//////////////////////////namenode配置
		<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>zkhd1:8020</value>
		</property>
		<property>
			<name>dfs.namenode.rpc-address.mycluster.nn2</name>
			<value>zkhd2:8020</value>
		</property>
		<property>
			<name>dfs.namenode.http-address.mycluster.nn1</name>
			<value>zkhd1:50070</value>
		</property>
		<property>
			<name>dfs.namenode.http-address.mycluster.nn2</name>
			<value>zkhd2:50070</value>
		</property>
///////////////////////////jnn配置
		<property>
			<name>dfs.namenode.shared.edits.dir</name>
			<value>qjournal://zkhd1:8485;zkhd2:8485;zkhd3:8485/mycluster</value>
		</property>
		<property>
			<name>dfs.journalnode.edits.dir</name>
			<value>/opt/sgb/jn</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/hadoop/.ssh/id_rsa</value>
		</property>
///////////////////////集群自动恢复
		<property>
			<name>dfs.ha.automatic-failover.enabled</name>
			<value>true</value>
		</property>
	</configuration>

============================================================================================

2.2、 core-site.xml

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/sgb/ha</value>
</property>
////////////////////////zookeeper集群配置
<property>
<name>ha.zookeeper.quorum</name>
<value>zkhd2:2181,zkhd3:2181,zkhd4:2181</value>
</property>
</configuration>

3、集群分发

 sudo scp -r sgb hadoop@zkhd2:/opt/

 sudo scp -r sgb hadoop@zkhd3:/opt/

 sudo scp -r sgb hadoop@zkhd4:/opt/

配置文件分发

export JAVA_HOME=/opt/sgb/jdk1.7.0_67

export JRE_HOME=/opt/sgb/jdk1.7.0_67/jre

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export HADOOP_PREFIX=/opt/sgb/hadoop-2.6.5

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin:$PATH

export ZOOKEEPER_HOME=/opt/sgb/zookeeper-3.4.6

export ZOOBINDIR=$ZOOKEEPER_HOME/bin

export PATH=$ZOOBINDIR:$PATH

4、zookeepr配置zkhd2:zkhd3:zkhd4启动zookeeper集群

zkServer.sh start   ||   zkServer.sh status

5、按qjournal://zkhd1:8485;zkhd2:8485;zkhd3:8485/mycluster配置依次执行,启动journalnode

   ./sbin/hadoop-daemon.sh start journalnode

6、主namenode 执行格式化

    hdfs namenode  -format

7、启动主节点 ./sbin/hadoop-deamon.sh start namenode

8、同步副节点  hdfs namenode  -bootstrapStandby

9、注册hdfs到zookee,执行   hdfs zkfc -formatZK

10、启动集群 start-dfs.sh

11、其他操作

stop-dfs.sh && start-dfs.sh  ||  hadoop-daemon.sh start zkfc