HADOOP安装与集群简要配置

前提你已经安装了虚拟机!

虚拟机有openjdk,需要完全卸载!!!
检查下自带的jdk
命令:
rpm -qa |grep java
rpm -qa |grep jdk
rpm -qa |grep gcj
如果没有输出信息表示没有安装。
如果安装了可以使用rpm -qa | grep java | xargs rpm -e --nodeps 批量卸载所有带有Java的文件 这句命令的关键字是java

更多请访问:https://blog.csdn.net/jimuka_liu/article/details/82784313

(安装Java,前去官网下载文件 https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html)
请注意:你选择的Jdk版本要对应你的Hadoop,并且请注意选择适合你Linux系统的版本,推荐rmp版本,安装简单
安装后找Java真实路径:https://blog.csdn.net/u013991521/article/details/78292136
在这里插入图片描述

(将 Hadoop安装至/usr/local/中,可自行选择, hadoop文件去官方下载即可 https://hadoop.apache.org/releases.html,请对应Linux系统)
tar -zxf hadoop-3.2.2.tar.gz -C /usr/local
(去查看是否解压完成)
cd /usr/local/
(设置变量,Java路径请对应自己的安装路径)
vi /usr/local/hadoop-3.2.2/etc/hadoop/hadoop-env.sh

export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.x86_64
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
(设置节点,(虚拟机分配的IP))
vi /etc/hosts
192.168.1.75 namenode (填写当前节点,代表自身)
192.168.1.76 datanode1 (填写其它节点,代表他人)

vi /usr/local/hadoop-3.2.2/etc/hadoop/workers
(设置环境变量)
vi /etc/profile
export PATH=$PATH:/usr/local/hadoop-3.2.2/bin/
(刷新文件)
source /etc/profile
(修改机器名称)
hostnamectl set-hostname namenode (虚拟机名称,与节点名称相连)
(重启)
init 6
(配置文件,namenode是本节点名称,对应本节点IP,节点名称要连续,最好不要有特殊字符)
vi /usr/local/hadoop-3.2.2/etc/hadoop/core-site.xml

<configuration>
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://namenode:9000</value>
	</property>
	<property>
		<name>hadoop.proxyuser.root.hosts</name>
		<value>*</value>
	</property>
	<property>
		<name>hadoop.proxyuser.root.groups</name>
		<value>*</value>
	</property>
</configuration>

vi /usr/local/hadoop-3.2.2/etc/hadoop/hdfs-site.xml
(/usr/local/hadoop-3.2.2/data/hdfs 存放hdfs 文件的路径,新建或让其启动时创建)

<configuration>
	<property>
		<name>dfs.replication</name>
		<value>1</value>
	</property>
	<property>
		<name>dfs.datanode.data.dir</name>
		<value>/usr/local/hadoop-3.2.2/data/hdfs</value>
	</property>
</configuration>
<configuration>
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
	<property>
		<name>mapreduce.application.classpath</name> 
		<value>
		$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*
		</value>
	</property>
</configuration>

vi /usr/local/hadoop-3.2.2/etc/hadoop/mapred-site.xml

关于mapred-site.xml,$ HADOOP_MAPRED_HOME可以换成安装的绝对路径或者$ {HADOOP_HOME}
也可借鉴:https://blog.csdn.net/qq_36318271/article/details/89339974
主要是防止运行jar任务失败!

vi /usr/local/hadoop-3.2.2/etc/hadoop/yarn-site.xml

<configuration>
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</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>
</configuration>

(多节点时加入)

	<property>
                <name>yarn.resourcemanager.address</name>
                <value>namenode:8032</value>
        </property>
        <property>
                <name>yarn.resourcemanager.scheduler.address</name>
                <value>namenode:8030</value>
        </property>
        <property>
                <name>yarn.resourcemanager.resource-tracker.address</name>
                <value>namenode:8031</value>
        </property>

(hdfs格式化,用于清除原有节点信息)
hdfs namenode -format

(启动进程,在安装目录下:/usr/local/hadoop-3.2.2/ )
sbin/start-dfs.sh
sbin/start-yarn.sh

sbin/start-all.sh
(启动后jps查看进程)
13643 DataNode
14380 Jps
13486 NameNode
如果没有启动则去查看日志(hadoop-3.2.2/logs/和你有问题节点对应!!log)
(添加访问端口)
firewall-cmd --permanent --add-port=9870/tcp
firewall-cmd --permanent --add-port=8088/tcp
firewall-cmd --reload
(访问虚拟机地址)
http://192.168.1.75:9870/
http://192.168.1.75:8088/

(测试)
hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/root
hdfs dfs -mkdir /input
hdfs dfs -put etc/hadoop/.xml /input
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar grep /input /output ‘dfs[a-z.]+’
hdfs dfs -get /output ./output
cat ./output/

hdfs dfs -mkdir /data
hdfs dfs -put README.txt /data
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar wordcount /data /output2
(hadoop 命令要么用绝对路径,要么到其安装目录下接上该jar目录)

要离开安全模式,需要满足以下条件:
1)达到副本数量要求的block比例满足要求;
2)可用的datanode节点数满足配置的数量要求;
3) 1、2 两个条件满足后维持的时间达到配置的要求。

在这里笔者是等了几分钟后还是处于安全模式,就采用的命令强制退出的安全模式~

hdfs dfsadmin -safemode get //查看状态
hdfs dfsadmin -safemode enter //进入安全模式
hdfs dfsadmin -safemode leave //退出安全模式
hdfs dfsadmin -safemode forceExit //进行强制关闭

出现:
Call From hadoop3/192.168.91.132 to hadoop1:9000 failed on connection exception。

开放指定端口
firewall-cmd --zone=public --add-port=1935/tcp --permanent
命令含义:
–zone #作用域
–add-port=1935/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效

telent 安装:https://blog.csdn.net/doubleqinyan/article/details/80492421
telnet ip port 检验端口有没有开放

netstat -tlpn 查看端口开放给谁了

netstat -ntulp |grep 1935 //查看所有1935端口使用情况

如果开放给了127.0.0.1,则修改 /etc/hosts 删除有关localhost记录
并检查 core-site.xml 是否配置正确,记得关闭防火墙(直接关闭不在开启)
目前运行的规则,使用iptables -L
关闭所有虚拟机防火墙(完全关闭服务)
systemctl status firewalld查看是否启动
systemctl stop firewalld
systemctl disable firewalld.service

删除新增节点 data/ 与 logs/ 再 hdfs namenode -format

详情:https://blog.csdn.net/u011170921/article/details/80437937

用户权限问题:(配置是选定的拥有者和登陆者没对上)
错误:Permission denied: user=Hadoop, access=READ_EXECUTE, inode="/tmp":root:supergroup:drwx------
可修改 hadoop-env.sh (或修改自己的登陆用户)
export HDFS_NAMENODE_USER=xxx
export HDFS_DATANODE_USER=xxx
export HDFS_SECONDARYNAMENODE_USER=xxx
export YARN_RESOURCEMANAGER_USER=xxx
export YARN_NODEMANAGER_USER=xxx

或:vi core-site.xml

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

再不济就开放全部权限(不做权限检查)

<!-- 不做权限检查 --> 
<property>
         <name>dfs.permissions.enabled</name>
         <value>false</value>
</property>

集群配置

主节点:

进入安装目录:cd /usr/local/hadoop-3.2.2/

vim core-site.xml

<configuration> 
    <!-- 指定 NameNode 的地址 --> 
    <property> 
        <name>fs.defaultFS</name> 
        <value>hdfs://namenode:8020</value> 
    </property> 
 
    <!-- 指定 hadoop 数据的存储目录 --> 
    <property> 
        <name>hadoop.tmp.dir</name> 
        <value>/opt/module/hadoop-3.2.2/data</value> 
    </property> 
    
    <!-- 配置 HDFS 网页登录使用的静态用户为 root--> 
   <property>   
        <name>hadoop.http.staticuser.user</name>  
        <value>root</value>   
   </property>  
</configuration> 

vim hdfs-site.xml

<configuration> 
  <!-- NameNode web 端访问地址--> 
  <property> 
        <name>dfs.namenode.http-address</name> 
        <value>namenode:9870</value> 
    </property> 
  <!-- SecondaryNameNode web 端访问地址--> 
    <property> 
        <name>dfs.namenode.secondary.http-address</name> 
        <value>datanode1:9868</value> 
    </property> 
</configuration>

vim yarn-site.xml

<configuration> 
    <!-- 指定 MR 走 shuffle --> 
    <property> 
        <name>yarn.nodemanager.aux-services</name> 
        <value>mapreduce_shuffle</value> 
    </property> 
 
    <!-- 指定 ResourceManager 的地址--> 
    <property> 
        <name>yarn.resourcemanager.hostname</name> 
        <value>datanode1</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> 
</configuration> 

vim mapred-site.xml

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

关于mapred-site.xml, H A D O O P M A P R E D H O M E 可 以 换 成 安 装 的 绝 对 路 径 或 者 HADOOP_MAPRED_HOME可以换成安装的绝对路径或者 HADOOPMAPREDHOME{HADOOP_HOME}
也可借鉴:https://blog.csdn.net/qq_36318271/article/details/89339974

分别配置好上述文件,hadoop102的所有配置文件均配置完了。
但我们需要将这个配置文件分发给hadoop103,hadoop104

4 ) 在集群上分发配置好的 Hadoop 配置文件
[leokadia@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.2.2/etc/hadoop/

5 )去 103 和 104 上 查看文件分发情况
[leokadia@hadoop103 ~]$ cat /opt/module/hadoop-3.2.2/etc/hadoop/core-site.xml
[leokadia@hadoop104 ~]$ cat /opt/module/hadoop-3.2.2/etc/hadoop/core-site.xml

刚才已经把集群都配置完毕了,现在需要启动集群
6) 配置 workers
在启动集群前需要配置workers
[leokadia@hadoop102 hadoop]$ vim /opt/module/hadoop-3.2.2/etc/hadoop/workers
在该文件中增加如下内容:(有几个节点就配置几个主机名称)
hadoop102
hadoop103
hadoop104

同步所有节点配置文件
[leokadia@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.2.2/etc

启动集群:
关闭所有虚拟机防火墙
systemctl stop firewalld
systemctl disable firewalld.service
(1)初始化(注意:只有第一次的时候才需要)
如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode(注意:格式化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式化。)

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

相当于将整个记账本清空,重新开始记录
初始化完毕后,源路径(/opt/module/hadoop-3.2.2/)就多了两个路径data合logs

在主节点:start-dfs.sh (hadoop102)
ResourceManager 的节点 :start-yarn.sh (hadoop103)

集群基本测试
(1)上传文件到集群
➢ 上传小文件
[leokadia@hadoop102 ~]$ hadoop fs -mkdir /input
➢ 上传大文件
[leokadia@hadoop102 ~]$ hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz /

出现:
Call From hadoop3/192.168.91.132 to hadoop1:9000 failed on connection exception。
开放指定端口
firewall-cmd --zone=public --add-port=1935/tcp --permanent
命令含义:
–zone #作用域
–add-port=1935/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效

telnet ip port 检验端口有没有开放

netstat -tlpn 查看端口开放给谁了

netstat -ntulp |grep 1935 //查看所有1935端口使用情况

如果开放给了127.0.0.1,则修改 /etc/hosts 删除有关localhost记录
并检查 core-site.xml 是否配置正确,记得关闭防火墙(直接关闭不在开启)
目前运行的规则,使用iptables -L
关闭所有虚拟机防火墙(完全关闭服务)
systemctl status firewalld查看是否启动
systemctl start firewalld
systemctl stop firewalld
systemctl disable firewalld.service

删除新增节点 data/ 与 logs/ 再 hdfs namenode -format(无效则删除所有节点)

在尝试使用hdfs的命令时,例如出现mkdir: Cannot create directory xxxx. Name node is in safe mode.是因为:
在NameNode节点启动的时候,HDFS首先会进入安全模式,DataNode在启动的时候会向NameNode汇报block等状态,直到等整个系统进入到安全标准时,HDFS会自动离开安全模式
系统什么时候才离开安全模式,需要满足哪些条件?当收到来自datanode的状态报告后,namenode根据配置,确定 1)可用的block占总数的比例、2)可用的数据节点数量符合要求之后,离开安全模式。如果有必要,也可以通过命令强制离开安全模式。

要离开安全模式,需要满足以下条件:
1)达到副本数量要求的block比例满足要求;
2)可用的datanode节点数满足配置的数量要求;
3) 1、2 两个条件满足后维持的时间达到配置的要求。

在这里笔者是等了几分钟后还是处于安全模式,就采用的命令强制退出的安全模式~

hdfs dfsadmin -safemode get //查看状态
hdfs dfsadmin -safemode enter //进入安全模式
hdfs dfsadmin -safemode leave //退出安全模式
hdfs dfsadmin -safemode forceExit //进行强制关闭

以上不行则:
datanode丢失的block达到一定的比例(1-dfs.safemode.threshold.pct),则系统会一直处于安全模式状态即只读状态。dfs.safemode.threshold.pct(缺省值0.999f)表示HDFS启动的时候,如果DataNode上报的block个数达到了元数据记录的block个数的0.999倍才可以离开安全模式,否则一直是这种只读模式。如果设为1则HDFS永远是处于SafeMode。有两个方法离开这种安全式模式
1.修改dfs.safemode.threshold.pct为一个比较小的值,缺省是0.999。
:在hdfs-site.xml中设置安全阀值属性

<property>
  <name>dfs.safemode.threshold.pct</name>
  <value>0.999f</value>
  <description>
    Specifies the percentage of blocks that should satisfy
    the minimal replication requirement defined by dfs.replication.min.
    Values less than or equal to 0 mean not to wait for any particular
    percentage of blocks before exiting safemode.
    Values greater than 1 will make safe mode permanent.
  </description>
</property>

配置历史服务器
为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:

1 ) 配置 mapred-site.xml
只需在mapred-site.xml配置文件加两个参数:
[leokadia@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.address配置在hadoop102:10020内部通讯端口
一个服务器内部代码之间的通讯用的是hadoop102:10020
e.g. hadoop102和103之间的通讯

历史服务器对外暴露的接口

   <name>mapreduce.jobhistory.webapp.address</name> 
   <value>hadoop102:19888</value> 

用户查看集群里面的历史服务,从web页面查看,这个端口用的hadoop102:19888

配置好后分发配置(xsync脚本在最下方给出,可自行编辑,或使用 rsync ,用法也在下放给出)
[leokadia@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml

启用历史服务器
[leokadia@hadoop102 hadoop]$ mapred --daemon start historyserver

查看历史服务器是否启动
jps
xxxx JobHistoryServer

配置日志的聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和HistoryServer。
开启日志聚集功能具体步骤如下:

1 ) 配置 yarn-site.xml
[leokadia@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> 

2 ) 分发配置(xsync脚本在最下方给出,可自行编辑,或使用 rsync ,用法也在下放给出)
[leokadia@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml

注意:分发完毕后一定要重启一下yarn

3 ) 关闭 NodeManager 、ResourceManager 和 HistoryServer
关闭HistoryServer
[leokadia@hadoop103 hadoop-3.1.3]$ mapred --daemon stop historyserver
关闭 NodeManager 、ResourceManager
[leokadia@hadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh

因为更改了yarn的配置,所以需要重启yarn
HDFS配置没有修改,所以不需要重启HDFS

4 ) 启动 NodeManager 、ResourceManage 和 HistoryServer
启动 NodeManager 、ResourceManage
[leokadia@hadoop103 ~]$ start-yarn.sh

启动 HistoryServer
[leokadia@hadoop102 ~]$ mapred --daemon start historyserver

5 ) 删除 HDFS 上已经存在的 输出 文件
[leokadia@hadoop102 ~]$ hadoop fs -rm -r /output

6 ) 执行 WordCount 程序
[leokadia@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

7 ) 查看日志
(1)历史服务器地址
http://hadoop102:19888/jobhistory

集群时间同步
如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;
如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。
详情请见:https://blog.csdn.net/m0_46413065/article/details/116378004

常见错误解决:https://blog.csdn.net/m0_46413065/article/details/116378297

补充知识

scp 源文件 目标
#推文件
[root@web02 ~]# scp /root/1.txt root@10.0.0.41:/root/
#这里注意写上文件的绝对路径
#推目录
#推目录要加上-r选项
[root@web02 ~]# scp -r /root/123 root@10.0.0.41:/tmp
#拉目录
#把10.0.0.41机器上面的/etc目录拷贝到本地/tmp下
[root@web02 ~]# scp -r root@10.0.0.41:/etc /tmp
#拉文件
#把10.0.0.41机器上面的/tmp/yum.log文件拷贝到web02机器下的/root目录下
[root@web02 ~]# scp root@10.0.0.41:/tmp/yum.log /root/
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
#rsync的传输模式
#本地传输相当于cp命令
#传输目录加-a选项,把/root目录下的123目录传输到/tmp目录下
[root@web02 ~]# rsync -a /root/123 /tmp
#把/tmp/yum.log文件传输到/root目录下
[root@web02 ~]# rsync /tmp/yum.log /root
#远程传输相当于scp命令
#把本地的/root/123目录传输到10.0.0.41机器的/tmp目录下
[root@web02 ~]# rsync -a /root/123 root@10.0.0.41:/tmp/
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
xsync 集群分发 脚本

#!/bin/bash 

#1. 判断参数个数 
#判断参数是否小于1
if [ $# -lt 1 ]   
then 
    echo Not Enough Arguement! 
    exit; 
fi 

#2. 遍历集群所有机器 
#对102,103,104 节点(节点名称对应IP写入/etc/hosts 中)都进行分发
for host in hadoop102 hadoop103 hadoop104 
do 
   echo ====================  $host  ==================== 
   #3. 遍历所有目录,挨个发送 
   for file in $@ 
   do 

        #4. 判断文件是否存在 
        if [ -e $file ] 
            then 
                #5. 获取父目录 
                pdir=$(cd -P $(dirname $file); pwd) 
                
                #6. 获取当前文件的名称 
                fname=$(basename $file) 
                ssh $host "mkdir -p $pdir" 
                rsync -av $pdir/$fname $host:$pdir 
            # 如果不存在
            else 
                echo $file does not exists! 
        fi 
    done 
done

修改脚本 xsync 具有执行权限:
chmod +x xsync
测试脚本:
xsync /root/bin

(前提要在/etc/hosts写入对应的节点ip和名称!!!)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值