这段时间已经被Hadoop单机伪分布式集群配置折腾得体无完肤了,网上有各种单机集群的分布式配置方法介绍,但是照着做总是会出现这样或那样的问题。虽然道路十分曲折,但是苍天不负有心人,终于还是配置成功了。
言归正传,我配置hadoop集群选用了以下组件:hadoop-1.0.3,hive-0.9.0,hbase-0.92.0,zookeeper-3.4.2,jdk-1.6.33。由于hive与hbase整合时,hive对hbase的版本有要求,所以我直接使用了hive-0.9.0要求的hbase0.92.0版本。当然也可以使用其他版本的hbase数据库,只是需要重新编译hive-hbase-handler-*.jar,我对这个不熟,所以贪了一个便宜,如果对重编译jar包熟悉的同志可以试试。其他的组建可以任选,但是为避免莫名奇妙的错误,最好还是选择与hive要求相近的版本,比如hadoop在1.0.0以上,jdk要求在1.6.0版本以上,有的地方直接使用了openjdk,之前试了一下,发现不行>_<!,zookeeper版本和hbase版本保持一致,也就是看看hbase中lib下的zookeeper版本号。在配置集群时需要使用SSH服务,我直接使用的openssh-server。补充一点,操作系统环境是Ubuntu12.04lts。下面说说具体的配置。
1.jdk安装与配置:下载jdk-6u33-linux-x64.bin,并将其拷贝到/usr/lib/jvm文件夹下,如过lib下没有jvm文件夹,需要自己创建,为什么要这样,我也不清楚。并将其安装在当前目录下。
在/etc/profile的最后添加如下内容:
export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_33
export JRE_HOME=/usr/lib/jvm/jdk1.6.0_33/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
配置完成后,需要重启一下电脑,在终端中输入java --ersion,检测jdk是否安装成功,如果出现jdk相关版本,则成功。
2. hadoop-1.0.3安装与配置下载hadoop-1.0.3.tar.gz,并将其拷贝到主文件下,我的是home/martin。martin是我的用户名,下同。最好是将用户安装的软件放到主目录下,这样避免了使用root操作带来的文件夹不可访问的问题。
直接使用tar xzvf hadoop-1.0.3安装程序。安装完后,当前文件下会多出一个hadoop-1.0.3的文件夹。你可以修改这个文件夹名,比如修改成hadoop,这样更符合使用习惯。由于我配置时是摸着石头过河,生怕会安装无数个版本的hadoop。
编辑/home/martin/hadoop-1.0.3/conf里的hadoop-env.sh,在该文件最后加入:
export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_33/
export HADOOP_HOME=/home/martin/hadoop-1.0.3
export PATH=$PATH:/home/martin/hadoop-1.0.3/bin
在终端中敲入hadoop-1.0.3/bin/hadoop,键入“enter”键会出现这样一些信息,则表明hadoop基本安装成功。
Usage:hadoop [--config confdir] COMMAND
where COMMAND is one of:
这里省略部分内容
CLASSNAME run the class named CLASSNAME
Most commands print help when invoked w/o parameters.
1.编辑/home/martin/hadoop-1.0.3/conf/core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
<description>HDFS's URI, file system://namenode ID:Port</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/martin/hadoop-1.0.3/hadooptmp</value>
<description>namenode上本地的hadoop临时文件夹</description>
</property>
</configurtion>
2. 编辑文件/home/dota/hadoop/conf/hdfs-site.xml
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/home/martin/hadoop-1.0.3/hdfs/name</value>
<description>namenode上存储hdfs名字空间元数据</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/martin/hadoop-1.0.3/hdsf/data</value>
<description>datanode上数据块的物理存储位置</description>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>num of replication</description>
</property>
</configuration>
3.编辑/home/martin/hadoop-1.0.3/conf/mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
<description>jobtracker ID:Port, not URI</description>
</property>
<property>
<name>mapred.local.dir</name>
<value>/home/martin/hadoop-1.0.3/mapred/local</value>
<description>tasktracker上执行mapreduce程序时的本地目录</description>
</property>
<property>
<name>mapred.system.dir</name>
<value>/tmp/hadoop/mapred/system</value>
<description>这个是hdfs中的目录,存储执行mr程序时的共享文件</description>
</property>
</configuration>
hadoop基本配置完成。在终端中键入hadoop-1.0.3/bin/hadoop namenode -format,没有出现错误提示则成功。
启动hadoop集群,终端键入
hadoop-1.0.3/bin/start-all.sh
出现以下一些信息
Warning: $HADOOP_HOME is deprecated.
starting namenode, logging to /home/martin/hadoop-1.0.3/logs/hadoop-martin-namenode-ubuntu.out
localhost: Warning: $HADOOP_HOME is deprecated.
localhost:
localhost: starting datanode, logging to /home/martin/hadoop-1.0.3/logs/hadoop-martin-datanode-ubuntu.out
localhost: Warning: $HADOOP_HOME is deprecated.
localhost:
localhost: starting secondarynamenode, logging to /home/martin/hadoop-1.0.3/logs/hadoop-martin-secondarynamenode-ubuntu.out
starting jobtracker, logging to /home/martin/hadoop-1.0.3/logs/hadoop-martin-jobtracker-ubuntu.out
localhost: Warning: $HADOOP_HOME is deprecated.
localhost:
localhost: starting tasktracker, logging to /home/martin/hadoop-1.0.3/logs/hadoop-martin-tasktracker-ubuntu.out
查看jps,则可见如下几项。
jpmartin@ubuntu:~$ jps
3452 Jps
3050 JobTracker
2956 SecondaryNameNode
3402 TaskTracker
2222 NameNode
2593 DataNode
使用hadoop前需要格式化namenome,在终端中输入
hadoop-1.0.3/bin/hadoop fs -put conf路径(这里是conf文件夹的路径,我的是/home/martin/hadoop-1.0.3/conf,最好给出绝对路径) input
hadoop-1.0.3/bin/hadoop fs -ls
如果没有出现错误提示,则表明成功了,否则查看配置是否有错。