注:此篇博文只是自己在Fedora20平台上安装hadoop2.2.0的一些随心笔记。写下来,希望大家少走弯路。
以下是我的集群配置:
Fedora20-64bit
hadoop-2.2.0-64bit
jdk1.7.0_65
一、安装配置运行hadoop所需的jdk
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
在电脑上安装配置:
tar -xvzf jdk-7u65-linux-x64.tar.gz cp -r jdk1.7.0_65 /usr/java/jdk1.7.0_65
我这里将jdk安装在了/usr/java文件夹下,名字叫做jdk1.7.0_65。接下来,配置jdk的环境变量:
vim /etc/profile export JAVA_HOME=/usr/java/jdk1.7.0_65 export PATH=$PATH:$JAVA_HOME/bin
手动配置默认jdk,在终端依次输入以下命令:
sudo update-alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_43/bin/java 300 sudo update-alternatives --install /usr/bin/javac javac /usr/java/jdk1.6.0_43/bin/javac 300 sudo update-alternatives --install /usr/bin/jps jps /usr/java/jdk1.6.0_43/bin/jps 300 sudo update-alternatives --install /usr/bin/jar jar /usr/java/jdk1.6.0_43/bin/jar 300 sudo update-alternatives --install /usr/bin/javah javah /usr/java/jdk1.6.0_43/bin/javah 300 sudo update-alternatives --install /usr/bin/javap javap /usr/java/jdk1.6.0_43/bin/javap 300
继续在终端执行以下命令,选择我们安装的jdk,根据列出来的选择项选择我们安装的jdk:
sudo update-alternatives --config java sudo update-alternatives --config javac sudo update-alternatives --config javaws
之后,在终端输入:
source vi /etc/profile
使修改的环境变量生效。
继续输入java -version,如果输出结果如下类似,则说明环境变量配置完好。
java -version java version "1.7.0_65" Java(TM) SE Runtime Environment (build 1.7.0_65-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
,到了这里,还需要配置集群的ssh免密码登陆。
在主节点(NameNode)的终端执行命令:
ssh-keygen -t rsa
然后一路Enter, 产生秘钥位于/root/.ssh/文件夹下
然后将主节点产生的公有秘钥发送到其他节点
ssh-copy-id –i ~/.ssh/id_rsa.pub hadoop@slave0x
实际上就是将NameNode生成的公有秘钥发送到集群的其他各个节点,然后在主节点ssh slave0x节点即可,第一次可能需要输入密码,之后就可以实现无密码登陆了。
cat .ssh/id_rsa.pub >> .ssh/authorized_keys
这条命令是可以实现本机ssh无密码登陆的。
二、下载hadoop2.2.0安装包,可以直接去官网下载,但是在官网上面下载的2.2.0版本的hadoop只支持32bit系统的,并不 支持64位操作系统。如果直接在官网下载的话,还需要根据自己的情况将hadoop的源码编译成为64位的。
官网下载地址下载地址:http://apache.fayea.com/apache-mirror/hadoop/common/
三、hadoop2.2.0的编译好的适用64位的版本,已经编译好,在群共享里了,我也存到网盘上了,大家可以下载。
链接: http://pan.baidu.com/s/1pJmGVm7 密码: 9rdf
如果自己有兴趣的话,可以自己编译一次,其实也不难,就是用到的软件有点多,具体的编译步骤,接下来会补上,也可以自己去google,这里先介绍在Fedora20平台上的hadoop2.2.0安装。
注:如果运行的hadoop-2.2.0版本不是64位的,会出现下面的错误:
在使用./sbin/start-dfs.sh或./sbin/start-all.sh启动时会报出这样如下警告: Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /usr/local/hadoop-2.2.0/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now. .... Java: ssh: Could not resolve hostname Java: Name or service not known HotSpot(TM): ssh: Could not resolve hostname HotSpot(TM): Name or service not known 64-Bit: ssh: Could not resolve hostname 64-Bit: Name or service not known ....
这个问题的错误原因会发生在64位的操作系统上,原因是从官方下载的hadoop使用的本地库文件(例如lib/native/libhadoop.so.1.0.0)都是基于32位编译的,运行在64位系统上就会出现上述错误。
网上的解决办法有两种:
(1)在64位系统上重新编译hadoop
(2)在hadoop-env.sh和yarn-env.sh中添加如下两行:
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
注:/home/hadoop/hadoop-2.2.0为自定义的下载hadoop文件的解压路径
四、首先将编译好的hadoop2.2.0在主节点即namenode解压安装。我这里是安装在主文件夹目录下,即/home/hadoop目录下。
五、接下来Fedora20系统有些坑爹的地方,可能这也是这个系统为什么比较安全的原因吧。Fedora20每个电脑用于通信的端口22,这个端口竟然在配置文件中是被注释掉的,当然你也可以自己定义端口。
打开sudo vi /etc/ssh/ssh_config
#port 22 #protocol 2,1
将这两行前边的#去掉
六、Fedora20集群电脑之间的通信还需要考虑到防火墙的关系,如果不把防火墙关闭,通信是完不成的。
注:
如果不将防火墙关闭,在启动nodemanager的时候会出现以下错误:
java.net.NoRouteToHostException: No Route to Host from localhost.localdomain/nodeip to ip:8031 failed on socket timeout exception: java.net.NoRouteToHostException: No route to host; For more details see: http://wiki.apache.org/hadoop/NoRouteToHost ..................省略了好多东西 Caused by: java.net.NoRouteToHostException: No route to host at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ..................省略了好多东西 at org.apache.hadoop.ipc.Client.getConnection(Client.java:1399) at org.apache.hadoop.ipc.Client.call(Client.java:1318) ... 19 more
还有,关闭linux系统的防火墙方法不一样,下面介绍介绍几个:
(1)对于ubuntu关闭防火墙:
sudo ufw disable
如果你要防火墙可以运行:
sudo apt-get remove iptables
(2)对于fedora关闭防火墙:
sudo systemctl stop firewalld.service
实在不行的话,可以直接禁用:
sudo systemctl disable firewalld.service
七、在开启hadoop集群之前确保ssh服务已经开启。
在Fedora20上查看和开启ssh服务的命令:
查看现在运行的ssh服务状态:
sudo systemctl status sshd.service
开启ssh服务:
sudo systemctl enable sshd.service sudo systemctl start sshd.service
八、配置hadoop2.2.0
1.配置hadoop的环境变量
sudo vi /etc/profile
在profile文件末尾配置hadoop2.2.0的环境变量如下:
export HADOOP_HOME=/home/hadoop/hadoop-2.2.0 export PAHT=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export HADOOP_LOG_DIR=/usr/zkt/hadoop2.2.0/hadoop-2.2.0/logs export YARN_LOG_DIR=$HADOOP_LOG_DIR export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
注:在64位系统上需要加入最后的两行配置信息
2.修改hadoop2.2.0的配置文件(在hadoop-2.2.0/etc/hadoop文件夹下)
1、修改hadoop-env.sh 、yarn-env.sh 确保hadoop运行所需要的java环境 # The java implementation to use. export JAVA_HOME=/usr/java/jdk1.7.0_65 2、修改core-site.xml文件 定义文件系统的配置 <configuration> <property> <name>fs.default.name</name> <value>hdfs://master:9000/</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/hadoop2.2.0/tmp</value> </property> </configuration> 3、修改hadfs-site.xml 定义名称节点和数据节点 <configuration> <property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop/hadoop2.2.0/hdf/data</value> <final>true</final> </property> <property> <name>dfs.namenode.name.dir</name> <value>/home/hadoop/hadoop2.2.0/hdf/name</value> <final>true</final> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration> 4、修改mapred-site.xml Configurations for MapReduce Applications <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> 5、修改yarn-site.xml文件 该文件主要用于: 1、Configurations for ResourceManager and NodeManager: 2、Configurations for ResourceManager: 3、Configurations for NodeManager: 4、Configurations for History Server (Needs to be moved elsewhere): <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>master:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>master:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master:8088</value> </property>
九、创建第八步多出来的文件夹
data tmp name log mkdir -r /home/hadoop/hadoop2.2.0/hdf/data 等
十、为上边创建的文件夹赋予权限,否则可能会出现无文件创建或无法执行写权限
进去到root用户:
su - root
chown -R hadoop:hadoop /usr/zkt/hadoop2.2.0 (不明白的可以查看chown命令)
或者切换到hadoop用户下 通过chmod -R 777 data 赋权限
十一、将配置好的hadoop-2.2.0依次复制到集群的其他节点
scp -r /home/hadoop/hadoop-2.2.0 hadoop@slave01:~/
按照之前在主节点做过的事情,在其他的节点也都做一遍,也可以自己远程登陆执行。主要的是端口22和防火墙。
十二、下面打开集群,测试。
1.hadoop的namenode的初始化
bin/hdfs namenode -format
2.启动hadoop的各项服务
sbin/start-dfs.sh sbin/start-yarn.sh
3.查看启动的节点进程
jps
(1)主节点(NameNode)出现以下的服务,表示主节点hadoop启动成功
ResourceManager SecondaryNameNode NameNode Jps
(2)从节点(DataNode)出现以下的服务,表示从节点slave的hadoop服务启动成功:
DataNode NodeManager Jps
(3)hadoop2.x还有一个jobhistory服务
启动:
sbin/mr-jobhistory-daemonn.sh start historyserver
(4)可以在相应的web端口查看启动的hadoop服务
查看各节点状态
master:50070
可能有很多疏漏的地方,大家可以多多提提改进意见!