hadoop环境搭建

来源:互联网 发布:税务金三系统网络风险 编辑:程序博客网 时间:2024/05/18 23:56

本篇博客会记录下我第一次折腾hadoop的过程。作为一个初学者,我最初按照hadoop官网上的教程来搭建环境,中间出现了些问题,各种stackoverflow,最终成功搭建了一个hadoop伪集群,并且成功运行了hadoop官方提供的map-reduce的示例jar包。

下载hadoop发行版

在http://hadoop.apache.org/releases.html上下载最新的稳定版的hadoop,如果是新手的话,推荐下载binary,而不是下载source去自己编译。我本机使用的是2.8.1版本。也可以点击此处直接下载2.8.1版本的压缩包。下载完成后,解压到一个文件夹中,接下来需要配置一下环境变量。

配置环境变量

首先添加一个环境变量HADOOP_HOME,指向hadoop的根目录,并将HADOOP_HOME/bin加入到path中。

如果是mac的话,直接再~/.bash_profile中加入下面两行即可

export HADOOP_HOME="~/software/hadoop-2.8.1"export PATH="$PATH:$HADOOP_HOME/bin"

由于hadoop是使用java编写的,所以,hadoop的运行依赖java环境,请在本地配置好java的运行环境。

顺利搞定以后,运行一下hadoop命令,会有如下的输出,则说明hadoop已经可以在单机环境下运行了。

$ hadoopUsage: hadoop [--config confdir] [COMMAND | CLASSNAME]  CLASSNAME            run the class named CLASSNAME or  where COMMAND is one of:  fs                   run a generic filesystem user client  version              print the version  jar <jar>            run a jar file                       note: please use "yarn jar" to launch                             YARN applications, not this command.  checknative [-a|-h]  check native hadoop and compression libraries availability  distcp <srcurl> <desturl> copy file or directories recursively  archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive  classpath            prints the class path needed to get the                       Hadoop jar and the required libraries  credential           interact with credential providers  daemonlog            get/set the log level for each daemon  trace                view and modify Hadoop tracing settingsMost commands print help when invoked w/o parameters.

配置hadoop

接下来要配一个伪集群,伪集群有些接近真正的集群,namenode和datanode运行在不同的进程中,大部分hadoop的命令也都一样,并且配置起来非常简单,对于hadoop的初学者而言还是不错的。

打开etc/hadoop/core-site.xml,修改为:

<configuration>    <property>        <name>fs.defaultFS</name>        <value>hdfs://127.0.0.1:9000</value>    </property></configuration>

打开etc/hadoop/hdfs-site.xml,修改为:

<configuration>    <property>        <name>dfs.replication</name>        <value>1</value>    </property>    <property>        <name>dfs.namenode.name.dir</name>        <value>/Users/zdk/software/hadoop-2.8.1/data/namenode</value>    </property>    <property>        <name>dfs.datanode.data.dir</name>        <value>/Users/zdk/software/hadoop-2.8.1/data/datanode</value>    </property>    <property>        <name>dfs.secondary.http.address</name>        <value>127.0.0.1:50090</value>    </property>    <property>        <name>dfs.http.address</name>        <value>127.0.0.1:50070</value>    </property></configuration>

将上面的hadoop地址修改为你刚才设置的HADOOP_HOME的位置。

启动namenode和datanode

启动namenode之前,需要先进行一次格式化,使用下面的命令

$ hdfs namenode -format

作为伪集群,namenode和datanode是两个独立的进程,可以分别启动。打开终端或命令行,先启动namenode

$ hdfs namenode

如果namenode启动成功了,再打开一个终端或命令行,启动datanode

$ hdfs datanode

此时,hdfs就已经启动成功了,可以通过http://localhost:50070/查看和管理。

可以输入contr+c来关闭进程。

如果你觉得两个进程单独启动不太方便,hadoop在sbin目录下还封装了一些命令:
- 通过sbin/start-dfs.sh来启动namenode和datanode
- 通过sbin/stop-dfs.sh来关闭namenode和datanode

执行上面两个命令之前,需要先cd到hadoop的根目录。

hdfs的基本操作

下面来看一下hdfs提供的命令api。之前hdfs的命令是hdfs dfs,由于hdfs是hadoop的一部分,就被统一以hadoop开头了,通过hadoop fs加各种参数来操作hdfs,直接运行hadoop fs可以查看帮助。这些命令还是比较友好的,非常类似常用的linux命令。下面我们先创建两个文件夹

$ hadoop fs -mkdir /user$ hadoop fs -mkdir /user/yourname

上传一个文件,将当前目录下的LICENSE.txt上传到hdfs上,默认会上传到你的用户目录,就是刚才创建的/user/yourname中。

$ hadoop fs -put LICENSE.txt

列出文件

$ hadoop fs -ls /user/yournameFound 1 items-rw-r--r--   1 yourname supergroup      99253 2017-09-07 15:52 /user/yourname/LICENSE.txt

还可以通过hadoop fs -cat filename来查看文件内容,hadoop fs -rm filename来删除文件等,更多命令可以运行hadoop fs来查看帮助。

运行一个测试的map-reduce

首先,将hadoop根目录下的etc/hadoop下的所有xml文件上传的hdfs中的input文件夹,

$ hadoop fs -mkdir input$ hadoop fs -put etc/hadoop/*.xml input

然后通过hadoop jar来运行测试的map-reduce jar包

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

如果你的hadoop版本不是2.8.1的话,需要调整jar包的名字。最终任务执行完之后,会将结果输入到output文件夹中。
你可以通过hadoop fs -ls /user/yourname/output来查看目录下的文件列表。

可以参考一下官网的教程
http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster.html

原创粉丝点击