Power by GeekHades

Hadoop学习笔记——在Linux上安装Hadoop3.x

前言

Hadoop是一个分布式计算平台,Apache的顶级项目之一。尽管Hadoop可以运行在Linux、Windows或者其他类Unix系统上,但是Hadoop官方真正支持的作业平台只有Linux,因此为了保证整个Hadoop学习过程的通畅性,直接选择Linux作为主要学习系统环境。

系统环境

  • 系统:ubuntu 16.04 LTS (64 bit)

安装步骤:

  1. 在官网下载最新的Hadoop Binary包。目前最新版本是3.1.2,下载地址
  2. 安装Java,本文使用openjdk 1.8。在命令行中键入下面提供的命令即可安装。 sudo apt-get install openjdk-8-jdk openjdk-8-jre
  3. 设置SSH登录权限。因为Hadoop的伪分布和全分布的启动模式,NameNode需要启动集群中所有机器的Hadoop守护进程,这个过程可以通过SSH登录来实现,但是Hadoop并没有提供SSH输入密码的登录形式,因此需要配置无密码登录。
  4. 单机安装配置。
  5. 伪分布式安装配置。

部署过程

Java

使用安装步骤-2中的命令安装完Java需要Mark一下Java安装目录路径,也就是JAVA_HOMEJAVA_HOME在Hadoop的环境配置文件中需要替换为本机的路径。 例如我本机的JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

SSH配置

  1. 如果是新安装的ubuntu可能需要使用 sudo apt-get install openssh-server 命令来安装openssh,否则在使用ssh登录时会出现port 22 refuse的错误。
  2. 使用ssh-keygen -t rsa -P ''命令来生成一条SSH密钥。(保存路径随意,本文使用的是默认的.ssh/id_rsa)
  3. 将上一步生成的公钥文件追加入~/.ssh/authorized_keys文件中 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  4. 完成以上步骤后使用ssh localhost命令检测是否完成无密码登录配置。

Hadoop配置

解压下载的Hadoop包,将其放至合适的路径中,本文的Hadoop目录路径是/usr/local/hadoop。(以下每一步都需要在Hadoop工作目录中进行) 1. 最重要的事情是先将JAVA_HOME配置入Hadoop的环境脚本文件中hadoop-evn.sh 脚本文件路径位于(your hadoop dir)/etc/hadoop/hadoop-env.sh,使用文本编辑工具打开此文件找到被注释掉的export JAVA_HOME=,将本机的Java目录键入保存文件即可。 2. 使用(your hadoop dir)/bin/hadoop version命令参看Hadoop是否可以正常运行。正常运行如下图所示。 check_version

单机运行例子

Hadoop提供了一个WordCount的例子,我们可以单机运行它。 具体步骤如下:在hadoop目录下创建一个input文件,用于存放输入数据;然后,将etc/hadoop文件夹下的所有xml文件拷贝一份进input文件夹中,最后运行wordcount例子,将产生结果存放至output目录下,具体代码如下:

$ cd (your hadoop dir)
$ mdkir input
$ cp etc/hadoop/*.xml input
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar grep input output 'dfs[a-z]+'

执行完毕后可以查看output文件中的结果 1 dfsadmin 不过需要注意的是当需要再次运行上面的代码段时需要先删除output文件夹,因此Hadoop并不会覆盖结果,如果已经存在可能报错。

伪分布式运行

伪分布式是指在一台机器上模拟一个小的集群,此集群只有一个节点。一台机器上也可以实现全分布式部署,只要在一台机器安装多个Linux虚拟机,每个虚拟机成为一个节点即可。但是不论是伪分布式还是全分布都需要修改配置文件使得各组件能够协同工作。Hadoop中的重要配置文件如下表:

文件名称 格式 文件描述
hadoop-env.sh Bash脚本 记录配置Hadoop运行所需的环境变量
core-site.xml Hadoop config xml Hadoop core 的配置向,如HDFS和MapReduce常用的I/O设置
hdfs-site.xml Hadoop config xml Hadoop守护进程的配置文件,包括NameNode、SecondaryNameNode和DataNode等
mapred-site.xml Hadoop config xml MapReduce的守护进程的配置文件,包括JobTracker和TaskTracker
masters 纯文本 运行SecondaryNameNode的机器列表(每行一个)
slaves 纯文本 运行DataNode和TaskTracker的机器列表(每行一个)
hadoop-metrics.properties Java属性 控制metrics在Hadoop如何发布的属性

对于伪分布式而言,我们需要修改core-site.xmlhdfs-site.xml这两个文件 core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>file:///usr/local/hadoop/tmp</value>
    <decription>My temporary directories</decription>
  </property>
  <property>
    <name>fs.defaultFS</name>
    <!--本文将hdfs地址设置在9000端口。-->
    <value>hdfs://localhost:9000</value>
  </property>
</configuration>

hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<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>

将以上两个文件修改完成后使用$ bin/hadoop namenode -format命令即可完成初始化,只要最后的结果包含Exiting with status 0即说明初始化成功。

之后运行$ sbin/start-all.sh即可启动Hadoop所有的进程,如下图 start_all

也可以使用jps命令查看所有运行的JAVA程序

最后在浏览器中打开http://localhost:9870即可查看Hadoop信息,如下图所示:(在3.x之前的版本Hadoop的Web端都是部署在50070端口,3.x之后的在9870,这点需要读者注意!)

web_info

最后祝大家身体健康、学业进步和工作顺利。



* 如果你对文章有任何意见或建议请发 邮件 给我!
* if you have any suggestion that you could send a E-mail to me, Please!