大数据学习 - (一)CentOS7_64位部署Hadoop3.2.2

    最近想学大数据的东西,那首先就要部署一个Hadoop环境,看了看官网,现在已经3.3.x、3.2.x、3.1.x、2.x.x版本,虽然最近都有更新,但就着不是最新的也不是最旧的原则,选择了3.2.2版本。网上也有很多部署教程,参考多份教程、文档,部署过程中总会多少有些问题,这里记录一下自己的部署过程,保证按照步骤肯定能够使用最基本的Hdfs和Mapreduce功能,至于后续更深入的应用,等学到的时候再开新文进行补充。

一、使用 VMware Workstation 15 Pro 15.5.1版本(下称VM)安装CentOS7(CentOS Linux release 7.9.2009),命名为 hadoop-master,IP设为 192.168.0.245。此处过程略,可参考网上的教程。

二、上传并安装JDK和Hadoop

2.1.在 /root 目录下创建 目录 app,通过XFtp将 JDK(jdk-8u281-linux-x64.tar.gz) 和 Hadoop(hadoop-3.2.2.tar.gz)上传至 /root/app/目录下。

2.2.安装JDK 和 Hadoop。

2.2.1.命令:cd /root/app 进入 /root/app/ 目录。

2.2.2.命令:tar -zxvf /root/app/jdk-8u281-linux-x64.tar.gz 解压 jdk-8u281-linux-x64.tar.gz,解压后的JDK目录为 /root/app/jdk1.8.0_281

2.2.3.命令:tar -zxvf /root/app/hadoop-3.2.2.tar.gz 解压 hadoop-3.2.2.tar.gz,解压后的Hadoop目录为 /root/app/hadoop-3.2.2。

2.2.4.配置环境变量,命令:vi /etc/profile 编辑 profile 文件,在文件末尾添加如下内容,保存。

export HADOOP_HOME=/root/app/hadoop-3.2.2
export JAVA_HOME=/root/app/jdk1.8.0_281
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=$PATH:${JAVA_HOME}/bin:${JRE_HOME}/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

2.2.5.命令:source /etc/profile 使新的环境变量生效。

2.2.6.通过 java -version 和 hadoop version 查看版本信息,如下图成功。

2.3. 关闭防火墙。

命令:systemctl stop firewalld.service 关闭防火墙。

命令:systemctl disable firewalld.service 禁用防火墙,防止虚拟机重启后防火墙自动开启。

命令:systemctl status firewalld.service 查看防火墙状态。

2.4.关闭 SELINUX 。

命令:setenforce 0 关闭 SELINUX。

命令:vi /etc/selinux/config 编辑 config 文件,设置 SELINUX=disabled ,保存。

2.5.虚拟机关机。

三、VM克隆hadoop-master,做另外两个虚拟机(创建完整克隆),分别命名为 hadoop-slave1 和 hadoop-slave2,IP分别设为 192.168.0.246 和 192.168.0.247。三台虚拟机对应IP如下。

hadoop-master   192.168.0.245

hadoop-slave1   192.168.0.246

hadoop-slave2   192.168.0.247

四、设置hostname 和 hosts(以 hadoop-master 为例)

4.1.远程登录到 hadoop-master 虚拟机。

4.2.命令:vi /etc/hostname 编辑 hostname 文件,将 localhost.localdomain 改成 hadoopmaster 后保存(hostname 尽量用全小写,否则,后续使用中会出现链接点击无法跳转的问题,其余虚拟机同理)。

4.3.命令:vi /etc/hosts 编辑 hosts 文件,在文件末尾增加如下内容后保存。

192.168.0.245 hadoopmaster
192.168.0.246 hadoopslave1
192.168.0.247 hadoopslave2


4.4.远程登录到 hadoop-slave1 虚拟机,同 4.2. 将 hostname 文件内容改成 hadoopslave1 后保存,同 4.3. 在 hosts 文件末尾增加 4.3. 一样的内容并保存。

4.4.远程登录到 hadoop-slave2 虚拟机,同 4.2. 将 hostname 文件内容改成 hadoopslave2 后保存,同 4.3. 在 hosts 文件末尾增加 4.3. 一样的内容并保存。

4.5.重启三台虚拟机,三台虚拟机网络设置如下。

虚拟机IPhostnamehosts末尾追加
hadoop-master192.168.0.245hadoopmaster192.168.0.245 hadoopmaster
192.168.0.246 hadoopslave1
192.168.0.247 hadoopslave2
hadoop-slave1192.168.0.246hadoopslave1192.168.0.245 hadoopmaster
192.168.0.246 hadoopslave1
192.168.0.247 hadoopslave2
hadoop-slave2192.168.0.247hadoopslave2192.168.0.245 hadoopmaster
192.168.0.246 hadoopslave1
192.168.0.247 hadoopslave2

五、启动hadoop-master、hadoop-slave1、hadoop-slave2 三台虚拟机,修改 hadoop-master 虚拟机中 Hadoop 配置文件并将修改后的 Hadoop 拷贝到 hadoop-slave1、hadoop-slave2虚拟机上。

5.1.远程登录 hadoop-master 虚拟机。命令:cd /root/app/hadoop-3.2.2/etc/hadoop 进入目录。

5.2.命令:vi hadoop-env.sh 修改 hadoop-env.sh 文件并保存。可以不管原配置文件,直接在末尾增加如下内容。

export JAVA_HOME=/root/app/jdk1.8.0_281
export HADOOP_HOME=/root/app/hadoop-3.2.2

export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

export HADOOP_PID_DIR=${HADOOP_HOME}/tmp
export HADOOP_LOG_DIR=${HADOOP_HOME}/logs

说明:_USER相关的设置如果不加,在启动 Hadoop 时会报找不到相关设置的错误,所以要加。

           _PID_DIR 和 _LOG_DIR 设置好后,如果没有相关目录,可以自己创建相关目录。

           HDFS_DATANODE_SECURE_USER 需要注释掉,打开在启动过程中会出错误。

           HDFS_NFS3_SECURE_USER 可以设置也可以不设置,在我们这种应用中没有影响。

5.3.命令:vi core-site.xml 修改 core-site.xml 文件并保存。内容如下。

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/root/app/hadoop-3.2.2/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoopmaster:9000</value>
    </property>
</configuration>

5.4.命令:vi hdfs-site.xml 修改 hdfs-site.xml 文件并保存。内容如下。

<configuration>
    <!-- dfs.namenode.http-address 不用设置,
         dfs.namenode.secondary.http-address 需要设置,并设置到 hadoopmaster,否则查看 NameNode会有问题 -->
    <!--<property>
        <name>dfs.namenode.http-address</name>
        <value>hadoopmaster:50070</value>
    </property>-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoopmaster:50090</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/root/app/hadoop-3.2.2/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/root/app/hadoop-3.2.2/tmp/dfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
</configuration>

5.5.命令:vi yarn-site.xml 修改 yarn-site.xml 文件并保存。内容如下。

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoopmaster</value>
    </property>
    <!-- 开启日志聚合,各节点日志会同步到master上,后会删除各节点日志 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
</configuration>

5.6.命令:vi mapred-site.xml 修改 mapred-site.xml 文件并保存。内容如下。

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoopmaster:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoopmaster:19888</value>
    </property>
    <!-- 以下设置为Mapreduce需要的配置,没有设置在Mapreduce计算时会报错 -->
    <property>
        <name>mapreduce.admin.user.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
</configuration>

5.7.命令:vi workers 修改 workers 文件并保存。将两个从机 hadoopslave1 和 hadoopslave2 替换原内容,如下。

hadoopslave1
hadoopslave2

5.8.将 hadoop-master 虚拟机上的 Hadoop 复制到 hadoop-slave1 和 hadoop-slave2 两台虚拟机上。

命令:scp -r /root/app/hadoop-3.2.2/ root@hadoopslave1:/root/app/ 将 hadoop-3.2.2 目录拷贝到 hadoop-slave1 虚拟机 /root/app/ 目录下。

命令:scp -r /root/app/hadoop-3.2.2/ root@hadoopslave2:/root/app/ 将 hadoop-3.2.2 目录拷贝到 hadoop-slave2 虚拟机 /root/app/ 目录下。

注意:第一次拷贝时会有如下提示,输入 yes 即可。由于我们尚未使用SSH免密,因此传输时需要输入虚拟机的登录密码。

六、设置SSH免密

6.1.远程登录 hadoop-master、hadoop-slave1、hadoop-slave2 三台虚拟机。

6.2.以 hadoop-master 虚拟机为例,创建公私钥。

进入 /root 目录。

注意:由于是新的虚拟机,也从来没有用过ssh,因此,直接做即可。如果以前做过,则需要先找到 .ssh/ 目录,并删除其内所有文件。

命令:ssh-keygen -t rsa 创建公钥、私钥,过程中一路回车即可。如下图,生成后的公私钥文件在 /root/.ssh/ 目录下。

进入 /root/.ssh/ 目录。

命令:mv id_rsa.pub id_rsa_master.pub 修改公钥文件名为 id_rsa_master.pub 。

命令:cat id_rsa_master.pub >> authorized_keys 将公钥写入 authorized_keys 文件。

同样,在 hadoop-slave1 和 hadoop-slave2 虚拟机上的 /root/ 目录下 执行上述命令,创建公私钥。在 hadoop-slave1 虚拟机上将 /root/.ssh/ 目录下的 id_rsa.pub 改名为 id_rsa_slave1.pub,并写入 authorized_keys 文件。 在 hadoop-slave2 虚拟机上将 /root/.ssh/ 目录下的 id_rsa.pub 改名为 id_rsa_slave2.pub,并写入 authorized_keys 文件。

6.3.将公钥传到相互虚拟机并写入 authorized_keys 文件。

6.3.1.将 hadoop-master 虚拟机的 id_rsa_master.pub 传到 hadoop-slave1 和 hadoop-slave2 虚拟机并写入 authorized_keys 文件。 

命令:scp id_rsa_master.pub root@hadoopslave1:/root/.ssh/

命令:scp id_rsa_master.pub root@hadoopslave2:/root/.ssh/

进入到 hadoop-slave1 虚拟机的 /root/.ssh/ 目录,通过命令:cat id_rsa_master.pub >> authorized_keys 将公钥写入 authorized_keys 文件。

进入到 hadoop-slave2 虚拟机的 /root/.ssh/ 目录,通过命令:cat id_rsa_master.pub >> authorized_keys 将公钥写入 authorized_keys 文件。

6.3.2.同 6.3.1. 将 hadoop-slave1 虚拟机的 id_rsa_slave1.pub 传到 hadoop-master 和 hadoop-slave2 虚拟机并将其写入各自的 authorized_keys 文件。 

6.3.3.同 6.3.1. 将 hadoop-slave2 虚拟机的 id_rsa_slave2.pub 传到 hadoop-master 和 hadoop-slave1 虚拟机并将其写入各自的 authorized_keys 文件。

七、启动Hadoop

7.1.首次使用HDFS,必须首先进行格式化。命令:hdfs namenode -format 。

7.2.启动Hadoop。

命令:start-dfs.sh
命令:start-yarn.sh
命令:mapred --daemon start historyserver

7.3.关闭Hadoop。

命令:stop-dfs.sh
命令:stop-yarn.sh
命令:mapred --daemon stop historyserver

7.4.查看启动是否成功。

命令:jps

hadoopmaster 存在如下进程

hadoopslave1 和 hadoopslave2 存在如下进程

7.5.打开浏览器,查看相关信息监控。

注意:需要在浏览器所在主机同 4.3. 添加 hosts,否则,页面中的链接点击会访问不了。Windows系统则改 C:\Windows\System32\drivers\etc\hosts 文件。

http://192.168.0.245:9870/ 查看 NameNode 监控。

http://192.168.0.245:19888/ 查看 MapReduce JobHistory Server 监控。

http://192.168.0.245:8088/ 查看 ResourceManager 监控。

八、测试 Mapreduce。

8.1.进入 /root/app/hadoop-3.2.2/share/hadoop/mapreduce/ 目录。下边以网上常用的两个示例来测试。

8.2.测试 PI 的计算。

命令:hadoop jar hadoop-mapreduce-examples-3.2.2.jar pi 10 10

8.3.测试 WordCount 统计单词出现数量。

创建目录 /root/app/mapreduce-test/ 目录,在其内创建文件 wordcounttestinput.txt。内容如下:

命令:hadoop fs -mkdir /tmp/input 在 HDFS 中创建目录。
注意:mkdir 时候要在 /tmp 下进行创建,其他目录会报错,猜测由于 hadoop.tmp.dir 设置到了 tmp 目录,但具体原因仍需要继续查。

命令:hadoop fs -put /root/app/mapreduce-test/wordcounttestinput.txt /tmp/input 将测试文件上传到 HDFS 的 /tmp/input/ 目录下。

命令:hadoop jar hadoop-mapreduce-examples-3.2.2.jar wordcount /tmp/input/ /tmp/output 进行计算。
注意:/tmp/input 是参与统计的目录下所有文件,/tmp/output 是结果所在的文件夹。

命令:hdfs dfs -ls /tmp/output 查询结果目录下的结果文件。

命令:hadoop fs -text /tmp/output/part-r-00000 显示结果文件内容。

8.4.http://192.168.0.245:19888/ 查看 MapReduce JobHistory Server 中刚刚两个任务的结果。

8.5.

、Hadoop 安装完成。通过不断尝试,按此配置可以使 Hadoop 正常启动、使用,但仍需要继续学习、了解细节,等后续有新的进展后,继续更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangt5952

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值