[关闭]
@gekeshi 2016-04-30T14:56:18.000000Z 字数 3958 阅读 423

hadoop伪分布式安装

Hadoop


一、安装JDK

一定要使用JDK7,不要用最新的JDK8,否则编译会出错,系统自带的OpenJDK也别用,注意配置环境变量,使默认Java环境为JDK7,一定要用java-version命令确认一下!
Apache对于Hadoop适配的java版本有相关介绍

Version 2.7 and later of Apache Hadoop requires Java 7. It is built and tested on both OpenJDK and Oracle (HotSpot)'s JDK/JRE.
Earlier versions (2.6 and earlier) support Java 6.

The Sun JVM has 32-bit and 64-bit modes. In a large cluster the NameNode and JobTracker need to run in 64-bit mode to keep all their data structures in memory.

因此Linux版本最好为64位,因为官网发布的版本是64位编译的,JDK根据Hadoop版本进行选择,64位系统最好为64为Java7。本试验测试1.8.0是否可用。

java -version

JAVA_HOME

二、配置ssh

  1. $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
  2. $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

ssh

三、Prepare to Start the Hadoop Cluster

Unpack the downloaded Hadoop distribution. In the distribution, edit the file etc/hadoop/hadoop-env.sh to define some parameters as follows:

  1. # set to the root of your Java installation
  2. export JAVA_HOME=/usr/lib/jvm/java
  3. # Assuming your installation directory is /usr/hadoop
  4. export HADOOP_HOME=/usr/hadoop
  5. export PATH=$PATH:/usr/hadoop/bin

source命令使环境变量生效

  1. ~$ source /usr/hadoop/etc/hadoop/hadoop-env.sh

这样,Hadoop单机版已经配置完毕。

  1. $ bin/hadoop

This will display the usage documentation for the hadoop script.

四、Pseudo-Distributed Operation

1. 以下为官方教程

Hadoop can also be run on a single-node in a pseudo-distributed mode where each Hadoop daemon runs in a separate Java process.

Configuration

Use the following:

etc/hadoop/core-site.xml:
  1. <configuration>
  2. <property>
  3. <name>fs.defaultFS</name>
  4. <value>hdfs://localhost:9000</value>
  5. </property>
  6. </configuration>
etc/hadoop/hdfs-site.xml:
  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>1</value>
  5. </property>
  6. </configuration>

2. 实验配置过程

Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为NameNode也作为DataNode,同时,读取的是 HDFS 中的文件。
Hadoop 的配置文件位于/usr/local/hadoop/etc/hadoop/中,伪分布式需要修改2个配置文件core-site.xmlhdfs-site.xml。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。
虽然只需要配置fs.defaultFSdfs.replication就可以运行(官方教程如此),不过若没有配置hadoop.tmp.dir参数,则默认使用的临时目录为/tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致须重新执行format才行。所以我们进行了设置,同时也指定dfs.namenode.name.dirdfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
首先在hadoop目录下新建几个文件夹

mkdir tmp
mkdir dfs
mkdir dfs/name
mkdir dfs/data

修改配置文件 core-site.xml

  1. <configuration>
  2. <property>
  3. <name>hadoop.tmp.dir</name>
  4. <value>file:/usr/hadoop/tmp</value>
  5. <description>Abase for other temporary directories.</description>
  6. </property>
  7. <property>
  8. <name>fs.defaultFS</name>
  9. <value>hdfs://localhost:9000</value>
  10. </property>
  11. </configuration>

修改配置文件 hdfs-site.xml

  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>1</value>
  5. </property>
  6. <property>
  7. <name>dfs.namenode.name.dir</name>
  8. <value>file:/usr/local/hadoop/dfs/name</value>
  9. </property>
  10. <property>
  11. <name>dfs.datanode.data.dir</name>
  12. <value>file:/usr/local/hadoop/dfs/data</value>
  13. </property>
  14. </configuration>

复制mapred-site.xml.template到mapred-site.xml并修改mapred-site.xml

  1. <configuration>
  2. <property>
  3. <name>mapred.job.tracker</name>
  4. <value>localhost:9001</value>
  5. </property>
  6. </configuration>

3.重新启动

非常重要,重启之后配置文件才能生效

五、执行HDFS

1. 格式化HDFS

  1. ~$ hadoop namenode -format

format

2. 启动Hadoop

Start NameNode daemon and DataNode daemon:

$ sbin/start-dfs.sh

启动dfs

访问web页面

成功启动后,可以访问Web界面http://localhost:50070查看namenode和datanode信息。
web

3. 运行实例时发现的问题

要在伪分布式运行下运行hadoop实例,首先需要在HDFS上新建用户目录

./bin/hdfs dfs -mkdir -p /user/[your username]

但是在32位Linux系统中会提示报错:

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

查看错误日志发现是native库的版本和系统不一致,使用file命令可以发现封装版的native库文件全是64位的。目前在Hadoop中,本地库应用在文件的压缩上面:

在使用这两种压缩方式的时候,Hadoop默认会从$HADOOP_HOME/lib/native/Linux-*目录中加载本地库。这种情况下就需要自己去编译本地库了。在$HADOOP_HOME目录下,使用如下命令即可:

ant compile-native

编译完成后,可以在$HADOOP_HOME/build/native目录下找到相应的文件,然后指定文件的路径或者移动编译好的文件到默认目录下即可。
然而...自己编译肯定会面临更多问题,所以如果使用32位系统,还是重新装64位吧。
下面在64位虚拟机上重新做。。。

4. 多次格式化HDFS遇到的问题

在64位系统中重新执行上述步骤,但是新手一般会在部署过程中多次格式化hdfs,造成datanode无法启动。执行文件系统格式化时,会在namenode数据文件夹(即配置文件中dfs.name.dir在本地系统的路径)中保存一个current/VERSION文件,记录namespaceID,标识了所格式化的namenode的版本。如果我们频繁的格式化namenode,那么datanode中保存(即配置文件中dfs.data.dir在本地系统的路径)的current/VERSION文件只是你第一次格式化时保存的namenode的ID,因此就会造成datanode与namenode之间的id不一致。这种情况下,将所有Salve节点上的data(即 hdfs-site.xml 中指定的 dfs.data.dir文件夹,DataNode存放数据块的位置)文件夹内容删除,重新格式化hdfs。
解决了上述问题,成功启动hdfs。
hadooperrorslove

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注