终于是把Hadoop2.2.0安装成功,虽然还有点问题没有解决,但是这个先暂时用着。
安装环境:Ubuntu10.04 64bit 内核:2.6.39
由于直接下载的Hadoop是只能在32位的机器上用,所以需要先编译。首先下载hadoop-2.2.0-src.tar.gz源码编译以后再使用,编译过程在另一篇博客中。
安装和配置步骤具体如下:
1,主机和ip分配地址
修改主机名:namenode为master,datanode分别为slave1,slave2
vi /etc/hostname
增加三台机器和ip的映射关系
vi /etc/hosts 编辑
192.168.137.38 master
192.168.137.17 slave1
192.168.137.39 slave2
2,安装jdk
在官网上下载jdk1.7,jdk-7u25-linux-x64.tar.gz
解压缩 tar -zxvf jdk-7u25-linux-x64.tar.gz
mv jdk1.7.0_25 jdk1.7
设置环境变量 vi /etc/profile
export JAVA_HOME=/home/hadoop/jdk1.7
export JRE_HOME=/home/hadoop/jdk1.7/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
source /etc/profile
我是重启以后java -version显示java版本号
3,配置master到slave1,slave2的无密码登录,安装ssh
在master节点上执行以下命令
ssh-keygen –t rsa –P ''
这条命令是生成其无密码密钥对,询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsa和id_rsa.pub,默认存储在"/home/hadoop/.ssh"目录下。
查看"/home/hadoop/"下是否有".ssh"文件夹,且".ssh"文件下是否有两个刚生产的无密码密钥对。
ll -a | grep .ssh
cd .ssh
ll
接着在Master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
在验证前,需要做一件事儿是修改文件"authorized_keys"权限
chmod 600 ~/.ssh/authorized_keys
使用hadoop普通用户验证是否成功。 ssh localhost
无密码登录本机已经设置完毕,接下来的事儿是把公钥复制所有的Slave机器上。使用下面的命令格式进行复制公钥:
scp ~/.ssh/id_rsa.pub hadoop@master:~/
上面的命令是复制文件"id_rsa.pub"到服务器master的用户为"hadoop"的"/home/hadoop/"下面
下面就针对slave1节点进行配置。
查看slave1下的/home/hadoop是否有文件id_rsa.pub存在的话
在"/home/hadoop/"下创建".ssh"文件夹
这一步并不是必须的,如果在Slave1.Hadoop的"/home/hadoop"已经存在就不需要创建了,因为我们之前并没有对Slave机器做过无密码登录配置,所以该文件是不存在的。用下面命令进行创建。
mkdir ~/.ssh然后是修改文件夹".ssh"的用户权限,把他的权限修改为"700",用下面命令执行:
chmod 700 ~/.ssh
到目前为止Master.Hadoop的公钥也有了,文件夹".ssh"也有了,且权限也修改了。这一步就是把Master.Hadoop的公钥追加到Slave1.Hadoop的授权文件"authorized_keys"中去。使用下面命令进行追加并修改"authorized_keys"文件权限:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
当前面的步骤设置完毕,就可以使用下面命令格式进行SSH无密码登录了。
ssh slave1
最后记得把"/home/hadoop/"目录下的"id_rsa.pub"文件删除掉。
rm –r ~/id_rsa.pub
这样就完成了master无密码登录slave1了,同样的操作在slave2上执行。
4,hadoop2.2.0安装过程
配置hadoop环境变量vi /etc/profile
export HADOOP_DEV_HOME=/home/hadoop/hadoop-2.2.0
export PATH=$PATH:$HADOOP_DEV_HOME/bin
export PATH=$PATH:$HADOOP_DEV_HOME/sbin
export HADOOP_MAPARED_HOME=${HADOOP_DEV_HOME}
export HADOOP_COMMON_HOME=${HADOOP_DEV_HOME}
export HADOOP_HDFS_HOME=${HADOOP_DEV_HOME}
export YARN_HOME=${HADOOP_DEV_HOME}
export HADOOP_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop
export HDFS_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop
export YARN_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
source /etc/profile
配置之前需要在master本地文件系统中创建一下目录
/home/hadoop/hadoop/dfs/name
/home/hadoop/hadoop/dfs/data
/home/hadoop/hadoop/tmp
将hadoop安装目录授权给hadoop用户
chown -R hadoop:hadoop /home/hadoop/
这里要涉及到的配置文件有7个:
~/hadoop-2.2.0/etc/hadoop/hadoop-env.sh
~/hadoop-2.2.0/etc/hadoop/yarn-env.sh
~/hadoop-2.2.0/etc/hadoop/slaves
~/hadoop-2.2.0/etc/hadoop/core-site.xml
~/hadoop-2.2.0/etc/hadoop/hdfs-site.xml
~/hadoop-2.2.0/etc/hadoop/mapred-site.xml
~/hadoop-2.2.0/etc/hadoop/yarn-site.xml
以上个别文件默认不存在的,可以复制相应的template文件获得。
配置文件1:hadoop-env.sh
修改JAVA_HOME值(export JAVA_HOME=/usr/java/jdk1.7)
配置文件2:yarn-env.sh
修改JAVA_HOME值(exportJAVA_HOME=/usr/java/jdk1.7)
配置文件3:slaves (这个文件里面保存所有slave节点)
写入以下内容:
slave1
slave2
配置文件4: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/hadoop/tmp</value>
</property>
</configuration>
配置文件5:hdfs-site.xml<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replicaation</name>
<value>1</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
配置文件6:mapred-site.xml<configuration>
<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>
</configuration>
配置文件7:yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>${hadoop.tmp.dir}/nodemanager/local</value>
</property>
<property>
<name>yarn.nodemanager.address</name>
<value>0.0.0.0:8034</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>10240</value>
<description>the amount of memory on the NodeManager in GB</description>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>${hadoop.tmp.dir}/nodemanager/remote</value>
<description>directory on hdfs where the application logs are moved to </description>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>${hadoop.tmp.dir}/nodemanager/logs</value>
<description>the directories used by Nodemanagers as log directories</description>
</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.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</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>
</configuration>
把这些配置文件复制到其他节点
scr -r /home/hadoop/hadoop-2.2.0 hadoop@slave1:~/
scr -r /home/hadoop/hadoop-2.2.0 hadoop@slave2:~/
7,启动hadoop
进入安装目录: cd ~/hadoop-2.2.0/
格式化namenode:./bin/hdfs namenode –format
再次启动
./sbin/hadoop-daemon.sh start namenode
经验证
jps
6296 NameNode
6332 Jps
NameNode成功启动了
启动hdfs:./sbin/start-dfs.sh
此时在master上面运行的进程有:namenode secondarynamenode
slave1和slave2上面运行的进程有:datanode
启动yarn:./sbin/start-yarn.sh
此时在master上面运行的进程有:namenode secondarynamenoderesourc
slave1和slave2上面运行的进程有:datanode nodemanaget
查看集群状态:./bin/hdfs dfsadmin –report
查看文件块组成: ./bin/hdfsfsck / -files -blocks
查看HDFS: http://192.168.137.38:50070
查看RM: http:// 192.168.137.38:8088
8,运行实例程序
现在一个文件夹里面建立两个文件file01.txt file02.txt里面加入如下内容,具体方法会linux的都会,我就默认你具有了。
file01.txt
1
2
3
4
|
kongxianghe
kong
yctc
Hello World
|
file02.txt
1
2
3
4
5
|
11
2222
kong
Hello
yctc
|
将这两个文件放入hadoop的HDFS中,HDFS(Hadoop Distributed File System)就是hadoop的文件系统。
1
|
hadoop fs - ls // 查看hdfs目录情况
|
在HDFS中创建文件夹input
1
|
hadoop fs - mkdir -p input // -p 这个参数是必须加入的hadoop2和之前的版本是不一样的
|
1
|
hadoop fs -put file *.txt input // 将刚才的两个文件放入到hadoop的文件系统之中
|
查看这些文件是否已经进入到了hadoop的文件系统之中
1
|
hadoop fs - cat input /file01 .txt //查看命令
|
删除文件命令
1
|
hadoop fs - rm -r xxx
|
确保文件进入到HDFS中之后,我们可以利用hadoop自带的一个叫做wordcount的程序进行文字的查找归类操作
首先要找到hadoop的lib包 我这边贴出来一个hadoop_eclipse_plugin.jar 网盘备份:http://pan.baidu.com/s/1qWLKiba
所有的hadoop的开发jar包和eclipse配置都在里面,目前到2014.01.17开始eclipse还没有官方的插件支持,我这个也是技术大牛在github下载源码自己编译的,关注我的后续我回介绍这方面的东西,加压刚才这个安装包,里面有个lib文件夹,大家都知道那是jar包,找出这样的一个jar包叫做hadoop-mapreduce-examples-2.2.0.jar【注:网上很多教程都是提示wordcount所在的jar包在hadoop-examples-1.0.0.jar中,目前hadoop2中已经将其放入上述jar文件中】
利用如命令进行计算,注意input文件夹是刚才手动在HDFS中建立的,output文件夹不需要自己建立。
1
|
hadoop jar /home/hadoop/hadoop-2.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2 .2.0.jar wordcount input output
|
需要等待几分钟的时间,在进行map和reduce的情况下会占用大量的内存,可能超过4GB这时候什么都不要动只需要等待
在浏览器中输入:localhost:8088 然后在左边栏中找到Cluster-->Applications-->FINISHED 刚才的任务就在里。
查看mapreduce的情况,利用命令找到output文件夹,找到里面的文件
1
|
hadoop fs - ls output
|
1
2
3
|
Found 2 items
-rw-r--r-- 1 root supergroup 0 2014-01-17 10:44 output/_SUCCESS
-rw-r--r-- 1 root supergroup 58 2014-01-17 10:44 output/part-r-00000
|
打开part-r-00000这个文件就是执行结果
1
|
hadoop fs - cat output /part-r-00000
|
1
2
3
4
5
6
7
|
1111 1
2222 1
Hello 2
World 1
kong 2
kongxianghe 1
yctc 2
|
Good Luck!