主要参考这两篇文章:
ubuntu13.04环境hadoop1.2.1单机模式安装:http://www.cnblogs.com/yjmyzz/p/3378192.html
hadoop1.2.1伪分布模式配置:http://www.cnblogs.com/yjmyzz/p/3380627.html
我本机环境是Ubuntu12.04,效果一样,这里把我配置过程遇到的问题记录下来,并对某些地方再解释下
一、安装 JDK 1.7.0_45
官网下载JDK7:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
1、 cd /usr/ (注:进入usr目录)
2、sudo mkdir /usr/java (注:在usr下创建java目录)
3、sudo cp /home/jimmy/Downloads/jdk-7u45-linux-x64.tar.gz /usr/java/ (注:将下载的jdk压缩文件,移动到/usr/java下,这里jimmy是ubuntu的用户名,这里根据实际情况换成自己的用户名)
4、sudo tar -zxf jdk-7u45-linux-x64.tar.gz (注:解压)
5、sudo gedit ~/.bashrc (注:修改根目录下的bashrc文件,以便设置java环境变量)
在bashrc最后追加以下内容:
export JAVA_HOME=/usr/java/jdk1.7.0_45
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
6、关掉当前的终端窗口,再新开一个终端窗口(以便让刚才的环境变量起作用)
7、验证java是否安装正确
输入命名:java -version
如果能正确显示java的版本号,就说明java环境已经具备了
输入命名:echo $JAVA_HOME
如果能正确显示JAVA_HOME的路径,说明环境变量正常
二、安装 openssh-server
申明:ssh服务可以先不管,等到后面配置hadoop分布式服务时再配置也可以
先测试你是否安装了 ssh 服务:ps -e|grep ssh
如果有 ssh-agentt 和 sshd 这些服务,说明你已经安装过了
1、安装ssh服务
sudo apt-get install openssh-server
我本机Ubuntu12.04 版本较老,也一直没更新,在使用 apt-get 命令时得先更新apt-get
一般来说使用 apt-get clean 清除,然后再 apt-get update 或者 apt-get update && apt-get upgrade 能解决问题
2、配置 localhost 无密码登录
因为伪分布模式下,即使所有节点都在一台机器上,hadoop也需要通过ssh登录,这一步的目的是配置本机无密码ssh登录
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa (注:这里 -P '' 紧接着一个空串,意思是设置密码为空)
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys (注:将刚才ssh生成的秘钥库授权)
3、测试登录 ssh localhost
如果不要求你输入密码就登录成功,那就OK了
如果仍然要你输入密码,可以这样:ssh-add ~/.ssh/id_rsa
这样就把你刚才创建的秘钥加进来了,再试试 ssh localhost 登录
4、退出登录
在当前Terminal终端输入 exit 就退出了,控制台会打印 logout 消息
5、如果ssh服务已经退出,可以这样启动
sudo /etc/init.d/ssh start 或者 service ssh start
ssh-server 配置文件位于/etc/ssh/sshd_config,可以定义SSH的服务端口,默认端口是22,你可以自己定义成其他端口号,如222。
然后重启SSH服务:
/etc/init.d/ssh stop (停止)
/etc/init.d/ssh start (启动)
三、安装 hadoop 1.2.1 稳定版
官网下载1.2.1版本 :http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-1.2.1/
1、先创建hadoop目录
mkdir hadoop (比如我创建在 /root/hadoop 这个目录)
2、将下载好的hadoop压缩包移到刚刚创建的目录下
sudo cp /root/Downloads/hadoop-1.2.1.tar.gz /root/hadoop
3、解压
cd hadoop
sudo tar -zxf hadoop-1.2.1.tar.gz
默认情况下,会解压至hadoop\hadoop-1.2.1目录
4、修改hadoop环境变量
(1)先取得hadoop-1.2.1的读写权限,这里jimmy换成自己的用户名.
sudo chown -R jimmy hadoop-1.2.1 (如果你已经是root账户就没必要执行了!)
(2)编辑conf下的配置文件
gedit /root/hadoop/hadoop-1.2.1/conf/hadoop-env.sh
找到#export JAVA_HOME这一行,去掉注释,变设置成正确的路径,即:
# The java implementation to use. Required.
export JAVA_HOME=/usr/java/jdk1.7.0_45
5、验证hadoop是否正常运行
cd hadoop-1.2.1
bin/hadoop version
正常情况下,会显示hadoop的版本号之类
6、运行wordcount 示例程序(进入hadoop根目录)
mkdir input (先创建input目录)
cp conf/* input (将conf下的所有文件,复制到input目录下)
bin/hadoop jar hadoop-example-1.2.1.jar wordcount input output (运行wordcount程序,并将结果写入output目录下)
cat output/* (查看输出结果)
后记:以上操作,也适用于mac os、cent os,不过有些细节要注意
mac os上JAVA_HOME的路径为:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
如果找不到java的目录,但是java -version 又能正常显示java版本号,可先执行 export JAVA_HOME=`/usr/libexec/java_home`
然后再 echo $JAVA_HOME就能看到当前jdk的路径了
cent os上apt-get命令要改为 yum
cent os上查看是不是64位:getconf LONG_BIT
hadoop群集配置,可参考 http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503949.html
************************** 接下来介绍在单机模拟伪分布式hadoop配置,并运行示例 *********************
一、修改core-site.xml,配置hdfs
<span style="font-family:Microsoft YaHei;font-size:12px;"><configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/jimmy/Desktop/tmp</value>
</property>
</configuration></span>
a) fs.default.name对应的value是hdfs的ip和端口,只要端口不被占用即可
b) hadoop.tmp.dir对应的value是hadoop临时文件的保存目录(根据需要修改成实际目录)
二、修改hdfs-site.xml,配置数据备份
<span style="font-family:Microsoft YaHei;font-size:12px;"><configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration></span>
注:这是配置写数据时,数据同时写几份(出于学习目的,这里只写一个副本,实际应用中,至少配置成3)
三、修改mapred-site.xml
<span style="font-family:Microsoft YaHei;font-size:12px;"><configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration></span>
注:这是配置map/reduce服务器ip和端口
四、首次运行,格式化hdfs
/root/hadoop/hadoop1.2.1/bin/hadoop namenode -format
注意:你自己安装的hadoop目录
五、启动单节点集群
/root/hadoop/hadoop1.2.1/bin/hadoop start-all.sh
如果没问题的话,直接在终端输入 jps,可以看到5个进程:
13299 TaskTracker
13071 SecondaryNameNode
13363 Jps
13160 JobTracker
12786 NameNode
12926 DataNode
六、停止hadoop服务
/root/hadoop/hadoop1.2.1/bin/hadoop stop-all.sh
七、查看状态
http://localhost:50030/ 这是Hadoop管理界面
http://localhost:50060/ 这是Hadoop Task Tracker 状态
http://localhost:50070/ 这是Hadoop DFS 状态
八、伪分布模式下运行Hadoop自带的wordcount
注:以下命令的当前目录都是hadoop根目录
a) 先随便准备一个txt文件,比如hadoop下自带的README.txt
b) hdfs中创建一个输入目录 input
bin/hadoop fs -mkdir input (注:hdfs中的命令跟linux终端中的文件操作命令基本类似,但是前面要加fs)
c) 将README.txt放到hdfs的input目录中
bin/hadoop fs -put ./README.txt input
这时,如果在浏览器里用http://localhost:50070/ 浏览hdfs文件列表的话,可以看到刚才放进去的文件
d)执行wordcount示例程序
bin/hadoop jar hadoop-examples-1.2.1.jar wordcount /user/jimmy/input/README.txt /user/jimmy/output (注:这里的jimmy为hadoop运行时的用户名,根据需要换成自己的实际用户名)
这里强调下这两个目录:/user/jimmy/input/README.txt 和 /user/jimmy/output
这并不是linux机器的目录,而是 hdfs 的目录,你可以到 http://localhost:50070/ 也就是 hdfs 管理控制台看得到
e)从hdfs中取回文件到本地
bin/hadoop fs -get /user/jimmy/output ~/Desktop/ (这样,就把运算结果output中的文件,取到本地桌面了)
同样的注意这个目录是hdfs的目录