Hadoop 初体验
Hadoop 是一个基于谷歌发表的几篇论文而开发的一个分布式系统基础架构,用户可在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop现在已经成了大数据的代名词。也就是说,现在如果要处理大数据,Hadoop是首要选择。所以学好Hadoop是非常实用的。
Hadoop 目前大的版本分为1和2,对于初学者来说,先学习 Hadoop 1.x 比较容易上手,相比 2.x会简单不少。
环境
Ubuntu 16.04
openjdk-8
Hadoop-1.2.1
安装
由于 Hadoop 是用 Java 开发的,所以要依赖 JDK,首先要安装 JDK,并配置JDK的环境变量。
安装 Java 命令:
sudo apt-get install openjdk-8-jdk
如果出现一下错误:
E: 软件包 sun-java6-jre 没有可供安装的候选者
则执行一下命令:
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
之后再执行安装命令。
JDK 安装完成后需要配置环境变量,编辑/etc/profile,加入一下内容:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-i386
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$PATH
安装Hadoop。
下载 Hadoop 的安装包 hadoop-1.2.1.tar.gz,解压后放到/opt/目录下
接着是对 Hadoop 配置:
hadoop-env.sh
修改JAVA_HOME 的路径
core-site.xml
初始是空文件,加入以下内容:
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/hadoop/name</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://tang:9000</value>
</property>
hdfs-site.xml
加入以下内容:
<property>
<name>dfs.data.dir</name>
<value>/hadoop/data</value>
</property>
mapred-site.xml
加入以下内容:
<property>
<name>mapred.job.tracker</name>
<value>tang:9001</value>
</property>
配置好后,加入 Hadoop 的环境变量
export HADOOP_HOME=/opt/hadoop-1.2.1
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$PATH
执行 source /etc/profile 让配置的环境变量立即生效。
输入 hadoop 看到 hadoop 的参数说明,表明配置成功了。
接着切换到 hadoop/bin 下,执行 hadoop namenode -format 进行格式化,如果出现以下错误:
hadoop java.io.IOException: while running namenode -format
12/07/03 17:03:56 ERROR namenode.NameNode: java.io.IOException: Cannot create directory /your/path/to/hadoop/tmp/dir/hadoop-hadoop/dfs/name/current
需要检查一下刚才在几个配置文件中定义的路径是否存在、当前用户是否有权限访问。
格式化成功后,切换到/hadoop/bin下,执行 start-all.sh
如果出现以下错误:
ssh: connect to host localhost port 22: Connection refused
可能的原因是ssh server没装,查看方法:
ps -e |grep ssh
如果没有sshd,说明还没有安装ssh server
解决方案:
sudo apt-get install openssh-server
接着再运行start-all.sh就可以了。
再运行 jfs,观察以下几个内容是否存在。
3542 TaskTracker
3334 SecondaryNameNode
4058 Jps
3931 JobTracker
3677 NameNode
3182 DataNode
如果都存在,表明hadoop启动成功。
运行 hadoop fs -ls / 时,出现以下错误:
14/07/29 13:25:35 INFO ipc.Client: Retrying connect to server: centhost.centdomain/10.110.30.30:9000. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
原因是没有启动 hadoop,切换到$HADOOP_HOME/bin 下,运行 start-all.sh即可。
出现以下错误
s: unknown host: tang
检查一下 /etc/hosts、 /etc/hostname 下是否存在该主机。
运行 jps 时没有出现datanode,可能的原因是:
当前用户是否有配置文件中指定的文件夹打操作权限。