写点什么

Linux 部署 hadoop2.7.7 集群

作者:程序员欣宸
  • 2022 年 8 月 15 日
    广东
  • 本文字数:4877 字

    阅读完需:约 16 分钟

Linux部署hadoop2.7.7集群

欢迎访问我的 GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos


  • 在 CentOS7 环境下,hadoop2.7.7 集群部署的实战的步骤如下:


  1. 机器规划;

  2. Linux 设置;

  3. 创建用户和用户组

  4. SSH 免密码设置;

  5. 文件下载;

  6. Java 设置;

  7. 创建 hadoop 要用到的文件夹;

  8. hadoop 设置;

  9. 格式化 hdfs;

  10. 启动 hadoop;

  11. 验证 hadoop;


  • 接下来就逐步开始吧;

机器规划

  • 本次实战用到了三台 CentOS7 的机器,身份信息如下所示:


Linux 设置(三台电脑都要做)

  • 修改文件/etc/hostname ,将三台电脑的内容分别改为 node0、node1、node2;

  • 修改文件/etc/hosts ,在尾部增加以下三行内容:


192.168.119.163 node0192.168.119.164 node1192.168.119.165 node2
复制代码


  • 关闭防火墙,并禁止启动:


systemctl stop firewalld.service && systemctl disable firewalld.service
复制代码


  • 关闭 SELINUX,打开文件/etc/selinux/config,找到 SELINUX 的配置,改为 SELINUX=disabled;

创建用户和用户组

  • 执行以下命令创建用户和用户组:


groupadd hadoop && useradd -d /home/hadoop -g hadoop -m hadoop
复制代码


  • 创建完账号后记得用命令 passwd 初始化 hadoop 账号的密码;

SSH 免密码设置

改用 hadoop 账号登录

  • 后面在三台机器上的所有操作,都是用 hadoop 账号进行的,不再使用 root 账号;

文件下载

  • 将 JDK 安装文件 jdk-8u191-linux-x64.tar.gz 下载到 hadoop 账号的家目录下;

  • 将 hadoop 安装文件 hadoop-2.7.7.tar.gz 下载到 hadoop 账号的家目录下;

  • 下载完毕后,家目录下的内容如下所示:


[hadoop@node0 ~]$ ls ~hadoop-2.7.7.tar.gz  jdk-8u191-linux-x64.tar.gz
复制代码

JDK 设置(三台电脑都要做)

  • 解压 jdk-8u191-linux-x64.tar.gz 文件:


tar -zxvf ~/jdk-8u191-linux-x64.tar.gz
复制代码


  • 打开文件~/.bash_profile ,在尾部追加以下内容:


export JAVA_HOME=/home/hadoop/jdk1.8.0_191export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=${JAVA_HOME}/bin:$PATH
复制代码


  • 执行命令 source ~/.bash_profile 使得 JDK 设置生效;v 执行命令 java -version 确认设置成功:


[hadoop@node0 ~]$ java -versionjava version "1.8.0_191"Java(TM) SE Runtime Environment (build 1.8.0_191-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
复制代码

创建 hadoop 要用到的文件夹(三台电脑都要做)

  • 创建文件夹,后面 hadoop 会用到:


mkdir -p ~/work/tmp/dfs/name && mkdir -p ~/work/tmp/dfs/data
复制代码

hadoop 设置

  • 以 hadoop 账号登录 node0;

  • 解压 hadoop 安装包:


tar -zxvf hadoop-2.7.7.tar.gz
复制代码


  • 进入目录~/hadoop-2.7.7/etc/hadoop

  • 依次编辑 hadoop-env.sh、mapred-env.sh、yarn-env.sh 这三个文件,确保它们的内容中都有 JAVA_HOME 的正确配置,如下:


export JAVA_HOME=/home/hadoop/jdk1.8.0_191
复制代码


  • 编辑 core-site.xml 文件,找到 configuration 节点,改成以下内容:


<configuration>  <property>    <name>fs.defaultFS</name>    <value>hdfs://node0:8020</value>  </property>  <property>    <name>hadoop.tmp.dir</name>    <value>/home/hadoop/work/tmp</value>  </property>  <property>    <name>dfs.namenode.name.dir</name>    <value>file://${hadoop.tmp.dir}/dfs/name</value>  </property>  <property>    <name>dfs.datanode.data.dir</name>    <value>file://${hadoop.tmp.dir}/dfs/data</value>  </property></configuration>
复制代码


  • 编辑 hdfs-site.xml 文件,找到 configuration 节点,改成以下内容,把 node2 配置成 sendary namenode:


<configuration>  <property>    <name>dfs.namenode.secondary.http-address</name>    <value>node2:50090</value>  </property></configuration>
复制代码


  • 编辑 slaves 文件,删除里面的"localhost",增加两行内容:


node1node2
复制代码


  • 编辑 yarn-site.xml 文件,找到 configuration 节点,改成以下内容:


<configuration>  <property>    <name>yarn.nodemanager.aux-services</name>    <value>mapreduce_shuffle</value>  </property>  <property>    <name>yarn.resourcemanager.hostname</name>    <value>node0</value>  </property>  <property>    <name>yarn.log-aggregation-enable</name>    <value>true</value>  </property>  <property>    <name>yarn.log-aggregation.retain-seconds</name>    <value>106800</value>  </property></configuration>
复制代码


  • 将文件 mapred-site.xml.template 改名为 mapred-site.xml:


mv mapred-site.xml.template mapred-site.xml
复制代码


  • 编辑 mapred-site.xml 文件,找到 configuration 节点,改成以下内容:


<configuration>  <property>    <name>mapreduce.framework.name</name>    <value>yarn</value>  </property>  <property>    <name>mapreduce.jobhistory.address</name>    <value>node0:10020</value>  </property>  <property>    <name>mapreduce.jobhistory.webapp.address</name>    <value>node0:19888</value>  </property></configuration>
复制代码


  • 将整个 hadoop-2.7.7 目录同步到 node1 的家目录:


scp -r ~/hadoop-2.7.7 hadoop@node1:~/
复制代码


  • 将整个 hadoop-2.7.7 目录同步到 node2 的家目录:


scp -r ~/hadoop-2.7.7 hadoop@node2:~/
复制代码

格式化 hdfs

  • 在 node0 执行以下命令格式化 hdfs:


~/hadoop-2.7.7/bin/hdfs namenode -format
复制代码

启动 hadoop

  • node0 机器执行以下命令,启动 hdfs:


~/hadoop-2.7.7/sbin/start-dfs.sh
复制代码


  • node0 机器执行以下命令,启动 yarn:


~/hadoop-2.7.7/sbin/start-yarn.sh
复制代码


  • node0 机器执行以下命令,启动 ResourceManager:


~/hadoop-2.7.7/sbin/yarn-daemon.sh start resourcemanager
复制代码


  • node0 机器执行以下命令,启动日志服务:


~/hadoop-2.7.7/sbin/mr-jobhistory-daemon.sh start historyserver
复制代码


  • 启动成功后,在 node0 执行 jps 命令查看 java 进程,如下:


[hadoop@node0 ~]$ jps3253 JobHistoryServer2647 NameNode3449 Jps2941 ResourceManager
复制代码


  • 在 node1 执行 jps 命令查看 java 进程,如下:


[hadoop@node1 ~]$ jps2176 DataNode2292 NodeManager2516 Jps
复制代码


  • 在 node2 执行 jps 命令查看 java 进程,如下:


[hadoop@node2 ~]$ jps1991 DataNode2439 Jps2090 SecondaryNameNode2174 NodeManager
复制代码


  • 至此,hadoop 启动成功;

验证 hadoop

  • 下面运行一次经典的 WorkCount 程序来检查 hadoop 工作是否正常:

  • 以 hadoop 账号登录 node0,在家目录创建文件 test.txt,内容如下:


hadoop mapreduce hivehbase spark stormsqoop hadoop hivespark hadoop
复制代码


  • 在 hdfs 上创建一个文件夹:


~/hadoop-2.7.7/bin/hdfs dfs -mkdir /input
复制代码


  • 将 test.txt 文件上传的 hdfs 的/input 目录下:


~/hadoop-2.7.7/bin/hdfs dfs -put ~/test.txt /input
复制代码


  • 直接运行 hadoop 安装包中自带的 workcount 程序:


~/hadoop-2.7.7/bin/yarn \jar ~/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar \wordcount \/input/test.txt \/output
复制代码


  • 控制台输出如下:


[hadoop@node0 ~]$ ~/hadoop-2.7.7/bin/yarn \> jar ~/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar \> wordcount \> /input/test.txt \> /output19/02/08 14:34:28 INFO client.RMProxy: Connecting to ResourceManager at node1/192.168.119.164:803219/02/08 14:34:29 INFO input.FileInputFormat: Total input paths to process : 119/02/08 14:34:29 INFO mapreduce.JobSubmitter: number of splits:119/02/08 14:34:29 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1549606965916_000119/02/08 14:34:30 INFO impl.YarnClientImpl: Submitted application application_1549606965916_000119/02/08 14:34:30 INFO mapreduce.Job: The url to track the job: http://node1:8088/proxy/application_1549606965916_0001/19/02/08 14:34:30 INFO mapreduce.Job: Running job: job_1549606965916_000119/02/08 14:34:36 INFO mapreduce.Job: Job job_1549606965916_0001 running in uber mode : false19/02/08 14:34:36 INFO mapreduce.Job:  map 0% reduce 0%19/02/08 14:34:41 INFO mapreduce.Job:  map 100% reduce 0%19/02/08 14:34:46 INFO mapreduce.Job:  map 100% reduce 100%19/02/08 14:34:46 INFO mapreduce.Job: Job job_1549606965916_0001 completed successfully19/02/08 14:34:46 INFO mapreduce.Job: Counters: 49    File System Counters        FILE: Number of bytes read=94        FILE: Number of bytes written=245525        FILE: Number of read operations=0        FILE: Number of large read operations=0        FILE: Number of write operations=0        HDFS: Number of bytes read=168        HDFS: Number of bytes written=60        HDFS: Number of read operations=6        HDFS: Number of large read operations=0        HDFS: Number of write operations=2    Job Counters         Launched map tasks=1        Launched reduce tasks=1        Data-local map tasks=1        Total time spent by all maps in occupied slots (ms)=2958        Total time spent by all reduces in occupied slots (ms)=1953        Total time spent by all map tasks (ms)=2958        Total time spent by all reduce tasks (ms)=1953        Total vcore-milliseconds taken by all map tasks=2958        Total vcore-milliseconds taken by all reduce tasks=1953        Total megabyte-milliseconds taken by all map tasks=3028992        Total megabyte-milliseconds taken by all reduce tasks=1999872    Map-Reduce Framework        Map input records=4        Map output records=11        Map output bytes=115        Map output materialized bytes=94        Input split bytes=97        Combine input records=11        Combine output records=7        Reduce input groups=7        Reduce shuffle bytes=94        Reduce input records=7        Reduce output records=7        Spilled Records=14        Shuffled Maps =1        Failed Shuffles=0        Merged Map outputs=1        GC time elapsed (ms)=93        CPU time spent (ms)=1060        Physical memory (bytes) snapshot=430956544        Virtual memory (bytes) snapshot=4203192320        Total committed heap usage (bytes)=285212672    Shuffle Errors        BAD_ID=0        CONNECTION=0        IO_ERROR=0        WRONG_LENGTH=0        WRONG_MAP=0        WRONG_REDUCE=0    File Input Format Counters         Bytes Read=71    File Output Format Counters         Bytes Written=60
复制代码


  • 查看输出结果:


~/hadoop-2.7.7/bin/hdfs dfs -ls /output
复制代码


  • 可见 hdfs 的/output 目录下,有两个文件:


[hadoop@node0 ~]$ ~/hadoop-2.7.7/bin/hdfs dfs -ls /outputFound 2 items-rw-r--r--   3 hadoop supergroup          0 2019-02-08 14:34 /output/_SUCCESS-rw-r--r--   3 hadoop supergroup         60 2019-02-08 14:34 /output/part-r-00000
复制代码


  • 看一下文件 part-r-00000 的内容:


[hadoop@node0 ~]$ ~/hadoop-2.7.7/bin/hdfs dfs -cat /output/part-r-00000hadoop  3hbase  1hive  2mapreduce  1spark  2sqoop  1storm  1
复制代码


  • 可见 WorkCount 计算成功,结果符合预期;

  • hdfs 网页如下图,可以看到文件信息,地址:http://192.168.119.163:50070


  • yarn 的网页如下图,可以看到任务信息,地址:http://192.168.119.163:8088


  • 至此,hadoop2.7.7 集群搭建和验证完毕,希望在您搭建环境时能给您提供一些参考;

欢迎关注 InfoQ:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...


发布于: 刚刚阅读数: 4
用户头像

搜索"程序员欣宸",一起畅游Java宇宙 2018.04.19 加入

前腾讯、前阿里员工,从事Java后台工作,对Docker和Kubernetes充满热爱,所有文章均为作者原创,个人Github:https://github.com/zq2599/blog_demos

评论

发布
暂无评论
Linux部署hadoop2.7.7集群_hadoop_程序员欣宸_InfoQ写作社区