hadoop安装及简单的使用
hadoop安装及简单的使用一、hadoop运行环境搭建二、hadoop 目录结构三、hadoop 本地模式四、hadoop 伪分布式模式五、伪分布式 YARN 运行六、伪分布式启动历史服务器七、伪分布式配置日志的聚集八、hadoop 集群模式一、hadoop运行环境搭建1.环境准备安装 hadoop 需要使用 Linux 系统,同时需要熟练使用 Linux 章节的全部命令,如果没有 Linux
hadoop安装及简单的使用
一、hadoop运行环境搭建
1.环境准备
安装 hadoop 需要使用 Linux 系统,同时需要熟练使用 Linux 章节的全部命令,如果没有 Linux 基础建议先学习 Linux 基础。
相关工具下载地址:
2.安装 centos7 虚拟机并配置远程访问和静态 ip,配置完成后通过命令 systemctl restart network 重启网络服务。
BOOTPROTO='static'
IPADDR='192.168.88.130'
NETMASK='255.255.255.0'
GATEWAY='192.168.88.2'
DNS1='192.168.88.2'
BOOTPROTO:获取 ip 方式,设置为静态的,该值默认是 dhcp(动态分配 ip)
IPADDR:ip 地址
NETMASK:掩码
GATEWAY:网关,由虚拟机的虚拟网络编辑器中提供。
DNS1:域名解析服务器,一般由网关提供。
如果想要配置虚拟机的网段,可以在 VM 的>编辑>虚拟网络配置
修改主机名(主机名与ip对应) vi /etc/hostname
hadoop130
修改主机映射,在 /etc/hosts 文件加入如下映射
192.168.88.130 hadoop130
192.168.88.131 hadoop131
192.168.88.132 hadoop132
192.168.88.133 hadoop133
192.168.88.134 hadoop134
为了方便后面从 hdfs 上下载文件,windows 本地 host 文件也加入上面映射
3.禁用防火墙
systemctl stop firewalld #停止firewall
systemctl disable firewalld #禁止firewall开机启动
4.创建目录 /opt/module/,将 hadoop-2.7.2.tar.gz ,jdk-8u144-linux-x64.tar.gz 上传到该目录并解压。
5.配置 jdk 和 hadoop 的环境变量
vi /etc/profile
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
source /etc/profile
6.hadoop version 和 java -version 判断环境变量是否可用。
二、hadoop 目录结构
- bin 启动程序目录:存放对 Hadoop 相关服务(HDFS,YARN)进行操作的脚本
- etc 配置目录:Hadoop 的配置文件目录,存放 Hadoop 的配置文件
- lib 依赖目录:存放 Hadoop 的本地库(对数据进行压缩解压缩功能)
- sbin 超级管理员目录:存放启动或停止 Hadoop 相关服务的脚本
- share 官方案例目录:存放 Hadoop 的依赖jar包、文档、和官方案例
三、hadoop 本地模式
简单的解压和配置环境变量就可以运行本地模式,下面我们运行官方 WordCount 案例
在 hadoop-2.7.2 目录下创建 input 文件夹
将 hadoop 的 xml 配置文件复制到 input 文件夹
cp etc/hadoop/*.xml input
执行 share 目录下的 MapReduce 程序 wordcount
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput
查看输出目录 output 结果
cat wcoutput/*
四、hadoop 伪分布式模式
1.配置:hadoop-env.sh
修改里面的 JAVA_HOME
echo $JAVA_HOME
/opt/module/jdk1.8.0_144
export JAVA_HOME=/opt/module/jdk1.8.0_144
2.配置:core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
3.配置:hdfs-site.xml
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
4.格式化 NameNode(第一次启动时格式化,以后就不要总格式化,如果真的需要格式化,删除 /opt/module/hadoop-2.7.2/data 目录后再格式化)
bin/hdfs namenode -format
5.启动 NameNode
sbin/hadoop-daemon.sh start namenode
6.启动 DataNode
sbin/hadoop-daemon.sh start datanode
7.查看集群是否启动成功
jps
13586 NameNode
13668 DataNode
13786 Jps
注意:jps 是 JDK 中的命令,不是 Linux 命令。不安装 JDK 不能使用 jps
在 windows 的 web 端查看 HDFS 文件系统,建议配置 host 文件使其能正常映射到 centos7,如果不配置,后面将无法通过浏览器获取上传的分布式文件系统中的文件。
http://hadoop101:50070/dfshealth.html#tab-overview
测试案例
(a)在 HDFS 文件系统上创建一个 input 文件夹
bin/hdfs dfs -mkdir -p /user/input
(b)将测试文件里面全部的内容上传到文件系统上
bin/hdfs dfs -put input/* /user/input/
(c)查看上传的文件是否正确
bin/hdfs dfs -ls /user/input/
bin/hdfs dfs -cat /user/input/*
(d)运行MapReduce程序
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/input/ /user/output
(e)查看输出结果 命令行查看:
bin/hdfs dfs -cat /user/output/*
(f)将测试文件内容下载到本地
hdfs dfs -get /user/output/part-r-00000 ./wcoutput/
(g)删除输出结果
hdfs dfs -rm -r /user/output
练习:
1.安装 centos 后安装配置 hadoop 本地模式,并截图提交操作步骤。
五、伪分布式 YARN 运行
YARN 是一个资源管理、任务调度的框架,主要包含三大模块:ResourceManager(RM)、 NodeManager(NM)、ApplicationMaster(AM)。 ResourceManager 负责所有资源的监控、分配和管理; ApplicationMaster 负责每一个具体应用程序的调度和协调; NodeManager 负责每一个节点的维护。 对于所有的 applications,RM 拥有绝对的控制权和对资源的分配权。而每个 AM 则会和 RM 协商资源,同时和 NodeManager 通信来执行和监控 task。
1.配置:yarn-env.sh
修改 JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
2.配置 yarn-site.xml
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop101</value>
</property>
3.配置 mapred-env.sh
修改 JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
4.配置: (对 mapred-site.xml.template 重新命名为) mapred-site.xml
<!-- 指定MR运行在YARN上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
5.启动 yarn
启动前必须保证 NameNode 和 DataNode 已经启动
启动 ResourceManager
sbin/yarn-daemon.sh start resourcemanager
启动 NodeManager
sbin/yarn-daemon.sh start nodemanager
YARN的浏览器页面查看
http://hadoop101:8088/cluster
(a)删除文件系统上的 output 文件
bin/hdfs dfs -rm -R /user/output
(b)执行 MapReduce 程序
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/input /user/output
(c)在浏览器查看运行过程
(d)查看运行结果
bin/hdfs dfs -cat /user/output/*
yarn的运行流程
- 用户向 YARN 中提交应用程序,其中包括 ApplicationMaster 程序、启动 ApplicationMaster 的命令、用户程序等。
- ResourceManager 为该应用程序分配第一个 Container,并与对应的 Node-Manager 通信,要求它在这个 Container 中启动应用程序的 ApplicationMaster。
- ApplicationMaster 首先向 ResourceManager 注册,这样用户可以直接通过 ResourceManager 查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。
ApplicationMaster 采用轮询的方式通过 RPC 协议向 ResourceManager 申请和领取资源。 - 一旦 ApplicationMaster 申请到资源后,便与对应的 NodeManager 通信,要求它启动任务。
- NodeManager 为任务设置好运行环境(包括环境变量、JAR 包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
- 各个任务通过某个 RPC 协议向 ApplicationMaster 汇报自己的状态和进度,以让 ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。 在应用程序运行过程中,用户可随时通过 RPC 向 ApplicationMaster 查询应用程序的当前运行状态。
- 应用程序运行完成后,ApplicationMaster 向 ResourceManager 注销并关闭自己。
六、伪分布式启动历史服务器
为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
1.配置:mapred-site.xml
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop101:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop101:19888</value>
</property>
2.启动历史服务器
sbin/mr-jobhistory-daemon.sh start historyserver
3.查看历史服务器是否启动
jps
4.web 查看 JobHistory
http://hadoop101:19888/jobhistory
七、伪分布式配置日志的聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上。 日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和 HistoryManager。
开启日志聚集功能具体步骤如下:
1.配置 yarn-site.xml
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
2.关闭 NodeManager 、ResourceManager 和 HistoryManager
sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager
sbin/mr-jobhistory-daemon.sh stop historyserver
3.启动 NodeManager 、ResourceManager和 HistoryManager
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
sbin/mr-jobhistory-daemon.sh start historyserver
4.删除 HDFS 上已经存在的输出文件
bin/hdfs dfs -rm -R /user/output
5.执行 WordCount 程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/input /user/output
6.查看日志
http://hadoop101:19888/jobhistory
八、hadoop 集群模式
1.scp(secure copy)安全拷贝
scp 定义: scp 可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)
基本语法
scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
案例实操
(a)在 hadoop102 上,将 hadoop102 中 /opt/module 目录下的软件拷贝到 hadoop103,hadoop104 上。
scp -r /opt/module root@hadoop102:/opt/module
(b)将 hadoop102 中 /etc/profile 文件拷贝到hadoop103,hadoop104
配置环境变量
vi /etc/profile
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
source /etc/profile
注意:拷贝过来的配置文件别忘了 source 一下 /etc/profile
2.rsync 远程同步工具
rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。 rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。如果 centos 没有安装,使用 yum install -y rsync 安装。
基本语法
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
选项参数说明
选项 功能
-r 递归
-v 显示复制过程
-l 拷贝符号连接
案例实操
(a)把hadoop102机器上的/opt/software目录同步到hadoop103服务器的root用户下的/opt/目录
rsync -rvl /opt/software/ root@hadoop102:/opt/software
xsync 集群分发脚本
需求:循环复制文件到所有节点的相同目录下
在/usr/local/bin目录下,创建 xsync 文件 chmod 777 xsync
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount == 0)); then
echo no args;
exit;
fi #结束 if
#2 获取文件名称
p1=$1
fname = `basename $p1`
echo fname = $fname
#3 获取上级目录到绝对路径
pdir = `cd -P $(dirname $p1); pwd`
echo pdir = $pdir
#4 循环
for((host = 103; host < 105; host++)); do
echo ------------------- hadoop$host --------------
rsync -rvl $pdir/$fname root@hadoop$host:$pdir
done
3.集群规划与配置
(1)配置 core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop131:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
(2)配置 hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
(3)配置 hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop133:50090</value>
</property>
(4)配置yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
(5)配置 yarn-site.xml
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop132</value>
</property>
(6)配置 mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
(7)配置mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<!-- 指定MR运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(8)将配置好的131分发文件到132,133
xsync /opt/module/hadoop-2.7.2/
如果集群是第一次启动,需要格式化 NameNode
hadoop namenode -format
(9)配置集群启动的主机
vi /opt/module/hadoop-2.7.2/etc/hadoop/slaves
hadoop102
hadoop103
hadoop104
(10)SSH无密登录配置
一个 ssh 可以远程多个系统,在输入密码的情况下可以彼此访问,而 hadoop 群起时就需要免密登录,那就得将彼此间生成的密钥对存入对方的授权库中。
生成公钥和私钥
ssh-keygen -t rsa
ssh-copy-id hadoop131
ssh-copy-id hadoop132
ssh-copy-id hadoop133
注意:自己登录自己也要密码,所以也要把将公钥拷贝到自己身上。
在 131 上群起 hadoop 集群
start-dfs.sh
在 132 上启动 yarn
start-yarn.sh
分别到 132,133 上使用 jps 命令查看启动的是否与表格规划一致
web 查看 http://hadoop104:50090/status.html
停止只需要在对应启动的服务器上执行对应的 stop-dfs.sh 和 stop-yarn.sh
更多推荐
所有评论(0)