这篇文章讲述的是hadoop集群的完全分布式的配置,如有错误或不当之处,还望各位大神批评指正。
一、安装前准备
要安装hadoop你需要先完成以下几件事:
- 安装了hadoop系统的机器若干台(我这里配置了三台),如需参考请移步:https://blog.csdn.net/u013634252/article/details/87998078
- 配置机器的网络、用户、shh免登陆,host文件,如需参考请移步:https://blog.csdn.net/u013634252/article/details/88045702
二、安装jdk
1. 下载系统版本对应的jdk
网址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
2. 将下载的jdk拷贝到Linux(两种方法)
- 第一种方法:
- 使用secureCRT,或者xshell登录到Linux
- 安装rz,sz命令
yum install lrzsz
- 使用rz命令上传文件
# 输入命令 rz # 选择jdk文件
- 第二种方法:
- 使用secureCRT登录到Linux
- 选择菜单“file”,选择子菜单“connect SFTP session”,或者直接输入快捷键Alt+P
- 将jdk文件拖入即可,入下图
3. 解压jdk文件包
tar -zxvf jdk-8u201-linux-x64.tar.gz
4. 配置jdk环境变量
打开文件/etc/profile
#打开文件/etc/profile
vi /etc/profile
在文件末尾加入如下内容(注意将JAVA_HOME变量值替换为你自己的jdk目录)
export JAVA_HOME=/home/hadoop/jdk1.8.0_201
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
5. 使环境变量生效
source /etc/profile
6. 检查是否配置成功
输入java -version命令,如果出现以下内容则安装jdk成功
三、安装hadoop
- 安装hadoop与安装jdk类似需要以下几步
1. 下载hadoop安装包
网址:https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.1.2/hadoop-3.1.2-src.tar.gz
2. 将安装包拷贝到Linux
与jdk安装包的拷贝类似,这里不再赘述
3. 解压hadoop安装包
tar -zxvf hadoop-3.2.0.tar.gz
4. 配置hadoop环境变量
打开文件/etc/profile
#打开文件/etc/profile
vi /etc/profile
在文件末尾加入如下内容(注意将HADOOP_HOME变量值替换为你自己的jdk目录)
export HADOOP_HOME=/home/hadoop/hadoop-3.2.0
# 在PATH变量后追加hadoop命令行
export PATH=.:$HADOOP_HOME/bin:
5. 使环境变量生效
source /etc/profile
6. 检查安装是否生效
输入hadoop version若出现如下内容则安装hadoop成功
四、hadoop完全分布式配置
- 配置方法可参看官方文档:https://hadoop.apache.org/docs/r3.1.2/
- 集群配置的规划如下图
1. 配置hadoop-env.sh
- 进入hadoop目录
- 输入命令打开hadoop-env.sh文件
vim etc/hadoop/hadoop-env.sh
- 找到JAVA_HONE这一行,输入以下内容:
export JAVA_HOME=/home/hadoop/jdk1.8.0_201
2. 配置core-site.xml (临时文件目录、NAMENODE)
- 进入hadoop目录
- 输入命令打开core-site.xml 文件
vim etc/hadoop/core-site.xml
- 在configuration标签中加入如下内容
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop/hadoop-3.2.0/hdfs/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9000</value>
</property>
3. 配置hdfs-site.xml (副本数,NodeManager,namenode和DataNode的存放位置,管理网址)
- 进入hadoop目录
- 输入命令打开hdfs-site.xml 文件
vim etc/hadoop/hdfs-site.xml
- 找到configuration,输入以下内容:
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/hadoop/hadoop-3.2.0/hdfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/hadoop/hadoop-3.2.0/hdfs/data</value>
<final>true</final>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:9001</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop001:50070</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
4. 配置yarn-site.xml(resourceManager,yarn管理网址)
- 进入hadoop目录
- 输入命令打开yarn-site.xml文件
vim etc/hadoop/yarn-site.xml
- 找到configuration标签,输入以下内容:
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoop102:18040</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop102:18030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop102:18088</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoop102:18025</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoop102:18141</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop102</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/home/hadoop/hadoop/hadoop-3.2.0/hdfs/tmp</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/home/hadoop/hadoop/hadoop-3.2.0/hdfs/done</value>
</property>
5. 配置mapred-site.xml
- 进入hadoop目录
- 输入命令打开mapred-site.xml 文件
vim etc/hadoop/mapred-site.xml
- 在configuration标签中加入如下内容
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/home/hadoop/hadoop/hadoop-3.2.0/</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/home/hadoop/hadoop/hadoop-3.2.0/</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/home/hadoop/hadoop/hadoop-3.2.0/</value>
</property>
6. 配置workers(老版本是slavers,DATANODE)
- 进入hadoop目录
- 输入命令打开mapred-site.xml 文件
vim etc/hadoop/workers
- 添加如下内容(注意每行末尾不要有空格)
hadoop101
hadoop102
hadoop103
至此hadoop集群中的一台机器(hadoop101)配置完毕,其他两台主机配置相同,可以一台一台配置,也可以使用脚本xsync,脚本参考:https://blog.csdn.net/u013634252/article/details/88070694
五、启动hadoop集群
1. 启动HDFS
start-dfs.sh
2. 格式化namenode(一次即可)
hdfs namenode -format
注意:只在刚配置好集群时候格式化,格式化中途如有任何情况中断,或让你输入东西,证明你多次格式化了namenode,此时需要删除你在hdfs-site.xml中设置的name节点位置和data节点位置,再重新格式化
3. 启动YARN
start-yarn.sh
注意要在配置ResourceManager那个节点上启动
4. 启动日志
mr-jobhistory-daemon.sh start historyserver
六、测试MapReduce(wordcount为例)
- 使用hadoop自带的wordcount案例
1. 新建input.txt文件,并往里边随便放点单词
vim input.txt
2. 在HDFS里新建文件夹/wordcount/input
hdfs dfs -mkdir -p /wordcount/input
3. 将输入文件input.txt文件放入HDFS
hdfs dfs -put input.txt /wordcount/input
4. 执行MapReduce
yarn jar /home/hadoop/hadoop-3.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar wordcount /wordcount/input /wordcount/output
- 如果出现如下内容则证明hadoop集群已经搭好
5. 查看MapReduce结果
hdfs dfs -cat /wordcount/output/part-r-00000
至此,完全分布式的hadoop集群搭建完毕!