JDK版本:jdk1.8.0_271
Hadoop版本:2.10.1
三台虚拟机搭建Hadoop集群
主节点:192.168.253.128
从节点1:192.168.253.129
从节点2:193.168.253.130
关闭防火墙:
systemctl stop firewalld.service
禁用防火墙:systemctl disable firewalld.service
查看防火墙状态 systemctl status firewalld.service
一、修改主机名称
方式一、修改配置文件
vim /etc/hostname
添加主机名称
方式二、通过命令行,永久生效
hostnamectl set-hostname master
查看主机名称
二、修改ip映射(三台机器都需要如下三行配置)
vim /etc/hosts
添加映射
配置完成后使用ping命令检查这3个机器是否相互ping得通(互相检查一下)。
三、3台机器互相配置免密登录
1.在机器A输入下面命令,三次回车后,就在机器A产生公钥和私钥
ssh-keygen
2.在机器A的/root/.ssh目录下执行下面命令,就复制到了机器B上
ssh-copy-id 机器B的ip
3.这样就可以SSH免密到机器B上了,想要相互免密,就相互按照上述步骤
如下为真实操作:
1)主节点执行命令
ssh-keygen
ssh-copy-id 192.168.253.128
ssh-copy-id 192.168.253.129
ssh-copy-id 192.168.253.130
2)在从节点1执行如下命令
ssh-keygen
ssh-copy-id 192.168.253.128
ssh-copy-id 192.168.253.129
ssh-copy-id 192.168.253.130
3)在从节点2执行命令
ssh-keygen
ssh-copy-id 192.168.253.128
ssh-copy-id 192.168.253.129
ssh-copy-id 192.168.253.130
完成之后通过 ssh 用户@ip 来确定是否可以免密登录
注意:每台机子上也要对本机设置免密,否则开启/关闭自己服务的时候还是需要输入密码
四、安装jdk和hadoop
解压jdk至路径
/usr/local/htsoft/jdk1.8.0_271
解压hadoop至路径
/usr/local/htsoft/hadoop-2.10.1
1、配置环境变量(路径改成自己的真实路径)
export JAVA_HOME=/usr/local/htsoft/jdk1.8.0_271
export HADOOP_HOME=/usr/local/htsoft/hadoop-2.10.1
export JRE_HOME=/usr/local/htsoft/jdk1.8.0_271/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin:$HADOOP_HOME/bin
2、hadoop路径下创建文件
创建 /usr/local/htsoft/hadoop-2.10.1/hdfs
创建 /usr/local/htsoft/hadoop-2.10.1/hdfs/tmp
创建 /usr/local/htsoft/hadoop-2.10.1/hdfs/data
创建 /usr/local/htsoft/hadoop-2.10.1/hdfs/name
3、修改 /usr/local/htsoft/hadoop-2.10.1/etc/hadoop/目录下的8个配置文件
slaves core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml hadoop-env.sh yarn-env.sh mapred-env.sh
1) 修改core-site.xml
在<configuration>节点内加入配置:
<!-- 指定Hadoop运行时产生文件的存储目录(自定义即可) --> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/htsoft/hadoop-2.10.1/hdfs/tmp</value> <description>A base for other temporary directories.</description> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property>
2)修改hadoop-env.sh
查看本地JAVA_HOME路径
将
export JAVA_HOME=${JAVA_HOME}
改为自己的JDK路径
export JAVA_HOME=/usr/local/htsoft/jdk1.8.0_271
3)修改hdfs-site.xml
在<configuration>节点内加入配置:
<!-- 指定HDFS副本的数量(默认为3,可自定义)此数值需要和slaves配置文件中配置的数量保持一致,如果不一致,比如此处配置值为2,而slaves中配置了3行,则nameNode所在节点不会生成datanode.-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/htsoft/hadoop-2.10.1/hdfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/htsoft/hadoop-2.10.1/hdfs/data</value>
<final>true</final>
</property>
<!-- 指定Hadoop辅助名称节点主机配置(SecondaryNameNode) -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
4)新建并且修改mapred-site.xml
该版本中,有一个名为mapred-site.xml.template的文件,复制该文件,然后改名为mapred-site.xml,命令是:
cp mapred-site.xml.template mapred-site.xml
修改这个新建的mapred-site.xml文件,在<configuration>节点内加入配置:
<property>
<name>mapred.job.tracker</name>
<value>master:49001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/root/hadoop/var</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
5)修改slaves文件
修改/usr/local/htsoft/hadoop-2.10.1/etc/hadoop/slaves文件,将里面的localhost删除,添加如下内容:
此节点中表示datanode和nodemanager的位置(如下配置表示master、slave1、slave2三个节点均有datanode和nodemanager,而仅master节点有namenode)
master
slave1
slave2
说明:这个只需要修改hadoop01主机,另外两台不需要修改!!!使用ip地址也可以
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
s6)修改yarn-site.xml文件
修改/usr/local/htsoft/hadoop-2.10.1/etc/hadoop/yarn-site.xml文件, 在<configuration>节点内加入配置(注意了,内存根据机器配置越大越好,我这里只配2个G是因为机器不行):
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<description>The address of the applications manager interface in the RM.</description>
<name>yarn.resourcemanager.address</name>
<value>${yarn.resourcemanager.hostname}:8032</value>
</property>
<property>
<description>The address of the scheduler interface.</description>
<name>yarn.resourcemanager.scheduler.address</name>
<value>${yarn.resourcemanager.hostname}:8030</value>
</property>
<property>
<description>The http address of the RM web application.</description>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8088</value>
</property>
<property>
<description>The https adddress of the RM web application.</description>
<name>yarn.resourcemanager.webapp.https.address</name>
<value>${yarn.resourcemanager.hostname}:8090</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>${yarn.resourcemanager.hostname}:8031</value>
</property>
<property>
<description>The address of the RM admin interface.</description>
<name>yarn.resourcemanager.admin.address</name>
<value>${yarn.resourcemanager.hostname}:8033</value>
</property>
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
<discription>每个节点可用内存,单位MB,默认8182MB</discription>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
7)修改yarn-env.sh
将
#export JAVA_HOME=XXXXXXXX
前面的#解开,并改成自己的地址
export JAVA_HOME=/usr/local/htsoft/jdk1.8.0_271
8) 修改mapred-env.sh
将
#export JAVA_HOME=XXXXXXXX
改成
export JAVA_HOME=/usr/local/htsoft/jdk1.8.0_271
五、配置从节点
从节点1:192.168.253.129
从节点2:192.168.253.130
以上两个节点为从节点。
2个从节点需要配置:
1、防火墙关闭
2、hostname的设置
3、host映射的配置
4、免密登录的设置
5、环境变量(jdk和hadoop)
如上1~5步骤按照之前的讲解配置即可
6、将master节点已经配置好的hadoop-2.10.1项目压缩并发送到从节点1和从节点2
六、启动hadoop
1.在namenode上执行初始化
首次启动hadoop需要先在 Master 节点执行 NameNode 的格式化,# 首次运行需要执行初始化,之后不需要
因为master是namenode,所以只需要在master所在服务器格式化nameNode
[root@master]# cd /usr/local/htsoft/hadoop-2.10.1/bin
[root@master bin]# ./hadoop namenode -format
2.执行启动命令
进入sbin目录
./start-all.sh
3.从节点上的2个服务无需启动。主节点启动时,会扫描 etc/hadoop/slaves 配置文件。根据配置来启动对应服务器上的datanode和nodemanager
特别注意:
NameNode不要随便格式化,会清空所有数据。如果格式化异常可能会导致 NameNode 和 DataNode 节点 VERSION 不一致,导致集群启动失败。
如果一定要格式化,格式化之前,一定要先停止上次启动的所有 namenode 和 datanode 进程,然后再删除 所有主从节点的data 和 log 数据)
七、Web端查看启动情况
Ⅰ. 查看HDFS文件系统
根据core-site.xml文件中的配置。得知HDFS的namenode所在节点在master,故地址如下
地址:http://192.168.253.128:50070
Ⅱ. 查看YARN页面
根据yarn-site.xml文件配置,得知yarn在master节点,故地址如下
地址:http://192.168.253.128:8088
Ⅲ. 查看SecondaryNameNode页面
根据hdfs-site.xml文件。得知SecondaryNameNode所在节点在master
地址:http://192.168.253.128:9001
注意:打开 SecondaryNamenode information管理页面,没有任何信息提示。Hadoop查看Secondary Namenode管理页面无信息的解决办法,参考:,感谢 loetca 博主的文章帮助
此处摘录一下:
1.打开浏览器的开发者工具的Console,发现如下提示:
dfs-dust.js:61 Uncaught ReferenceError: moment is not defined
at Object.date_tostring (dfs-dust.js:61)
at Object.dust.filter (dust-full-2.0.0.min.js:1)
at Chunk.reference (dust-full-2.0.0.min.js:1)
at body_1 (eval at dust.loadSource (dust-full-2.0.0.min.js:1), :1:572)
at Chunk.section (dust-full-2.0.0.min.js:1)
at body_0 (eval at dust.loadSource (dust-full-2.0.0.min.js:1), :1:77)
at Object.dust.load (dust-full-2.0.0.min.js:1)
at Object.dust.render (dust-full-2.0.0.min.js:1)
at render (snn.js:61)
at Object.finished_request (snn.js:38)
2.解决办法:
进入:hadoop/share/hadoop/hdfs/webapps/static/dfs-dust.js 修改
查看 dfs-dust.js 的第61行
将
'date_tostring' : function (v) {
return moment(Number(v)).format('ddd MMM DD HH:mm:ss ZZ YYYY');
},
修改成
'date_tostring' : function (v) {
return new Date(Number(v)).toLocaleString();
},
八.测试集群(此部分为copy其他博客)
Ⅰ. 测试HDFS文件系统
1.在HDFS文件系统上创建一个input文件夹
[root@hadoop201 hadoop]# hdfs dfs -mkdir -p /input
2.编辑 text.txt,写入如下内容
Hadoop Hive Apache
James Mary
Hadoop Mary
3.将 text.txt 上传到 hdfs /input 目录下
[root@hadoop201 hadoop]# hdfs dfs -put test.txt /input
4.查看上传的文件
[root@hadoop201 hadoop]# hdfs dfs -ls /input
Found 1 items
-rw-r–r-- 3 root supergroup 42 2020-10-29 11:18 /input/test.txt
5.查看上传的文件内容
[root@hadoop201 hadoop]# hdfs dfs -cat /input/test.txt
Hadoop Hive Apache
James Mary
Hadoop Mary
6.HDFS页面查看文件
Ⅱ. 测试YARN调度系统
Hadoop 为我们预装了一些测试案例供我们使用,位于 share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar
目录下,现在来运行 MapReduce 程序,对 HDFS 上传的 test.txt 进行 wordcount 计算
1.执行示例程序
[root@hadoop201 hadoop]#hadoop
jar/usr/local/env/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar
wordcount/input
/output
参数介绍:
1.hadoop :已经配置环境变量,可以在任意目录执行(该命令位于 /usr/local/env/hadoop/bin 目录下)
2. jar:执行jar包
3.hadoop-mapreduce-examples-2.10.1.jar:示例程序jar包
4.wordcount:wordcount主程序入口
5./input:输入文件地址
6./output:输出文件地址
1.查看计算完成,文件输出地址
[root@hadoop201 hadoop]# hdfs dfs -ls /output
Found 2 items
-rw-r–r-- 3 root supergroup 0 2020-10-29 11:27 /output/_SUCCESS
-rw-r–r-- 3 root supergroup 40 2020-10-29 11:27 /output/part-r-00000
2.查看计算结果
[
root@hadoop201 hadoop]# hdfs dfs -cat /output/part-r-00000
Apache 1
Hadoop 2
Hive 1
James 1
Mary 2
3.HDFS页面查看结果文件