赞
踩
以下操作环境均在Centos7服务器上面,一共四台服务器,node1、node2、node3、node4
官网下载hadoop,看准自己需要的版本,我自己这里就下载一个旧的版本使用了(3.2.3)
集群分布
node1 | node2 | node3 | node4 |
---|---|---|---|
zookeeper | zookeeper | zookeeper | |
NameNode | SecondaryNameNode | ||
DataNode | DataNode | DataNode |
下载之后上传至其中一台服务器上,先配置好一天在将文件传给其他服务器上面,以下操作在node2上
mkdir /usr/local/hadoop # 创建hadoop使用的目录
mkdir /usr/local/hadoop/full # 创建一个目录后面配置使用
tar -zxvf hadoop-3.2.3.tar.gz # 解压hadoop安装包
mv hadoop-3.2.3 /usr/local/hadoop/ # 移动解压后的安装包到目录
rm -rf /usr/local/hadoop/hadoop-3.2.3/share/doc/ # 删除hadoop文档,方便后面传输速度
vim /etc/profile # 添加环境变量,在文件的最后添加
编辑profile文件添加
export HADOOP_HOME=/usr/local/hadoop/hadoop-3.2.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
命令行执行
source /etc/profile # 刷新文件
scp /etc/profile node1:/etc # 将环境文件传给node1
scp /etc/profile node3:/etc # 将环境文件传给node3
scp /etc/profile node4:/etc # 将环境文件传给node4
# 由于node1上面没有zookeeper,传输的环境文件中有,将node1上的zookeeper环境删除
source /etc/profile # 刷新4台机器上的环境文件
node2命令行
cd /usr/local/hadoop/hadoop-3.2.3/etc/hadoop # 进入到hadoop需要配置的文件夹中,
vim hadoop-env.sh # 进入配置,具体查看下面需要添加的配置
vim workers # 配置datanode节点,hadoop3.0之前的版本是slaves文件,具体查看下面需要添加的配置
vim hdfs-site.xml # 配置SecondaryNameNode位置,具体查看下面需要添加的配置
vim core-site.xml # 配置namenode位置,具体查看下面需要添加的配置
编辑hadoop-env.sh文件
/JAVA_HOME # 使用vim命令搜索Java配置路径,有的话就修改,没有的话就添加
export JAVA_HOME=/usr/local/jdk/jdk # 添加上我们的jdk路径
编辑workers文件
node2
node3
node4
编辑hdfs-site.xml文件,进入文件查找到<configuration>标签,在标签中进行添加,同时可参考官网的配置文件
<configuration>
<!-- SecondaryNameNode位置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:9868</value>
</property>
<!-- 副本数 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
编辑core-site.xml文件,进入文件查找到<configuration>标签,在标签中进行添加,同时可参考官网的配置文件
<configuration>
<!-- 指定namenode地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
<!-- 指定hadoop临时目录位置 -->
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/full</value>
</property>
</configuration>
node2命令行
cd /usr/local # 进入到此位置,准备传文件
scp -r hadoop/ node1:/usr/local/ # 传给node1
scp -r hadoop/ node3:/usr/local/ # 传给node3
scp -r hadoop/ node4:/usr/local/ # 传给node4
node1命令行
hdfs namenode -format # 格式化namenode
start-dfs.sh # 启动
jps # 可以通过查看进程,看四台机器是否启动
浏览器打开 http://node1:9870
9870为默认端口,想自定义的话可以配置hdfs-site.xml文件,按照官网的文档配置即可
node2命令行
hdfs dfs -mkdir /usr # 创建dfs文件夹
hdfs dfs -D dfs.blocksize=1048576 -put xxx.gz /usr # 指定块大小为1M,查看块的副本,每个块必定在node2上留有副本(从那个datanode上传时每个块都会在那个节点产生副本)
node1命令行
hdfs dfs -D dfs.blocksize=1048576 -put xxxx.gz /usr # 指定块大小为1M,查看块的副本,由于从namenode上传,所以与上面的不同
集群分布
node1 | node2 | node3 | node4 |
---|---|---|---|
zookeeper | zookeeper | zookeeper | |
NameNode | SecondaryNameNode | ||
DataNode | DataNode | DataNode | |
ZooKeeperFailoverController | ZooKeeperFailoverController | ||
JournalNode | JournalNode | JournalNode |
首先关闭dfs
stop-dfs.sh
vim hdfs-site.xml # 具体查看下面需要添加的配置,与上面有些配置重复,可以先将上面的配置删除
vim core-site.xml # 具体查看下面需要添加的配置,与上面有些配置重复,可以先将上面的配置删除
编辑hdfs-site.xml文件
<!-- 指定副本的数量,同上 --> <property> <name>dfs.replication</name> <value>2</value> </property> <!-- 解析参数dfs.nameservices值hdfs://mycluster的地址 --> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <!-- mycluster由以下两个namenode支撑 --> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <!-- 指定nn1地址和端口号 --> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>node1:8020</value> </property> <!-- 指定nn2地址和端口号 --> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>node2:8020</value> </property> <!-- 指定客户端查找active的NameNode的策略:会给所有NameNode发请求,以决定哪个是active的 --> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 指定三台JournalNode服务器的地址 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value> </property> <!-- JournalNode日志编辑文件存储的目录 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/usr/local/hadoop/ha/jnn</value> </property> <!-- 当active NameNode出现故障时,ssh到对应的服务器,将namenode进程kill掉 --> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行 --> <property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true) </value> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <!--启动NN故障自动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> </configuration>
编辑core-site.xml文件
<configuration> <!-- 此处进行了修改,nameservice,名字需要与上面的hdfs-site.xml第二个配置相同--> <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <!-- 此处进行了修改,文件地址进行修改--> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/ha</value> </property> <!-- 添加此配置,指定每个zookeeper服务器的位置和客户端端口号 --> <property> <name>ha.zookeeper.quorum</name> <value>node2:2181,node3:2181,node4:2181</value> </property> </configuration>
然后将进行修改的两个文件分发到其他三台机子上
scp hdfs-site.xml core-site.xml node2:$PWD/
scp hdfs-site.xml core-site.xml node3:$PWD/
scp hdfs-site.xml core-site.xml node4:$PWD/
node1,node2,node3命令行操作,除了node4
hdfs --daemon start journalnode # 启动JournalNode
node1命令行
hdfs namenode -format # 格式化NameNode
hdfs --daemon start namenode # 启动NameNode
node2命令行
hdfs namenode -bootstrapStandby # 在node2上同步元数据
node1命令行
hdfs zkfc -formatZK # 在zookeeper上创建节点
start-dfs.sh # 启动hdfs
jps # 查看进程
可以使用命令将active状态的NameNode的节点关闭,通过http://node1:9870或者http://node2:9870查看会不会自动切换
报错可以去看以下Hadoop日志,出现问题先把Hadoop相关进程都关了,然后修改问题,重新回到配置后的步骤重新格式化(已经格式化十几次了声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/1002495
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。