@gekeshi
2016-04-30T14:56:18.000000Z
字数 3958
阅读 423
Hadoop
一定要使用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是否可用。


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

Unpack the downloaded Hadoop distribution. In the distribution, edit the file etc/hadoop/hadoop-env.sh to define some parameters as follows:
# set to the root of your Java installationexport JAVA_HOME=/usr/lib/jvm/java# Assuming your installation directory is /usr/hadoopexport HADOOP_HOME=/usr/hadoopexport PATH=$PATH:/usr/hadoop/bin
source命令使环境变量生效
~$ source /usr/hadoop/etc/hadoop/hadoop-env.sh
这样,Hadoop单机版已经配置完毕。
$ bin/hadoop
This will display the usage documentation for the hadoop script.
Hadoop can also be run on a single-node in a pseudo-distributed mode where each Hadoop daemon runs in a separate Java process.
Use the following:
etc/hadoop/core-site.xml:
<configuration><property><name>fs.defaultFS</name><value>hdfs://localhost:9000</value></property></configuration>
etc/hadoop/hdfs-site.xml:
<configuration><property><name>dfs.replication</name><value>1</value></property></configuration>
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为NameNode也作为DataNode,同时,读取的是 HDFS 中的文件。
Hadoop 的配置文件位于/usr/local/hadoop/etc/hadoop/中,伪分布式需要修改2个配置文件core-site.xml和hdfs-site.xml。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。
虽然只需要配置fs.defaultFS和dfs.replication就可以运行(官方教程如此),不过若没有配置hadoop.tmp.dir参数,则默认使用的临时目录为/tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致须重新执行format才行。所以我们进行了设置,同时也指定dfs.namenode.name.dir和dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
首先在hadoop目录下新建几个文件夹
mkdir tmp
mkdir dfs
mkdir dfs/name
mkdir dfs/data
修改配置文件 core-site.xml
<configuration><property><name>hadoop.tmp.dir</name><value>file:/usr/hadoop/tmp</value><description>Abase for other temporary directories.</description></property><property><name>fs.defaultFS</name><value>hdfs://localhost:9000</value></property></configuration>
修改配置文件 hdfs-site.xml
<configuration><property><name>dfs.replication</name><value>1</value></property><property><name>dfs.namenode.name.dir</name><value>file:/usr/local/hadoop/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>file:/usr/local/hadoop/dfs/data</value></property></configuration>
复制mapred-site.xml.template到mapred-site.xml并修改mapred-site.xml
<configuration><property><name>mapred.job.tracker</name><value>localhost:9001</value></property></configuration>
非常重要,重启之后配置文件才能生效
~$ hadoop namenode -format

Start NameNode daemon and DataNode daemon:
$ sbin/start-dfs.sh

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

要在伪分布式运行下运行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位虚拟机上重新做。。。
在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。
