Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)

Linux从零搭建Hadoop集群(CentOS7+hadoop3.2.0+JDK1.8+Mapreduce完全分布式集群案例)

关键字和相关配置版本

关键字:Linux CentOS Hadoop Java
版本: CentOS7 Hadoop3.2.0 JDK1.8

基本主从思路:

先把基础的设置在一台虚拟机(master)上配好,通过克隆改节点IP、主机名、添加主从ip与对应的主机名,获得剩下一台虚拟机(node1)!
此次搭建的集群的一台主机,一台从机的主从结构。
(可以根据自己的实际情况设置多台从机,本文内容我这个从机是一个,多加几个节点也很简单,看个人爱好或者个人需求。)

说明:Hadoop从版本2开始加入了Yarn这个资源管理器,Yarn并不需要单独安装。只要在机器上安装了JDK就可以直接安装Hadoop,单纯安装Hadoop并不依赖Zookeeper之类的其他东西。

文章目录

  • 关键字和相关配置版本
  • 一、首先要先在虚拟机搭建Linux CentOS7
  • 二、直接选择root用户
  • 三、实现ssh免密码登录
  • 四、CentOS7 安装jdk1.8
  • 五、下载hadoop
  • 六、启动Hadoop
  • 七、运行MapReduce集群

一、首先要先在虚拟机搭建Linux CentOS7

不懂的小伙伴可以在看我之前写的博客:

附链接:
虚拟机搭建Linux CentOS7(详细图文讲解)

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第1张图片

二、直接选择root用户

我直接选择root用户登录,避免了普通用户授权和切换用户导致的一些环境问题,简单来说就是高效。
Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第2张图片

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第3张图片
这样进来直接就是root用户,不用再那么麻烦输入密码啥的:
Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第4张图片

三、实现ssh免密码登录

配置ssh的无密码访问

ssh-keygen -t rsa

连续按回车

cd ~/.ssh
cat id_rsa.pub >> authorized_keys

让ssh服务器自动启动

vi ~/.bashrc 

在文件的最末尾按O进入编辑模式,加上:

/etc/init.d/ssh start

按ESC返回命令模式,输入:wq保存并退出。
让修改即刻生效

source ~/.bashrc

四、CentOS7 安装jdk1.8

1、yum安装

  1. 安装之前先查看一下有无系统自带jdk,有的话先卸载。
rpm -qa | grep jdk

[root@master ~]#rpm -qa | grep jdk
copy-jdk-configs-3.3-10.el7_5.noarch
java-1.8.0-openjdk-headless-1.8.0.322.b06-1.el7_9.x86_64
java-1.8.0-openjdk-devel-1.8.0.322.b06-1.el7_9.x86_64
java-1.8.0-openjdk-javadoc-zip-1.8.0.322.b06-1.el7_9.noarch
java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64
java-1.8.0-openjdk-accessibility-1.8.0.322.b06-1.el7_9.x86_64
java-1.8.0-openjdk-demo-1.8.0.322.b06-1.el7_9.x86_64
java-1.8.0-openjdk-src-1.8.0.322.b06-1.el7_9.x86_64
java-1.8.0-openjdk-javadoc-1.8.0.322.b06-1.el7_9.noarch

卸载jdk:

rpm -e --nodeps  上步查询出的所有jdk

例如:
[root@master ~]# rpm -e --nodeps copy-jdk-configs-3.3-10.el7_5.noarch
[root@master ~]# rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.322.b06-1.el7_9.x86_64
[root@master ~]# rpm -qa | grep jdk
java-1.8.0-openjdk-devel-1.8.0.322.b06-1.el7_9.x86_64
java-1.8.0-openjdk-javadoc-zip-1.8.0.322.b06-1.el7_9.noarch
java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64
java-1.8.0-openjdk-accessibility-1.8.0.322.b06-1.el7_9.x86_64
java-1.8.0-openjdk-demo-1.8.0.322.b06-1.el7_9.x86_64
java-1.8.0-openjdk-src-1.8.0.322.b06-1.el7_9.x86_64
java-1.8.0-openjdk-javadoc-1.8.0.322.b06-1.el7_9.noarch
[root@test ~]#

rpm -e --nodeps 我这只执行了两次,剩下的7个卸载同样的操作,在此不在执行。

验证是否已经卸载干净:

rpm -qa|grep java
java -version

卸载完之后开始安装jdk1.8:

查看可安装的版本

yum list java*

安装1.8.0版本openjdk

yum -y install java-1.8.0-openjdk*

安装位置查看:

rpm -qa | grep java
rpm -ql java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第5张图片

环境变量配置:
当前用户使用:

vi ~/.bashrc

或者全局用户使用:

vi /etc/profile

添加:

export JAVA_HOME=/usr/lib/jvm/java-openjdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

然后执行

 source ~/.bashrc

或者

 source /etc/profile 

命令使修改的配置文件生效。

验证安装:

java -version

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第6张图片

五、下载hadoop

引用文本本博文使用的hadoop是3.2.0版本
打开下载地址选择页面:http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第7张图片

也可以更方便的挑选自己合适的hadoop版本号直接去下载

网址:

https://archive.apache.org/dist/hadoop/common/

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第8张图片

然后上传文件并解压缩
1.在opt目录下新建一个名为hadoop的目录,并将下载得到的hadoop-3.2.0.tar上载到该目录下

   mkdir /opt/hadoop

解压安装:

 tar -xvf hadoop-3.2.0.tar.gz

配置Hadoop环境变量:

vi /etc/profile

添加hadoop环境变量后:

export JAVA_HOME=/usr/lib/jvm/java-openjdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:/opt/hadoop/hadoop-3.2.0/bin:/opt/hadoop/hadoop-3.2.0/sbin
export HADOOP_HOME=/opt/hadoop/hadoop-3.2.0
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

然后执行

source /etc/profile

使修改的配置文件生效。

Hadoop配置文件修改
新建几个目录:

mkdir /root/hadoop
mkdir /root/hadoop/tmp
mkdir /root/hadoop/var
mkdir /root/hadoop/dfs
mkdir /root/hadoop/dfs/name
mkdir /root/hadoop/dfs/data

修改etc/hadoop中的一系列配置文件

 vi /opt/hadoop/hadoop-3.2.0/etc/hadoop/core-site.xml

在节点内加入配置:

<configuration>
 <property>
        <name>hadoop.tmp.dirname>
        <value>/root/hadoop/tmpvalue>
        <description>Abase for other temporary directories.description>
   property>
   <property>
        <name>fs.default.namename>
        <value>hdfs://master:9000value>
   property>
   configuration>

修改hadoop-env.sh

vi /opt/hadoop/hadoop-3.2.0/etc/hadoop/hadoop-env.sh

将 export JAVA_HOME=${JAVA_HOME}
修改为: export JAVA_HOME=/usr/lib/jvm/java-openjdk
说明:修改为自己的JDK路径

修改hdfs-site.xml

vi /opt/hadoop/hadoop-3.2.0/etc/hadoop/hdfs-site.xml 

在节点内加入配置:

<configuration>
<property>
   <name>dfs.name.dirname>
   <value>/root/hadoop/dfs/namevalue>
   <description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently.
   description>
property>

<property>
   <name>dfs.data.dirname>
   <value>/root/hadoop/dfs/datavalue>
   <description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.
   description>
property>

<property>
   <name>dfs.replicationname>
   <value>2value>
property>

<property>
   <name>dfs.permissionsname>
   <value>falsevalue>
   <description>need not permissionsdescription>
property>
configuration>

新建并且修改mapred-site.xml:

vi /opt/hadoop/hadoop-3.2.0/etc/hadoop/mapred-site.xml

在节点内加入配置:

<configuration>

<property>
   <name>mapreduce.framework.namename>
   <value>yarnvalue>
property>
configuration>

修改workers文件:

vi /opt/hadoop/hadoop-3.2.0/etc/hadoop/workers

将里面的localhost删除,添加以下内容:

master
node1

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第9张图片
修改yarn-site.xml文件:

HADOOP_CLASSPATH 是设置要运行的类的路径。否则当你用hadoop classname [args]方式运行程序时会报错,说找不到要运行的类。用hadoop jar jar_name.jar classname [args]方式运行程序时没问题

这边需要设置hadoop classpath否则后面mapreduce会报错找不到主类:

hadoop classpath

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第10张图片

记下返回的结果

vi /opt/hadoop/hadoop-3.2.0/etc/hadoop/yarn-site.xml 

添加一个配置

<property>
        <name>yarn.application.classpath</name>
        <value>hadoop classpath返回信息</value>
</property>

这是我的yarn-site.xml配置:

<configuration>
        <property>
            <name>yarn.nodemanager.aux-servicesname>
            <value>mapreduce_shufflevalue>
        property>
        <property>
            <name>yarn.resourcemanager.hostnamename>
            <value>mastervalue>
        property>
        <property>
            <name>yarn.application.classpathname>
            <value>/opt/hadoop/hadoop-3.2.0/etc/hadoop:/opt/hadoop/hadoop-3.2.0/share/hadoop/common/lib/*:/opt/hadoop/hadoop-3.2.0/share/hadoop/common/*:/opt/hadoop/hadoop-3.2.0/share/hadoop/hdfs:/opt/hadoop/hadoop-3.2.0/share/hadoop/hdfs/lib/*:/opt/hadoop/hadoop-3.2.0/share/hadoop/hdfs/*:/opt/hadoop/hadoop-3.2.0/share/hadoop/mapreduce/lib/*:/opt/hadoop/hadoop-3.2.0/share/hadoop/mapreduce/*:/opt/hadoop/hadoop-3.2.0/share/hadoop/yarn:/opt/hadoop/hadoop-3.2.0/share/hadoop/yarn/lib/*:/opt/hadoop/hadoop-3.2.0/share/hadoop/yarn/*value>
        property>
configuration>

配置hadoop-3.2.0/sbin/目录下start-dfs.sh、start-yarn.sh、stop-dfs.sh、stop-yarn.sh文件

服务启动权限配置
配置start-dfs.sh与stop-dfs.sh文件

vi sbin/start-dfs.sh 

 vi sbin/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文件

vi sbin/start-yarn.sh 

vi sbin/stop-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

配置好后,克隆虚拟机,

vim /etc/sysconfig/network-scripts/ifcfg-ens33

修改ip
Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第11张图片
修改主机名:

vi /etc/hostname

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第12张图片

修改对应的ip 和主机名(主从节点保持一致)

vim /etc/hosts  

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第13张图片

主从节点互连ssh试试:

ssh node1

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第14张图片

ssh master

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第15张图片
OK,互连成功。(按exit可以退出)

六、启动Hadoop

因为master是namenode,node1是datanode,所以只需要对master进行初始化操作,也就是对hdfs进行格式化。
进入到master这台机器/opt/hadoop/hadoop-3.2.0/bin目录:

  cd /opt/hadoop/hadoop-3.2.0/bin

执行初始化脚本

  ./hadoop namenode -format

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第16张图片
Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第17张图片

然后执行启动进程:

./sbin/start-all.sh

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第18张图片
运行结果:

master是我们的namenode,该机器的IP是192.168.95.20,在本地电脑访问如下地址:

http://192.168.95.20:9870/

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第19张图片

在本地浏览器里访问如下地址:

http://192.168.95.20:8088/cluster

自动跳转到cluster页面

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第20张图片
在hdfs上建立一个目录存放文件
假设该目录为:

./bin/hdfs dfs -mkdir -p /home/hadoop/myx/wordcount/input

查看分发复制是否正常

./bin/hdfs dfs -ls /home/hadoop/myx/wordcount/input

在这里插入图片描述

七、运行MapReduce集群

Mapreduce运行案例:
在hdfs上建立一个目录存放文件
例如

./bin/hdfs dfs -mkdir -p /home/hadoop/myx/wordcount/input

把文本程序放进去

mkdir hello 
vim hello

加入下面内容:

hadoop yarn spark
hadoop mapreduce
hadoop spark
hadoop spark
./bin/hdfs dfs -put hello /home/hadoop/myx/wordcount/input

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第21张图片

查看分发情况

./bin/hdfs dfs -ls /home/hadoop/myx/wordcount/input

在这里插入图片描述

运行MapReduce自带wordcount的示例程序:

./bin/hadoop jar /opt/hadoop/hadoop-3.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar  wordcount /home/hadoop/myx/wordcount/input /home/hadoop/myx/wordcount/output

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第22张图片

运行结束后,查看输出结果

hdfs dfs -cat /home/hadoop/myx/wordcount/output/part-r-00000*

在这里插入图片描述

详细截图:
Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第23张图片

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第24张图片

运行输出结果也可以在web端查看,里面有详细信息:
Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第25张图片

Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群案例)_第26张图片

OK,花了快2小时的Linux从零搭建Hadoop集群(CentOS7+hadoop 3.2.0+JDK1.8+Mapreduce完全分布式集群)终于整理完成了,辛苦的小马同学决定奖励自己一把大乱斗,希望此教程对各位有所帮助,这些都已经试过水了,各位环境配置和操作没问题的话,基本都能部署完成,祝各位一切顺利。

你可能感兴趣的:(大数据,系统运维,JAVA,hadoop,mapreduce,分布式)