在centos7上搭建hadoop大数据平台

目录

    • 一、安装搭建java环境
      • 1、安装方法
      • 2、查看是否已安装
      • 3、卸载
      • 4、安装
        • 4.1 检查 yum 中有没有 java1.8 包
        • 4.2 开始安装
      • 5、验证
    • 二、 Hadoop安装
      • 1、下载
      • 2、准备启动 Hadoop 集群
        • 2.1配置Hadoop守护进程的环境
        • 2.2配置系统环境变量
        • 2.3 配置etc/hadoop/core-site.xml文件
        • 2.4配置etc/hadoop/hdfs-site.xml文件
        • 2.5配置etc/hadoop/yarn-site.xml文件
        • 2.6配置etc/hadoop/capacity-scheduler.xml文件,配置容量调度器的队列
        • 2.7配置etc/hadoop/mapred-site.xml文件
      • 3、配置集群设备的ip
        • 3.1设置无密码 ssh
        • 3.2设置主机的hostname
        • 3.3配置集群主机ip
        • 3.4设置同步命令脚本
      • 4、启动 Hadoop 集群
      • 5、停止 Hadoop 集群
      • 6、web管理界面

首先准备三台装好centos7系统的服务器

一、安装搭建java环境

1、安装方法

CentOS8上使用 yum 直接安装,环境变量自动配置好

2、查看是否已安装

看到下面结果,说明已经安装配置 jdk

[root@localhost ~]# java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

3、卸载

查看系统是否自带 jdk

rpm -qa |grep java
rpm -qa |grep jdk
rpm -qa |grep gcj

如果有输出信息,批量卸载系统自带

rpm -qa | grep java | xargs rpm -e --nodeps

如果使用 yum 安装的 jdk,请使用下面命令卸载

yum -y remove java-1.8.0-openjdk-headless.x86_64

4、安装

4.1 检查 yum 中有没有 java1.8 包
yum list java-1.8*
4.2 开始安装

yum install java-1.8.0-openjdk* -y

5、验证

[root@localhost ~]# java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

二、 Hadoop安装

1、下载

要获得发行版,请从Apache 下载镜像之一下载最新的 稳定版本(3.3.3)。

##下载好上传
rz -y
选择文件上传
##解压
tar zxvf hadoop-3.3.3.tar.gz

2、准备启动 Hadoop 集群

也可以使用centos7是自带的java环境,不过还是建议大家自己安装java,自带的java环境可以通过下面的方式找到路径。

使用ls -lrt命令,可以找到自带java的路径向下深入。
 ls -lrt /usr/bin/java
 /usr/bin/java -> /etc/alternatives/java

##当得到到一个真实的路径,一般就是了。
ls -lrt /etc/alternatives/java
 /etc/alternatives/java -> /usr/lib/jvm/java-8-openjdk-amd64/jre/bin
 ## 设置为 Java 安装的根目录
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
2.1配置Hadoop守护进程的环境

在etc/hadoop/hadoop-env.sh配置中添加PID目录以及日志目录

export HADOOP_PID_DIR =/home/zxhy/hadoop-3.3.3/pid
export HADOOP_LOG_DIR =/home/zxhy/hadoop-3.3.3/log
2.2配置系统环境变量

在/etc/profile.d中的一个新建一个简单脚本hadoop.sh,内容如下:

#如果是自己安装的java修改为自己安装的路径
export JAVA_HOME=/opt/jdk1.8.0_202
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

export HADOOP_HOME=/home/zxhy/hadoop-3.3.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

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
2.3 配置etc/hadoop/core-site.xml文件





<configuration>

   <property>
   	<name>fs.defaultFSname>
   	<value>hdfs://hadoop01:19000value>
   property>

   <property>
   	<name>io.file.buffer.sizename>
   	<value>131072value>
   property>

   <property>
    <name>hadoop.http.staticuser.username>
    <value>rootvalue>
   property>

   <property>
    <name>hadoop.tmp.dirname>
    <value>/home/zxhy/hadoop-3.3.3/data/tmpvalue>
   property>
   <property>
   	<name>hadoop.proxyuser.root.hostsname>
   	<value>*value>
   property>
   <property>
   	<name>hadoop.proxyuser.root.groupsname>
   	<value>*value>
   property>
configuration>
2.4配置etc/hadoop/hdfs-site.xml文件

创建两个目录/home/zxhy/hadoop-3.3.3/data/name、/home/zxhy/hadoop-3.3.3/data/file用于存放日志和文件

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!-- NameNode 持久存储命名空间和事务日志的本地文件系统上的路径。 -->
  <property>
  	<name>dfs.namenode.name.dir</name>
  	<value>/home/zxhy/hadoop-3.3.3/data/name</value>
  </property>
<!-- DataNode的本地文件系统上应存储其块的路径的逗号分隔列表。 -->
  <property>
  	<name>dfs.datanode.data.dir</name>
  	<value>/home/zxhy/hadoop-3.3.3/data/file</value>
  </property>
</configuration>
2.5配置etc/hadoop/yarn-site.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
  	<name>yarn.resourcemanager.hostname</name>
  	<value>hadoop01</value>
  </property>
  <property>
  	<name>yarn.nodemanager.aux-services</name>
  	<value>mapreduce_shuffle</value>
  </property>
  <property>
  	<name>yarn.nodemanager.vmem-chech-enabled</name>
  	<value>false</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>
  <!-- 环境变量的继承 -->
  <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>
  <!-- 启用自动恢复 -->
  <property>
      <name>yarn.resourcemanager.recovery.enabled</name>
      <value>true</value>
  </property>
  <!-- 启用日志聚集功能 -->
  <property>
      <name>yarn.log-aggregation-enabled</name>
      <value>true</value>
  </property>
  <!-- 设置日志聚集服务器地址 -->
  <property>
      <name>yarn.log.server.url</name>
      <value>http://hadoop01:19888?jobhistory/logs</value>
  </property>
  <!-- 设置日志保留时间为7天 -->
  <property>
      <name>yarn.log-aggregation.retain-seconds</name>
      <value>604800</value>
  </property>
     <!-- 生产环境 自动检测硬件进行配置,默认false,配置true后后续资源配置参数将不起作用 -->
  <property>
      <name>yarn.nodemanager.resource.detect-hardware-capabilities</name>
      <value>false</value>
  </property>
  	<!-- 生产环境 设置nodemanager的内用内存,默认8G -->
  <property>
      <name>yarn.nodemanager.resource.memory-mb</name>
      <value>8192</value>
  </property>
   <!-- 生产环境 处理调度器的线程数量,默认50 ,一般根据集群所有cpu的核心数乘以台数*0.8进行配置-->
  <property>
      <name>yarn.resourcemanager.scheduler.client.thread-count</name>
      <value>50</value>
  </property>
       <!-- 生产环境 是否将虚拟核数当做cpu核数,默认是false,采用物理cpu核数-->
  <property>
      <name>yarn.nodenamager.resource.count-logical-processors-as-cores</name>
      <value>false</value>
  </property>
   <!-- 生产环境 上面参数如果为true的话,需要修改虚拟核数和物理核数的乘数,默认是1.0,也就是线程数和cpu个数的乘数,一般设置为2-->
  <property>
      <name>yarn.nodemanager.resource.pcores-vcores-multiplier</name>
      <value>1.0</value>
  </property>
   <!-- 生产环境 设置nodemanager的微系统保留多少内存 -->
  <property>
      <name>yarn.nodemanager.resource.system-reserved-memory-mb</name>
      <value>1024</value>
  </property>
   <!-- 生产环境 设置nodemanager的容器的最小内存默认1G -->
  <property>
      <name>yarn.scheduler.minimum-allocation-mb</name>
      <value>1024</value>
  </property>
   <!-- 生产环境 设置nodemanager的容器的最大内存,默认8g,不能超过机器的物理内存 -->
  <property>
      <name>yarn.scheduler.maximum-allocation-mb</name>
      <value>8196</value>
  </property>
   <!-- 生产环境 容器最小cpu核数,默认1个-->
  <property>
      <name>yarn.scheduler.minimum-allocation-vcores</name>
      <value>1</value>
  </property>
   <!-- 生产环境 容器最大cpu核数,默认4个-->
  <property>
      <name>yarn.scheduler.maximum-allocation-vcores</name>
      <value>4</value>
  </property>
    <!-- 生产环境 虚拟内存检测,默认打开true,建议关闭-->
  <property>
      <name>yarn.nodemanager.vmem-check-enabled</name>
      <value>false</value>
  </property>
     <!-- 生产环境 虚拟内存和物理内存的设置比例。默认2.1-->
  <property>
      <name>yarn.nodemanager.vmem-pmem-ratio</name>
      <value>2.1</value>
  </property>
 <!-- 生产环境 设置任务的优先级,默认为零,如果资源紧张的情况,希望某些任务能优先执行-->
  <property>
      <name>yarn.cluster.max-application-priority</name>
      <value>5</value>
  </property>
</configuration>
2.6配置etc/hadoop/capacity-scheduler.xml文件,配置容量调度器的队列

默认情况下,容量调度器只有一个default队列,可以在配置文件中添加其他队列,按照default队列的参数进行配置即可

 <property>
    <name>yarn.scheduler.capacity.root.queuesname>
    
    <value>default,hivevalue>
    <description>
      The queues at the this level (root is the root queue).
    description>
  property>
2.7配置etc/hadoop/mapred-site.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
	<property>
		<name>mapreduce.jobhistory.address</name>
		<value>hadoop01:10020</value>
	</property>
	<property>
		<name>mapreduce.jobhistory.intermediate-done-dir</name>
		<value>/jobhistory/tmp</value>
	</property>
	<property>
		<name>mapreduce.jobhistory.done-dir</name>
		<value>/jobhistory/done</value>
	</property>
</configuration>

3、配置集群设备的ip

3.1设置无密码 ssh

为用于运行 Hadoop 的帐户建立 ssh 信任(通过无密码 ssh 或其他方式,例如 Kerberos),在每个节点上执行下面命令

#现在检查您是否可以在没有密码的情况下 ssh 到 localhost:
$ ssh localhost
#如果没有密码就无法 ssh 到 localhost,请执行以下命令:

$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

把id_rsa.pub 文件通过scp复制到hadoop01的.ssh目录下,合并秘钥

#在第二个节点执行复制命令
scp /root/.ssh/id_rsa.pub root@hadoop01:$PWD/id_rsa.pub2
 #在第三个节点执行复制命令
scp /root/.ssh/id_rsa.pub root@hadoop01:$PWD/id_rsa.pub3
 #在第一个节点合并秘钥
cat id_rsa.pub >> authorized_keys
cat id_rsa.pub2 >> authorized_keys
cat id_rsa.pub3 >> authorized_keys
chmod 0600 ~/.ssh/authorized_keys
#然后把authorized_keys在复制到hadoop02和hadoop02上
scp authorized_keys root@hadoop02:$PWD
scp authorized_keys root@hadoop03:$PWD
#然后测试下用ssh能无密码连上其他节点不,如果不需要密码则成功。
ssh hadoop02

也可以使用命令直接复制公钥到其他服务器上

ssh-copy-id hadoop01
ssh-copy-id hadoop02
ssh-copy-id hadoop03

同样在其他两个机子上也执行同样的命令,就可以完成公钥的复制,这样其他两个机子就可以无密码访问其他两个服务器。

3.2设置主机的hostname

以三个节点为例,分别设置hostname为hadoop01、hadoop02、hadoop03

#修改每个机器的hostname
vi /etc/hostname
#修改为hadoop01
#修改每个机器的hosts
vi /etc/hosts
#修改为下面的ip,ip为每个节点的ip
192.168.1.251 hadoop01
192.168.1.250 hadoop02
192.168.1.249 hadoop03
3.3配置集群主机ip

列出您的etc/hadoop/workers文件中的所有工作人员主机名或 IP 地址,每行一个。帮助程序脚本(如下所述)将使用etc/hadoop/workers文件一次在多个主机上运行命令。它不用于任何基于 Java 的 Hadoop 配置。为了使用此功能,。

#修改每个机器的hostname
vi /etc/hadoop/workers
#修改为下面内容,每一行一个hostname
hadoop01
hadoop02
hadoop03
3.4设置同步命令脚本

在hadoop/bin目录下创建一个下xysnc的文件,编辑文件内容为下面内容,这个是方便服务器之间同步更改后的文件的。
使用方式是:xsync 文件/文件夹

 #!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if [ $pcount -lt 1 ]
then
   echo Not Enough Arguement!
   exit;
fi

#2. 遍历集群所有机器
#也可以采用:
#for host in hadoop{102..104};
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)
           echo pdir=$pdir
           
           #6. 获取当前文件的名称
           fname=$(basename $file)
           echo fname=$fname
           
           #7. 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)
           ssh $host "mkdir -p $pdir"
           
   		#8. 远程同步文件至$host主机的$USER用户的$pdir文件夹下
           rsync -av $pdir/$fname $USER@$host:$pdir
       else
           echo $file does not exists!
       fi
   done
done

4、启动 Hadoop 集群

要启动 Hadoop 集群,您需要同时启动 HDFS 和 YARN 集群。

#首次启动 HDFS 时,必须对其进行格式化。将新的分布式文件系统格式化为hdfs:
[hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format
在指定节点上使用以下命令启动 HDFS NameNode 作为hdfs:
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start namenode
#在每个指定节点上使用以下命令启动一个 HDFS DataNode 作为hdfs:
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start datanode
#使用以下命令启动 YARN,在指定的 ResourceManager 上以yarn运行:
[yarn]$ $HADOOP_HOME/bin/yarn --daemon start resourcemanager
#运行脚本以在每个指定主机上启动 NodeManager 作为yarn:
[yarn]$ $HADOOP_HOME/bin/yarn --daemon start nodemanager
#启动一个独立的 WebAppProxy 服务器。作为yarn在 WebAppProxy 服务器上运行。如果多个服务器与负载平衡一起使用,则应在每个服务器上运行:
[yarn]$ $HADOOP_HOME/bin/yarn --daemon start proxyserver
#使用以下命令启动 MapReduce JobHistory Server,在指定服务器上以mapred身份运行:
[mapred]$ $HADOOP_HOME/bin/mapred --daemon start historyserver

#前面我们配置了etc/hadoop/workers和 ssh 可信访问,则可以使用实用程序脚本启动所有 HDFS 进程。作为
[hdfs]$ $HADOOP_HOME/sbin/start-dfs.sh
[yarn]$ $HADOOP_HOME/sbin/start-yarn.sh

5、停止 Hadoop 集群

使用以下命令停止 NameNode,在指定的 NameNode 上以hdfs运行:
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon stop namenode
#在每个指定节点上使用以下命令停止一个 HDFS DataNode 作为hdfs:
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon stop datanode
#使用以下命令停止 YARN,在指定的 ResourceManager 上以yarn运行:
[yarn]$ $HADOOP_HOME/bin/yarn --daemon stop resourcemanager
#运行脚本以在每个指定主机上停止 NodeManager 作为yarn:
[yarn]$ $HADOOP_HOME/bin/yarn --daemon stop nodemanager
#停止一个独立的 WebAppProxy 服务器。作为yarn在 WebAppProxy 服务器上运行。如果多个服务器与负载平衡一起使用,则应在每个服务器上运行:
[yarn]$ $HADOOP_HOME/bin/yarn --daemon stop  proxyserver
#使用以下命令停止 MapReduce JobHistory Server,在指定服务器上以mapred身份运行:
[mapred]$ $HADOOP_HOME/bin/mapred --daemon stop historyserver

#前面我们配置了etc/hadoop/workers和 ssh 可信访问,则可以使用实用程序脚本启动所有 HDFS 进程。作为
[hdfs]$ $HADOOP_HOME/sbin/stop-dfs.sh
[yarn]$ $HADOOP_HOME/sbin/stop-yarn.sh

编写一个一键启动和停止脚本命名为myhadoop.sh,放到hadoop目录的sbin目录下。
使用方式为

#启动
./myhadoop.sh start
#停止
./myhadoop.sh stop

下面为脚本内容

#!/bin/bash

if [ $# -lt 1 ]
then
   echo "No Args Input..."
   exit ;
fi

this="${BASH_SOURCE-$0}"
bin=$(cd -P -- "$(dirname -- "${this}")" >/dev/null && pwd -P)

if [[ -n "${HADOOP_HOME}" ]]; then
 HADOOP_HOME_DIR="${HADOOP_HOME}"
else
 HADOOP_HOME_DIR="${bin}/../"
fi

case $1 in
"start")
       echo " =================== 启动 hadoop集群 ==================="

       echo " --------------- 启动 hdfs ---------------"
       ssh hadoop01 "${HADOOP_HOME_DIR}/sbin/start-dfs.sh"
       echo " --------------- 启动 yarn ---------------"
       ssh hadoop01 "${HADOOP_HOME_DIR}/sbin/start-yarn.sh"
       echo " --------------- 启动 historyserver ---------------"
       ssh hadoop01 "${HADOOP_HOME_DIR}/bin/mapred --daemon start historyserver"
;;
"stop")
       echo " =================== 关闭 hadoop集群 ==================="

       echo " --------------- 关闭 historyserver ---------------"
       ssh hadoop01 "${HADOOP_HOME_DIR}/bin/mapred --daemon stop historyserver"
       echo " --------------- 关闭 yarn ---------------"
       ssh hadoop01 "${HADOOP_HOME_DIR}/sbin/stop-yarn.sh"
       echo " --------------- 关闭 hdfs ---------------"
       ssh hadoop01 "${HADOOP_HOME_DIR}/sbin/stop-dfs.sh"
;;
*)
   echo "Input Args Error..."
;;
esac

jps的集群脚本,用jps脚本查看所有的机器进程是否启动

  #!/bin/bash

for host in hadoop01 hadoop02 hadoop03
do
	echo ============= $host =============
	ssh $host jps
done

因为yarn的启动需要hdfs退出安全模式后才可以,所以我们加入下面脚本到start-yarn.sh的最开始,当hdfs完全启动并且退出安全模式后,再启动yarn

  while true 
do
	monitor=`hdfs dfsadmin -safemode get`
	if [[ $monitor =~ "OFF" ]]
	then
		break
	else
		echo "hdfs Safe mode is ON ,please wait。"
	fi
	sleep 5
done

6、web管理界面

先把防火墙关闭了,否侧不能访问。

#关闭防火墙。
systemctl stop firewalld.service
#永久关闭防火墙。
systemctl disable firewalld.service

按照之前的设置访问web管理界面
名称节点
http://hadoop01:9870/ ,默认 HTTP 端口为 9870。
资源管理器
http://hadoop01:8088/ ,默认 HTTP 端口为 8088。
MapReduce JobHistory 服务器
http://hadoop01:19888/,默认 HTTP 端口为 19888。

你可能感兴趣的:(大数据,hadoop,大数据,java)