ubuntu下安装配置hadoop

1 安装JDK


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

  • 解压到指定目录
    我这里是/usr/lib/jvm/,解压后的java文件夹是jdk1.8.0_191.安装目录可以自己设定.
$ sudo mkdir /usr/lib/jvm/
$ sudo tar -zxvf jdk-8u191-linux-x64.tar.gz -C /usr/lib/jvm/
  • 设置java环境变量
    在终端输入
$ 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 启动节点

  • 启动namenode
$ hadoop-daemon.sh start namenode
starting namenode, logging to /opt/hadoop/hadoop-2.9.2/logs/hadoop-xxx-namenode-ubuntu.out
  • 启动datanode
$ hadoop-daemon.sh start datanode
starting datanode, logging to /opt/hadoop/hadoop-2.9.2/logs/hadoop-xxx-datanode-ubuntu.out
  • 启动secondarynamenode
$ 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运行在哪个节点上。

  • 启动Resourcemanager
$ yarn-daemon.sh start resourcemanager
starting resourcemanager, logging to /opt/hadoop/hadoop-2.9.2/logs/yarn-xxx-resourcemanager-ubuntu.out
  • 启动nodemanager
$ yarn-daemon.sh start nodemanager
starting nodemanager, logging to /opt/hadoop/hadoop-2.9.2/logs/yarn-xxx-nodemanager-ubuntu.out
  • 通过jps查看是否启动成功
$ jps
84576 ResourceManager
81892 DataNode
82007 SecondaryNameNode
81785 NameNode
85021 Jps
84861 NodeManager

5 一些操作

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

  • 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上
    这里我们把上面用到过的core-site.xml文件上传到刚刚创建的/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上的文件内容
    这里我们读取刚刚上传的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>
  • 从HDFS上下载文件到本地
$ 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实例。

  • 创建测试用文件
    在本地/opt/data/目录下创建一个wc.input文件,内容如下:
hadoop mapreduce hive 
hbase spark storm 
sqoop hadoop hive 
spark hadoop
  • 创建输入目录,命令如下:
$ hdfs dfs -mkdir -p /wordcountdemo/input
  • 将wc.input上传到输入目录中,命令如下:
$ hdfs dfs -put /opt/data/wc.input /wordcountdemo/input
  • 运行wordcount
$ 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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容