Ubuntu12.04安装hadoop1.0.4
来源:互联网 发布:java se深入浅出 编辑:程序博客网 时间:2024/05/30 23:20
在Linux上安装hadoop实践记录
为实验分布式环境在计算复杂的大数据运算时的优势,我在实验室搭建了一个小型的hadoop集群环境,下面是我在搭建环境过程中的总结和一些心得。
1. Hadoop简介
在搭建Hadoop全分布式集群环境之前首先需要了解Hadoop的基本构成模块,主要包括:
1) NameNode(名称节点)
2) DataNode(数据节点)
3) SecondaryNameNode(次名称节点)
4) JobTracker(作业跟踪节点)
5) TaskTracker(任务跟踪节点)
1.1 NameNode
NameNode是Hadoop集群中的管理者,hadoop分布式文件系统采用的是主/从结构,NameNode作为主端,它管理Hadoop文件系统的命名空间,维护着文件系统树以及整个系统中的所有目录结构,指导从端的DataNode进行底层的I/O任务。Namenode还记录了各个文件如何被分割成块,在哪几个DataNode中存储块的信息。
1.2 DataNode
DataNode是hadoop集群中的工作节点,它根据NameNode的调度来执行底层I/O任务——将文件系统中的文件写入或存储到本地实际文件中,并定期向NameNode发送它们所存储的块的列表。
1.3 SecondaryNameNode
SecondaryNmeNode(SNN)是一个监控hadoop集群状态的辅助节点。如果没有SNN,一旦NameNode一旦发生损坏,整个文件系统将会瘫痪,因为我们失去了块的位置信息,不知道如何根据DataNode上的数据块的信息来重建文件。因此,为了防止这一风险,我们在集群中单独用一节点作为SNN,这一节点上不运行其他的进程,它只与NameNode进行交互,根据集群配置的交互时间间隔,从NameNode上获取文件系统中元数据的快照。
1.4 JobTracker
每个hadoop集群都有一个并且只有一个JobTracker节点,JobTracker进程通常是在主节点上,它是应用程序和集群之间的连接桥梁,一旦有程序提交到集群上,JobTracker就会分配任务的运行模式,并监控所有任务的运行。
1.5 TaskTracker
每个TaskTracker负责执行由JobTracker分配的单项任务。TaskTracker进程可以在从节点上启动多个JVM来并行处理Map/Reduce任务,并持续不断地与JobTracker通信,如果JobTracker在一定时间内没有收到来自TaskTracker的“心跳”,它会假定TaskTracker已经崩溃,并分配相应的任务到其他节点上运行。在后续的章节中将详细介绍这几个节点在集群中的作用。
2. 搭建Hadoop实验环境
文中的ubuntu命令行若无标示,都是在master计算机上执行的。
2.1 实验环境
ubuntu12.04+jdk1.7.0_45+hadoop-1.0.4
机器名
IP
作用
mnclab-houhaiting
192.168.4.80
NameNode/JobTracker
mnclab-liusipei
192.168.4.91
SecondaryNameNode
mnclab-Lenovo1
192.168.4.111
DataNode/TaskTracker
mncalb-Lenovo2
192.168.4.115
DataNode/TaskTracker
mnclab-Lenovo3
192.168.4.117
DataNode/TaskTracker
mnclab-lilin
192.168.4.97
DataNode/TaskTracker
mnclab-shiyulong
192.168.4.83
DataNode/TaskTracker
注:表格中虚线部分表示,实验过程中后来增加的节点,开始是只有三台DataNode节点。
2.2 搭建步骤
在已经搭建了Ubuntu12.04系统的机器上,首先创建用户,为了操作简便我在所有的机器上创建了相同的用户名和相同的密码,用户名为mnclab,密码为mnclab2013。
在每台机器上添加集群中所有的机器名和对应的IP地址,修改方法为编辑/etc/hosts文件,添加下面的内容:
127.0.0.1 localhost
192.168.4.80 mnclab-houhaiting
192.168.4.111 mnclab-Lenovo1
192.168.4.115 mnclab-Lenovo2
192.168.4.117 mnclab-Lenovo3
192.168.4.97 mnclab-lilin
192.168.4.83 mnclab-shiyulong
192.168.4.91 mnclab-liusipei
2.2.1 开启ssh服务
第一步:安装ssh:sudo apt-get install ssh
第二步:建立ssh无密码登陆
(1)在NameNode上实现无密码登陆本机
~$ssh-keygen -trsa
执行上述命令,直接回车会在~/.ssh/生成两个文件id_rsa和id_rsa.pub。这是两个成对出现的文件,类似rsa协议的锁和钥匙。
然后在文件夹.ssh/下执行下面命令,把钥匙id_rsa.pub追加到公共key里面
~/.ssh$catid_rsa.pub >> authorized_keys
完成下面的命令后,就可以实现无密码登陆本机。如下图所示
(2)实现NameNode无密码登陆其他DataNode
首先在DataNode上按同样的步骤实现无密码登陆本机,然后把NameNode的id_rsa.pub拷贝到DataNode上的/.ssh/authorized_keys中(以192.168.4.111为例),
~/.ssh$ scp id_rsa.pub mnclab@192.168.4.111:/home/mnclab
登陆192.168.4.111(DataNode)执行
"slave"}~$ catid_rsa.pub >> .ssh/authorized_keys
添加id_rsa到ssh-agent
"slave"}~/.ssh$ ssh-add id_rsa
如果提示:
“Could not open a connection to your authentication agent”
执行:
"slave"}~/.ssh$ ssh-agent bash
注意:如果配置完成,NameNode不能登陆DataNode,有两种可能。一是权限的问题,修改权限,
"slave"}~$ sudo chmod 600 ~/.ssh/authorized_keys
"slave"}~$ sudo chmod 600 ~/.ssh/id_rsa
"slave"}~$ sudo chmod 600 ~/.ssh/id_rsa.pub
"slave"}~$ sudo chmod 644 ~/.ssh/known_hosts
"slave"}~$ sudo chmod 755 ~/.ssh
二是防火墙为关闭,关闭防火墙,
~$ sudo ufw disable。
3. 安装jdk
经过实践,发现最好不要使用ubuntu自带的java,所以我从甲骨文官网下载了jdk-7u45-linux-x64.tar.gz 到本地,然后手动安装在/usr/local目录下
~$sudo tar-zxvf jdk-7u45-linux-x64.tar.gz -C /usr/local/jvm
注意:为了以后运行hadoop,在此需要更改文件夹/jvm的权限为755
~/usr/local$ sudo chmod 755 -R /jvm
安装好后,在/etc/profile中添加下列语句,这是在环境中申明java的安装位置。
exportJAVA_HOME=/usr/local/jvm/jdk1.7.0_45
exportJRE_HOME=/usr/local/jvm/jdk1.7.0_45/jre
exportCLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
使配置生效:保存并退出,执行下面命令使其配置立即生效。
~$ source/etc/profile
注意:每台机器都是一样的安装,最好是保证每台机器的安装环境一致。
4. 安装hadoop
在hadoop官方网站下载hadoop-1.0.4.tar.gz,解压安装
~$sudo tar-xzvf hadoop-1.0.4.tar.gz -C /usr/local/
把hadoop的安装路径添加到/etc/profile中
exportHADOOP_HOME=/usr/local/hadoop
exportPATH=$HADOOP_HOME/bin:$PATH
5. 配置hadoop
hadoop的主要配置文件都在文件夹hadoop/conf/下,主要需要配置以下几个文件
(1)在hadoop-env.sh中配置JAVA的环境变量
exportJAVA_HOME=/usr/local/jvm/jdk1.7.0_45
(2)在masters和slaves中配置主/从节点
masters文件: 192.168.4.80
slaves文件: 192.168.4.111
192.168.4.115
192.168.4.117
(3)配置core-site.xml,hdfs-site.xml,mapred-site.xml
core-site.xml:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
<description>A base for othertemporary directories</description>
<final>true</final>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.4.80:9000</value><--! master's ip -->
<final>true</final>
</property>
<property>
<name>fs.trash.interval</name>
<value>1440</value>
<description>Number of minutesbetween trash checkpoints.
If zero, thetrash feature is disabled. </description>
</property>
</configuration>
注: hadoop.tmp.dir:配置hadoop中临时文件的存储路径,默认是hadoop/tmp,但是hadoop/tmp会定期删除文件,所以另外指定路径。
fs.default.name:用于指定HDFS的namenode和默认文件系统。
fs.trash.interval:存储在文件系统中删除的文件,设置保留时间为1天。
hdfs-site.xml:
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/filesystem/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/filesystem/data</value>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>/usr/local/hadoop/namesecondary</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.block.size</name>
<value>268435456</value>
</property>
<property>
<name>dfs.datanode.socket.write.timeout</name>
<value>1000000000</value>
</property>
<property>
<name>dfs.socket.timeout</name>
<value>100000000</value>
</property>
</configuration>
注: dfs.name.dir:决定文件系统中namenode上存储文件的目录路径。
mapred-site.xml:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>192.168.4.80:9001</value><--! master's ip -->
<final>true</final>
</property>
<property>
<name>mapred.job.reuse.jvm.num.tasks</name>
<value>-1</value>
<description>some maps and reducesuse just one jvm</description>
</property>
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>4</value>
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>4</value>
</property>
<property>
<name>io.sort.factor</name>
<value>10</value>
<description></description>
</property>
<property>
<name>io.sort.mb</name>
<value>100</value>
<description>In the Map stage, sothat the memory map output to a file in the spill as soon as possible , whichwe can observe the output map</description>
</property>
<property>
<name>mapred.job.shuffle.input.buffer.percent</name>
<value>0.001</value>
<description></description>
</property>
<property>
<name>mapred.job.shuffle.merge.percent</name>
<value>0.001</value>
<description></description>
</property>
<property>
<name>mapred.reduce.tasks</name>
<value>2</value>
</property>
<property>
<name>mapred.task.timeout</name>
<value>3600000</value>
</property>
<property>
<name>mapred.max.map.failures.percent</name>
<value>50</value>
</property>
<property>
<name>mapred.map.java.opts</name>
<value>-Xmx1024m</value>
</property>
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx1024m</value>
</property>
</configuration>
注:mapred.job.reuse.jvm.num.tasks=-1,指定多个tasks只启用一个jvm,减小内存压力。
mapred.tasktracker.map.tasks.maximum=4,每个DataNode节点上同时运行的map个数,由于我的实验机器只有一个2核cpu,所以我只设置为4,一般设置为接近机器的cpu的总核数即可。
mapred.tasktracker.reduce.tasks.maximum=4,每个DataNode节点上同时运行的reduce个数,设置要求类似上面的参数。
6. 运行Hadoop
给slave的hadoop文件夹配置读权限
"slave"}~/usr/local$ chown-R mnclab:mnclab hadoop
首先格式化HDFS文件系统:
"master"}~$ hadoop namenode -format
然后启动hadoop
"master"}~/usr/local/hadoop/bin$ start-all.sh
7. 验证Hadoop
在master上执行:
~$hadoopdfsadmin -report
- Ubuntu12.04安装hadoop1.0.4
- ubuntu12.04安装Hadoop1.2.1
- ubuntu12.10 安装hadoop1.0.4伪分布式
- Ubuntu12.04安装伪分布式hadoop1.1.2
- 分布式-ubuntu12.04上安装hadoop1.2.1
- ubuntu12.04安装hadoop1.2遇到的问题
- Ubuntu12.04配置Hadoop1.1.2集群
- Install Hadoop1.2.1 in Ubuntu12.04
- hadoop1.2.1集群安装(虚拟机和主机ubuntu12.04构成)----连接eclipse
- Hadoop1.0.4集群安装
- Hadoop1.0.4集群安装
- Hadoop1.0.4伪分布式安装
- 基于Ubuntu12.04+hadoop1.2.0 的hadoop集群搭建
- ubuntu12.04安装maven3.0.4
- Hadoop1安装
- ubuntu12.0.4 安装redmine
- ubuntu12.0.4安装mediawiki
- ubuntu12.0.4 安装eclipse
- 获取view的高和宽
- POJ 2632 Crashing Robots(模拟)
- 数据结构---单链表
- 马云凭啥在达沃斯大出风头 ?
- Python编辑器 Sublime text2 +JEDI(python自动补全插件)
- Ubuntu12.04安装hadoop1.0.4
- Activiti 5.17 --从Activiti的业务对象到MyBatis SQL Mapping ID的映射规则
- 非常高效地读手机联系人列表和分组
- 内核中_init,_exit中的作用
- 剖析Android-Handler机制流程
- Two Sum
- Linux 下android环境的配置
- setsockopt()用法
- 在win8.1中设置让微软拼音默认是英文输入