当前位置:   article > 正文

Hadoop在CentOS7上安装与集群搭建实践_centos搭建hadoop

centos搭建hadoop

前提条件(安装jdk、配置好静态IP、服务器名称hostsname)

安装epel-release 相当于一个软件仓库

yum install -y epel-release

一、下载

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

二、解压缩

  1. mkdir /opt/module
  2. tar -zxvf /opt/software/hadoop-3.3.5.tar.gz -C /opt/module/

三、配置环境变量

  1. cd /etc/profile.d/
  2. vim my_env.sh

内容如下:

  1. #JAVA_HOME
  2. export JAVA_HOME=/usr/local/java/jdk1.8.0_212
  3. export PATH=$PATH:$JAVA_HOME/bin
  4. #HADOOP_HOME
  5. export HADOOP_HOME=/opt/module/hadoop-3.3.5
  6. export PATH=$PATH:$HADOOP_HOME/bin
  7. export PATH=$PATH:$HADOOP_HOME/sbin

保存后刷新环境变量

source /etc/profile

四、检测是否安装成功

hadoop version

本地模式演示

  1. cd /opt/module/hadoop-3.3.5
  2. mkdir ./zyfinput
  3. cd zyfinput/
  4. vim word.txt

内容如下:

  1. zhangsan zhangsan
  2. lisi
  3. wangwu  wangwu
  4. zhaoliu
  5. xiaoqi
  6. huba

执行

 hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar wordcount zyfinput/ ./zyfoutput

此时会产生zyfoutput文件夹,用来保存执行结果

查看执行结果(每个单词的统计结果)

cat ./zyfoutput/part-r-00000

差异化拷贝hadoop(可不执行,作为扩充记录)

rsync -av /opt/module/hadoop-3.3.5/ root@hadoop104:/opt/module/hadoop-3.3.5/

在/usr/local/bin/目录下创建xsync.sh(用来将文件目录同步其他机器的脚本)

  1. cd /usr/local/bin/
  2. vim xsync.sh

内容如下:

  1. #!/bin/bash
  2. #1.判断参数个数
  3. if [ $# -lt 1 ]
  4. then
  5. echo Not Enough Arguement!
  6. exit;
  7. fi
  8. #2.遍历集群所有机器
  9. for host in hadoop102 hadoop103 hadoop104
  10. do
  11. echo ====================$host====================
  12. #3.遍历所有目录,挨个发送
  13. for file in $@
  14. do
  15. #4.判断文件是否存在
  16. if [ -e $file ]
  17. then
  18. #5.获取父目录
  19. pdir=$(cd -P $(dirname $file); pwd)
  20. #6.获取当前文件名称
  21. fname=$(basename $file)
  22. ssh $host "mkdir -p $pdir"
  23. rsync -av $pdir/$fname $host:$pdir
  24. else
  25. echo $file does not exists!
  26. fi
  27. done
  28. done

刷新环境变量,使得刚才创建的xsync.sh生效

  1. source /etc/profile
  2. chmod 777 xsync.sh

使用/xsync.sh命令,同步配置文件到hadoop103 hadoop104

xsync.sh /etc/profile.d/my_env.sh

在每台机器上刷新环境变量

source /etc/profile

配置免密登录其他机器

进入home(家)目录

cd ~

查看隐藏文件

ls -al

cd ./.ssh

生成公钥、私钥

ssh-keygen -t  rsa

拷贝公钥到其他服务器(hadoop103)

ssh-copy-id hadoop103

此时 hadoop2登录hadoop3就不需要密码了

五、hadoop集群搭建

前提条件(克隆三台【hadoop102/103/104】机器配置好hostname、固定ip、安装好jdk)

hostname、固定ip配置,可参看“centos虚拟机克隆配置.docx”文档

1、配置其他节点

拷贝102的hadoop到103节点、104节点(在hadoop102节点执行)

  1. scp -r /opt/module/hadoop-3.3.5/ root@hadoop103:/opt/module/
  2. scp -r /opt/module/hadoop-3.3.5/ root@hadoop104:/opt/module/

每台机器检查hadoop 是否安装成功

hadoop version

2、配置文件

都在/opt/module/hadoop-3.3.5/etc/hadoop目录下

2.1、核心配置文件 core-site.xml的配置
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4.        <!-- 指定NameNode的地址 -->
  5.        <property>
  6.               <name>fs.defaultFS</name>
  7.               <value>hdfs://hadoop102:8020</value>
  8.        </property>
  9.        <!-- 指定hadoop数据的存储目录  -->
  10.        <property>
  11.               <name>hadoop.tmp.dir</name>
  12.               <value>/opt/module/hadoop-3.3.5/data</value>
  13.        </property>
  14.        <!-- 配置HDFS网页登录使用的静态用户为 root -->
  15.        <property>
  16.               <name>hadoop.http.staticuser.user</name>
  17.               <value>root </value>
  18.        </property>
  19. </configuration>

2.2、HDFS配置文件 hdfs-site.xml 文件
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <!-- nn web 端访问地址 -->
  5. <property>
  6. <name>dfs.namenode.http-address</name>
  7. <value>hadoop102:9870</value>
  8. </property>
  9. <!-- 2nn web端访问地址 -->
  10. <property>
  11. <name>dfs.namenode.secondary.http-address</name>
  12. <value>hadoop104:9868</value>
  13. </property>
  14. </configuration>

2.3、配置yarn-site.xml文件

2.4、MapReduce配置文件 mapred-site.xml 如下

执行以下两句,输出的内容即为mapreduce.application.classpath的value内容

export HADOOP_CLASSPATH=$(hadoop classpath)

echo $HADOOP_CLASSPATH

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <!-- 指定MapReduce 程序运行在Yarn上 -->
  5. <property>
  6. <name>mapreduce.framework.name</name>
  7. <value>yarn</value>
  8. </property>
  9. <property>
  10. <name>yarn.app.mapreduce.am.env</name>
  11. <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  12. </property>
  13. <property>
  14. <name>mapreduce.map.env</name>
  15. <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  16. </property>
  17. <property>
  18. <name>mapreduce.reduce.env</name>
  19. <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  20. </property>
  21. <property>
  22. <name>mapreduce.application.classpath</name>
  23. <value>/opt/module/hadoop-3.3.5/etc/hadoop:/opt/module/hadoop-3.3.5/share/hadoop/common/lib/*:/opt/module/hadoop-3.3.5/share/hadoop/common/*:/opt/module/hadoop-3.3.5/share/hadoop/hdfs:/opt/module/hadoop-3.3.5/share/hadoop/hdfs/lib/*:/opt/module/hadoop-3.3.5/share/hadoop/hdfs/*:/opt/module/hadoop-3.3.5/share/hadoop/mapreduce/*:/opt/module/hadoop-3.3.5/share/hadoop/yarn:/opt/module/hadoop-3.3.5/share/hadoop/yarn/lib/*:/opt/module/hadoop-3.3.5/share/hadoop/yarn/*</value>
  24. </property>
  25. </configuration>

2.5、配置workers文件内容

hadoop102

hadoop103

hadoop104

3、在集群上分发配置好的Hadoop配置文件

xsync.sh /opt/module/hadoop-3.3.5/etc/hadoop/

去103和104查看文件分发情况

cat /optmodule/hadoop-3.3.5/etc/hadoop/core-site.xml

4、启动集群

hdfs namenode -format  (name格式化)

如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不大已有的数据。如果集群在运行过程中保持,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化)

初始化成功后,会多出一个data和logs文件夹

4.1、将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数

vim ./sbin/start-dfs.sh

vim ./sbin/stop-dfs.sh

在文件头部添加如下内容(否则启动时会报错)

  1. HDFS_DATANODE_USER=root
  2. HADOOP_SECURE_DN_USER=hdfs
  3. HDFS_NAMENODE_USER=root
  4. HDFS_SECONDARYNAMENODE_USER=root
  5. YARN_RESOURCEMANAGER_USER=root
  6. YARN_NODEMANAGER_USER=root

4.2、将start-yarn.sh,stop-yarn.sh两个文件顶部添加以下参数

vim ./sbin/start-yarn.sh

vim ./sbin/stop-yarn.sh

在文件头部添加如下内容(否则启动时会报错)

  1. YARN_RESOURCEMANAGER_USER=root
  2. HADOOP_SECURE_DN_USER=yarn
  3. YARN_NODEMANAGER_USER=root

4.3、同步到其他节点上(hadoop103、hadoop104)
  1. xsync.sh /opt/module/hadoop-3.3.5/sbin/start-dfs.sh
  2. xsync.sh /opt/module/hadoop-3.3.5/sbin/stop-dfs.sh
  3. xsync.sh /opt/module/hadoop-3.3.5/sbin/start-yarn.sh
  4. xsync.sh /opt/module/hadoop-3.3.5/sbin/stop-yarn.sh
4.4、启动HDFS(hadoop102节点上)
./sbin/start-dfs.sh

在hadoop102上 执行jps命令

在hadoop103上 执行jps命令

在hadoop104上 执行jps命令

4.5、在配置了ResourceManager的节点上(hadoop103)启动YARN

./sbin/start-yarn.sh

jps (hadoop103节点)

jps (hadoop102节点)

jps (hadoop104节点)

启动的节点要与下图对应上

Web端查看HDFS的NameNode

浏览器输入:http://192.168.154.102:9870/

Web端查看YARN的ResourceManager

浏览器输入:http://192.168.154.103:8088

5、集群测试

5.1、在hadoop102节点上执行(上传文件word到zyfinput文件夹下)
  1. hadoop fs -mkdir /zyfinput
  2. hadoop fs -put ./zyfinput/word.txt  /zyfinput

文件存储在/opt/module/hadoop-3.3.5/data/dfs/data/current/BP-929129054-192.168.154.102-1698241909747/current/finalized/subdir0/subdir0/ blk_1073741825

5.2、执行计算测试
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar wordcount /zyfinput /zyfoutput

执行过程中可看到进度

执行完毕后,可查看执行结果

六、异常处理

当在使用中发生错误,

  1. 先停掉进程 用stop-dfs.sh  stop-yarn.sh
  2. 删除集群中每个节点的data 和logs目录,

3、name格式化:hdfs namenode -format

4、再次启动

七、配置历史服务器

在mapred-site.xml文件中追加一下配置信息

vim ./etc/hadoop/mapred-site.xml

  1. <!-- 历史服务器地址 -->
  2. <property>
  3.          <name>mapreduce.jobhistory.address</name>
  4.          <value>hadoop102:10020</value>
  5. </property>
  6. <!-- 历史服务器web端地址 -->
  7. <property>
  8.          <name>mapreduce.jobhistory.webapp.address</name>
  9.          <value>hadoop102:19888</value>
  10. </property>

同步到其他节点

xsync.sh ./etc/hadoop/mapred-site.xml

在hadoop103节点上停掉yarn,然后重新启动后,用jps检查是否启动

./sbin/stop-yarn.sh

./sbin/start-yarn.sh

jps

在hadoop102节点上启动历史数据服务

./bin/mapred --daemon start historyserver

jps

多了个jobHistorySever

八、配置日志的聚集

在yarn-site.xml文件下添加如下配置

vim ./etc/hadoop/yarn-site.xml

同步到其他节点

xsync.sh ./etc/hadoop/yarn-site.xml

在hadoop102节点上停掉历史服务器

mapred --daemon stop historyserver

在hadoop103节点上停掉yarn后重新启动

  1. ./sbin/stop-yarn.sh
  2. ./sbin/start-yarn.sh

在hadoop102节点上启动历史服务器

mapred --daemon starthistoryserver

测试

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar wordcount /zyfinput /zyfoutput2

删除一个文件

  1. hadoop fs -rm /zyfinput/word.txt  
  2. hadoop fs -rm / zyfinput /*.txt

#删除目录和子文件

  1. hadoop fs -rm -r /zyfinput/
  2. hdfs dfs -rm -r /zyfoutput

九、单节点服务组件的启动/停止(配置ssh是前提

1、分别启动/停止HDFS组件

hdfs --daemon start/stop namenode/datanode/secondarynamenode

2、启动/停止 YARN

yarn --daemon start/stop resourcemanager/nodemanager

3、整体启动/停止HDFS (在hadoop102上启动)

./sbin/start-dfs.sh   ./sbin/stop-dfs.sh

4、整体启动/停止YARN(在hadoop103上启动)

./sbin/start-yarn.sh   ./sbin/stop-yarn.sh

十、hadoop 常用命令

hadoop fs 命令 等同于 hdfs dfs 命令

创建目录sanguo

hadoop fs -mkdir /sanguo

剪切上传(shuguo.txt上传到HDFS的sanguo目录)

hadoop fs -moveFromLocal ./test_sanguo/shuguo.txt /sanguo

拷贝上传(weiguo.txt上传到HDFS的sanguo目录)

  1.  hadoop fs -copyFromLocal ./test_sanguo/weiguo.txt /sanguo
  2.  hadoop fs -put ./test_sanguo/wuguo.txt /sanguo

内容追加(将本地的liubei.txt文件的内容追加到HDFS的shuguo.txt)

hdfs dfs -appendToFile ./test_sanguo/liubei.txt /sanguo/shuguo.txt

下载(将HDFS的wuguo.txt 下载到test_sanguo目录下)

hadoop fs -copyToLocal /sanguo/wuguo.txt ./test_sanguo

下载可更改名称(将HDFS的wuguo.txt 下载到test_sanguo目录下,名字为shuguo2.txt)

hadoop fs -get /sanguo/wuguo.txt ./test_sanguo/shuguo2.txt

查看HDFS列表(sanguo目录的列表)

hdfs dfs -ls /sanguo

查看HDFS根列表

hadoop fs -ls /

显示内容(显示HDFS上wuguo.txt的内容)

hadoop fs -cat /sanguo/wuguo.txt

修改权限(修改shuguo.txt未666)

hadoop fs -chmod 666 /sanguo/shuguo.txt

修改文件所属权限(-chgrp -chmod  -chown)与linux文件系统操作一样

hadoop fs -chown zyf:zyf /sanguo/shuguo.txt

创建路径 (创建jinguo目录)

hadoop fs -mkdir /jinguo

从HDFS一个路径拷贝到HDFS的另一个路径(从sanguo拷贝到jinguo)

hadoop fs -cp /sanguo/shuguo.txt /jinguo

从一个路径移动到HDFS的另一个路径(从sanguo目录把wuguo.txt移动到jinguo目录)

hadoop fs -mv /sanguo/wuguo.txt /jinguo

显示一个HDFS文件的末尾1kb的数据

hdfs dfs -tail /sanguo/weiguo.txt

删除文件

  1. hdfs dfs -rm /jingguo/*
  2. hdfs dfs -rm /jingguo/shuguo.txt

删除目录及目录里面的内容(递归删除)

hadoop fs -rm -r /jingguo

统计目录的大小信息

  1. hdfs dfs -du  /sanguo
  2. hdfs dfs -du -h /sanguo
  3. hdfs dfs -du -s -h /sanguo

设置HDFS中文件的副本数量(只有节点数量增加到5时,才可以设置5)

haoop fs -setrep 5 /shanguo/wuguo.txt

附代码实践包:https://download.csdn.net/download/zyf1203/89588796

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/1002441
推荐阅读
相关标签
  

闽ICP备14008679号