前言
初衷搭建hadoop 集群服务与flink任务运行。
版本: CentOS7 Hadoop3.2.2 JDK1.8
搭建hadoop集群
采用3台机器 设置 ip和机器名
vi /etc/hosts
10.188.120.101 hadoop-1
10.188.120.102 hadoop-2
10.188.120.103 hadoop-3
1.免密登录
3台机器上都执行如下命令
ssh-keygen -t rsa
执行命令后一直Enter即可!
因为我现在用的是root账户,所以秘钥文件保存到了/root/.ssh/目录内,可以使用命令查看,命令是
ls /root/.ssh/
注意: authorized_keys 这文件是后续创建的,单纯的生成秘钥没有这个文件。
使用同样的方法为hadoop-2和hadoop-3生成秘钥(命令完全相同,不用做任何修改)。
2.在hadoop-1上创建authorized_keys文件
接下来要做的事情是在3台机器的/root/.ssh/目录下都存入一个内容相同的文件,文件名称叫authorized_keys,文件内容是我们刚才为3台机器生成的公钥。为了方便,我下面的步骤是现在hadoop-1上生成authorized_keys文件,然后把3台机器刚才生成的公钥加入到这个hadoop-1的authorized_keys文件里,然后在将这个authorized_keys文件复制到hadoop-2和hadoop-3上面。
然后将hadoop-1上的/root/.ssh/id_rsa.pub文件内容,hadoop-2上的/root/.ssh/id_rsa.pub文件内容,hadoop-3上的/root/.ssh/id_rsa.pub文件内容复制到这个authorized_keys文件中,复制的方法很多了,可以用cat命令和vim命令结合来弄,也可以直接把这3台机器上的/root/.ssh/id_rsa.pub文件下载到本地,在本地将authorized_keys文件编辑好在上载到这3台机器上。
3. 安装hadoop
注意: 不需要在3台机器上重复下面所讲的步骤。只需要在hadoop-1服务器上配置好后使用scp命令复制到其余两台服务器即可
解压安装
tar -xvf hadoop-3.2.2.tar.gz
创建几个文件目录,我是在安装hadoop 的目录下新建了 flhadoop
然后在这个目录下 新建 tmp 、dfs 、var
在 dfs 目录下 新建了 name 、data
4.修改etc/hadoop中的一系列配置文件
- 修改core-site.xml
执行 vi /opt/hadoop/hadoop-3.2.2/etc/hadoop/core-site.xml 命令
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/work/hadoop/flhadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop-1:9000</value>
</property>
2.修改hadoop-env.sh
执行
vi /opt/hadoop/hadoop-3.2.2/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/local/java/jdk1.8.0_291
- 修改hdfs-site.xml
执行 vi /opt/hadoop/hadoop-3.2.2/etc/hadoop/hdfs-site.xml 文件
<property>
<name>dfs.name.dir</name>
<value>/usr/local/work/hadoop/flhadoop/dfs/name</value>
<description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently.
</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/work/hadoop/flhadoop/dfs/data</value>
<description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.
</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
<description>need not permissions</description>
</property>
PS:dfs.permissions配置为false后,可以允许不要检查权限就生成dfs上的文件,方便倒是方便了,但是你需要防止误删除,请将它设置为true,或者直接将该property节点删除,因为默认就是true。
4.新建并且修改mapred-site.xml
执行 vi /opt/hadoop/hadoop-3.2.2/etc/hadoop/mapred-site.xml 命令
<!-- 配置mapReduce在Yarn上运行(默认本地运行) -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
5.修改workers文件
执行命令 vi /opt/hadoop/hadoop-3.2.2/etc/hadoop/workers
将里面的localhost删除
hadoop-1
hadoop-2
hadoop-3
- 修改yarn-site.xml文件
执行 vi /opt/hadoop/hadoop-3.2.2/etc/hadoop/yarn-site.xml 命令,
在节点内加入配置(注意了,内存根据机器配置越大越好,我这里只配2个G是因为机器不行):
<property>
<description>指定YARN的老大(ResourceManager)的地址</description>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-1</value>
</property>
<!-- NodeManager上运行的附属服务。需要配置成mapreduce_shfffle,才可运行MapReduce程序默认值 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<discription>每个节点可用内存,单位MB,默认8182MB</discription>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
说明:yarn.nodemanager.vmem-check-enabled这个的意思是忽略虚拟内存的检查,如果你是安装在虚拟机上,这个配置很有用,配上去之后后续操作不容易出问题。如果是实体机上,并且内存够多,可以将这个配置去掉。
7.配置hadoop-3.2.0/sbin/目录下start-dfs.sh、start-yarn.sh、stop-dfs.sh、stop-yarn.sh文件
在start-dfs.sh、stop-dfs.sh开始第一行加上
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
在start-yarn.sh、stop-yarn.sh开始第一行加上
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
8.配置好后,将 hadoop-1上的 /usr/local/work/hadoop/hadoop-3.2.0 文件夹复制到各个节点上
# 这里我hadoop目录下还有数据存储
scp -r /usr/local/work/hadoop/ root@hadoop-2:/opt/usr/local/work/hadoop
scp -r /usr/local/work/hadoop/ root@hadoop-3:/opt/usr/local/work/hadoop
scp /etc/profile root@hadoop-2:/etc/ #copy配置文件到各个节点
scp /etc/profile root@hadoop-3:/etc/
5.启动Hadoop
进入到hadoop-1这台机器的/opt/hadoop/hadoop-3.2.2/bin目录,也就是执行命令:
执行初始化脚本,也就是执行命令:
./hadoop namenode -format
在namenode上执行启动命令
因为hadoop-1是namenode,hadoop-2和hadoop-3都是datanode,所以只需要再hadoop-1上执行启动命令即可。
进入到hadoop-1这台机器的/opt/hadoop/hadoop-3.2.0/sbin目录,也就是执行命令
./start-all.sh
hadoop-1是我们的namenode,该机器的IP是10.188.120.201,在本地电脑访问如下地址:
http://10.188.120.201:9870/
访问集群页面url
http://192.168.217.128:8088/