前言:
这个Hadoop的安装和使用操作起来很容易出错,反正各种的问题,所以在实验过程中需要细心、重复,有的时候是机器的问题,还有配置的问题。
下面我讲一下我遇到的坑!


第3章 Hadoop的安装和使用

注:本教程全部统一采用hadoop用户名登录Linux系统,用户名:hadoop 密码:hadoop

3.1 安装 Hadoop 前的准备工作

本节介绍安装Hadoop之前的一些准备工作,包括更新APT、安装SSH和安装Java环境等。

3.1.1 更新 APT

为了确保Hadoop安装过程顺利进行,建议执行下面命令更新APT软件:

$ sudo apt-get update

3.1.2 安装 SSH

Ubuntu默认已安装了SSH客户端,因此,这里还需要安装SSH服务端,请在Linux的终端中执行以下命令:

$ sudo apt-get install openssh-server

deb hadoop 安装 hadoop安装详细步骤_HDFS

安装后,可以使用如下命令登录本机:

$ ssh localhost

执行该命令后会,会出现“yes/no”选择提示,输入“yes”,然后按提示输入密码hadoop,就登录到本机了。

然后,请输入命令“exit”退出刚才的SSH,就回到了原先的终端窗口;然后,可以利用ssh-keygen生成密钥,并将密钥加入到授权中,命令如下:

$ cd ~/.ssh/        # 若没有该目录,请先执行一次ssh localhost
$ ssh-keygen -t rsa    # 会有提示,都按回车即可
$ cat ./id_rsa.pub >> ./authorized_keys  # 加入授权

此时,再执行ssh localhost命令,无需输入密码就可以直接登录了。

3.1.3 安装 Java 环境

在Linux终端中,执行如下命令:

$ sudo apt-get install default-jre default-jdk

上述安装过程需要访问网络下载相关文件,请保持联网状态。安装结束以后,需要配置JAVA_HOME环境变量,请在Linux终端中输入下面命令打开当前登录用户的环境变量配置文件.bashrc:

$ vim ~/.bashrc

在文件最前面添加如下单独一行(注意,等号“=”前后不能有空格),然后 保存退出
export JAVA_HOME=/usr/lib/jvm/default-java

注意:保存退出,按insert才能添加内容;添加完毕后,按esc键退出添加状态;然后直接键盘输入:wq,这个在哪输入都可以;这样就保存退出了

接下来,要让环境变量立即生效,请执行如下代码:

$ source ~/.bashrc    # 使变量设置生效

执行上述命令后,可以检验一下是否设置正确:

$ echo $JAVA_HOME     # 检验变量值
$ java -version
$ $JAVA_HOME/bin/java -version  # 与直接执行java -version一样

至此,就成功安装了Java环境。下面就可以进入Hadoop的安装。


3.2 安装Hadoop

Hadoop包括三种安装模式:

单机模式:只在一台机器上运行,存储是采用本地文件系统,没有采用分布式文件系统HDFS;
伪分布式模式:存储采用分布式文件系统HDFS,但是,HDFS的名称节点和数据节点都在同一台机器上;
分布式模式:存储采用分布式文件系统HDFS,而且,HDFS的名称节点和数据节点位于不同机器上。
本节介绍Hadoop的具体安装方法,包括下载安装文件、单机模式配置、伪分布式模式配置、分布式模式配置等。

3.2.1 下载安装文件

到Hadoop官网下载安装文件hadoop-2.7.1.tar.gz,假设下载得到的安装文件为hadoop-2.7.1.tar.gz。下载完安装文件以后,需要对文件进行解压。按照Linux系统使用的默认规范,用户安装的软件一般都是存放在“/usr/local/”目录下。请使用hadoop用户登录Linux系统,打开一个终端,执行如下命令:

$ cd  ~/下载     # 进入下载目录
$ wget http://10.132.239.12:8000/file/hadoop-2.7.1.tar.gz  # 下载hadoop软件
$ sudo tar -zxf ~/下载/hadoop-2.7.1.tar.gz -C /usr/local   # 解压到/usr/local中
$ cd /usr/local/
$ sudo mv ./hadoop-2.7.1/ ./hadoop      # 将文件夹名改为hadoop
$ sudo chown -R hadoop ./hadoop       # 修改文件权限

Hadoop解压后即可使用,可以输入如下命令来检查 Hadoop是否可用,成功则会显示 Hadoop版本信息:

$ cd /usr/local/hadoop
$ ./bin/hadoop version

3.2.2 单机模式配置

Hadoop默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。Hadoop附带了丰富的例子,运行如下命令可以查看所有例子:

$ cd /usr/local/hadoop
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar

上述命令执行后,会显示所有例子的简介信息,包括grep、join、wordcount等。这里选择运行grep例子,可以先在“/usr/local/hadoop”目录下创建一个文件夹input,并复制一些文件到该文件夹下,然后,运行grep程序,将 input文件夹中的所有文件作为grep的输入,让grep程序从所有文件中筛选出符合正则表达式“dfs[a-z.]+”的单词,并统计单词出现的次数,最后,把统计结果输出到“/usr/local/hadoop/output”文件夹中。完成上述操作的具体命令如下:

$ cd /usr/local/hadoop
$ mkdir input
$ cp ./etc/hadoop/*.xml ./input   # 将配置文件复制到input目录下
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
$ cat ./output/*          # 查看运行结果

执行成功后,输出了作业的相关信息,输出的结果是符合正则表达式的单词 “dfsadmin”出现了1次。

需要注意的是,Hadoop默认不会覆盖结果文件,因此,再次运行上面实例会提示出错。如果要再次运行,需要先使用如下命令把output文件夹删除:

$ rm -r ./output

3.2.3 伪分布式模式配置

Hadoop可以在单个节点(一台机器)上以伪分布式的方式运行,同一个节点既作为名称节点(NameNode),也作为数据节点(DataNode),读取的是分布式文件系统 HDFS 中的文件。

修改配置文件

deb hadoop 安装 hadoop安装详细步骤_deb hadoop 安装_02


这里修改配置文件:需要我们进入虚拟机左侧的文件计算机文件夹内,找到下面路径下面的文件,然后右击文件,选择打开方式vim,然后就可以进行编辑了,可以复制粘贴进去,在粘贴的时候需要右击鼠标才能粘贴哦~,然后同样的方法保存退出。

需要配置相关文件,才能够让Hadoop在伪分布式模式下顺利运行。Hadoop的配置文件位于“/usr/local/hadoop/etc/hadoop/”中,进行伪分布式模式配置时,需要修改2个配置文件,即core-site.xml和hdfs-site.xml。

可以使用vim编辑器打开core-site.xml文件,它的初始内容如下:

<configuration>
</configuration>

修改以后,core-site.xml文件的内容如下:

<configuration>
   <property>
       <name>hadoop.tmp.dir</name>
       <value>file:/usr/local/hadoop/tmp</value>
       <description>Abase for other temporary directories.</description>
   </property>
   <property>
       <name>fs.defaultFS</name>
       <value>hdfs://localhost:9000</value>
   </property>
</configuration>

在上面的配置文件中,hadoop.tmp.dir用于保存临时文件,若没有配置hadoop.tmp.dir这个参数,则默认使用的临时目录为“/tmp/hadoo-hadoop”,而这个目录在Hadoop重启时有可能被系统清理掉,导致一些意想不到的问题,因此,必须配置这个参数。fs.defaultFS这个参数,用于指定HDFS的访问地址,其中,9000是端口号。

同样,需要修改配置文件hdfs-site.xml,修改后的内容如下:

<configuration>
   <property>
       <name>dfs.replication</name>
       <value>1</value>
   </property>
   <property>
       <name>dfs.namenode.name.dir</name>
       <value>file:/usr/local/hadoop/tmp/dfs/name</value>
   </property>
   <property>
       <name>dfs.datanode.data.dir</name>
       <value>file:/usr/local/hadoop/tmp/dfs/data</value>
   </property>
</configuration>

执行名称节点格式化

修改配置文件以后,要执行名称节点的格式化,命令如下:

$ cd /usr/local/hadoop
$ ./bin/hdfs namenode -format

如果格式化成功,会看到“successfully formatted”和“Exitting with status 0”的提示信息,若为“Exitting with status 1”,则表示出现错误。

启动Hadoop

执行下面命令启动Hadoop:

$ cd /usr/local/hadoop
$ ./sbin/start-dfs.sh  #start-dfs.sh是个完整的可执行文件,中间没有空格

启动时可能会出现如下警告信息:

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable WARN
这个警告提示信息可以忽略,并不会影响Hadoop正常使用。

Hadoop启动完成后,可以通过命令 jps 来判断是否成功启动,命令如下:

$ jps

若成功启动,则会列出如下进程:NameNode、DataNode和SecondaryNameNode。

deb hadoop 安装 hadoop安装详细步骤_Hadoop_03

通过start-dfs.sh命令启动Hadoop以后,就可以运行MapReduce程序处理数据,此时是对HDFS进行数据读写,而不是对本地文件进行读写。

使用Web界面查看HDFS信息

Hadoop成功启动后,可以在Linux系统中(不是Windows系统)打开一个浏览器,在地址栏输入地址“http://localhost:50070”,就可以查看名称节点和数据节点信息,还可以在线查看 HDFS 中的文件。

deb hadoop 安装 hadoop安装详细步骤_deb hadoop 安装_04

运行Hadoop伪分布式实例

上面的单机模式中,grep例子读取的是本地数据,伪分布式模式下,读取的则是分布式文件系统HDFS 上的数据。要使用HDFS,首先需要在HDFS中创建用户目录(本教程全部统一采用hadoop用户名登录Linux系统),命令如下:

$ cd /usr/local/hadoop
$ ./bin/hdfs dfs -mkdir -p /user/hadoop

接着需要把本地文件系统的“/usr/local/hadoop/etc/hadoop”目录中的所有xml文件作为输入文件,复制到分布式文件系统HDFS中的“/user/hadoop/input”目录中,命令如下:

$ cd /usr/local/hadoop
$ ./bin/hdfs dfs -mkdir input  #在HDFS中创建hadoop用户对应的input目录
$ ./bin/hdfs dfs -put ./etc/hadoop/*.xml input  #把本地文件复制到HDFS中

复制完成后,可以通过如下命令查看HDFS中的文件列表:

$ ./bin/hdfs dfs -ls input

执行上述命令以后,可以看到input目录下的文件信息。

deb hadoop 安装 hadoop安装详细步骤_deb hadoop 安装_05

现在就可以运行Hadoop自带的grep程序,命令如下:

$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

运行结束后,可以通过如下命令查看HDFS中的output文件夹中的内容:

$ ./bin/hdfs dfs -cat output/*

需要强调的是,Hadoop运行程序时,输出目录不能存在,否则会提示如下错误信息:
org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists 因此,若要再次执行grep程序,需要执行如下命令删除HDFS中的output文件夹:

$ ./bin/hdfs dfs -rm -r output    # 删除 output 文件夹

关闭Hadoop

如果要关闭Hadoop,可以执行下面命令:

$ cd /usr/local/hadoop
$ ./sbin/stop-dfs.sh

下次启动Hadoop时,无需进行名称节点的初始化(否则会出错),也就是说,不要再次执行“hdfs namenode -format”命令,每次启动Hadoop只需要直接运行start-dfs.sh命令即可。

配置PATH变量

前面在启动Hadoop时,都要加上命令的路径,比如,“./sbin/start-dfs.sh”这个命令中就带上了路径,实际上,通过设置PATH变量,就可以在执行命令时,不用带上命令本身所在的路径。具体操作方法是,首先使用vim编辑器打开“~/.bashrc”这个文件,然后,在这个文件的最前面位置加入如下单独一行:

export PATH=$PATH:/usr/local/hadoop/sbin

添加后,执行命令“source ~/.bashrc”使设置生效。设置生效后,在任何目录下启动Hadoop,都只要直接输入start-dfs.sh命令即可,同理,停止Hadoop,也只需要在任何目录下输入stop-dfs.sh命令即可。

deb hadoop 安装 hadoop安装详细步骤_deb hadoop 安装_06