Hi!请登陆

通过Hadoop实现集群分布式计算

2020-10-27 70 10/27

hadoop是一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储.
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.
HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上.
而且它提供高传输率(high throughput)来访问应用程序的数据,
适合那些有着超大数据集(large data set)的应用程序.
HDFS放宽了(relax)POSIX的要求(requirements)这样可以流的形式访问(streaming access)文件系统中的数据.
好现在我们就在centos操作系统里面来实际操作一下:
以下集群配置内容,以两台机器为例.其中一台是 master ,另一台是 slave1 .

master 上运行:

name node, data node, task tracker, job tracker , secondary name node

slave1 上运行:

data node, task tracker

前面加 表示对两台机器采取相同的操作.

1.安装 JDK

yum install java-1.6.0-openjdk-devel

2.设置环境变量

编辑 /etc/profile 文件,设置 JAVA_HOME 环境变量以及类路径:

export JAVA_HOME="/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64"
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

3.添加 hosts 的映射

编辑 /etc/hosts 文件,注意 host name 不要有下划线,见下步骤 9.

192.168.225.16 master
192.168.225.66 slave1

4.配置 SSH

cd /root & mkdir .ssh
chmod 700 .ssh & cd .ssh

创建密码为空的 RSA 密钥对:

ssh-keygen -t rsa -P ""

在提示的对称密钥名称中输入 id_rsa ,将公钥添加至 authorized_keys 中:

cat id_rsa.pub >> authorized_keys
chmod 644 authorized_keys # 重要

编辑 sshd 配置文件 /etc/ssh/sshd_config ,把:

#AuthorizedKeysFile .ssh/authorized_keys

前面的注释取消掉.
重启 sshd 服务:

service sshd restart

测试 SSH 连接.连接时会提示是否连接,按回车后会将此公钥加入至 knows_hosts 中:

ssh localhost

5.配置 master 和 slave1 的 ssh 互通

在 slave1 中重复步骤 4 ,然后把 slave1 中的 .ssh/authorized_keys 复制至 master 的 .ssh/authorized_keys 中.注意复制过去之后,要看最后的类似 root@localhost 的字符串,修改成 root@slave1 .同样将 master 的 key 也复制至 slave1 ,并将最后的串修改成 root@master .

或者使用如下命令:

ssh-copy-id -i ~/.ssh/id_rsa.pub root@slave1

测试 SSH 连接:
在 master 上运行:

ssh slave1

在 slave1 上运行:

ssh master

6.安装 Hadoop

下载 hadoop 安装包:

wget http://mirror.bjtu.edu.cn/apache/hadoop/common/hadoop-0.20.203.0/hadoop-0.20.203.0rc1.tar.gz

复制安装包至 slave1 :

scp hadoop-0.20.203.0rc1.tar.gz root@slave1:/root/

解压:

tar xzvf hadoop-0.20.203.0rc1.tar.gz
mkdir /usr/local/hadoop
mv hadoop-0.20.203.0/ /usr/local/hadoop

修改 .bashrc 文件(位于用户目录下,即 ~/.bashrc ,对于 root ,即为 /root/.bashrc )
添加环境变量:

export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin

7.配置 Hadoop 环境变量

以下所有 hadoop 目录下的文件,均以相对路径 hadoop 开始.
修改hadoop/conf/hadoop-env.sh文件,将里面的 JAVA_HOME 改成步骤 2 中设置的值.

8.创建 Hadoop 本地临时文件夹

mkdir /root/hadoop_tmp

(注意这一步,千万不要放在 /tmp 目录下面!!因为 /tmp 默认分配的空间是很小的,往 hdfs 里放几个大文件就会导致空间满了,就会报错)
修改权限:

chown -R hadoop:hadoop /root/hadoop_tmp

更松地,也可以这样:

chmod –R 777 /root/hadoop_tmp

9.配置 Hadoop

修改 master 的 hadoop/conf/core-site.xml ,在 节中添加如下内容:
注意: fs.default.name 的值不能带下划线.

hadoop.tmp.dir
/root/hadoop_tmp/hadoop_${user.name}
fs.default.name
hdfs://localhost:54310
io.sort.mb
1024

其中 io.sort.mb 值,指定了排序使用的内存,大的内存可以加快 job 的处理速度.
修改 hadoop/conf/mapred-site.xml ,在 节中添加如下内容:

mapred.job.tracker
localhost:54311
mapred.map.child.java.opts
-Xmx4096m
mapred.reduce.child.java.opts
-Xmx4096m

其中 mapred.map.child.java.opts, mapred.reduce.child.java.opts 分别指定 map/reduce 任务使用的最大堆内存.较小的内存可能导致程序抛出 OutOfMemoryException .
修改 conf/hdfs -site.xml ,在 节中添加如下内容:

dfs.replication

同样,修改 slave1 的 /usr/local/hadoop/conf/core-site.xml ,在 节中添加如下内容:

hadoop.tmp.dir
/root/hadoop_tmp/hadoop_${user.name}
fs.default.name
hdfs://localhost:54310
io.sort.mb
1024

修改 conf/mapred-site.xml ,在 节中添加如下内容:

mapred.job.tracker
localhost:54311
mapred.map.child.java.opts
-Xmx4096m
mapred.reduce.child.java.opts
-Xmx4096m

修改 conf/hdfs-site.xml ,在 节中添加如下内容:

dfs.replication

至此, master 和 slave1 都已经完成了 single_node 的搭建,可以分别在两台机器上测试单节点.
启动节点:

hadoop/bin/start-all.sh

运行 jps 命令,应能看到类似如下的输出:

937 DataNode
9232 Jps
8811 NameNode
12033 JobTracker
12041 TaskTracker

这个教程有个问题,直接使用start-all.ssh启动的话,执行jps只有:

5000 Jps
4683 SecondaryNameNode
4533 DataNode

必须再执行start-mapred.sh 运行才是正常的:

6009 TaskTracker
5763 SecondaryNameNode
6047 Jps
5613 DataNode
5864 JobTracker
Tag:

相关推荐