当前位置: 代码迷 >> 云计算 >> 小试Hadoop1.1.1漫笔
  详细解决方案

小试Hadoop1.1.1漫笔

热度:10306   发布时间:2013-02-26 00:00:00.0
小试Hadoop1.1.1随笔

最近云计算搞得火热,于是对落地方案之一的Hadoop,进行了初次接触,并记录。

测试环境:

VMware9、Linux(deepin12.06_64版本,选用这个linux是因为有窗口环境可以编辑文件,访问windows共享文件,比较方便)

【安装系统】

1、安装Linux系统后创建hadoop用户及组,并建立/home/hadoop目录,保证目录可读写,后面安装及测试等操作均用hadoop用户。

2、修改各台主机的配置/etc/hosts,加入需要测试的主机对应名称及IP

192.168.0.10 master

192.168.0.11 slave 

主机信息:

机器名

IP地址

作用

master(Node1)

192.168.0.10

NameNode、JobTracker

slave(Node2)

192.168.0.11

DataNode、TaskTracker

slave(Node3)

...

DataNode、TaskTracker

先测试一主一从的环境,ok后再扩展,可以体会到分布式运算的好处和优势。


【下载软件】

1、下载并安装jdk1.6的64位版本,过程略

//配置JDK环境变量 

# vi /etc/profile

export JAVA_HOME=/opt/jdk1.6.0_39

export PATH=$JAVA_HOME/bin:$PATH:.

//使配置生效

# source /etc/profile

2、下载Hadoop1.1.1(开始下载的是.rpm,但用rpm安装时,屡屡报错,貌似rpm对安装环境要求苛刻),于是下了.tar.gz的文件,并解压至/usr/hadoop,确保hadoop用户对该目录可读写,即该目录owner是hadoop用户。

【安装软件】

1、安装ssh并实现无密码登录slave端,需要使用ssh-keygen -rsa,一路回车,将id_rsa.pub改名为authorized_keys放入slave机的.ssh目录(/home/hadoop目录下新建),详细过程略。

2、修改hadoop相关配置文件

vi hadoop-env.sh

 export JAVA_HOME=/opt/jdk1.6.0_39


配置文件都位于/usr/hadoop/conf下:
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/tmp</value>
 </property>
</configuration>

hdfs-site.xml如下:
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/name1,/home/hadoop/name2</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/data1,/home/hadoop/data2</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value> 
</property>
</configuration>

mapred-site.xml如下:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
</configuration>

1)   dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径。 当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。

2)   dfs.data.dir是DataNode存放块数据的本地文件系统路径,逗号分割的列表。 当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。

3)dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。

注意:此处的name1、name2、data1、data2目录不能预先创建,hadoop格式化时会自动创建,如果预先创建反而会有问题。


配置conf/masters和conf/slaves来设置主从结点,注意最好使用主机名,并且保证机器之间通过主机名可以互相访问,每个主机名一行。

vi masters:
输入:

master

vi slaves:

输入:
slave


配置完主机master环境后,可以拷贝至从机slave中了,使用

scp -r /usr/hadoop hadoop@slave:/usr/hadoop

建议主从机的环境一致


配置完成后,就可以格式化namenode了,如下命令:

hadoop namenode -format

如果没有报错的话,基本上没有什么问题了,启动Hadoop:

start-all.sh
全部停止用
stop-all.sh

然后到logs目录下看有没有报错信息,包括slave机里面的logs

【测试】
1)浏览NameNode和JobTracker的网络接口,它们的地址默认为:

NameNode - http://master:50070/
JobTracker - http://master:50030/

3)   使用netstat  –nat查看端口49000和49001是否正在使用。

4)将输入文件拷贝到分布式文件系统:
hadoop fs -mkdir input

等待一会儿后没有报错,想必是成功了,到各个目录下都没找到input目录,连后面创建的output目录也没有,比较奇怪。

将core-site.xml作为测试的输入文件:
hadoop fs -put conf/core-site.xml input

5)然后启动hadoop

hadoop jar ../hadoop-examples-1.1.1.jar wordcount input output

如果后面不加wordcount input output 可以查看例子jar包中提供的各种example

如果报错output目录存在,执行删除命令:

hadoop fs -rmr output

6)例子运行完毕后,查看结果如下命令:

hadoop fs -cat output/*


【添加节点】

可扩展性是HDFS的一个重要特性,首先在新加的节点上安装hadoop,然后修改$HADOOP_HOME/conf /master文件,加入 NameNode主机名,然后在NameNode节点上修改$HADOOP_HOME/conf/slaves文件,加入新加节点主机名,再建立到新加节点无密码的SSH连接

运行启动命令:

start-all.sh

然后可以通过http://(Masternode的主机名):50070查看新添加的DataNode


【负载均衡】

start-balancer.sh,可以使DataNode节点上选择策略重新平衡DataNode上的数据块的分布


【后记】

看到某牛人的Hadoop 2.0.0-alpha尝鲜安装和hello world》

后,我抑郁了,好不容易搞懂了Hadoop1.1.1里面的job和task等机制,现在2.0版本又给搞没了,还“使用YARN替代了原来的map/reduce,YARN号称是第二代map/reduce,速度比一代更快,且支持集群服务器数量更大。”虽然号称支持更多的节点进行集群,以及namenode可以做HA,

但已是后话了,容我慢慢学了。