最近开始学习hadoop,把老婆新买笔记本抢来装了个Ubuntu12.04,准备在此基础上安装伪分布式Hadoop

一、准备工作

1.Hadoop有三种运行方式:单机模式、伪分布式和完全分布式。

单机模式无需配置,Hadoop被认为是一个单独的java进程,常用来调试

伪分布式的Hadoop看做只有一个节点的集群,这个节点既是Master,也是Slave;既是NameNode,也是DataNode;既是JobTracker,也是TaskTracker。

2.安装文件准备

hadoop-1.2.0.tar.gz

jdk1.7.0_21.tar.gz

二、安装步骤

1、新建hadoop组及hadoop用户,专门操作hadoop相关工作

sudo addgroup hadoop
sudo adduser -ingroup hadoop hadoop
给hadoop用户授权,管理员权限
sudo gedit /etc/sudoers
编辑/etc/sudoers文件,在#user privilege区域root ALL=(ALL) ALL添加
hadoop ALL=(ALL) ALL
2、安装openssh
ssh网络协议,实现字符界面的远程登陆管理,默认端口22,采用密文形式传输数据,取代明文的telnet,压缩数据同时安全性更高
Ubuntu默认安装了openssh-client,需手动安装open-server
切换为hadoop用户:
su hadoop
sudo apt-get update(有时安装open-server提示没有安装包,需升级一下,此步可省)
sudo apt-get install openssh-server
(sudo apt-get purge openssh-server:删除ssh)
配置无密钥登陆,即生成公钥和私钥,通过获取公钥来登陆主机:
ssh-keygen -t rsa
一路回车:默认设定文件目录(~/.ssh)、密码为空
将公钥加入已验证钥目录:
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
重启sshd服务:
sudo service ssh restart
查看是否已经启动ssh,正常为两个进程:
ps -e | grep ssh
3、安装jdk
用户hadoop
su hadoop
cp jdk1.7.0_21 /usr/local
cd /usr/local
sudo tar -xzf jdk1.7.0_21.tar.gz
sudo mv jdk1.7.0_21 jdk
jdk所有用户均可使用
sudo chmod 777 jdk
配置环境变量,/etc/profile
sudo gedit /etc/profile
profile文件附加以下信息:
#set java environment
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=/usr/local/jdk/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH
使改动生效:source /etc/profile
将jdk1.7设置为默认jdk
sudo update-alternatives --install /usr/bin/java  java   /usr/local/jdk/bin/java  300
sudo update-alternatives --install /usr/bin/javac  javac   /usr/local/jdk/bin/javac  300
sudo update-alternatives  --config  java
sudo update-alternatives  --config  javac
重启测试jdk
java -version
4、安装hadoop
su hadoop
sudo cp hadoop-1.2.0.tar.gz /usr/local
sudo tar -xzf hadoop-1.2.0.tar.gz
sudo mv hadoop-1.2.0  hadoop
将hadoop文件夹权限赋给hadoop用户:
sudo chown -R  hadoop:hadoop  hadoop
要想使用HDFS命令快捷操作,编辑PATH变量
sudo gedit /etc/profile
#set hadoop
export HADOOP_HOME=/usr/local/hadoop
export PATH=HADOOP_HOME/bin:$PATH
 是改动生效:source /etc/profile 

配置hadoop:
su hadoop
cd /usr/local/hadoop
a.  conf/hadoop-env.sh
sudo gedit conf/hadoop-env.sh
使JAVA_HOME生效,并改为:export JAVA_HOME=/usr/local/jdk
b.  conf/core-site.xml
<configuration>
    <property>
         <name>fs.default.name</name>
         <value>hdfs://localhost:9000</value>
    </property>
    <property>
         <name>hadoop.tmp.dir</name>
         <value>/usr/local/hadoop/hadooptmp</value>
     </property> 

</configuration>
c.  conf/mapred-site.xml
<configuration>
    <property>
         <name>mapred.job.tracker</name>
         <value>hdfs://localhost:9001</value>
         <description>jobtracker 标识:端口号,不是uri</description>
    </property>
 </configuration> 
d.   conf/hdfs-site.xml
<configuration>
<property> 
       <name>dfs.name.dir</name> 
       <value>/usr/local/hadoop/hdfs/name</value>        <description>namenode上存储hdfs名字空间元数据</description>
 </property><property> 
       <name>dfs.data.dir</name> 
       <value>/usr/local/hadoop/hdfs/data</value> <description>datanode上数据块的物理存储位置</description>
 </property> 
 <property> 
       <name>dfs.replication</name> 
       <value>1</value>       <description>副本个数,默认为3,单机下配1</description>
 </property> 
 </configuration>格式化hdfs文件系统,初次运行必须此操作,切换到hadoop用户
su hadoop
hadoop namenode -format
启动Hadoop:start-all.sh
检测,显示进程:Namenode,SecondaryNameNode,TaskTracker,DataNode,JobTracker
jps

问题:

1.java环境变量设置错误,path

常用命令使用如ls时,无效,提示路径无。关机重启,输入密码无法进入系统,始终停留在账号登陆界面,个人处理办法是重装系统。

2.hadoop安装完成,查看目前启动节点时,jps命令无效,因为前面修改了默认的jdk,处理办法,重新设置jps为安装Jdk目录中的jps

sudo update-alternatives --install /usr/bin/jps jps /usr/local/jdk/bin/jps 1

3.有时jps不同时显示namenode和datanode,看log记录提示 can only be replicated 0 nodes, instead of 1。是因为namenodeID和datanodeID冲突。将设定的hadoopTMP和HDFS目录删除,重新hadoop namenode -format即可解决。