前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在Ubuntu上启动并运行Hadoop

在Ubuntu上启动并运行Hadoop

作者头像
大数据弄潮儿
发布2018-05-29 17:49:53
4.4K0
发布2018-05-29 17:49:53
举报
文章被收录于专栏:大数据大数据

Hadoop是一个用Java编写的框架,它允许在大型商品硬件集群上以分布式方式处理大型数据集。

Hadoop由Doug Cutting创建,他在阅读了2003年和2004年发布Google文档“ Google文件系统 ”和“ MapReduce:大型集群简化数据处理 ”后获得了Hadoop的灵感。

根据项目主页,Hadoop包含四个模块; Hadoop Common,Hadoop分布式文件系统(HDFS),Hadoop YARN和Hadoop MapReduce。围绕Hadoop构建出了一个完整的生态系统; 包括又Apache Hive,Apache Pig,Apache ZooKeeper等项目......

启动Hadoop集群的模式有三种:

  1. 本地(独立)模式
  2. 伪分布式模式
  3. 完全分布式模式

在这篇文章中,我的目标是让Hadoop在本地(独立)模式和伪分布式模式下运行在Ubuntu主机上。

Hadoop支持Linux作为开发和生产平台。由于Hadoop能够在任何Linux发行版上运行,我选择的平台是Ubuntu,但使用不同Linux发行版的读者也可以参照。请注意,环境配置可能因不同的分配而有所不同。

本文中,我将使用Ubuntu 14.04 LTS和Apache Hadoop 2.5.1。

前期准备

由于Hadoop是用Java编写的,Java应该安装在你的Ubuntu主机中。推荐的Java版本请参考此链接。在命令行中执行以下命令来检查您是否已经在您的机器上安装了Java。

代码语言:txt
复制
$ javac
$ java -version

如果你还没有安装Java,这个链接提供了一个很好的资源。

当你安装好了Java,您应该将JAVA_HOME/bin设置为您的PATH,来确保可以从命令行调用Java。如果想要永久保存JAVA_HOME环境变量,请使用以下命令打开~/ .profile文件。

代码语言:txt
复制
$ gedit ~/.profile

在该文件中添加以下行并保存。

代码语言:txt
复制
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
export PATH=$JAVA_HOME/bin

请注意,在编辑之后,您应该重新登录来初始化变量,但您也可以使用以下命令并在不重新登录的情况下使用该变量。也有许多不同的方法可以在Ubuntu中保存环境变量,请参阅此链接以进一步了解。

代码语言:txt
复制
$ source ~/.profile

下载Hadoop

1.从此链接下载最新的稳定版Hadoop版本。你很可能会下载一个名字类似Hadoop-2.5.1.tar.gz的文件;

2.我更喜欢将Hadoop安装在/usr/local目录中。使用以下命令解压下载的文件。

代码语言:txt
复制
tar -xf hadoop-2.5.1.tar.gz -C /usr/local/
  1. $ HADOOP_PREFIX/bin目录添加到您的PATH中,以确保可以从命令行调用Hadoop。遵循与添加JAVA_HOME变量相同的步骤,否则您就需要在~/ .profile文件中追加以下内容。
代码语言:txt
复制
export HADOOP_PREFIX=/usr/local/hadoop-2.5.0
export PATH=$HADOOP_PREFIX/bin:$PATH
  1. 在etc/hadoop/hadoop-env.sh文件中定义以下参数。
代码语言:txt
复制
$ export JAVA_HOME=/usr/lib/jvm/java-7-oracle$ export HADOOP_PREFIX=/usr/local/hadoop-2.5.1

6.如果执行以下命令显示Hadoop脚本的用法文档,那么您最好使用上述三种模式之一启动Hadoop集群。

7.

代码语言:txt
复制
$ hadoop

独立模式

Hadoop被默认配置为以单个Java进程运行,该进程在非分布式模式下运行。独立模式很容易进行测试和调试,所以在开发阶段通常很有用。此外,Hadoop的后台程序不会在此模式下启动。由于Hadoop的默认属性设置为独立模式,并且没有Hadoop后台进程可以运行,所以到这儿我们没有其他步骤可以执行了。

伪分布式模式

该模式以多个Hadoop后台程序在本地机器上运行来模拟小型集群。每个Hadoop后台程序都在单独的Java进程上运行。伪分布模式是全分布模式的一个特例。

要启用伪分布式模式,您需要编辑以下两个XML文件。这些XML文件在单个配置元素中包含多个属性元素。属性元素包含名称和值元素。

代码语言:txt
复制
etc/hadoop/core-site.xml
代码语言:txt
复制
etc/hadoop/hdfs-site.xml

编辑core-site.xml并修改以下属性。fs.defaultFS 属性保存的是NameNode的位置。

代码语言:txt
复制
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

编辑hdfs-site.xml并修改以下属性。dfs.replication 属性保存的是每个HDFS块应该被复制的次数。

代码语言:txt
复制
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

设置SSH

在典型的集群中,Hadoop用户应该能够在集群中的机器上执行命令,而不必为每一次登录输入密码。如果我们使用密码登录到集群中的机器,我们将不得不继续到每台机器并开始所有的流程。

就像我之前提到的,在伪分布式模式下,我们需要启动Hadoop守护进程。主机(单个)是本地主机,我们需要一种方式来登录本地主机而不需要输入密码并在那里启动Hadoop守护进程。要做到这一点,我们需要ssh,我们需要确保我们可以在不提供密码的情况下ssh到localhost。要允许无密码登录,我们需要创建一个密码为空的ssh密钥对。

ssh提供了一种使用基于密钥的身份验证来安全登录到远程系统而无需使用密码的方法。基于密钥的身份验证会创建一对密钥; 一个私钥和一个公钥。私钥将作为客户端机器的秘密保存。公钥可以放在你想访问的任何服务器上。简而言之,当客户端尝试连接到服务器时会发生什么情况,服务器将使用客户端的公钥生成一条消息给客户端,只有客户端可以使用它的私钥读取它。根据服务器从客户端获得的响应,服务器可以决定客户端是否被授权。

  1. Ubuntu已经预先将ssh打包在资源库中了,但我们需要先安装ssh才能启动sshd服务器。

使用以下命令安装ssh和sshd。

代码语言:txt
复制
$ sudo apt-get install ssh

使用以下命令验证安装。

代码语言:txt
复制
$ which ssh 
##Should print '/usr/bin/ssh'

$ which sshd
##Should print '/usr/bin/sshd'
  1. 检查你是否可以不用密码ssh到本地主机。
代码语言:txt
复制
$ ssh localhost

请注意,如果您在没有事先安装ssh的情况下尝试将ssh添加到localhost,则会显示一条错误消息'ssh:connect to host localhost port 22:Connection refused'。所以请确保要先安装ssh。

  1. 如果您无法通过密码SSH连接到本地主机,请使用以下命令创建一个ssh密钥对。
代码语言:txt
复制
$ ssh-keygen -t dsa -P'' -f~/.ssh/id_dsa
  1. 现在密钥对已经创建,请注意,id_rsa是私钥,id_rsa.pub是公钥,它们都保存在.ssh目录中。我们需要使用以下命令将新公钥添加到授权密钥列表中。
代码语言:txt
复制
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
  1. 连接到本地主机,并检查您是否可以在没有密码的情况下ssh到本地主机。
代码语言:txt
复制
$ ssh localhost

配置基本HDFS目录

core-site.xml 文件中的 hadoop.tmp.dir 属性将位置保存到基本HDFS目录。请注意,此属性配置不依赖于运行Hadoop的模式。hadoop.tmp.dir 属性的默认值为 /tmp,并且存在这样的风险,即某些linux发行版可能会在每次重新引导时丢弃本地文件系统中的 /tmp 目录的内容,并导致本地文件中的数据丢失系统,因此出于安全考虑,将基本目录的位置更改为非常可靠的位置是有意义的。

执行以下步骤来更改基本HDFS目录的位置。

  1. 为Hadoop创建一个目录以将其数据存储在本地,并将其权限更改为可由任何用户写入。
代码语言:txt
复制
$ mkdir /var/lib/hadoop 
$ chmod 777 /var/lib/hadoop
  1. 编辑 core-site.xml 并修改以下属性。
代码语言:txt
复制
<configuration> 
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/var/lib/hadoop</value>
    </property>
</ configuration>

格式化HDFS文件系统

在第一次以伪分布式模式启动Hadoop群集之前,我们需要先格式化HDFS文件系统。请注意,多次格式化文件系统将会删除现有的文件系统数据。

在命令行上执行以下命令来格式化HDFS文件系统。

代码语言:txt
复制
$ hdfs namenode -format 

启动NameNode守护进程和DataNode守护进程

代码语言:txt
复制
$ $HADOOP_PREFIX/sbin/start-dfs.sh 

现在您可以通过 http://localhost:50070/ 来访问问名称节点的Web界面。

创建主目录

在Hadoop中,每个用户的主目录都存储在 /user 目录下。

使用以下命令创建主目录。

代码语言:txt
复制
$ hdfs dfs -mkdir /user
$ hdfs dfs -mkdir /user/hadoop

请注意,这是一个明确的步骤,即使您没有执行此步骤,Hadoop将通过您登录到本地计算机的名称自动生成主目录。例如,如果我以用户名pavithra身份登录到本地计算机,HDFS中的主目录将为 /user/pavithra。所以为了利用前面的步骤,您应该以一个名为hadoop的用户身份登录到本地计算机。

开始MapReduce作业

  1. 使用以下命令在HDFS中创建输入目录。
代码语言:txt
复制
$ hdfs dfs -mkdir input
  1. 使用以下命令将输入文件复制到HDFS中。
代码语言:txt
复制
$ hdfs dfs -put $ HADOOP_PREFIX / etc / hadoop input
  1. 使用以下命令运行提供的MapReduced作业。
代码语言:txt
复制
$ hadoop jar $HADOOP_PREFIX/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.1.jar grep inpput output 'dfs+'

Hadoop本身会创建您在此命令中指定的输出目录。如果您正好指定的目录是HDFS中已经存在的目录,Hadoop将提示出现异常,指出“输出目录已存在”。Hadoop以此来确保以前作业的数据不会被当前作业的数据所替换覆盖。

  1. 使用以下命令将输出文件从HDFS复制到本地文件系统并查看它们。
代码语言:txt
复制
$ hdfs dfs -get output output
$ cat output/*

或者您可以使用以下命令查看HDFS自身的输出文件。

代码语言:txt
复制
$ bin/hdfs dfs -cat output/*

请注意,输出目录内的结果文件遵循part-nnnnn的命名约定。

  1. 使用以下命令停止守护进程。
代码语言:txt
复制
$ $HADOOP_PREFIX/sbin/stop-dfs.sh 
评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前期准备
  • 下载Hadoop
    • 独立模式
      • 伪分布式模式
        • 设置SSH
          • 配置基本HDFS目录
            • 格式化HDFS文件系统
              • 启动NameNode守护进程和DataNode守护进程
                • 创建主目录
                  • 开始MapReduce作业
                  相关产品与服务
                  多因子身份认证
                  多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                  http://www.vxiaotou.com