Hadoop运行环境搭建

您所在的位置:网站首页 hadoop执行过程 Hadoop运行环境搭建

Hadoop运行环境搭建

2023-11-02 02:19| 来源: 网络整理| 查看: 265

本文是hadoop的运行环境搭建实际的操作过程的记录和总结,整个文档包括如下内容:

概述 环境配置 创建用户 配置SSH hadoop安装 hadoop运行模式 单机模式 一、概述

因为hadoop是一个分布式大数据系统,在实际生产环境下,是在集群环境下运行的,少则几台机器,多在几百/几千台机器。搭建一个集群的环境,一来需要有资源,二来也比较复杂。这也是阻碍很多新人学习hadoop大数据技术的一个原因。那我们在学习阶段,如何准备这个环境呢? 在学习的初期阶段,我们主要目的是为了了解大数据组件的基本架构和原理,重点是站在应用角度学习如何使用hadoop大数据系统,包括命令行操作和编写代码进行操作。好在hadoop在开发阶段并不需要一定要有集群的环境,而是可以在一台机器(即单节点)下进行相关的开发和功能测试。 实际上,单机环境的搭建也是集群环境搭建的基础,只有先熟悉单机环境的搭建,才有可能掌握集群环境的搭建。另外在开发阶段,通常都是在单机环境下进行开发和测试通过后,基本上不用修改代码就能运行到集群环境下。 因此,我们这个系列的学习,无论是搭建环境,还是使用测试,都是在一台Linux机器(即单节点环境)下进行的。 掌握了单机环境下的安装和应用,如果要学习在集群环境下如何使用hadoop,也不是很麻烦的事。比较简单的方式可以利用虚拟机,在一台机器上创建多个虚拟机来搭建集群环境,当然这个对机器的性能配置有要求。还有一种更简单的方式是使用docker,启动多个docker容器,把每个docker容器作为一个节点来看待。

二、环境配置

在我们的这个测试中,所使用的操作系统和hadoop版本如下: 1、操作系统:CentOS 7.2 2、JAVA版本:JAVA1.8 3、hadoop版本:2.7.6 这里下载的是二进制压缩包 hadoop-2.7.6.tar.gz

三、创建用户

我们需要确定用什么用户去运行hadoop,当然可以直接用root用户,只是一般不推荐这么做,一般会创建一个独立的用户来运行hadoop。假设我们会创建一个名称为hadoop的用户(用户名可任意取)。 在linux控制台下执行如下操作: 1、 运行useradd命令,添加用户,用户名为hadoop,命令如下: useradd hadoop 2、运行passwd命令,为hadoop用户设置密码,命令如下: passwd hadoop 3、给hadoop用户增加sudo权限,这样可以使用sudo来执行root用户的权限才能执行的命令,在/etc/sudoers文件中找到如下语句 root ALL=(ALL:ALL) ALL 然后在上面语句的下面添加一行如下内容 hadoop ALL=(ALL:ALL) ALL 说明:从下面开始,没有特别说明的情况下,所有的操作都是以hadoop用户登陆后进行操作的。

四、配置SSH

因为hadoop的启动运行,需要用到ssh登陆,为了避免每次都输入密码,可以设置ssh免密码登陆。 首先测试本机的ssh是否安装,以及ssh服务是否正常启动。当前登陆用户为前面创建的hadoop用户,在控制台下执行如下命令: ssh localhost 一般会提示输入hadoop用户密码,如果输入正确密码后,显示登陆成功,表示ssh一切正常。执行exit命令可以退出ssh。 这时我们可以通过如下的设置来达到ssh无密码登陆。 1、用hadoop用户登陆后,执行如下命令 ssh-keygen -t rsa -P “” 会出现各种提示,一路回车,如果提示是否覆盖已存在的文件,选择覆盖。上述命令会生成一对公钥/私钥,私钥存在 ~/.ssh/id_rsa文件中,公钥存在~/.ssh/id_rsa.pub文件中。~是hadoop用户的主目录,即/home/hadoop目录。

2、要想用ssh无密码登陆机器,需要确保公钥存放在用户打算连接的所有机器的~/.ssh/authorized_keys文件中。因为我们是登陆本机,执行下面命令: cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 上面linux命令是将 ~/.ssh/id_rsa.pub 文件中的内容添加到~/.ssh/authorized_keys文件的后面,如果~/.ssh/authorized_keys文件不存在,会新建该文件。

3、设置权限,因为SSH进行认证的过程中除了对用户目录有权限要求外,对 .ssh 文件夹和 authorized_keys 文件同样也要限制,执行如下命令: sudo chmod 700 /home/hadoop/.ssh sudo chmod 600 /home/hadoop/.ssh/authorized_keys 说明:如果当前用户是hadoop用户,可能没有执行chmod的权限,所以加上sudo命令。

4、测试 ssh localhost 如果上面命令不需要输入密码,则说明设置成功

五、hadoop安装

假设我们已经下载好了二进制压缩包,如hadoop-2.7.6.tar.gz 文件。 1、解压文件,执行如下命令 tar –zxvf hadoop-2.7.6.tar.gz 上述命令会生成一个目录 hadoop-2.7.6 ,目录中有如下子目录和文件: bin data etc include lib libexec LICENSE.txt logs NOTICE.txt README.txt sbin share 2、利用linux命令将hadoop-2.7.6目录移到自己想放置的位置,目录名也可以修改。当然也可以不做任何变动。这里我们假设最后的hadoop安装位置是/home/hadoop-2.7.6 3、设置hadoop用户为hadoop-2.7.6目录及下面子目录和文件的所有者,命令如下: sudo chown -R hadoop:hadoop hadoop-2.7.6 4、修改hadoop配置文件,设置JAVA_HOME路径 hadoop的配置文件都在hadoop-2.7.6目录下的etc/hadoop下,在该目录下找到其中的hadoop-env.sh文件,打开该文件,找到如下的内容 export JAVA_HOME=${JAVA_HOME} 然后将${JAVA_HOME}更改为本机的jdk路径。说明,即使有JAVA_HOME环境变量,也需要进行设置为具体的路径。如设置为: export JAVA_HOME=/home/data/jdk1.8.0_102 说明:上面只是举例,需要根据本机jdk的安装位置设置正确的目录。

5、设置hadoop用户的环境变量 进入 /home/hadoop目录,修改.bash_profile文件,增加如下的环境变量: export HADOOP_INSTALL=/home/hadoop-2.7.6 export HADOOP_HOME=/home/hadoop-2.7.6 PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HADOOP_INSTALL/bin:$HADOOP_INSTALL/sbin export PATH 说明:上面的/home/hadoop-2.7.6路径只是例子, 需要改成实际的hadoop版本所安装(放置)的位置。

5、进行测试 以hadoop用户登陆,执行如下命令: hadoop version 如果一切正常,上面命令会输出正确的hadoop版本等信息,说明前面的配置一切正确。hadoop是一个可执行程序,位于hadoop安装目录的bin目录下。因为前面的操作已经将hadoop目录下的bin和sbin目录加到PATH环境变量中,所以可以在任何当前命令下执行hadoop程序。 上述命令的输出如下: Hadoop 2.7.6 Subversion https://[email protected]/repos/asf/hadoop.git -r 085099c66cf28be31604560c376fa282e69282b8 Compiled by kshvachk on 2018-04-18T01:33Z Compiled with protoc 2.5.0 From source with checksum 71e2695531cb3360ab74598755d036 This command was run using /home/hadoop-2.7.6/share/hadoop/common/hadoop-common-2.7.6.jar

六、hadoop运行模式

hadoop可以有三种运行模式:

(一)、独立(本地)模式

在该模式下不需要事先启动任何服务(守护进程),数据存在本地磁盘,可以执行hdfs的文件操作命令,但操作的是本地磁盘。这种模式下可以很方便的运行和调试mapreduce程序,因为是在一个jvm上执行的,可以很方便的单步跟踪等。这样我们可以在本地模式下编写调试Mapreduce程序后,然后移植到集群环境下,基本上也不需要修改很多代码。 独立模式是默认的方式,前面的工作完成后,我们不再需要额外做任何配置就可以在独立模式下工作。 这时我们可以直接在命令行下执行hdfs命令,如执行命令: hadoop fs -ls / 该命令会列出本地系统根目录(/)下的所有目录和文件,和直接执行linux下的命令 ls -al / 命令输出的信息类似。 说明:hadoop fs可以带各种参数来执行hdfs的各种操作。 我们也可以执行如下命令: hadoop fs -mkdir /home/hadoop/hello 上面命令会在hadoop用户的主目录 /home/hadoop下创建一个新的目录hello。 总结下,也就是说在独立模式下执行 hadoop fs命令,就等同于执行linux本地的文件系统命令。如果要学习hdfs的各项命令,这是一种最简单方便的方式。更多的hdfs操作命令我们会在后面的hdfs组件学习中详细介绍。 在该模式下如何编写mapreduce程序我们会在后面的mapreduce学习中单独介绍。

(二)单机模式(伪分布模式)

在该模式下,只需要一台linux机器,需要在本地启动服务(如hdfs服务和yarn服务,对应多个进程),这是模拟一个小规模的集群。在这种模式下,从使用和开发角度看,其实和真正的多台机器上的集群模式没有太多差别。 如本文开头所说,我们这系列的学习,都是在单机模式下进行的。如何进行单机模式的配置和启动,我们在下面的章节单独进行介绍。

(三)全分布模式(集群模式)

这种模式下,hadoop服务运行在一个集群(多台机器)上,此模式环境搭建需要更多操作,也需要更多的配置。具体如何做本文不做介绍。

七、单机模式

要hadoop在单机模式上运行,我们要进行一系列的配置和操作,下面进行详细介绍。

(一)修改配置文件

我们先需要对hadoop的几个配置文件进行相关的设置。hadoop所有的配置文件都位于安装目录的etc/hadoop目录下。具体设置如下: 1、修改配置文件core-site.xml 该文件初始情况下其xml根节点configuration下没有信息,我们需要加上如下的信息: fs.defaultFS hdfs://localhost/

2、修改配置文件hdfs-site.xml,修改后的内容如下: dfs.replication 1

3、修改配置文件mapred-site.xml,可能该文件不存在,而存在mapred-site.xml.template文件,就把mapred-site.xml.template文件改名为mapred-site.xml即可。修改后的文件内容如下: mapreduce.framework.name yarn

4、修改配置文件yarn-site.xml,修改后的文件内容如下: yarn.resourcemanager.hostname localhost yarn.nodemanager.aux-services mapreduce_shuffle

hadoop有大量的参数,每个参数都有一个名字(如yarn.resourcemanager.hostname)和对应的值(如localhost)。这些参数都有默认值,如果我们不想使用默认值,就可以在配置文件中进行配置,如上面的配置文件中的设置。hadoop在启动时,会把这些参数的值加载到程序中,供服务启动和运行时使用。hadoop的参数有些在启动后不能改变,有些还可以启动后通过编写程序进行动态设置。 上面一共修改了hadoop的4个配置文件,涉及到最少的几个参数,我们暂时不用管这些参数的含义。在后面的学习中我们还会涉及到更多的参数,到时会了解各个参数具体的含义和作用。

(二)格式化文件系统

配置文件修改好后,我们还需要进行一步操作,就是在首次使用hadoop的分布式文件系统hdfs之前,必须先格式化文件系统。只需要执行如下的命令: hdfs namenode -format 执行上述命令,会有很多信息输出,如果没有错误信息出现,说明操作成功。

(三)启动和停止服务

独立模式下,需要启动相应的服务。一共有两个服务,一个是hdfs服务,也就是分布式文件系统服务;另一个是yarn服务。 这两个服务可以通过执行 start-all.sh脚本全部启动起来 ,该脚本位于hadoop安装目录的sbin目录下,因为sbin目录在前面的设置中已经加到PATH环境变量下,所以我们可以在任何当前目录运行该脚本。该脚本运行中,会有很多日志信息在控制台上输出,日志信息会写入到hadoop安装目录下的logs目录下,如果有错误信息,一般就是到日志中查看原因。 执行脚本完毕后,我们可以执行jps命令,(jps是java的一个工具,可用来查看有哪些java进程启动了),正常输出的信息中会包含如下条目信息: 9105 NameNode 9973 NodeManager 9319 DataNode 9594 SecondaryNameNode 9853 ResourceManager 上述进程就是hdfs和yarn服务启动后的进程。 如果我们想停止hdfs和yarn服务,可以执行stop-all.sh脚本来停止这些服务。当然服务停止后就不可用了。 除了通过start-all.sh和stop-all.sh脚本来启动和停止hdfs和yarn服务外。还可以单独执行start-dfs.sh脚本来启动hdfs服务(对应的停止服务的脚本为stop-dfs.sh脚本);执行start-yarn脚本来执行yarn服务(对应的停止服务的脚本为stop-yarn.sh脚本)。

(四)进行测试

服务启动后,我们可以进行相应的测试。我们可以执行一些hdfs命令来查看hdfs服务是否启动正常,如: [hadoop@localhost ~]$ hadoop fs -ls / [hadoop@localhost ~]$ hadoop fs -mkdir /hello [hadoop@localhost ~]$ hadoop fs -ls / Found 1 items drwxr-xr-x - hadoop supergroup 0 2018-11-07 17:31 /hello [hadoop@localhost ~]$ hadoop fs -put test.txt /hello [hadoop@localhost ~]$ hadoop fs -ls /hello Found 1 items -rw-r--r-- 1 hadoop supergroup 5 2018-11-07 17:32 /hello/test.txt 下面我们来简单解释下上述操作的含义。 先了解下hdfs分布式文件系统的文件目录结构,hdfs文件目录结构和linux系统的文件目录结构类似,根目录为 / ,下面就是一层层的目录和文件。如果对linux文件系统了解的话,就很容易理解hdfs的文件系统目录结构。 1、上面命令先执行了 hadoop fs -ls / ,这是用于查看根目录/下的内容,显然因为环境刚搭建,根目录下没有任何内容。 2、再执行了hadoop fs -mkdir /hello,这是在根目录下创建了hello目录。 3、再次执行hadoop fs -ls / ,可以看出,显示出/目录下有了hello目录,就是我们上一步创建的目录,这说明上一步创建目录成功了。 4、再执行hadoop fs -put test.txt /hello ,该命令的作用是把本地当前目录下的test.txt文件(前提这个文件得存在)上传到hdfs文件系统下的/hello目录下。 5、再次执行 hadoop fs -ls /hello ,可以看到 hdfs的 /hello目录下有了一个test.txt文件。

通过上面简单的操作,我们可以看出,从使用角度看,hdfs分布式文件系统和linux本地文件系统非常类似,只不过正常情况下,hdfs分布式文件系统下的各个文件是存储在不同的节点(机器)上。更详细的hdfs操作我们在后面的学习中会详细介绍,这里只是为了验证我们的环境搭建是否正常。

本文是我们后面后续学习的基础,我们后面的所有学习都是在本文搭建的单机模式环境基础上进行的。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3