大家好,又见面了,我是你们的朋友全栈君。
学习时,在vmware中使用linux系统的时候,安装配置hadoop框架,查找一些资料,发现有些介绍不够详细(比如一些路径的变化没有说清楚),刚接触linux的话一下子可能会有些混乱,所以在这里详细地总结、演示一下。下面介绍ubuntu版本的hadoop伪分布式的安装配置。
一、 Hadoop框架的概述
简介:介绍hadoop相关信息。
1.1 hadoop的简介
Hadoop是一个分布式系统基础框架,它的 HDFA 、 MapReduce 、 HBase 分别是Google的GFS、MapReduce、BigTable这三个思想的实现。
特点:
- 高可靠。按位存储和处理数据的能力强,可靠性强。
- 高可用。它是在计算机集群间分配数据并完成计算任务的,这些集群可以扩展数以千计的节点。
- 高效性。能在节点间动态地移动数据,并保证各个节点的动态平衡,所以处理速度非常快。
- 高容错性。能够自动保存数据的多个副本,并且能够将失效的任务重新分配。
Google公司三篇论文的思想:
- GFS的思想:描述了一个分布式文件系统的设计思路。(HDFS是这篇论文思想的实现)
- MapReduce的思想:分散任务,汇总结果。(Hadoop的MapReduce与MapReduce论文中的实现思路一样)
- BigTable的思想:一个分布式的结构化数据存储系统的设计思路。(HBase是这篇论文思想的实现。HBase是一个分布式、面向列的开源数据库,它是在Hadoop基础上提供类似BigTable的能力。)
1.2 hadoop版本的变化
与 hadoop 2.x 相比, hadoop 3.x 的变化:
- jdk的最低依赖从1.7变成1.8。
- hadoop-client 这个依赖分为 hadoop-client-api 和 hadoop-client-runtime 两个依赖。
- 采用 Timeline Server v2 版本。
- HDFS 支持可擦除编码(Erasure Encoding)。
- 支持随机 Container 和分布式调度。
- MR进行了 Task 级别的本地优化。
- 多个端口被改动。
- 支持多个 Standby 状态的 NameNode 。
- DataNode内部添加了负载均衡。
- 支持 微软(Azure) 和 阿里(Aliyun) 的分布式文件系统。
1.3 hadoop生态圈
生态圈的常用组件:
组件 | 作用 |
---|---|
HDFS | 分布式文件系统 |
YARN | 资源调度框架 |
HBase | 建立在hadoop文件系统之上的分布式列式数据库 |
Hive | hadoop上的大数据数据仓库 |
MapReduce | 分布式并行编程模型 |
Pig | 查询大型半结构化数据集的分析平台 |
Flume | 一个高可用、高可靠、分布式的海量日志采集、聚合和传输的系统 |
Zookeeper | 提供分布式协调一致性服务 |
Sqoop | 在传统数据库与Hadoop数据存储和处理平台间进行数据传递的工具 |
Mahout | 提供一些可扩展的机器学习领域经典算法的实现 |
Ambari | Hadoop快速部署工具,支持 Apache Hadoop 集群的供应、管理和监控 |
1.4 三种模式区别
Hadoop安装模式有三种:单机模式(Standalone Mode)、伪分布式模式(Pseudo-Distributed Mode)、完全分布式模式(Fully-Distributed Mode)。
1.4.1 单机模式
单机模式是指Hadoop运行在一台主机上,按默认配置以非分布式模式运行一个java进程。
特点:
- 没有 分布式文件系统,直接在本地操作系统的文件系统进行读 / 写 。
- 不需要加载任何Hadoop守护进程。
- 一般用户本地MapReduce调试。
- Hadoop的默认模式。
1.4.2 伪分布式模式
伪分布式模式是指Hadoop运行在一台主机上,使用多个java进程,模仿完全分布式模式的节点。
特点:
- 有完全分布式模式的全部功能 。
- 常用于调试程序。
- 只有一个节点。
1.4.3 完全分布式模式
完全分布式模式也称做 集群模式 。
特点:
- 将Hadoop运行在多台主机中,各主机按照相关配置运行相应的Hadoop守护进程。
- 真正的分布式环境。
- 可用于实际生产环境。
二、 Hadoop安装前准备
简介:介绍hadoop安装前需要的准备的设置。
下面命令可以查看这篇文章:Linux常用命令
2.1 安装Xshell、Xftp
可以参考这篇文章:Vmware连接Xshell、Xftp教程
2.2 安装JDK
到 Oracle官网 下载 jdk安装包 ,下载到Windows本地目录下
打开 Xshell ,选择 Xftp 按钮
把 安装包上传到Ubuntu系统 根目录 下,直接拖过去
打开 Xshell 窗口 ,输入 ls ~ 命令查看,或者 cd ~ 到根目录再 ls ,查看
ls ~
解压 ( tar zxvf 后面跟压缩包名,看你的压缩包名再输入)
tar zxvf jdk-8u162-linux-x64.tar.gz
(解压文件太长,就不截图了)
建立 jdk软连接 ( jdk 后面的版本,根据自己下载的版本而定),最后空格后面是你想定义的名字
ln -s jdk.1.8.0_162 jdk
搞定,这三个分别是 软连接 、文件夹 、压缩包
设置 jdk环境变量 ,打开文件 (如果没下载Xmanager,就用 vi 替代 gedit 的位置)
gedit ~/.bashrc /* gedit 是打开文件命令 */
在文件末加入以下内容 ,配置到你上面 目录所在的路径 ,第一行的 ~
,表示当前用户的用户目录(即当前用户的主目录),也可用/home/用户名
来代替~
(注意 等号两侧不要有空格 )
所配置的路径,一定要根据自己文件的路径来修改!
export JAVA_HOME=~/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:.
export PATH=$JAVA_HOME/bin:$PATH
使变量生效
source ~/.bashrc
检验JDK是否安装成功 (如果不是,则是路径配置错了,检查一下路径重新配置)
java -version
2.3 SSH安装
确实 openssh-client 、 openssh-server 是否安装
dpkg -l | grep openssh
如果没有安装,输入以下命令安装
sudo apt-get install openssh-client
sudo apt-get install openssh-server
安装完后重启 ssh服务
sudo /etc/init.d/ssh restart
再检查是否安装完成
2.4 下载解压Hadoop
在 Apache官网 下载Hadoop安装包,按上面 2.2 的操作,上传Hadoop安装包
解压压缩包 ( hadoop- 根据自己版本号修改)
tar -zxvf hadoop-2.7.7.tar.gz
创建软链接,便于使用( hadoop- 后面为你下载的版本号 )
ln -s hadoop-2.7.7 hadoop
设置环境变量
gedit ~/.bashrc
在末尾添加 (注意事项同上面 2.2 )
export HADOOP_HOME=~/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
使设置生效
source ~/.bashrc
检验Hadoop环境变量是否设置正确,输入以下两个命令
whereis hdfs
whereis start-all.sh
如果能显示 hdfs 和 start-all.sh 的路径,则表示设置正确。
三、 Hadoop安装的过程
简介:介绍hadoop安装的操作流程。
文件名 | 属性名 | 属性值 | 含义 |
---|---|---|---|
hadoop-env.sh | JAVA_HOME | /home/<用户名>/jdk | JAVA_HOME |
.bashrc | HADOOP_HOME | ~/hadoop | HADOOP_HOME |
core-site.xml | fs.defaultFS ———————————————hadoop.tmp.dir |
hdfs://<ip地址或主机名>:8020 —————————————— /home/<用户名>/hadoop/tmp |
配置NameNode地址,8020是RPC通信端口 ————————————————————————————HDFS数据保存的目录(默认是Linux的/tmp目录) |
hdfs-site.xml | dfs.replication | 1 | 副本数 |
mapred-site.xml | mapreduce.framework.name | yarn | 配置为yarn表示的是集群模式;配置为local表示的是本地模式 |
yarn-site.xml | yarn.resourcemanager.hostname ——————————————yarn.nodemanager.aux-services |
<ip地址或主机名> ——————————————mapreduce_shuffle |
ResourceManager的IP地址或主机名 ———————————————————————————–NodeManager上运行的附属服务 |
3.1 配置主机名
为了安装方便和便于记忆,给主机修改一个名字(已经修改为 node1 ,默认不是这个,你也可以修改别的名字)。
查看操作系统的主机名
hostname
root权限方法:
- 在命令前加上 sudo ,执行后输入root密码。
- 先输入 su root ,再打 root密码 ,登录后再输入命令。
用 root权限 打开 /etc/hostname 文件
gedit /etc/hostname
将原来的内容删掉,添加你起的主机名
node1 //输入主机名
重启系统,使修改生效
sudo reboot
查看 ip 地址
ifconfig
如下图,记下 ip 地址
推荐设置为静态ip,免去后续网络变化后的麻烦,可以参考下面这两篇文章:
修改 /etc/hosts 文件
gedit /etc/hosts
在文件末尾,加上 ip地址 和上面设置的 主机名
3.2 免密登录设置
3.2.1 免密登录介绍
伪分布式只有一个节点,所有本机是服务端,也是客户端。
设置介绍:
- 如果需要 本机登录别的主机 ,把本机当做客户端,则安装 SSH客户端 软件(openssh-client) 。
- 如果让别的主机(包括本机自己)登录本机,也就是说把本机当做服务端,则安装 SSH服务端 (openssh-server)。
默认是没有安装SSH服务端的,客户端和服务端都要安装好,才能进行免密登录设置。安装参考上面 2.3 的操作。
思路分析:
- 在本机创建密匙对(公钥和私钥),将公钥发给集群内的所有主机去认证,让普通用户不需要输入密码就登录集群主机。
3.2.2 免密登录操作
输入命令生成密匙对,输入后连续敲击 三次回车 , rsa 表示加密算法,系统会自动在 ~/.ssh 目录下生成公钥( id_rsa.pub )和私钥 ( id_rsa )
ssh-keygen -t rsa
查看 ~/.ssh 目录
ls ~/.ssh
追加公钥,以 本机连接本机 为例,将公钥追加到 ~/.ssh/authorized_keys 文件中
ssh-copy-id -i ~/.ssh/id_rsa.pub node1 //node1是本机名,根据自己的本机名修改,上面设置成什么就修改成什么
输入命令查看认证文件 authorized_keys 是否生成
ls ~/.ssh
cd 到 ~/.ssh 目录,再输入命令登录,注意路径的变化,下面免密登录前的路径是 ~/.ssh ,登录后的路径是 ~ 。
ssh node1 //node1为主机名,根据自己的修改
输入命令退出登录,路径变为了登陆前的路径
exit
3.3 设置Hadoop配置文件
安装伪分布式模式,要修改这五个文件设置 hadoop-env.sh , core-site.xml , hdfs-site.xml , mapred-site.xml (该文件是复制 mapred-site.xml.template ,再生成的,一开始是没有的), yarn-site.xml ,
找到你这几个文件的路径(如果上面操作换到别的路径,那么要找到自己这几个文件的路径打开)
接着,开始配置,先修改 hadoop-env.sh 文件
gedit hadoop-env.sh
修改等号 = 与 /jdk 之间的路径(上面你设置的路径,如果是按这篇教程操作,写上图片的就可以了)
如果不知道在哪,可以打开 Xftp 找,界面操作还是比较熟悉的。
接着修改 core-site.xml 文件,输入命令
gedit core-site.xml
接着添加以下内容(解释信息不用加上)
<!--配置NameNode地址,node1的位置为你的主机名或者写你的主机地址;port如果不设置,则使用默认端口8020。-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<!--下图画出来的 lye ,为你的用户名(就是输入命令时,在主机名前面的那个名字)。HDFS数据保存在Linux的哪个目录,默认值是Linux的tmp目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/lye/hadoop/tmp</value>
</property>
注意: 一定要设置 hadoop.tmp.dir ,否则默认的 tmp 目录在 /tmp 下面,重启Ubuntu系统就会导致 tmp 目录下的 dfs/name 文件夹被删除,造成 NameNode 丢失。
再修改 hdfs-site.xml ,输入
gedit hdfs-site.xml
添加以下内容, dfs.replication 的默认值是3,伪分布式只有一个节点,所有设置为1。
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
接着设置 mapred-site.xml 文件
先复制 mapred-site.xml.template ,生成 mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
打开文件, mapreduce.framework.name 的默认值是 local ,设置成 yarn ,让 MapReduce 程序在 YARN框架 上运行。
gedit mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
最后再设置 yarn-site.xml
gedit yarn-site.xml
再添加以下内容, node1 这个位置为主机名,根据自己的修改
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
Hadoop可以配置的属性还有很多,没有配置的就用默认,默认属性配置存放在 hdfs-default.xml 、 core-default.xml 、mapred-default.xml 、 yarn-default.xml 文件中。
3.4 格式化
格式化过程是 创建初始目录 和 文件系统结构 的过程。
输入命令
hdfs namenode -format
注意: 格式化只能进行一次 ,下次启动不需要再格式化了,再格式化会丢失 DataNode 进程。
3.5 启动、验证Hadoop进程
启动 HDFS
start-dfs.sh
再用 jps 验证
jps
如果有 NameNode (HDFS的主服务器)、 DataNode (负责管理各个存储节点 )、 SecondaryNameNode (资源管理器),则表示正确启动。
再启动 YARN
start-yarn.sh
输入 jps 检验
jps
如果多了 NodeManager(执行实际工作) 、 ResourceManager(负责调度DataManager上的资源) ,则表示正确启动。
以上 两句启动命令 ,合并下面这一句,平时启动时一句就可以了,提高效率
start-all.sh
如果启动没问题的话,忽略下面直接看到 3.6 。
另外,如果启动时缺少某个进程,则到 log 目录下查看原因(这个路径根据自己的路径而定,就是把Hadoop解压出来生成的文件夹,或者该文件夹的软连接),打开找到含有 WARN 、Error 、Exception 等关键词,再去找资料想办法解决。
找到目录
比如DataNode出现问题:
进入目录后
通过下面这句命令查看错误信息
cat hadoop-root-datanode-node1.log
也可以用 ( gedit 这个命令要下载 Xmanager ,推荐下载,因为下载后操作比较友好)
gedit hadoop-root-datanode-node1.log
jps后没有DataNode的解决方法:
先关掉Hadoop进程
stop-all.sh
再输入以下两句命令
rm -rf ./hadoop/tmp
rm -rf ./hadoop/logs/*
就可以解决了。
3.6 通过Web访问Hadoop
3.6.1 HDFS web界面
查看 NameNode 和 DataNode 的信息 ,通过Web查看 50070 端口界面。
在 Windows浏览器 的网址栏中,输入格式如下(别漏了冒号 : )
ip地址:50070
按回车确定
查看 SecondaryNameNode 的信息 ,通过Web查看 50090 端口界面。
输入下面格式命令
ip地址:50090
按回车确定
3.6.2 YARN web界面
查看 集群所有应用程序 的信息 ,通过Web查看 8088 端口界面。
输入命令
ip地址:8088
敲击回车确定
3.7 测试Hadoop
通过 MapReduce 程序测试 Hadoop 。
在根目录创建文本文件 data.txt (可以起别的名字,里面的内容也可以输入其他的,如果修改别的话,下面操作也跟着修改就可以了)
gedit data.txt
打开后输入
Hello world
Hello hadoop
Hello friend
用 ls 命令查看根目录
在 HDFS 创建 input 文件夹
hdfs dfs -mkdir /input
将 data.txt 上传到 HDFS
hdfs dfs -put data.txt /input
查看是否上传成功
hdfs dfs -ls /input
运行 MapReduce WordCount 例子
cd ~/hadoop/share/hadoop/mapreduce
下面这句命令的 2.7.7 根据自己的修改, data.txt 也要根据自己的修改(如果上面创建时是输入别的名字,也根据自己的修改)
hadoop jar hadoop-mapreduce-examples-2.7.7.jar wordcount /input/data.txt /output
查看结果
hdfs dfs -cat /output/part-r-00000
输入了3个Hello,其他各一个
检验成功。
3.8 停止Hadoop进程
关闭 Hadoop进程 ,可以用下面这两句
stop-dfs.sh
stop-yarn.sh
也可以用这一句停止所有进程,效率高
stop-all.sh
查看是否关闭所有Hadoop进程
jps
至此,伪分布式模式搭建完成。
如果文章对你有帮助,请点个赞,留给评论支持一下?,若有疑问可以私信留言?。如果能给个三连(点赞、收藏、关注 )就最好啦?。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/130291.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...