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