最近开始学习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即可解决。