大数据基础设施搭建 - Hadoop

文章目录

一、下载安装包

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

二、上传压缩包

使用普通账号,上传到/opt/software目录

三、解压压缩包

使用普通账号

[hadoop@hadoop102 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/

四、配置环境变量

[hadoop@hadoop102 software]$ sudo vim /etc/profile.d/my_env.sh

新增内容:

#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

让新的环境变量PATH生效:

[hadoop@hadoop102 hadoop-3.1.3]$ source /etc/profile

五、测试Hadoop

5.1 测试hadoop命令

[hadoop@hadoop102 hadoop-3.1.3]$ hadoop version

5.2 测试wordcount案例

5.2.1 创建wordcount输入文本信息

[hadoop@hadoop102 hadoop-3.1.3]$ mkdir wcinput
[hadoop@hadoop102 hadoop-3.1.3]$ cd wcinput/
[hadoop@hadoop102 wcinput]$ vim word.txt

内容:

hadoop yarn
hadoop mapreduce
vimgo
jbl jbl jbl

5.2.2 执行程序

[hadoop@hadoop102 hadoop-3.1.3]$ cd /opt/module/hadoop-3.1.3
[hadoop@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput/ wcoutput/

5.2.3 查看结果

[hadoop@hadoop102 hadoop-3.1.3]$ cd wcoutput/
[hadoop@hadoop102 wcoutput]$ cat part-r-00000
hadoop	2
jbl	3
mapreduce	1
vimgo	1
yarn	1

六、分发压缩包到集群中其他机器

6.1 分发压缩包

[hadoop@hadoop102 module]$ cd /opt/software/
[hadoop@hadoop102 software]$ mytools_rsync hadoop-3.1.3.tar.gz

6.2 解压压缩包

同第三步骤

6.3 配置环境变量

同第四步骤

七、配置集群

有两种类型的配置文件:*-default.xml 和 *-site.xml。 *-site.xml 中的配置项覆盖 *-default.xml的相同配置项。

7.1 核心配置文件

core-default.xml:默认的核心Hadoop属性配置文件。该配置文件位于下面的JAR文件中:hadoop-common-x.x.x.jar

[hadoop@hadoop102 software]$ cd $HADOOP_HOME/etc/hadoop
[hadoop@hadoop102 hadoop]$ vim core-site.xml

新增内容:

	<!-- 指定NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop102:9820</value>
    </property>
    <!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>
    </property>

    <!-- 配置HDFS网页登录使用的静态用户为hadoop -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>hadoop</value>
    </property>

    <!-- 配置该hadoop用户(superUser)允许通过代理访问的主机节点 -->
    <property>
        <name>hadoop.proxyuser.hadoop.hosts</name>
        <value>*</value>
    </property>
    <!-- 配置该hadoop用户(superUser)允许通过代理用户所属组 -->
    <property>
        <name>hadoop.proxyuser.hadoop.groups</name>
        <value>*</value>
    </property>
    <!-- 配置该hadoop用户(superUser)允许通过代理的用户-->
    <property>
        <name>hadoop.proxyuser.hadoop.users</name>
        <value>*</value>
    </property>

说明:

fs.defaultFS:文件系统地址。可以是HDFS,也可以是ViewFS等其他文件系统。
hadoop.tmp.dir:默认值为/tmp/hadoop-${user.name}。比如跑MR时生成的临时路径本质上其实就是生成在它的下面,当然如果你不想也可以去更改 mapred-site.xml 文件。再比如,如果你不配置namenode和datanode的数据存储路径,那么默认情况下,存储路径会放在hadoop.tmp.dir所指路径下的dfs路径中。
hadoop.http.staticuser.user:默认值是dr.who。需要调整为启动HDFS的用户(普通用户/root),才能访问(增删文件/文件夹)WEB HDFS。
代理配置:hadoop.proxyuser.hadoop.hosts必须配,hadoop.proxyuser.hadoop.groups和hadoop.proxyuser.hadoop.users至少配置一个。如果不配置代理会有什么问题?????
hadoop.proxyuser.hadoop.hosts和hadoop.proxyuser.hadoop.users:本案例配置表示允许用户hadoop,在任意主机节点,代理任意用户。

7.2 HDFS配置文件

hdfs-default.xml:默认的HDFS属性配置文件。该配置文件位于下面的JAR文件中:hadoop-hdfs-x.x.x.jar

[hadoop@hadoop102 hadoop]$ vim hdfs-site.xml

新增内容:

	<!-- nn web端访问地址-->
	<property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop102:9870</value>
    </property>
	<!-- 2nn web端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:9868</value>
    </property>

7.3 YARN配置文件

yarn-default.xml:默认的YARN属性配置文件。该配置文件位于下面的JAR文件中:hadoop-yarn-common-x.x.x.jar

[hadoop@hadoop102 hadoop]$ vim yarn-site.xml

新增内容:

	<!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop103</value>
    </property>
    <!-- 环境变量的继承 -->
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
    <!-- yarn容器允许分配的最大最小内存 -->
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>512</value>
    </property>
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>4096</value>
    </property>
    <!-- yarn容器允许管理的物理内存大小 -->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>4096</value>
    </property>
    <!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>

说明:

yarn.nodemanager.env-whitelist:默认JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ
yarn.scheduler.minimum-allocation-mb:单位为MB

7.4 MapReduce配置文件

mapred-default.xml:默认的MapReduce属性配置文件。该配置文件位于下面的JAR文件中:hadoop-mapreduce-client-core-x.x.x.jar

[hadoop@hadoop102 hadoop]$ vim mapred-site.xml

新增内容:

	<!-- 指定MapReduce程序运行在Yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

说明:

mapreduce.framework.name 默认值为 local,设置为 yarn,让 MapReduce 程序运行 在 YARN 框架上。

7.5 分发配置文件

[hadoop@hadoop102 hadoop]$ mytools_rsync /opt/module/hadoop-3.1.3/etc/hadoop/

八、启动集群

8.1 编辑workers文件确定数据节点

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

[hadoop@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

内容:

hadoop102
hadoop103
hadoop104

同步到所有节点:

[hadoop@hadoop102 hadoop]$ mytools_rsync /opt/module/hadoop-3.1.3/etc/

8.2 启动集群

步骤1: 格式化NameNode(首次启动集群时)

注意:在NameNode所在节点(core-site.xml中配置的)执行命令

原因:先前在care_site.xml中配置了文件系统为HDFS,HDFS类似一块磁盘,初次使用硬盘需要格式化,让存储空间明白该按什么方式组织存储数据。

[hadoop@hadoop102 hadoop-3.1.3]$ hdfs namenode -format

看到下图样例代表格式化成功
在这里插入图片描述
在这里插入图片描述

步骤2:启动HDFS

注意:在NameNode所在节点执行命令

[hadoop@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh

步骤3:启动YARN

注意:在ResourceManager所在节点(yarn-site.xml中配置的)执行命令

[hadoop@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh

步骤4:测试WEB访问

(1)配置阿里云安全组

查看本机ip:百度搜索ip
配置阿里云安全组放开ip + 端口
配置本机hosts文件:用swichhosts配置

(2)浏览器访问

Web端查看HDFS的NameNode:http://hadoop102:9870
Web端查看YARN的ResourceManager:http://hadoop103:8088

九、测试集群

9.1 上传文件

上传小文件:

[hadoop@hadoop102 hadoop-3.1.3]$ hadoop fs -put /opt/module/hadoop-3.1.3/wcinput/word.txt /input

上传大文件:

[hadoop@hadoop102 hadoop-3.1.3]$ hadoop fs -put /opt/software/jdk-8u291-linux-x64.tar.gz /

9.2 查看文件

[hadoop@hadoop102 subdir0]$ cat /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-343847855-172.28.76.203-1700227787497/current/finalized/subdir0/subdir0/blk_1073741825

9.3 下载文件

[hadoop@hadoop102 software]$ cd /opt/software/test_tmp
[hadoop@hadoop102 test_tmp]$ hadoop fs -get /input ./

9.4 执行程序

[hadoop@hadoop102 software]$ cd /opt/module/hadoop-3.1.3/
[hadoop@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

查看执行结果(通过WEB页面下载执行结果文件):

配置安全组:放开9864端口
访问HDFS WEB下载文件

查看执行结果(在服务器上直接查看文件):

cat /opt/module/hadoop-3.1.3/data/xxx

十、配置历史服务器

10.1 修改配置文件

[hadoop@hadoop102 ~]$ cd /opt/module/hadoop-3.1.3/etc/hadoop/
[hadoop@hadoop102 hadoop]$ vim mapred-site.xml

新增内容:

    <!-- 历史服务器端地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop102:10020</value>
    </property>
    
    <!-- 历史服务器web端地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop102:19888</value>
    </property>

说明:

mapreduce.jobhistory.webapp.address:默认值是 0.0.0.0:19888

10.2 分发配置文件

[hadoop@hadoop102 hadoop]$ mytools_rsync mapred-site.xml

10.3 重启ResourceManager、NodeManager

因为修改了YARN相关的配置文件,必须重启服务重新加载配置文件,修改的配置文件内容才能生效。

[hadoop@hadoop103 hadoop]$ stop-yarn.sh
[hadoop@hadoop103 hadoop]$ start-yarn.sh

YARN重启后会丢失历史任务。这是因为yarn的任务管理是基于内存的,当我们重启项目时,内存会被清空,导致历史任务丢失。为了解决这个问题,我们可以将任务信息保存到磁盘上,以便重启后能够恢复任务。
参考:https://blog.51cto.com/u_16175490/6816056

10.4 启动/关闭历史服务器

--daemon 参数来启动守护进程(daemon)。守护进程是在后台运行的,通常脱离了终端的控制。

# 启动
[hadoop@hadoop102 hadoop]$ mapred --daemon start historyserver
# 关闭
/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver

10.5 配置阿里云安全组

放开19888端口

10.6 测试

(1)查看进程

[hadoop@hadoop102 hadoop]$ jps

(2)执行MR程序

由于历史任务丢失,需要重新执行一个MR程序,来测试历史服务器。
注意:先在WEB HDFS上删除output输出文件

[hadoop@hadoop102 hadoop]$ cd /opt/module/hadoop-3.1.3/
[hadoop@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

(3)WEB访问

访问:http://hadoop103:8088
点击历史任务History
http://hadoop102:19888/jobhistory

十一、配置日志的聚集

注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。

11.1 修改配置文件

[hadoop@hadoop102 hadoop-3.1.3]$ cd /opt/module/hadoop-3.1.3/etc/hadoop/
[hadoop@hadoop102 hadoop]$ vim yarn-site.xml

新增内容:

    <!-- 开启日志聚集功能 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!-- 设置日志聚集服务器地址 -->
    <property>  
        <name>yarn.log.server.url</name>  
        <value>http://hadoop102:19888/jobhistory/logs</value>
    </property>
    <!-- 设置日志保留时间为7天 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>

11.2 分发配置文件

[hadoop@hadoop102 hadoop]$ mytools_rsync yarn-site.xml

11.3 重启ResourceManager、NodeManager、HistoryServer

因为修改了YARN相关的配置文件,必须重启服务重新加载配置文件,修改的配置文件内容才能生效。此时内存中读取的配置文件yarn-site.xml和磁盘中的不一致,停止YARN会报WARNING!

[hadoop@hadoop103 hadoop]$ stop-yarn.sh
[hadoop@hadoop102 hadoop]$ mapred --daemon stop historyserver
[hadoop@hadoop103 hadoop]$ start-yarn.sh
[hadoop@hadoop102 hadoop]$ mapred --daemon start historyserver

11.4 配置阿里云安全组

放开8042端口

11.5 测试

(1)删除HDFS已经存在的输出文件

[hadoop@hadoop102 hadoop]$ hadoop fs -rm -r /output

(2)执行WordCount程序

[hadoop@hadoop102 hadoop]$ cd /opt/module/hadoop-3.1.3/
[hadoop@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

(3)查看日志

http://hadoop102:19888/jobhistory

在这里插入图片描述

十二、启动/停止集群

注意:重启集群后,任务执行历史记录会丢失!

12.1 启动

[hadoop@hadoop102 hadoop-3.1.3]$ /opt/module/hadoop-3.1.3/sbin/start-dfs.sh
[hadoop@hadoop103 hadoop]$ /opt/module/hadoop-3.1.3/sbin/start-yarn.sh
[hadoop@hadoop102 hadoop-3.1.3]$ /opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver

12.2 停止

[hadoop@hadoop102 hadoop-3.1.3]$ /opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver
[hadoop@hadoop103 hadoop]$ /opt/module/hadoop-3.1.3/sbin/stop-yarn.sh
[hadoop@hadoop102 hadoop-3.1.3]$ /opt/module/hadoop-3.1.3/sbin/stop-dfs.sh

12.3 启动/停止集群脚本(TODO)

十三、集群长时间运行后无法关闭问题

背景描述:集群运行几个月后,优化集群修改了YARN相关配置,需要重启YARN使配置生效,但是start-yarn.sh和stop-yarn.sh均失效。
原因:因为linux默认会30天清理一次/tmp临时文件,而集群配置文件hadoop-env.sh中的默认pid存储位置就在这里,这就造成了因集群长时间运行后,无法正常找到集群的pid
参考:https://blog.csdn.net/Li_G_yuan/article/details/126119873

[hadoop@hadoop102 hadoop]$ vim hadoop-env.sh

新增内容:

# Where pid files are stored.  /tmp by default.
#export HADOOP_PID_DIR=/tmp
export HADOOP_PID_DIR=/opt/module/hadoop-3.1.3/data/pid_dir

分发配置:

[hadoop@hadoop102 hadoop]$ mytools_rsync hadoop-env.sh

解决方案:
1、首先确保所有有关hadoop的任务全部关闭
2、使用jps查看集群的进程号
3、手动kill掉他们
4、修改hadoop-env.sh,制定pid保存在一个不会被清理的位置
5、pid的位置记得修改其写入的权限才可以
6、分发配置
7、重启集群即可

十四、解决YARN过多任务处于ACCEPTED状态

调大AM最大占用资源比例maximum-am-resource-percent默认0.1,即10%,调整为0.8
参考:https://www.cnblogs.com/guoyu1/p/17856685.html

[hadoop@hadoop102 hadoop]$ vim capacity-scheduler.xml

修改内容:

  <property>
    <name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
    <value>0.8</value>
    <description>
      Maximum percent of resources in the cluster which can be used to run
      application masters i.e. controls number of concurrent running
      applications.
    </description>
  </property>

分发配置文件后重启YARN

# 分发配置文件
[hadoop@hadoop102 hadoop]$ mytools_rsync capacity-scheduler.xml
# 重启YARN
[hadoop@hadoop103 hadoop]$ start-yarn.sh

Yarn web-ui界面
在这里插入图片描述

十五、配置YARN多队列

需求:新增flink队列,default队列资源额定容量为总资源的40%,最大容量为60%,flink队列资源额定容量为总资源的60%,最大容量为80%

15.1 修改配置文件capacity-scheduler.xml

[hadoop@hadoop102 hadoop]$ vim capacity-scheduler.xml

新增及修改内容

<!-- 指定多队列,增加flink队列 -->
<property>
    <name>yarn.scheduler.capacity.root.queues</name>
    <value>default,flink</value>
    <description>
      The queues at the this level (root is the root queue).
    </description>
</property>

<!-- 指定default队列资源额定容量为40%,默认100% -->
<property>
    <name>yarn.scheduler.capacity.root.default.capacity</name>
    <value>40</value>
</property>

<!-- 指定default队列资源最大容量为60%,默认100% -->
<property>
    <name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
    <value>60</value>
</property>

<!-- 指定flink队列的资源额定容量 -->
<property>
    <name>yarn.scheduler.capacity.root.flink.capacity</name>
    <value>60</value>
</property>

<!-- 保证用户可获取的资源不超过该队列的最大资源 -->
<property>
    <name>yarn.scheduler.capacity.root.flink.user-limit-factor</name>
    <value>1</value>
</property>

<!-- 指定flink队列的资源最大容量 -->
<property>
    <name>yarn.scheduler.capacity.root.flink.maximum-capacity</name>
    <value>80</value>
</property>

<!-- 启用flink队列 -->
<property>
    <name>yarn.scheduler.capacity.root.flink.state</name>
    <value>RUNNING</value>
</property>

<!-- 限定哪些Linux用户/用户组可向flink队列中提交应用程序 -->
<property>
    <name>yarn.scheduler.capacity.root.flink.acl_submit_applications</name>
    <value>*</value>
</property>

<!-- 为flink队列指定一个管理员,该管理员可控制该队列的所有应用程序,比如杀死任意一个应用程序等 -->
<property>
    <name>yarn.scheduler.capacity.root.flink.acl_administer_queue</name>
    <value>*</value>
</property>

<!-- 哪些用户有权配置提交任务优先级 -->
<property>
    <name>yarn.scheduler.capacity.root.flink.acl_application_max_priority</name>
    <value>*</value>
</property>

<!-- 队列中应用程序的最大生存期(单位为秒)。任何设置为小于等于0的值,表示不启用此功能。该配置是一个硬限制,当应用程序的运行时间超出该时间后将会被kill掉 -->
<property>
    <name>yarn.scheduler.capacity.root.flink.maximum-application-lifetime</name>
    <value>-1</value>
</property>

<!-- 队列中应用程序的默认生存期(单位为秒)。任何设置为小于等于0的值,表示不启用此功能。 -->
<property>
    <name>yarn.scheduler.capacity.root.flink.default-application-lifetime</name>
    <value>-1</value>
</property>

15.2 重启Yarn或者执行yarn rmadmin -refreshQueues刷新队列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值