ubuntu下安装配置hadoop

2018-12-05  本文已影响0人  张沐之_

1 安装JDK


首先是安装和配置JDK环境变量.
我这里使用的是jdk-8u191-linux-x64.tar.gz.可以自己到oracle的官网下载合适的jdk版本.

$ sudo mkdir /usr/lib/jvm/
$ sudo tar -zxvf jdk-8u191-linux-x64.tar.gz -C /usr/lib/jvm/
$ sudo vim /etc/profile

在打开的profile文件中设置JAVA_HOME和PATH变量:

#set JAVA environment
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_192
export PATH=$JAVA_HOME/bin:$PATH

在终端中输入source /etc/profile使之生效.

$ java -version

会有如下输出,说明配置成功

java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

2 安装hadoop


从hadoop官网上下载hadoop包,我这里使用的是hadoop-2.9.2.tar.gz.
输入以下命令,解压到安装目录中,我这里的安装目录是/opt/hadoop.

$ mkdir /opt/hadoop
$ sudo tar -zxf /home/xxx/Downloads/hadoop-2.9.2.tar.gz -C /opt/hadoop/

主要,这里创建的/opt/hadoop,以及解压后的hadoop文件是属于root用户的.而我日常是用个人用户登录的,所以为了方便使用,我用以下命令将hadoop的所有者权限改为个人用户usr1.

$ sudo chown -R usr1:usr1 /opt/hadoop/

3 配置hadoop


3.1 配置hadoop环境变量

用`vim /etc/profile'打开配置文件,和配置java环境变量一样,在/etc/profile文件上增加以下内容:

# set Hadoop environment
export HADOOP_HOME=/opt/hadoop/hadoop-2.9-2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

注意sbin文件夹中包含运行hadoop daemonds的脚本,因此应该被添加到环境变量中.

3.2 在hadoop环境文件中设置java路径

我们需要在hadoop-env.sh,mapred-env.sh和yarn-env.sh文件中设置java的路径,以使hadoop能找到安装的java虚拟机.
用如下命令打开相应的xxx-env.sh文件:

$ sudo vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh 

在打开的xxx-env.sh文件中,修改JAVA_HOME,如下:

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_191

hadoop有单机模式(standalone or local model),伪分布式模式(pseudodistributed mode)和真实分布式模式(fully distributed mode)三种部署方式.单机模式是指仅在一台计算机上部署,不采用计算机群;伪分布式模式是通过多进程模拟出一种计算机群组的假象,但仍然是在同一台计算机上部署,由于单个计算机进程数目有限,因此其模拟的计算机集群数目也比较小.真实分布式模式是在有多台计算机组成的计算机群组中进行部署,也是实际生产中采用的模式.单机模式和伪分布式模式由于在一台计算机上部署,比较适合用于hadoop的学习和开发调试.
上述过程就已经完成了单机模式的部署.下面的介绍是伪分布式模式需要进行的过程.而对于真实分布式模式,本篇不做介绍.

4 伪分布式模式配置hadoop

首先,我们进入hadoop的etc/hadoop/目录:

$ cd $HADOOP_HOME/etc/hadoop

我们需要对该目录下的core-site.xml,hdfs-site.xml,mapred-site.xml和yarn-site.xml文件进行配置.

4.1 配置core-site.xml

打开core-site.xml文件:

$ vim core-site.xml

<configuration></configuration>对中添加一下内容:

        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://localhost</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/opt/hadoop/data/tmp</value>
        </property>

其中fs.defaultFS表示默认的文件系统,这里设置为hdfs://localhost,表示配置在本机的hdfs系统.
hadoop.tmp.dir指定hadoop的临时文件夹,默认在/tmp/hadoop-${user.name}文件夹下,我这里设置为/opt/hadoop/data/tmp.如果没有这个文件夹,需要通过以下命令创建:

$ mkdir -p /opt/hadoop/data/tmp/

至于为什么要修改默认的tmp目录,我看到的说法是NameNode会将HDFS的元数据存储在tmp文件夹下.如果采用默认的/tmp/hadoop-username,系统默认的/tmp文件夹在操作系统重启后会被清空,这样会导致Namenode元数据丢失,因此应该予以修改.

4.2 配置hdfs-site.xml

vim打开hdfs-site.xml文件,在<configuration></configuration>对中添加一下内容:

    <property>
       <name>dfs.replication</name>
       <value>1</value>
    </property>

dfs.replication配置的是HDFS存储是的备份数量,这里设置为1.

4.2.1 格式化namenode

上述配置完成后,需要对namenode进行格式化,格式化命令如下:

$ hdfs namenode -format

格式化后,查看core-site.xml里hadoop.tmp.dir(这里是/opt/hadoop/data/tmp)文件夹下有没有dfs目录,如果有,说明格式化成功.

4.2.2 启动节点

$ hadoop-daemon.sh start namenode
starting namenode, logging to /opt/hadoop/hadoop-2.9.2/logs/hadoop-xxx-namenode-ubuntu.out
$ hadoop-daemon.sh start datanode
starting datanode, logging to /opt/hadoop/hadoop-2.9.2/logs/hadoop-xxx-datanode-ubuntu.out
$ hadoop-daemon.sh start secondarynamenode
starting secondarynamenode, logging to /opt/hadoop/hadoop-2.9.2/logs/hadoop-xxx-secondarynamenode-ubuntu.out

第一行是终端输入的命令,第二行是终端给出的输出反馈.第二行的xxx是你的用户名.
然后我们可以通过jps命令查看各个节点是否开启:

$ jps
82113 Jps
81892 DataNode
82007 SecondaryNameNode
81785 NameNode

五位数字代表进程号,后面跟着的是进程名.可以看到DataNode,SecondaryNameNode和NameNode已成功开启.五个相应进程没有出现在jps命令的输出中,说明该节点没有被成功打开.

4.3 配置mapred-site.xml

默认没有mapred-site.xml文件,但有个mapred-site.xml.template配置模板文件.复制模板生成mapred-site.xml,命令如下:

$ cd $HADOOP_HOME/etc/hadoop/
$ cp mapred-site.xml.template  mapred-site.xml

vim打开mapred-site.xml,在<configuration></configuration>块中添加以下内容:

<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>

指定mapreduce运行在yarn框架上.

4.4 配置yarn-site.xml

vim打开yarn-site.xml,<configuration></configuration>块中添加以下内容:

<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>localhost</value>
 </property>

yarn.nodemanager.aux-services配置了yarn的默认混洗方式,选择为mapreduce的默认混洗算法。
yarn.resourcemanager.hostname指定了Resourcemanager运行在哪个节点上。

$ yarn-daemon.sh start resourcemanager
starting resourcemanager, logging to /opt/hadoop/hadoop-2.9.2/logs/yarn-xxx-resourcemanager-ubuntu.out
$ yarn-daemon.sh start nodemanager
starting nodemanager, logging to /opt/hadoop/hadoop-2.9.2/logs/yarn-xxx-nodemanager-ubuntu.out
$ jps
84576 ResourceManager
81892 DataNode
82007 SecondaryNameNode
81785 NameNode
85021 Jps
84861 NodeManager

5 一些操作

5.1 HDFS上测试创建目录,上传,下载文件

$ hdfs dfs -mkdir /demo1
$ hdfs dfs -ls /
Found 2 items
drwxr-xr-x   - yourusername supergroup          0 2018-12-04 22:03 /demo1
drwx------   - yourusername supergroup          0 2018-12-04 22:48 /tmp

可以看见,刚刚创建的/demo1已经存在.

$ hdfs dfs -put $HADOOP_HOME/etc/hadoop/core-site.xml /demo1
$ hdfs dfs -ls /demo1
Found 1 items
-rw-r--r--   1 yourusername supergroup        954 2018-12-04 22:03 /demo1/core-site.xml
$ hdfs dfs -cat /demo1/core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop/data/tmp</value>
    </property>
</configuration>
$ mkdir test
$ hdfs dfs -get /demo1/core-site.xml ./test
$ ls ./test
core-site.xml    

5.2 运行一个MapReduce Job

在Hadoop的share目录里,自带了一些jar包,里面带有一些mapreduce实例小例子,位置在share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar,可以运行这些例子体验刚搭建好的Hadoop平台,我们这里来运行最经典的WordCount实例。

hadoop mapreduce hive 
hbase spark storm 
sqoop hadoop hive 
spark hadoop
$ hdfs dfs -mkdir -p /wordcountdemo/input
$ hdfs dfs -put /opt/data/wc.input /wordcountdemo/input
$ cd $HADOOP_HOME
$ yarn jar share/hadoop/mapreduce/hadoop-mapraduce-examples-2.9.2.jar wordcount /wordcountdemo/input /wordcountdemo/output/
$ hdfs dfs -ls /wordcountdemo/output
-rw-r--r--   1 yourusername supergroup          0 2018-12-04 22:50 /wordcountdemo/output/_SUCCESS
-rw-r--r--   1 yourusername supergroup         60 2018-12-04 22:50 /wordcountdemo/output/part-r-00000

output目录中有两个文件,_SUCCESS文件是空文件,有这个文件说明Job执行成功.
part-r-00000文件是结果文件,其中-r-说明这个文件是Reduce阶段产生的结果,mapreduce程序执行时,可以没有reduce阶段,但是肯定会有map阶段,如果没有reduce阶段这个地方是-m-.
一个reduce会产生一个part-r-开头文件.
part-r-00000文件内容如下:

$ hdfs dfs -cat /wordcountdemo/output/part-r-00000
hadoop  3
hbase   1
hive    2
mapreduce   1
spark   2
sqoop   1
storm   1

5.3 停止hadoop

$ hadoop-daemon.sh stop namenode
stopping namenode
$ hadoop-daemon.sh stop datanode
stopping datanode
$ yarn-daemon.sh stop resourcemanager
stopping resourcemanager
$ yarn-daemon.sh stop nodemanager
stopping nodemanager

参考

  1. 史上最详细的Hadoop环境搭建
  2. Hadoop: The Definitive Guide, 4th Edition, 679-682
上一篇下一篇

猜你喜欢

热点阅读