目录
- 一:资源要求与准备
- 二:安装JDK
- 三:安装Hadoop
- 下载
- 集群规划
- 安装
- 集群配置
- 配置core-site.xml文件
- 配置hdfs-site.xml
- 配置yarn-site.xml
- 配置mapred-site.xml
- 配置workers(旧版本是slaves)
- 分发配置
- 启动集群
- 首次启动初始化NameNode
- 启动HDFS
- 启动Yarn
- 查看每个节点状态
- 上传文件测试集群
- 总结
一:资源要求与准备
- Centos7 机器3台:单机至少2g内存
- 配置机器之间免密登录
参考链接:服务器之间ssh免密登录配置
- 必须确保三台服务器两两之间能ssh免密登录
- 验证:进入服务器后执行ssh命令登录三台服务器
- 我这里将三台服务器的hostname分别设置为hadoop102、hadoop103、hadoop104并且配置了hosts文件
1 2 3 4 | #免密登录验证 ssh hadoop102 ssh hadoop103 ssh hadoop104 |
二:安装JDK
- 新建文件目录
1 | sudo mkdir -p /opt/module |
注意:当前用户如果不是root用户,必须将module文件夹所属的组、主权限修改为当前操作集群的用户和用户组
- 解压文件
jdk下载链接:https://pan.baidu.com/s/1XwKheQa9WI3k3XgS-uu8lg 密码:n3da
1 | tar -zxvf jdk-8u212-linux-x64.tar.gz |
- 配置环境变量
新建环境文件
1 | sudo vim /etc/profile.d/my_env.sh |
添加以下内容
1 2 3 | #JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_212 export PATH=$PATH:$JAVA_HOME/bin |
使环境变量生效
1 | source /etc/profile |
或者重启shell窗口
- 验证
1 | java -version |
如果看到以下内容,则安装jdk成功
1 | java version "1.8.0_212" |
三:安装Hadoop
下载
- Hadoop下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/
- 网盘提取地址:链接:https://pan.baidu.com/s/1jwxCnP8_j8QB9ru_26sNlA 密码:xphx
集群规划
组件 | 机器hadoop102 | 机器hadoop103 | 机器hadoop104 |
---|---|---|---|
HDFS | NameNode DataNode |
DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | NodeManager ResourceManager |
NodeManager |
安装
先在Hadoop102机器安装,配置完成后再分发其他机器
- 登录hadoop102机器,上传、解压安装文件到/opt/module下面
1 | tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/ |
- 查看是否解压成功
1 | ls /opt/module/ |
- 配置环境变量
- 打开前面配置的环境变量文件
1 | [lizzy@hadoop102 ~]$ sudo vim /etc/profile.d/my_env.sh |
- 加上Hadoop环境变量
1 2 3 4 5 6 | #jdk环境变量配置 JAVA_HOME=/opt/module/jdk1.8.0_212 #hadoop环境变量配置 HADOOP_HOME=/opt/module/hadoop-3.1.3 PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export PATH JAVA_HOME HADOOP_HOME |
- 重启shell窗口或者执行
1 | source /etc/profile |
集群配置
配置core-site.xml文件
1 2 | cd $HADOOP_HOME/etc/hadoop vim core-site.xml |
配置文件内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:9820</value> </property> <!-- 指定hadoop数据的存储目录 官方配置文件中的配置项是hadoop.tmp.dir ,用来指定hadoop数据的存储目录,此次配置用的hadoop.data.dir是自己定义的变量, 因为在hdfs-site.xml中会使用此配置的值来具体指定namenode 和 datanode存储数据的目录 --> <property> <name>hadoop.data.dir</name> <value>/opt/module/hadoop-3.1.3/data</value> </property> </configuration> |
配置hdfs-site.xml
1 2 | cd $HADOOP_HOME/etc/hadoop vim hdfs-site.xml |
配置文件内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定NameNode数据的存储目录 --> <property> <name>dfs.namenode.name.dir</name> <value>file://${hadoop.data.dir}/name</value> </property> <!-- 指定Datanode数据的存储目录 --> <property> <name>dfs.datanode.data.dir</name> <value>file://${hadoop.data.dir}/data</value> </property> <!-- 指定SecondaryNameNode数据的存储目录 --> <property> <name>dfs.namenode.checkpoint.dir</name> <value>file://${hadoop.data.dir}/namesecondary</value> </property> <!-- nn web端访问地址--> <property> <name>dfs.namenode.http-address</name> <value>hadoop102:9870</value> </property> <!-- 2nn web端访问地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:9868</value> </property> </configuration> |
配置yarn-site.xml
1 2 | cd $HADOOP_HOME/etc/hadoop vim yarn-site.xml |
配置文件内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定ResourceManager的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop103</value> </property> <!-- 环境变量的继承 --> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> </configuration> |
配置mapred-site.xml
1 2 | cd $HADOOP_HOME/etc/hadoop vim mapred-site.xml |
配置文件内容如下
1 2 3 4 5 6 7 8 9 10 | <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!—指定MapReduce程序运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> |
配置workers(旧版本是slaves)
1 | vim /opt/module/hadoop-3.1.3/etc/hadoop/workers |
在该文件增加如下内容
就是你的集群机器hostname,注意不要有空格和空行
1 2 3 | hadoop102 hadoop103 hadoop104 |
分发配置
lizzy是我的用户名,这里根据自己实际是使用root还是其他用户来代替,如果不是root注意权限问题
- 分发安装目录到机器hadoop103
1 | sudo rsync -r /opt/module/hadoop-3.1.3 lizzy:hadoop103:/opt/module/ |
- 分发安装目录到机器hadoop104
1 | sudo rsync -r /opt/module/hadoop-3.1.3 lizzy:hadoop104:/opt/module/ |
- 进入hadoop103、hadoop104 检查是否分发成功
1 | ssh hadoop103 ls /opt/module |
1 | ssh hadoop104 ls /opt/module |
启动集群
首次启动初始化NameNode
我们的NameNode配置在hadoop102节点,ssh hadoop102 进入102节点
1 | hdfs namenode -format |
没有任何报错,中途没有询问输入任何的yes / no就是成功
启动HDFS
在hadoop102机器启动
1 | start-dfs.sh |
启动Yarn
按照我们的集群规划,yarn部署在hadoop103,ssh hadoop103 到103节点启动
1 | start-yarn.sh |
查看每个节点状态
命令可以查看启动的进程,在每个节点执行jps查看进程启动状态,看下启动的服务是否符合规划
1 2 3 | ssh hadoop102 jps ssh hadoop103 jps ssh hadoop104 jps |
组件 | 机器hadoop102 | 机器hadoop103 | 机器hadoop104 |
---|---|---|---|
HDFS | NameNode DataNode |
DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | NodeManager ResourceManager |
NodeManager |
上传文件测试集群
执行命令上传LICENSE.txt文件
1 | hdfs dfs -put /opt/module/hadoop-3.1.3/LICENSE.txt / |
打开namenode的web页面查看,文件上传集群成功:
总结
这里面很多操作可以优化,比如:
- rsync分发避免重复操作可以写成分发脚本,集群启动也可以写成启动脚本
- 可以启动更多服务,配置日志服务器,配置日志聚集上传
- 具体上传、下载、创建文件夹等基本命令操作
- 中间操作如果不能成功,可以查看hadoop下的日志文件,一般是权限问题居多
- hadoop2.x和hadoop3.x端口不完全一样,这个需要注意,本文是hadoop-3.1.3