[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/
这个文件夹下。
hadoop-env.sh
# export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/
将其中的JAVA_HOME
换成你的Java的安装路径即可。
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.dir
是hadoop
运行时生成的临时文件的存放目录。这个目录放到哪都可以。因为我的/data
是一块很大的磁盘,所以我选择将文件放在这里。
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
里面。
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
。
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>
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
| 欢迎来原网站坐坐! >原文链接<