大数据:03 HADOOP 从零开始到伪分布式,基于Ubuntu18.04

HADOOP Ubuntu18.04虚拟环境搭建

前言

 为了更好的获取网上资料的支持,我还是决定转到Linux环境下(Mac上做大数据的资料太少啦,出了问题半天都解决不了)




1、系统环境

 物理机环境 - - - macOS Mojave 10.14.6
 虚拟机软件 - - - Parallels Desktop 14
 虚拟机环境 - - - Ubuntu 18.04


2、Ubuntu相关环境配置

- 2.1、说明

 对于在PD上Ubuntu的安装,这里就不细写了,PD提供的有镜像,直接装就行。如果你的虚拟机是VMware或其他,csdn上也有很全的安装教程,很简单。如果你要装Centos,那也可以参考以下的配置步骤,道理都是一样的,具体实现有差别的话就去查一下就好。本文Ubuntu版本:18.04

- 2.2、修改主机名 & 用户名

 为了以后操作节点时看着方便,先把虚拟主机名改了,再把用户名改了。
图1:原始信息

— 2.2.1、修改主机名

 1.没装 vim 的先装 vimsudo apt install vim
 2.修改主机名:sudo vim /etc/hostname
图2:旧主机名
图3:新主机名
 3.再修改一下这个文件:sudo vim /etc/hosts
图4:旧主机名图5
    注意:此处的 10.211.55.101 是我自己设置的静态 ip 地址,设置方法在下面的 ”3、Ubuntu静态IP配置“ 中,这个操作就是将你的 ip 地址映射到某个域名上,比如我这里、以后就可以通过 hadoop101 访问 ip 地址。

— 2.2.2、新增hadoop用户名

 1.先创建一个hadoop用户:sudo useradd -m hdp101 -d /home/hdp101 -s /bin/bash
   参数说明:
     -m :自动建立用户的登入目录(就是你开机登录时可选这个用户);
     -d :指定用户登入时的主目录;
     -s :指定用户登入后所使用的shell。
 2.为新建的hdp101设置密码:sudo passwd hdp101
 3.修改hdp101的权限:
   1).增加sudoer文件修改权限:sudo chmod +w /etc/sudoers
   2).修改sudoer文件:sudo vim /etc/sudoers
图6:修改用户权限
   3).最后把sudoer文件改回只读模式:sudo chmod -w /etc/sudoers
 4.切换到新建的hdp101用户:su hdp101
 5.删除掉原始的系统用户(xxx填你自己的系统用户,不想删也行,不影响;另外有可能删不掉,因为你的原始用户已经登陆了,这时先强制重启sudo reboot,登录上你新建的用户,再进行操作把老用户删了):sudo userdel xxx
 6.删除原始用户xxx的登入主目录:sudo rm -rf /home/xxx


3、Ubuntu静态IP配置

 1.没装net-tools要先装: sudo apt install net-tools
 2.查看网卡信息: ifconfig
图7
 3.修改网卡配置文件:
   1).先进入 /etc/netplan/ 目录,看看你们网卡配置文件叫啥名
图8   2).编辑yaml文件: sudo vim 01-network-manager-all.yaml
图9
 3.应用新配置: sudo netplan apply
 4.永久修改DNS地址:sudo vim /etc/systemd/resolved.conf
图10

4、安装Hadoop

- 4.1、物理机下载tar包

 1.先用物理机下载 hadoop2.7.2JDK
   下载地址:链接: https://pan.baidu.com/s/1GCuQy-3FFyyvOz8lB4MGYg 提取码: h77k

- 4.2、ssh文件传输

 1.在mac的终端上通过ssh方式把这两个jar包传到ubuntu中
   1).在ubuntu中新建两个文件夹,software用于存放软件的jar包,module用于存放软件
     a.进入 /opt 文件夹:cd /opt
     b.新建 software 文件夹:sudo mkdir software
     c.新建 module 文件夹:sudo mkdir module
     d.修改这俩文件夹的所有者,第一个xxx填你的用户名,第二个xxx填组名,一般来说两xxx是一样的:sudo chown xxx:xxx module/ software/
     e.查看所有者:ll
   2).在mac终端里测试ssh连接性
     a.在ubuntu安装openssh-server:sudo apt install openssh-server
     b.查看ssh-server是否启动(看到sshd说明服务已启动):ps -e |grep ssh
图11
     c.若没有可这样启动:sudo /etc/init.d/ssh start
     d.在mac终端里测试连接(注意改成你自己的用户名和ip):ssh [email protected]
     e.成功后mac终端里的用户名会变成成ubuntu的用户名,证明连接上了,这时退出链接:exit
图12
   3).在mac终端用ssh向ubuntu传文件
     a.在mac终端中输入:scp /dir/file <用户名>@< ip>:<目录>
     b.其中 /dir/file 是你mac中的源文件,<用户名>@< ip> 是你虚拟机的用户名和ip,<目录> 是你要把文件从mac传到ubuntu的目标位置
图13
     c.如果传输时显示授权失败 Permission denied,please try again
      解决方案:1、在配置文件中加一行 PermitRootLogin yessudo vim /etc/ssh/sshd_config
           2、重启服务:systemctl restart sshd
   4).将文件解压至 /opt/module 文件夹:
     a.解压jdk:tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module/
     b.解压hadoop2.7.2:tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/hadoop-2.7.2/
       参数说明:
       -z:用gzip来压缩/解压缩文件
       -x :从档案文件中释放文件,相当于拆包
       -v :详细报告tar处理的文件信息
       -f :指定被处理的文件


5、配置JAVA_HOME和HADOOP_HOME

 1.进入解压后的jdk目录,复制地址,hadoop目录也是如此:
图14
 2.配置 profile 文件,该文件在 /etc/ 目录下,先进入文件 vim /etc/profile,再添加内容:
图15
 3.配置 ~/.bashrc 文件,此文件是终端的配置文件,在行尾加上 source /etc/profile ,这样每次进入终端时 /etc/profile 会自动生效,否则你每次打开终端都要先 source /etc/profile ,环境变量才能生效:
图16
图17

6、Hadoop目录结构解析

图18
 1. bin 目录:存放对Hadoop相关服务(HDFS,YARN等)进行操作的脚本
 2. etc 目录:Hadoop的配置文件目录,存放Hadoop的配置文件
 3. lib 目录:存放Hadoop的本地库(对数据进行压缩解压缩功能等)
 4. sbin 目录:存放启动或停止Hadoop相关服务的脚本
 5. share 目录:存放Hadoop的依赖jar包、文档、和官方案例


7、Hadoop运行模式及具体运行

- 7.1、Hadoop三种运行模式

 -本地运行模式:在一台机器上运行服务,几乎不用做任何配置,但仅限于调试用途。没有分布式文件系统(DFS),直接读写本地操作系统的文件系统;
 -伪分布式运行模式:在单节点上同时启动NameNode、DataNode、Jobtracker、Tasktracker、Secondary NameNode等进程,模拟分布式运行的各个节点,配置已经很接近完全分布式;
 -完全分布式运行模式:正常的Hadoop集群,由多个各司其职的节点构成。

- 7.2、本地运行模式

— 7.2.1、官方Grep案例

 1.在 hadoop-2.7.2 文件下面创建一个 input 文件夹:mkdir input
 2.将 hadoop 的所有 XML 配置文件复制到 input 文件夹作为程序的输入:cp etc/hadoop/*.xml input
图19
 3.执行share目录下的 MapReduce 程序,input 作为输入,output 作为输出,注意这里 output 文件夹不能存在,否则会报错:bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
   正则表达式 dfs[a-z.]+ 的含义:匹配以 dfs 开头,后续字符范围限定在 [a-z] 内,” . “是为了过滤换行符 “\r\n”,” + “表示一次或多次匹配前面的字符或子表达式、例如”a+“会匹配”ab“、”abc“、”aadd“等以 a 开头的表达式。
图20
 4.查看生成的 output 文件夹下的程序输出,其中 part-r-00000 就是程序执行结果,_SUCCESS 只是一个成功标识符:
图21

— 7.2.2、官方WordCount案例

 1.在 hadoop-2.7.2 文件下面创建一个 wcinput 文件夹:mkdir wcinput
 2.进入 wcinput 文件夹,创建 wc.input 文件作为输出(文件名是死的,源码里就这样写的,后面有空博客会讲),vim 编辑文件写入数据,wq 保存退出:
图22
图23 3.回到hadoop目录 /opt/module/hadoop-2.7.2 ,执行程序,还是和上面的 Grep 案例一样,已经存在的 wcinput 作输出,不存在的 wcoutput 作输出: hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput/ wcoutput
图24
 4.查看生成的 wcoutput 文件夹下的程序输出,wordcount 程序会计算出每个词的词频:
图25

- 7.3、伪分布式运行模式

— 7.3.1、启动HDFS并运行MapReduce程序

 1.配置集群(主要配置文件都在 /opt/module/hadoop-2.7.2/etc/hadoop 目录下):
   1).配置 hadoop-env.sh 文件,加入 JAVA_HOME
图26
图27
   2).配置 core-site.xml 文件,配置了 默认文件系统为 hdfs 系统,并将运行时产生的文件保存在了指定的目录下、否则会默认保存在系统根目录的 tmp 目录下:
    注意:此处的 fs.defaultFS 是默认的文件系统,在改成伪分布式的 hdfs 系统后,你再去运行上面本地模式下的程序就会报错,因为本地模式默认是 file:/// 文件系统、也就是本地文件系统。
图28
   3).配置 hdfs-site.xml 文件,指定 hdfs 副本的数量,这里设置为1。副本的意思是保持集群中 hdfs 的备份数量,以至于一个节点挂掉了,hdfs 还能从备份中恢复:
图29
 2.启动集群:
   1).格式化 NameNode (第一次启动时格式化一次即可):
     a.格式化命令 hdfs 在hadoop根目录下的bin文件夹:cd /opt/module/hadoop-2.7.2/bin/
     b.执行命令:hdfs namenode -format
图30
图31
   2).启动 NameNode (所有的启动命令都在 /opt/module/hadoop-2.7.2/sbin 目录下):
     a.进入目录:cd /opt/module/hadoop-2.7.2/sbin
     b.启动 NameNode :hadoop-daemon.sh start namenode
     c.启动 DataNode :hadoop-daemon.sh start datanode
     d.查看是否启动成功( jps 是 JDK 中的命令,要先安装 JDK 才能生效):jps
图32
   3).启动成功后,可在 web 端查看 HDFS 文件系统:网址 http://你的虚拟机 IP:50070
图33
 3.操纵集群:
   1).在HDFS文件系统上创建一个 input 文件夹:hdfs dfs -mkdir -p /user/hdp101/input
     a.这样就在 hdfs 文件系统上创建了一个目录,像Linux一样,/ 即根目录
图34     b.查看 hdfs 上指定工作目录的内容。查看根目录:hdfs dfs -ls /
     c.查看根目录下的多级目录:hdfs dfs -lsr /
图35

   2).将测试文件内容上传到文件系统上:hdfs dfs -put 本地源文件路径 hdfs目标目录路径
图36
图37

   3).查看上传的文件是否正确:hdfs dfs -ls /user/hdp101/input/
                hdfs dfs -cat /user/hdp101/input/wc.input
图38
   4).运行 MapReduce 程序,格式为 hadoop jar jar包路径 程序功能名 输入文件路径 输出文件路径,要注意的是,第一、hadoop命令在 /opt/module/hadoop-2.7.2/bin 目录下、要先切换到这个目录,第二、输出文件路径同上面说到的本地模式一样、不能存在:
   hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/hdp101/input/ /user/hdp101/output
图39
   5).查看输出结果:hdfs dfs -cat /user/hdp101/output/*
图40图41
   6).将测试文件内容下载到本地,-get 命令:hdfs dfs -get /user/hdp101/output/part-r-00000 …/wcoutput/
图42    因为我这里的 part-r-00000 文件在上面运行本地模式程序时已存在,所以报了个提醒
   7).删除输出结果:hdfs dfs -rm -r /user/hdp101/output
图43

— 7.3.2、启动YARN并运行MapReduce程序

 1.配置集群(主要配置文件都在 /opt/module/hadoop-2.7.2/etc/hadoop 目录下):
   1).配置 yarn-env.sh 文件,加入 JAVA_HOME(凡是 xxx-env.sh 格式的文件,都要配置 JAVA_HOME):
图44
图45
   2).配置 yarn-site.xml 文件,配置了 nodemanager 获取数据的方式为 shuffle,并且配置了 YARN 中 resourcemanager 的地址、该地址指定了 resourcemanager 放在哪台服务器上:
图46
图47

   3).配置 mapred-env.xml 文件(还是配 JAVA_HOME ,这里不多说了)
   4).配置 mapred-env.xml 文件,在 /opt/module/hadoop-2.7.2/etc/hadoop 目录下只为我们提供了 mapred-site.xml.template 模板文件,所以要先用 mv 命令复制一份这个模板文件并改名成 mapred-env.xml ,然后再进入配置:
图48
图49
 2.启动集群(主要配置文件都在 /opt/module/hadoop-2.7.2/etc/hadoop 目录下):
   1).先启动 DataNode 和 NameNode(启动方法在前面的 7.3.1.2 中已经介绍。已启动的就跳过这步,用 jps 命令查看已启动的节点):
图50
   2).再启动 ResourceManager :yarn-daemon.sh start resourcemanager
图51
   3).最后启动 NodeManager(dn 和 nn 都是通过 hadoop-daemon.sh 启动的,而 rm 和 nm 是通过 yarn-daemon.sh 启动):yarn-daemon.sh start NodeManager
图52
图53
   4).启动后,就可以通过 8088 端口访问 YARN 管理界面了(ip地址写你自己虚拟机的静态ip):图54
 3.操纵集群:
   1).先进入 hadoop 的 web 界面,观察当前是否存在 input 和 output 文件夹,如果在上面 ”7.3.1、启动HDFS并运行MapReduce程序“ 中已经运行过一次 MapReduce 程序,那么要把已经存在的 output 文件夹删掉:
图55
   2).执行 MapReduce 程序(如果你配置了 HADOOP_HOME,那么直接用 hadoop 命令调用 jar 包运行程序即可,如果没有配置,那么要进入到 bin 文件夹下执行 hadoop 命令):bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/hdp101/input /user/hdp101/output
     PS:a.格式:红线为 MR 程序的 jar 包地址,蓝线为运行程序名、是一个计数程序,绿线是输入文件地址(输入文件夹事先应该准备好,里面要有文件,具体内容参考上 7.3.1 节),黄线为输出文件夹地址、事先不应该存在;
        b.可以发现在 YARN 上运行的 MR 是真正走了 map 和 reduce 流程的。
图56
   3).查看运行结果:bin/hdfs dfs -cat /user/hdp101/output/*
图57
        PS:可以在 YARN 的 web 界面上查看程序运行情况:
图58

— 7.3.3、配置历史服务器

 1.在上面的一张 YARN web 界面图中,可以看到红框内右边有一个 ”History“ ,这就是 YARN 的历史服务器,可以通过它查看程序的历史运行情况,但在使用前需要先配置好

 2.配置 map-site.xml 文件:
图59
图60

 3.启动历史服务器:sbin/mr-jobhistory-daemon.sh start historyserver
图61
 4.通过端口号 19888 在 web 界面上查看历史服务器:
图62
5.在 macOS 中映射虚拟机 hadoop101 的 ip 地址:
   从前面的操作可以看出,我们只在虚拟机中映射了 ip 地址而没有在外部机器上映射,这导致了我们在外部访问虚拟机的 ip 时只能手动输入真实 ip 地址,很麻烦,所以还是要在外部机器上也映射一下虚拟机的 ip 比较方便,下面给出 macOS 的 ip 地址映射方法。macOS 中,配置文件在 /etc/hosts 文件中:
   1).先进入文件:
图63
   2).再编辑,新加一行,前面是虚拟机的 ip 地址,后面是需要映射到的域名,注意域名和虚拟机中的映射一致即可:
图64
   3).以后在外部机器上就可以通过域名访问虚拟机啦:
图65

— 7.3.4、配置日志的聚集

 1.功能说明:在应用运行完成后,将程序运行日志上传至 HDFS,方便集群内的所有机器查看 (注意:配置完并启动日志聚焦功能后,要重新启动 nm、rm和 HistoryManager)
图66

 2.配置 yarn-site.xml 文件,使能日志聚焦功能并设置日志保留日限为7天:
图67
 3.重启 nm、rm、hm 服务:
   1).关闭 nm:sbin/yarn-daemon.sh stop nodemanager
   2).关闭 rm:sbin/yarn-daemon.sh stop resourcemanager
   3).关闭 hm:sbin/mr-jobhistory-daemon.sh stop historyserver

   4).关闭 nm:sbin/yarn-daemon.sh start nodemanager
   5).关闭 nm:sbin/yarn-daemon.sh start resourcemanager
   6).关闭 nm:sbin/mr-jobhistory-daemon.sh start historyserver

 4.检查 log 服务,先将我们在上一小节 “7.3.2、启动YARN并运行MapReduce程序” 中产生在 HDFS 上的 output 文件夹删除,再重新运行下 7.3.2 的 MR wordcount 程序,然后检查 log 信息。重新运行程序的操作就不贴图了,根据 7.3.2 做一遍即可,下面检查 log 信息:
   1).进入历史服务器 JobHistory 的 web 界面,再点击 Job ID 进入 Job 详情界面:
图68
   2).在 Job 详情页点击 log 查看日志:
图69
图70

— 7.3.5、配置文件说明

1.配置 Hadoop 的主要文件都在目录 /hadoop根目录/etc/hadoop/ 下:
图71
   1).画蓝线的 .env 后缀的文件主要是配置环境,常用的有 JAVA_HOME
   2).画蓝线的 .xml 后缀的文件主要是 hadoop 各个组件:

*.xml 配置文件说明 常见配置项
core-site.xml 配置系统级别的集群全局参数 HDFS 中 NamaNode 的地址 “fs.defaultFS” 、Hadoop 临时文件存储目录 “hadoop.tmp.dir”
hdfs-site.xml 配置 Hadoop 分布式文件系统,即 HDFS 名称节点nn、数据节点dn的存放位置、HDFS 副本数量 "dfs.replication" 、文件读取权限 等
yarn-site.xml 配置集群资源管理平台 YARN 的参数 yarn 组件 ResourceManager 的地址 "yarn.resourcemanager.hostname" 、RM 对 web 服务提供的地址 "yarn.resourcemanager.webapp.address" 、在 NodeManager 上扩展用户自定义服务的配置 "yarn.nodemanager.aux-services" 、日志 aggregate 功能使能 "yarn.log-aggregation-enable"
mapred-site.xml 配置 MapReduce 相关参数 最重要的就是 "mapreduce.framework.name" 参数,可选 local、classic、yarn 三种平台来作为 MR 的基准平台;此外、还有 历史服务器端地址 "mapreduce.jobhistory.address" 、历史服务器对 web 服务提供的地址 "mapreduce.jobhistory.webapp.address"

上一篇: 大数据:02 Hadoop架构与版本差别.
下一篇: 大数据:04 HADOOP 完全分布式.

发布了16 篇原创文章 · 获赞 7 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/yuecangjiao5151/article/details/105131461