[Hadoop] 在集群中安装Hadoop

[Hadoop] 在集群中安装Hadoop

类似的教程其实有很多,网上随便一搜就是一大把。这里简单的记录一下本人的安装过程,留给本人或者后人参考。

集群配置

内网互联的三台机器,IP分别为10.0.0.1,10.0.0.2,10.0.0.3

我们的目标配置是让10.0.0.1做主节点,也就是master;所有节点都是从节点,也就是worker。

这样的:

10.0.0.1 10.0.0.2 10.0.0.3
Namenode × ×
SecondaryNameNode × ×
Datanode
ResourceManager × ×

目标的Hadoop版本是2.7.7。Java版本是1.8.0。三台机器都是Ubuntu20.04。

注意:三台机器需要能相互ssh免密登录。由于这个我早就配置过,所以就不写过程了。这个可以参考网上的其他教程。

下载Hadoop

Index of /dist/hadoop/common/hadoop-2.7.7 (apache.org) 下载。将文件放到10.0.0.1上,然后解压。

tar xvzf hadoop-2.7.7.tar.gz

修改配置文件

接下来需要进入hadoop-2.7.7文件夹,修改里面的一些配置文件。所有要修改的文件都在hadoop-2.7.7/etc/hadoop/这个文件夹下。

  1. hadoop-env.sh
# export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/

将其中的JAVA_HOME换成你的Java的安装路径即可。

  1. core-site.xml
<configuration>
  <property>
    <!-- 指定 namenode 的 hdfs 协议文件系统的通信地址 -->
    <name>fs.defaultFS</name>
    <value>hdfs://10.0.0.1:8020</value>
  </property>
  <property>
    <!-- 指定 hadoop 集群存储临时文件的目录 -->
    <name>hadoop.tmp.dir</name>
    <value>/data/hadoop_tmp</value>
  </property>
</configuration>
  • fs.defaultFS规定的是namenode的地址,也就是master的地址。这里我们规定namenode的地址在主节点10.0.0.1上。

  • hadoop.tmp.dirhadoop运行时生成的临时文件的存放目录。这个目录放到哪都可以。因为我的/data是一块很大的磁盘,所以我选择将文件放在这里。

  1. hdfs-site.xml
<configuration>
  <property>
    <!-- 指定 HDFS 副本的数量 -->
    <name>dfs.replication</name>
    <value>1</value>
  </property>
  <!-- nn web端访问地址-->
  <property>
    <name>dfs.namenode.http-address</name>
    <value>10.0.0.1:9870</value>
  </property>
	<!-- 2nn web端访问地址-->
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>10.0.0.2:9868</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/data/hadoop_tmp/dfs/name</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/data/hadoop_tmp/dfs/data</value>
  </property>
</configuration>
  • dfs.replication指hdfs中副本的数量。我不需要副本,所以设为1就行。
  • dfs.namenode.http-address:在namenode上的web ui界面,其中的IP地址10.0.0.1要和前面namenode的IP地址相同。这个配置不写也行。
  • dfs.namenode.secondary.http-address:在secondary namenode上的web ui界面,其中的IP地址10.0.0.2规定了哪台机器是secondary namenode。secondary namenode不能和namenode相同。不过我其实不需要secondary,因此这个配置也可以不写。
  • dfs.namenode.name.dir:存放namenode信息的目录,这个只会在namenode上用到。我将其放在了前文hadoop.tmp.dir的里面。
  • dfs.datanode.data.dir:在datanode上存放data的目录,这个在每个datanode上都会用到。我也将其放在了hadoop.tmp.dir里面。
  1. yarn-site.xml
<configuration>
  <!-- Site specific YARN configuration properties -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <!-- 指定ResourceManager的地址-->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>10.0.0.1</value>
  </property>
</configuration>
  • yarn.nodemanager.aux-services:这个我不是很懂。看别人都这么做,我就也这么做了。
  • yarn.resourcemanager.hostname:这里规定resource manager也是10.0.0.1
  1. mapred-site.xml

先创建mapred-site.xml

cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml

然后修改:

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>
  1. slaves
10.0.0.1
10.0.0.2
10.0.0.3

里面是所有worker的IP。

部署到集群上

将配置好的hadoop文件夹拷贝到集群中的每个服务器上。后续的命令需要在每台机器上执行:

  • 将hadoop放到系统目录下:
sudo mv hadoop-2.7.7 /usr/local/hadoop
  • 创建前面dfs需要的文件夹:
sudo mkdir -p /data/hadoop_tmp
sudo mkdir -p /data/hadoop_tmp/dfs
sudo mkdir -p /data/hadoop_tmp/dfs/name
sudo mkdir -p /data/hadoop_tmp/dfs/data
  • 给用户修改这些文件夹的权限
sudo chown -R zcq /usr/local/hadoop
sudo chown -R zcq /data/hadoop_tmp
  • .bashrc中,将hadoop路径添加到PATH中。
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

至此Hadoop就部署完成了。

测试

用下面的流程测试我们是否成功部署了hadoop。

  • 格式化hdfs namenode。
hdfs namenode -format

注意:如果需要重复运行上面的指令的话,需要将先临时文件夹(/data/hadoop_tmp)清空。

  • 开启dfs服务
start-dfs.sh
  • 开启yarn
start-yarn.sh
  • 最后用这条指令确认运行成功
jps

在主节点10.0.0.1上,命令的输出如下:

247699 Worker
245616 NameNode
247335 Master
246437 ResourceManager
245877 DataNode
286815 Jps
246671 NodeManager

10.0.0.2上,命令的输出如下:

397314 Jps
389809 SecondaryNameNode
390305 Worker

10.0.0.3上,命令的输出如下:

3988099 Worker
3993955 Jps
  • 最后,关闭yarn和dfs
stop-yarn.sh
stop-dfs.sh
posted @ 2023-05-06 15:05  CQzhangyu  阅读(23)  评论(0编辑  收藏  举报