Linux下Hadoop环境搭建学习
总体参考:https://gitbook.cn/books/5954c9600326c7705af8a92a/index.html
下面是简要记录与留痕
虚拟机准备
1.VMware安装
下载地址:https://my.vmware.com/cn/web/vmware/details?downloadGroup=WKST-1415-WIN&productId=686&rPId=28937
安装参考:https://blog.csdn.net/qq_40950957/article/details/80467513
2.CentOS7安装
下载地址:http://mirrors.aliyun.com/centos/7/isos/x86_64/
3.Linux网络配置
1)配置IP、子网掩码、网关
因为NAT里设置网段为100.x,所以这台机器可以设置为192.168.100.10网关和NAT一致,为192.168.100.2
vi /etc/sysconfig/network-scripts/ifcfg-ens33
2)配置DNS
【DNS 是域名系统 (Domain Name System) 的缩写,简单的说,我们要访问百度,然后在浏览器中输入百度的地址就可以访问百度的网站了。】
vi /etc/resolv.conf
nameserver 202.106.196.115
到这里
ping www.baidu.com #此命令应该可以ping通
3)永久修改hostname
vi /etc/sysconfig/network
NETWORKING=yes #使用网络
HOSTNAME=bigdata-senior01.thank.com #设置主机名
4)配置host
vi /etc/hosts
192.168.100.10 bigdata-senior01.thank.com
5)防火墙设置
firewall-cmd --state
service firewalld start
service firewalld stop
6) 重启网络
systemctl restart network.service
7)重启虚拟机
shutdown -r now
reboot
环境准备
1).JDK安装
下载地址:
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
WinSCP上传到usr/java目录
解压 :tar -zxvf jdk-8u144-linux-x64.tar.gz
配置:
vi etc/profie
环境变量生效:source etc/profile
Hadoop部署模式
hadoop部署模式有:本地模式、伪分布模式、完全分布模式及HA完全分布模式。
hadoop集群是基于master/slave模式,Namenode和Jobtracker属于master,Datenode和Tasktracker属于slqve,master只有一个,而slave有多个。
本地模式
最简单的模式,所有模块都运行在一个JVM进程中,使用本地文件系统,而不是HDFA,本地模式主要用于本地开发过程中的运行调试。下载hadoop安装包不用任何设置,默认就是本地模式。
hadoop包下载:
https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.0.3/hadoop-3.0.3.tar.gz
DEMO:使用本地文件系统和本地MapReduce运行器来统计各个单词出现的次数
1)输入文件:存放单词
/usr/hadoop/localhadoop/data/wc.input
2)运行hadoop自带的MapReduce的demo
[hadoop-3.0.0]# ] bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar wordcount ../data/wc.input output
3)输出结果:_SUCCESS表示成功;part-r-00000统计结果
伪分布模式
伪分布式模式下,hadoop将所有进程运行于同一台主机上,但此时Hadoop将使用分布式文件系统,而且各jobs也是由JobTracker服务管理的独立进程。同时,由于伪分布式的hadoop集群只有一个节点,因此HDFS的块复制将限制为单个副本,其secondary-master和slave也都将运行于本地主机。此种模式除了并非真正意义的分布式之外,其程序执行逻辑完全类似于完全分布式,因此,常用于开发人员测试程序执行。
hadoop的配置共四种级别:集群、进程、作业和单独操作,前两类由集群管理员负责配置,后面的两类则属于程序员的工作范畴。
hadoop的配置文件位于conf目录中,其中的core-site.xml、mapred-site.xml和hdfs-site.xml三个配置文件最为关键。core-site.xml用于配置hadoop集群的特性,它作用于全部进程及客户端,mapred-site.xml配置mapreduce集群的工作属性,hdfs-site.xml配置hdfs集群的工作属性。
另外还有三个配置文件需要留意。hadoop-env.sh是Hadoop的多个脚本执行时source的配置信息,其用于为Hadoop指定运行时使用的JDK、各进程的JDK属性、PID文件及日志文件的保存目录等。masters则用于指定辅助名称节点(SecondaryNameNode)的主机名或主机地址,slaves用于指定各从服务器(TaskTracker或DataNode)的主机名或主机地址。对伪分布式的Hadoop集群来讲,这些节点均为本机。
DEMO
1)创建一个名字为hadoop的普通用户
useradd hadoop
passwd hadoop
给hadoop用户sudo权限(sudo命令是以系统管理员的身份执行命令)
vi /etc/sudoers
root ALL=(ALL) ALL
hadoop ALL=(root) NOPASSWD:ALL
切换到hadoop用户
su - hadoop
创建目录
sudo mkdir fakehadoop
指定所有者(不然一直得带着sudo执行命令):将fakehadoop文件夹及子目录的权限和组均改为hadoop用户
sudo chown -R hadoop:hadoop fakehadoop
【注意区分chmod && chown】
复制文件
cp -r ../localhadoop/hadoop-3.0.3 ./
2)配置
配置hadoop环境变量
vi etc/profile
export HADOOP_HOME=/usr/hadoop/fakehadoop/hadoop-3.0.3
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
source /etc/profile 配置生效
echo $HADOOP_HOME
配置hadoop-env.sh, mapred-env.sh, yarn-env.sh文件的JAVA_HOME参数
vi ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201
【G跳到文本末尾;gg跳到文本第一行】
配置core-site.xml:需要创建临时目录
配置、格式化、启动HDFS
配置hdfs-site.xml:配置HDFS存储时的备份数量,因为这里是伪分布式环境只有一个节点,所以设置为1。
格式化HDFS:对HDFS这个分布式文件系统中的DataNode进行分块,统计所有分块后的初始元数据存储在NameNode中
hdfs namenode -format
格式化成功标志:core-site.xml里hadoop.tmp.dir指定目录有dfs目录
启动NameNode
sbin/hadoop-daemon.sh start namenode
【命令行满屏,上面的内容看不到,可以shift+pgup】
启动DataNode
sbin/hadoop-daemon.sh start datanode
启动SecondaryNameNode
sbin/hadoop-daemon.sh start secondarynamenode
JPS命令查看是否已经启动成功,有结果就表示启动成功
HDFS上测试创建目录、上传、下载文件
a.创建目录
hdfs dfs -mkdir /demo1
b.上传文件到HDFS
hdfs dfs -put ${HADOOP_HOME}/etc/hadoop/core-site.xml /demo1
c.读取HDFS文件内容
hdfs dfs -cat /demo1/core-site.xml
d.下载文件到本地
hdfs dfs -get /demo1/core-site.xml
【更改时间:date -s “2019-01-19 19:11:00”;查看时间:date】
【将时间写入bios,避免重启失效:hwclock -w】
配置、启动YARN
配置mapred-site.xml:指定mapreduce运行在yarn框架上
<configuration>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</configuration>
配置yarn-site.xml
yarn.nodemanager.aux-services配置了yarn的默认混洗方式,选择为mapreduce的默认混洗算法。
yarn.resourcemanager.hostname指定了Resourcemanager运行在哪个节点上。
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata-senior01.thank.com</value>
</property>
</configuration>
启动resourcemanager
${HADOOP_HOME}/sbin/yarn-daemon.sh start resourcemanager
启动nodemanager
${HADOOP_HOME}/sbin/yarn-daemon.sh start nodemanager
同样jps查看是否启动成功
YARN的Web页面
YARN的Web客户端端口号是8088,通过http://192.168.100.10:8088/可以查看。访问不了,可能防火墙没关。
启动、运行MapReduce Job
hadoop的share自带了一些jar包,里面有一些mapreduce实例,可以运行以上搭建好的hadoop平台,这边我们运行最经典的WordCount例子。
启动HDFS
启动NameNode,DataNode,SecondaryNameNode
【sbin/hadoop-daemon.sh start namenode】
启动YARN
启动resourcemanager,启动nodemanager
【sbin/yarn-daemon.sh start resourcemanager】
创建输入目录
bin/hdfs dfs -mkdir -p /wordcountdemo/input
上传输入文件到HDFS的上面那个目录
bin/hdfs dfs -put …/data/wc.input /wordcountdemo/input
上传成功标志:hdfs dfs -ls /wordcountdemo/input
运行WordCount MapReduce Job
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar wordcount /wordcountdemo/input /wordcountdemo/output
成功标志
【不启动YARN这个也OK】
停止hadoop
sbin/hadoop-daemon.sh stop namenode stopping namenode
sbin/hadoop-daemon.sh stop datanode stopping datanode
sbin/yarn-daemon.sh stop resourcemanager stopping resourcemanager
sbin/yarn-daemon.sh stop nodemanager stopping nodemanager
Hadoop各个功能模块的理解
1)HDFS模块
HDFS负责大数据的存储,通过将大文件分块后进行分布式存储方式,突破了服务器硬盘大小的限制,解决了单台机器无法存储大文件的问题,HDFS是个相对独立的模块,可以为YARN提供服务,也可以为HBase等其他模块提供服务。
2)YARN模块
YARN是一个通用的资源协同和任务调度框架,是为了解决Hadoop1.x中MapReduce里NameNode负载太大和其他问题而创建的一个框架。YARN是个通用框架,不止可以运行MapReduce,还可以运行Spark、Storm等其他计算框架。
3)MapReduce模块
MapReduce是一个计算框架,它给出了一种数据处理的方式,即通过Map阶段、Reduce阶段来分布式地流式处理数据。它只适用于大数据的离线处理,对实时性要求很高的应用不适用。
开启历史服务
Hadoop开启历史服务可以在web页面上查看Yarn上执行job情况的详细信息。可以通过历史服务器查看已经运行完的Mapreduce作业记录,比如用了多少个Map、用了多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息。
配置mapred-site.xml
<property>
<name>mapreduce.jobhistory.address</name>
<value>192.168.100.10:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>192.168.100.10:19888</value>
</property>
sbin/mr-jobhistory-daemon.sh start historyserver
sbin/mr-jobhistory-daemon.sh stop historyserver
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar wordcount /wordcountdemo/input /wordcountdemo/output1
http://192.168.100.10:19888/jobhistory
开启日志聚集
MapReduce是在各个机器上运行的,在运行过程中产生的日志存在于各个机器上,为了能够统一查看各个机器的运行日志,将日志集中存放在HDFS上,这个过程就是日志聚集。
Hadoop默认是不启用日志聚集的。在yarn-site.xml文件里配置启用日志聚集。