Hadoop安装配置与三种启动模式详解

1、Hadoop简介

       Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFSMapReduceHDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。

 

2、安装并配置

(1)Java 1.5.x。

       java安装略。

查看java安装目录:

查看java配置文件:

vim /etc/profile

注:找不到jps命令编辑/root/.profile如下:

使得配置生效:

source /root/.profile

查看java是否安装成功:java -version

(2)保证 sshd一直运行

ssh 必须安装并且保证 sshd一直运行,以便用Hadoop 脚本管理远端Hadoop守护进程。

另:rsync是linux系统下的数据镜像备份工具。可以镜像保存整个目录树和文件系统。很容易做到爆出原理文件的权限、时间、软硬链接等。

sudo apt-get install ssh             // 安装ssh
sudo apt-get install rsync           // 安装rsync
sudo service ssh start               // 开启SSH服务
ps -e | grep ssh                     // 查看SSH服务是否开启

$ ssh localhost                         #登陆SSH,第一次登陆输入yes
$ exit                                  #退出登录的ssh localhost
$ cd ~/.ssh/                            #如果没法进入该目录,执行一次ssh localhost
$ ssh-keygen -t rsa

输入完 $ ssh-keygen -t rsa 语句以后,需要连续敲击三次回车,之后再输入:

$ cat ./id_rsa.pub >> ./authorized_keys 	#加入授权
$ ssh localhost						        #此时就不需要密码

(3)Hadoop下载并解压

下载:http://hadoop.apache.org/releases.html

其中source download为源码下载,需要编译才可使用。Binary download为二进制下载,可直接解压安装。

解压:

tar -zxvf hadoop-3.1.3.tar.gz

解压后文件如下:

(4)配置

编辑~.bashrc,配置Hadoop如下:

export HADOOP_HOME=/home/wzh/Hadoop/hadoop-3.1.3/
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

其中HADOOP_HOME为Hadoop解压的路径。

检查是否安装成功:

 

3、启动

       Hadoop支持以下三种模式集群:

  • 单机模式
  • 伪分布式模式
  • 完全分布式模式

(1)单机模式

       Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。

例:

在此我们选择运行 grep 例子,我们将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 a[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中:

cd /home/wzh/Hadoop/hadoop-3.1.3/		# 进到Hadoop安装的目录
mkdir input								# 创建文件夹
cp etc/hadoop*.xml	./input				# 将配置文件作为输入文件
./bin/hadoop jar /home/wzh/Hadoop/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'a[a-z.]+'		# 统计符合正则表达式的

cat ./output/*          # 查看运行结果

(2)伪分布模式

       Hadoop也可以以伪分布模式的方式运行在单节点上, 这个时候每一个Hadoop守护进程都是一个单独的Java进程。这种模式需要进行相应的分布式设置, 但是又由于只有一个节点, 所以我们称之为伪分布模式。

由于Hadoop2.x增加了Yarn, 所以有两个选择: 可以把MapReduce程序直接运行在HDFS上, 也可以选择运行在Yarn上。

(a)配置Hadoop安装目录中的etc/hadoop/core-site.xml:

注:其中localhost要改成其他的,则要在/etc/hosts中的对应。

(b)配置Hadoop安装目录中的etc/hadoop/hdfs-site.xml:

注:

       这里设置的副本的数量是指的将来在HDFS上存储的文件的副本。因为现在配置的是单节点伪分布模式, 所以把副本数量设置为 1。

       Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。

此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程如此),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。

(c)格式化文件系统

hdfs namenode -format

注:

格式化的动作只需要执行一次即可。以后再启动集群不需要重复执行这个动作。多次格式化会出现异常, 务必不要多次格式化。

(d)启动namenode和datanode的守护进程

问题(1):

Error:JAVA_HOME is not set and could not be found

sudo vim hadoop/etc/hadoop/hdoop-env.sh
将语句      export JAVA_HOME=$JAVA_HOME   

修改为      export JAVA_HOME=/usr/java/jdk1.8.0_221            # 自己的java路径

问题(2):

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

在/etc/profile中,添加

export HADOOP_ROOT_LOGGER=DEBUG,console

最后记得使配置生效:

source /etc/profile

问题(3):

WARN hdfs.DFSUtilClient: Namenode for null remains unresolved for ID null. Check your hdfs-site.xml file to ensure namenodes are configured properly.

修改hadoop中etc/hadoop/core-site.xml中的地址,自定义的域名要和/etc/hosts中对应。

(e)用jps检查是否启动成功

(f)通过网页访问

如果出现这段英文,这说明你的配置包括进程启动都没问题,你只是访问了进程中的非web端口

NameNode界面:http://localhost:50070

(g)上次文件到hdfs

使用命令进行创建目录:

root@ubuntu:~/Hadoop/hadoop-2.9.2/bin# hdfs dfs -mkdir -p /usr/hadoopTest/input

上传文件:

hdfs dfs -put /home/wzh/Hadoop/test/input.txt /usr/hadoopTest/input

问题:

put: File /usr/hadoopTest/input/input.txt._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1).  There are 0 datanode(s) running and no node(s) are excluded in this operation.

解决:

(i)查看防火墙状态:

防火墙是关闭状态,因此不是防火墙的问题。

(ii)查看磁盘使用情况:

从这里可以看出操盘的空间都是空的。原因可能是hadoop多次格式化的时候出现了问题。

(iii)重新格式化

sbin/ stop-all.sh        #将hadoop关闭
rm -r /usr/local/hadoop  #删除前面格式化创建的tmp文件夹
hdfs namenode -format    #重新初始化hadoop
hdfs dfs -mkdir -p /usr/hadoopTest/input #重新创建文件夹

再次上传即成功:

Block Size :块的大小 存储上的上限值是128MB

Replication:副本数量(上述中在配置文件配置为1)

点击该文件可进行下载等操作。

使用命令进行查看:

(3)使用yarn运行MapReduce程序

       YARN(Yet Another Resource Negotiator)是Hadoop2.0集群中负责资源管理和调度以及监控运行在它上面的各种应用,是hadoop2.0中的核心,它类似于一个分布式操作系统,通过它的api编写的应用可以跑在它上面,支持临时和常驻的应用,集群的资源可以得到最大限度的共享。资源是指CPU,内存,硬盘,带宽等可以量化的东西。

(a)配置yarn-env.sh

修改hadoop安装目录中/etc/hadoop/yarn-env.sh,将java环境配置如下:

(b)配置yarn-site.xml

配置hadoop安装中/etc/hadoop/yarn-site.sh:

配置完毕后,启动Resourcemanager和nodemanager,都是yarn上的,启动前必须保证NameNode和DataNode已经启动。

启动resourcemanager:

yarn-daemon.sh start resourcemanager

启动nodemanager:

yarn-daemon.sh start nodemanager

查看resourcemanager和nodemanager是否都成功开启:

注意这里6个服务缺一不可。

可以通过yarn的服务界面查看:http://localhost:8088.

从该界面可以看出当前执行的任务的状态,包括id、用户、任务名称等信息。

注:关闭hadoop:

sbin/stop-dfs.sh namenode
sbin/stop-dfs.sh datanode
sbin/ yarn-daemon.sh stop resourcemanager
sbin/ yarn-daemon.sh stop nademanager

参考:https://www.cnblogs.com/Mrchengs/p/11218728.html

(4)完全分布式模式

(a)主机配置

在Vmware中克隆一个新的虚拟机,其中一个命名为ubuntu1,另一个命名为ubuntu2。Hadoop集群中包括2个节点:1个Master,2个Salve,其中虚拟机ubuntu1既做Master,也做Slave;虚拟机Ubuntu2只做Slave。

配置hostname:Ubuntu下修改机器名称: sudo gedit /etc/hostname ,改为Ubuntu1;修改成功后用重启命令:hostname,查看当前主机名是否设置成功;

此时可以用虚拟机克隆的方式再复制一个。(先关机 vmware 菜单--虚拟机-管理--克隆)。

注意:修改克隆的主机名为Ubuntu2。

配置hosts文件:查看Ubuntu1和Ubuntu2的ip:ifconfig;

打开hosts文件:sudo gedit /etc/hosts,添加如下内容:

 192.168.xxx.xxx Ubuntu1
 192.168.xxx.xxx Ubuntu2

在Ubuntu1上执行命令:ping Ubuntu2,若能ping通,则说明执行正确。 

(b)设置ssh无密验证配置

       安装ssh可查看前面的配置。

无密码登录:

ssh localhost;

无密码登陆到Ubuntu2,在Ubuntu1上执行:ssh-copy-id Ubuntu2,查看Ubuntu2的/home/username/.ssh文件里是否有authorized_keys;

在Ubuntu1上执行命令:ssh Ubuntu2,首次登陆需要输入密码,再次登陆则无需密码;若要使Ubuntu2无密码登录Ubuntu1,则在Ubutu2上执行上述相同操作即可。

注:若无密码登录设置不成功,则很有可能是文件夹/文件权限问题,修改文件夹/文件权限即可。sudo chmod 777 “文件夹” 即可。

(c)配置hadoop文件

  • 1)配置yarn-env.sh 文件-->>修改JAVA_HOME:

  • 2)配置yarn-env.sh 文件-->>修改JAVA_HOME

添加如下内容:

  • 3)配置slaves文件-->>增加slave节点:

删除原来的localhost,添加如下内容:

  • 4)配置core-site.xml文件-->>增加hadoop核心配置:

  • 5)配置 hdfs-site.xml文件-->>增加hdfs配置信息:

  • 6)配置 mapred-site.xml.template文件-->>增加mapreduce配置:

(使用yarn框架、jobhistory使用地址以及web地址)

  • 7)配置 yarn-site.xml文件-->>增加yarn功能:

  • 8)将配置好的Ubuntu1中/hadoop/etc/hadoop文件夹复制到到Ubuntu2对应位置(删除Ubuntu2原来的文件夹/hadoop/etc/hadoop)
scp -r /home/wzh/Hadoop/hadoop-2.9.2/etc/hadoop wzh@Ubuntu2: /home/wzh/Hadoop/hadoop-2.9.2/etc/

(d)验证

注:以下命令均在hadoop的安装目录的/sbin中运行。

       1)格式化namenode:

hdfs namenode -format

       2)启动hdfs:

start-dfs.sh

启动hdfs出问题见上面所列,一般都是配置没配置好,或者初始化出问题,多次初始化的问题后可将初始化创建的文件夹删除后重新初始化。

       3)启动yarn:

start-yarn.sh

jps查看已启动的集群:

       4)查看:

浏览器中输入:http://hadoop004:50090/status.html

 

 

猜你喜欢

转载自blog.csdn.net/King_weng/article/details/109579384