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、修改主机名 & 用户名
为了以后操作节点时看着方便,先把虚拟主机名改了,再把用户名改了。
— 2.2.1、修改主机名
1.没装 vim 的先装 vim:sudo apt install vim
2.修改主机名:sudo vim /etc/hostname
3.再修改一下这个文件:sudo vim /etc/hosts
注意:此处的 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
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
3.修改网卡配置文件:
1).先进入 /etc/netplan/ 目录,看看你们网卡配置文件叫啥名
2).编辑yaml文件: sudo vim 01-network-manager-all.yaml
3.应用新配置: sudo netplan apply
4.永久修改DNS地址:sudo vim /etc/systemd/resolved.conf
4、安装Hadoop
- 4.1、物理机下载tar包
1.先用物理机下载 hadoop2.7.2 和 JDK
下载地址:链接: 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
c.若没有可这样启动:sudo /etc/init.d/ssh start
d.在mac终端里测试连接(注意改成你自己的用户名和ip):ssh hdp101@10.211.55.101
e.成功后mac终端里的用户名会变成成ubuntu的用户名,证明连接上了,这时退出链接:exit
3).在mac终端用ssh向ubuntu传文件
a.在mac终端中输入:scp /dir/file <用户名>@< ip>:<目录>
b.其中 /dir/file 是你mac中的源文件,<用户名>@< ip> 是你虚拟机的用户名和ip,<目录> 是你要把文件从mac传到ubuntu的目标位置
c.如果传输时显示授权失败 Permission denied,please try again,
解决方案:1、在配置文件中加一行 PermitRootLogin yes :sudo 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/
参数说明:
-z:用gzip来压缩/解压缩文件
-x :从档案文件中释放文件,相当于拆包
-v :详细报告tar处理的文件信息
-f :指定被处理的文件
5、配置JAVA_HOME和HADOOP_HOME
1.进入解压后的jdk目录,复制地址,hadoop目录也是如此:
2.配置 profile 文件,该文件在 /etc/ 目录下,先进入文件 vim /etc/profile,再添加内容:
3.配置 ~/.bashrc 文件,此文件是终端的配置文件,在行尾加上 source /etc/profile ,这样每次进入终端时 /etc/profile 会自动生效,否则你每次打开终端都要先 source /etc/profile ,环境变量才能生效:
6、Hadoop目录结构解析
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
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 开头的表达式。
4.查看生成的 output 文件夹下的程序输出,其中 part-r-00000 就是程序执行结果,_SUCCESS 只是一个成功标识符:
— 7.2.2、官方WordCount案例
1.在 hadoop-2.7.2 文件下面创建一个 wcinput 文件夹:mkdir wcinput
2.进入 wcinput 文件夹,创建 wc.input 文件作为输出(文件名是死的,源码里就这样写的,后面有空博客会讲),vim 编辑文件写入数据,wq 保存退出:
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
4.查看生成的 wcoutput 文件夹下的程序输出,wordcount 程序会计算出每个词的词频:
- 7.3、伪分布式运行模式
— 7.3.1、启动HDFS并运行MapReduce程序
1.配置集群(主要配置文件都在 /opt/module/hadoop-2.7.2/etc/hadoop 目录下):
1).配置 hadoop-env.sh 文件,加入 JAVA_HOME:
2).配置 core-site.xml 文件,配置了 默认文件系统为 hdfs 系统,并将运行时产生的文件保存在了指定的目录下、否则会默认保存在系统根目录的 tmp 目录下:
注意:此处的 fs.defaultFS 是默认的文件系统,在改成伪分布式的 hdfs 系统后,你再去运行上面本地模式下的程序就会报错,因为本地模式默认是 file:/// 文件系统、也就是本地文件系统。
3).配置 hdfs-site.xml 文件,指定 hdfs 副本的数量,这里设置为1。副本的意思是保持集群中 hdfs 的备份数量,以至于一个节点挂掉了,hdfs 还能从备份中恢复:
2.启动集群:
1).格式化 NameNode (第一次启动时格式化一次即可):
a.格式化命令 hdfs 在hadoop根目录下的bin文件夹:cd /opt/module/hadoop-2.7.2/bin/
b.执行命令:hdfs namenode -format
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
3).启动成功后,可在 web 端查看 HDFS 文件系统:网址 http://你的虚拟机 IP:50070
3.操纵集群:
1).在HDFS文件系统上创建一个 input 文件夹:hdfs dfs -mkdir -p /user/hdp101/input
a.这样就在 hdfs 文件系统上创建了一个目录,像Linux一样,/ 即根目录
b.查看 hdfs 上指定工作目录的内容。查看根目录:hdfs dfs -ls /
c.查看根目录下的多级目录:hdfs dfs -lsr /
2).将测试文件内容上传到文件系统上:hdfs dfs -put 本地源文件路径 hdfs目标目录路径
3).查看上传的文件是否正确:hdfs dfs -ls /user/hdp101/input/
hdfs dfs -cat /user/hdp101/input/wc.input
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
5).查看输出结果:hdfs dfs -cat /user/hdp101/output/*
6).将测试文件内容下载到本地,-get 命令:hdfs dfs -get /user/hdp101/output/part-r-00000 …/wcoutput/
因为我这里的 part-r-00000 文件在上面运行本地模式程序时已存在,所以报了个提醒
7).删除输出结果:hdfs dfs -rm -r /user/hdp101/output
— 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):
2).配置 yarn-site.xml 文件,配置了 nodemanager 获取数据的方式为 shuffle,并且配置了 YARN 中 resourcemanager 的地址、该地址指定了 resourcemanager 放在哪台服务器上:
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 ,然后再进入配置:
2.启动集群(主要配置文件都在 /opt/module/hadoop-2.7.2/etc/hadoop 目录下):
1).先启动 DataNode 和 NameNode(启动方法在前面的 7.3.1.2 中已经介绍。已启动的就跳过这步,用 jps 命令查看已启动的节点):
2).再启动 ResourceManager :yarn-daemon.sh start resourcemanager
3).最后启动 NodeManager(dn 和 nn 都是通过 hadoop-daemon.sh 启动的,而 rm 和 nm 是通过 yarn-daemon.sh 启动):yarn-daemon.sh start NodeManager
4).启动后,就可以通过 8088 端口访问 YARN 管理界面了(ip地址写你自己虚拟机的静态ip):
3.操纵集群:
1).先进入 hadoop 的 web 界面,观察当前是否存在 input 和 output 文件夹,如果在上面 ”7.3.1、启动HDFS并运行MapReduce程序“ 中已经运行过一次 MapReduce 程序,那么要把已经存在的 output 文件夹删掉:
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 流程的。
3).查看运行结果:bin/hdfs dfs -cat /user/hdp101/output/*
PS:可以在 YARN 的 web 界面上查看程序运行情况:
— 7.3.3、配置历史服务器
1.在上面的一张 YARN web 界面图中,可以看到红框内右边有一个 ”History“ ,这就是 YARN 的历史服务器,可以通过它查看程序的历史运行情况,但在使用前需要先配置好
2.配置 map-site.xml 文件:
3.启动历史服务器:sbin/mr-jobhistory-daemon.sh start historyserver
4.通过端口号 19888 在 web 界面上查看历史服务器:
5.在 macOS 中映射虚拟机 hadoop101 的 ip 地址:
从前面的操作可以看出,我们只在虚拟机中映射了 ip 地址而没有在外部机器上映射,这导致了我们在外部访问虚拟机的 ip 时只能手动输入真实 ip 地址,很麻烦,所以还是要在外部机器上也映射一下虚拟机的 ip 比较方便,下面给出 macOS 的 ip 地址映射方法。macOS 中,配置文件在 /etc/hosts 文件中:
1).先进入文件:
2).再编辑,新加一行,前面是虚拟机的 ip 地址,后面是需要映射到的域名,注意域名和虚拟机中的映射一致即可:
3).以后在外部机器上就可以通过域名访问虚拟机啦:
— 7.3.4、配置日志的聚集
1.功能说明:在应用运行完成后,将程序运行日志上传至 HDFS,方便集群内的所有机器查看 (注意:配置完并启动日志聚焦功能后,要重新启动 nm、rm和 HistoryManager)
2.配置 yarn-site.xml 文件,使能日志聚焦功能并设置日志保留日限为7天:
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 详情界面:
2).在 Job 详情页点击 log 查看日志:
— 7.3.5、配置文件说明
1.配置 Hadoop 的主要文件都在目录 /hadoop根目录/etc/hadoop/ 下:
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 完全分布式.