Hadoop安装部署-系统架构

Hadoop安装部署

作者:志远 来源:淘宝数据仓库团队酷勤网收集 2008-10-23

摘要

酷勤网

Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同的用户名的帐户,所以需要每台机器见一个同名的用户。Hadoop需要namenode到datanode的无密码SSH,所以需要设置namenode到其他3台datanode的无密码公钥认证方式的SSH。

1. Hadoop安装部署

1.1. 机器说明

总共4台机器:test161.sqa,test162.sqa, test163.sqa,test164.sqa

IP地址分别为:192.168.207.161 …… 192.168.207.164

操作系统:Redhat Linux

root用户密码:hello123

test161.sqa(192.168.207.161)作为namenode(master),其他的作为datanode(slave)

1.2. 用机器名ping通机器

用root用户登录。

在namenode和各个slave上用机器名互相ping,ping不通的话,修改/etc/hosts文件,加入如下内容:

192.168.207.161 test161.sqa

192.168.207.162 test162.sqa

192.168.207.163 test163.sqa

192.168.207.164 test164.sqa

这样应该就可以用机器名ping通了。

其他datanode机器只要保证和namenode能ping通就可以了

1.3. 新建系统hadoop用户

Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同的用户名的帐户,所以需要每台机器见一个同名的用户。

在这4台机器上建hadoop用户,密码:hadoop,默认路径/home/hadoop/。

1.4. SSH设置

Hadoop需要namenode到datanode的无密码SSH,所以需要设置namenode到其他3台datanode的无密码公钥认证方式的SSH。

首先用hadoop用户登录每台机器(包括namenode),在/home/hadoop/目录下建立.ssh目录,并将目录权设为:drwxr-xr-x,设置命令:

chmod 755 .ssh

在namenode执行入下图命令(用新建的hadoop用户登录):

输入ssh-keygen -t rsa后,

Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):

Enter passphrase (empty for no passphrase): Enter same passphrase again:

这三个项目都直接回车。

然后将id_rsa.pub的内容复制到每个机器(也包括本机)的/home/hadoop/.ssh/authorized_keys文件中,

如果机器上已经有authorized_keys这个文件了,就在文件末尾加上id_rsa.pub中的内容,

如果没有authorized_keys这个文件,直接cp或者scp就好了,

下面的操作假设各个机器上都没有authorized_keys文件。

具体命令:

在namenode执行(用新建的hadoop用户登录):

cp /home/hadoop/.ssh/id_rsa.pub /home/hadoop/.ssh/authorized_keys scp authorized_keys test162.sqa:/home/hadoop/.ssh/

此处的scp就是通过ssh进行远程copy,此处需要输入远程主机的密码,即test162.sqa机器上hadoop帐户的密码(hadoop),

当然,也可以用其他方法将authorized_keys文件拷贝到其他机器上。另外2台datanode也一样拷贝。

scp authorized_keys test163.sqa:/home/hadoop/.ssh/scp authorized_keys test164.sqa:/home/hadoop/.ssh/

用hadoop用户登录每台机器,修改/home/hadoop/.ssh/authorized_keys文件的权限为:-rw-r–r–,设置命令:

cd /home/hadoop/.sshchmod 644 authorized_keys

设置完成后,测试一下namenode到各个节点的ssh链接,包括到本机,如果不需要输入密码就可以ssh登录,说明设置成功了。

其他机器一样测试:

ssh test162.sqassh test163.sqassh test164.sqa

1.5. 安装JDK

到sun网站下载JDK安装包,并在每台机器的root用户下面安装。下面以实例简单描述一下如何安装:

下载JDK的rpm包jdk-6u6-linux-i586-rpm.bin

chmod u+x ./jdk-6u6-linux-i586-rpm.bin./ jdk-6u6-linux-i586-rpm.bin rpm -ivh jdk-6u6-linux-i586.rpm

安装软件会将JDK自动安装到 /usr/java/jdk1.6.0_07目录下。安装完成后,设置JDK的环境变量,

考虑到JDK可能会有其他系统用户也会用到,建议将环境变量直接设置在/etc/profile中具体内容:

export JAVA_HOME=/usr/java/jdk1.6.0_07

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin

1.6. 设置目录并安装Hadoop

用hadoop用户登录namenode,并新建一个目录,用于存放所有hadoop相关内容。

本例中在/home/hadoop目录下新建HadoopInstall下载hadoop安装包

http://apache.mirror.phpchina.com/hadoop/core/hadoop-0.16.3/hadoop-0.16.3.tar.gz,

存放到namenode的hadoop用户的/home/hadoop/HadoopInstall并解压缩:

tar zxvf hadoop-0.16.3.tar.gz

考虑到今后升级以及其他操作的方便性,建议建一个名称为hadoop的链接,指向hadoop-0.16.3目录:

ln -s hadoop-0.16.3 hadoop

新建目录:/home/hadoop/HadoopInstall/hadoop-conf

将/home/hadoop/HadoopInstall/hadoop/conf目录下的hadoop_site.xml,slaves,hadoop_env.sh,

masters文件拷贝到/home/hadoop/HadoopInstall/hadoop-conf目录

在/home/dbrg/.bashrc文件中设置环境变量$HADOOP_CONF_DIR:

export HADOOP_CONF_DIR=$HOME/HadoopInstall/hadoop-conf/

1.7. Hadoop环境变量设置和配置文件修改

在/home/hadoop/HadoopInstall/hadoop-conf/hadoop_env.sh文件中设置环境变量:

export JAVA_HOME=/usr/java/jdk1.6.0_06export HADOOP_HOME=/home/hadoop/HadoopInstall/hadoop

在/home/hadoop/HadoopInstall/hadoop-conf/masters文件中设置namenode:

文件内容:

test161.sqa

在/home/hadoop/HadoopInstall/hadoop-conf/slaves文件中设置datanode:

文件内容:

test162.sqatest163.sqatest164.sqa

在/home/hadoop/HadoopInstall/hadoop-conf/ hadoop-site.xml文件中设置hadoop配置:

fs.default.name

test161.sqa:9000The name of the default file system. Either the literal

string “local” or a host:port for DFS.mapred.job.tracker

test161.sqa:9001The host and port that the MapReduce job tracker runs at.

If “local”, then jobs are run in-process as a single map and reduce task.hadoop.tmp.dir/home/hadoop/HadoopInstall/tmp

A base for other temporary directories.dfs.name.dir

/home/hadoop/HadoopInstall/filesystem/nameDetermines where on the local filesystem

the DFS name node should store the name table. If this is a comma-delimited list of directories then the name table

is replicated in all of the directories, for redundancy. dfs.data.dir

/home/hadoop/HadoopInstall/filesystem/dataDetermines where on the local filesystem

an DFS data node should store its blocks. If this is a comma-delimited list of directories, then data will be stored

in all named directories, typically on different devices. Directories that do not exist are ignored. dfs.replication1Default block replication.

The actual number of replications can be specified when the file is created. The default is used if replication is

not specified in create time.

1.8. 部署datanode节点

将namenode上安装配置完成的hadoop文件拷贝到所有datanode:

scp -r /home/hadoop/HadoopInstall test162.sqa:/home/hadoop/scp -r /home/hadoop/HadoopInstall

test163.sqa:/home/hadoop/scp -r /home/hadoop/HadoopInstall test164.sqa:/home/hadoop/

1.9. 启动Hadoop

格式化namenode

/home/hadoop/HadoopInstall/hadoop/bin/hadoop namenode -format

在/home/hadoop/HadoopInstall/hadoop/bin/下面有很多启动脚本,可以根据自己的需要来启动:

* start-all.sh 启动所有的Hadoop守护。包括namenode, datanode, jobtracker, tasktrack

* stop-all.sh 停止所有的Hadoop。

* start-mapred.sh 启动Map/Reduce守护。包括Jobtracker和Tasktrack。

* stop-mapred.sh 停止Map/Reduce守护

* start-dfs.sh 启动Hadoop DFS守护.Namenode和Datanode

* stop-dfs.sh 停止DFS守护

在这里,简单启动所有守护

bin/start-all.sh

同样,如果要停止hadoop,则

bin/stop-all.sh

1.10. HDFS测试

运行bin/目录的hadoop命令,可以查看Haoop所有支持的操作及其用法,这里以几个简单的操作为例。

在HDFS建立目录:

bin/hadoop dfs -mkdir testdir

在HDFS中建立一个名为testdir的目录

复制文件到HDFS:

bin/hadoop dfs -put /home/hadoop/large.zip testfile.zip

把本地文件large.zip拷贝到HDFS的根目录/user/hadoop/下,文件名为testfile.zip

查看HDFS的现有文件

bin/hadoop dfs -ls

1.11. C++测试程序

分别用c++编写mapper和reducer程序,完成对文件中的单词数量的统计:

mapper.cpp:

// c++ map reduce Mapper

// word count example

// 2008.4.18

// by iveney

#include

#include

using namespace std;

int main()

{

string buf;

while( cin>>buf )

cout

}

reducer.cpp:

#include

#include

#include

using namespace std; int main()

{

map dict;

map::iterator iter;

string word;

int count;

while( cin>>word>>count )

dict[word]+=count;

iter = dict.begin();

while( iter != dict.end() )

{

cout

}

return 0;

}

来自:Hadoop安装部署

编译两个源文件:

g++ mapper.cpp -o mapperg++ reducer.cpp -o reducer

简单测试一下这两个程序:echo "ge abc ab df " | ./mapper | ./reducer

输出:ab 1abc 1df 1hadoop

运行测试bin/hadoop dfs -mkdir inputbin/hadoop dfs -put /home/hadoop/ap_base_session_fatmt0.txt

inputbin/hadoop jar contrib/streaming/hadoop-0.16.3-streaming.jar -mapper

/home/hadoop/hdfile/mapper -reducer /home/hadoop/hdfile/reducer -input input/ap_base_session_fatmt0.txt -output output

注意:

1、 用streaming方式运行测试程序,执行的是本地文件,所以要讲mapper和reducer

两个程序拷贝到namenode和每个datanode的相同目录下。本例是将mapper和reducer拷贝到每台机器的

/home/hadoop/hdfile目录下。

2、 处理的文本文件要先传到HDFS中,本例是将ap_base_session_fatmt0.txt传到HDFS的input目录下。

3、 如果要重新运行测试,需要将HDFS上的output目录删除,否则会报output目录已经存在的错误。

删除命令:bin/hadoop dfs -rmr output

Hadoop安装部署

作者:志远 来源:淘宝数据仓库团队酷勤网收集 2008-10-23

摘要

酷勤网

Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同的用户名的帐户,所以需要每台机器见一个同名的用户。Hadoop需要namenode到datanode的无密码SSH,所以需要设置namenode到其他3台datanode的无密码公钥认证方式的SSH。

1. Hadoop安装部署

1.1. 机器说明

总共4台机器:test161.sqa,test162.sqa, test163.sqa,test164.sqa

IP地址分别为:192.168.207.161 …… 192.168.207.164

操作系统:Redhat Linux

root用户密码:hello123

test161.sqa(192.168.207.161)作为namenode(master),其他的作为datanode(slave)

1.2. 用机器名ping通机器

用root用户登录。

在namenode和各个slave上用机器名互相ping,ping不通的话,修改/etc/hosts文件,加入如下内容:

192.168.207.161 test161.sqa

192.168.207.162 test162.sqa

192.168.207.163 test163.sqa

192.168.207.164 test164.sqa

这样应该就可以用机器名ping通了。

其他datanode机器只要保证和namenode能ping通就可以了

1.3. 新建系统hadoop用户

Hadoop要求所有机器上hadoop的部署目录结构要相同,并且都有一个相同的用户名的帐户,所以需要每台机器见一个同名的用户。

在这4台机器上建hadoop用户,密码:hadoop,默认路径/home/hadoop/。

1.4. SSH设置

Hadoop需要namenode到datanode的无密码SSH,所以需要设置namenode到其他3台datanode的无密码公钥认证方式的SSH。

首先用hadoop用户登录每台机器(包括namenode),在/home/hadoop/目录下建立.ssh目录,并将目录权设为:drwxr-xr-x,设置命令:

chmod 755 .ssh

在namenode执行入下图命令(用新建的hadoop用户登录):

输入ssh-keygen -t rsa后,

Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):

Enter passphrase (empty for no passphrase): Enter same passphrase again:

这三个项目都直接回车。

然后将id_rsa.pub的内容复制到每个机器(也包括本机)的/home/hadoop/.ssh/authorized_keys文件中,

如果机器上已经有authorized_keys这个文件了,就在文件末尾加上id_rsa.pub中的内容,

如果没有authorized_keys这个文件,直接cp或者scp就好了,

下面的操作假设各个机器上都没有authorized_keys文件。

具体命令:

在namenode执行(用新建的hadoop用户登录):

cp /home/hadoop/.ssh/id_rsa.pub /home/hadoop/.ssh/authorized_keys scp authorized_keys test162.sqa:/home/hadoop/.ssh/

此处的scp就是通过ssh进行远程copy,此处需要输入远程主机的密码,即test162.sqa机器上hadoop帐户的密码(hadoop),

当然,也可以用其他方法将authorized_keys文件拷贝到其他机器上。另外2台datanode也一样拷贝。

scp authorized_keys test163.sqa:/home/hadoop/.ssh/scp authorized_keys test164.sqa:/home/hadoop/.ssh/

用hadoop用户登录每台机器,修改/home/hadoop/.ssh/authorized_keys文件的权限为:-rw-r–r–,设置命令:

cd /home/hadoop/.sshchmod 644 authorized_keys

设置完成后,测试一下namenode到各个节点的ssh链接,包括到本机,如果不需要输入密码就可以ssh登录,说明设置成功了。

其他机器一样测试:

ssh test162.sqassh test163.sqassh test164.sqa

1.5. 安装JDK

到sun网站下载JDK安装包,并在每台机器的root用户下面安装。下面以实例简单描述一下如何安装:

下载JDK的rpm包jdk-6u6-linux-i586-rpm.bin

chmod u+x ./jdk-6u6-linux-i586-rpm.bin./ jdk-6u6-linux-i586-rpm.bin rpm -ivh jdk-6u6-linux-i586.rpm

安装软件会将JDK自动安装到 /usr/java/jdk1.6.0_07目录下。安装完成后,设置JDK的环境变量,

考虑到JDK可能会有其他系统用户也会用到,建议将环境变量直接设置在/etc/profile中具体内容:

export JAVA_HOME=/usr/java/jdk1.6.0_07

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin

1.6. 设置目录并安装Hadoop

用hadoop用户登录namenode,并新建一个目录,用于存放所有hadoop相关内容。

本例中在/home/hadoop目录下新建HadoopInstall下载hadoop安装包

http://apache.mirror.phpchina.com/hadoop/core/hadoop-0.16.3/hadoop-0.16.3.tar.gz,

存放到namenode的hadoop用户的/home/hadoop/HadoopInstall并解压缩:

tar zxvf hadoop-0.16.3.tar.gz

考虑到今后升级以及其他操作的方便性,建议建一个名称为hadoop的链接,指向hadoop-0.16.3目录:

ln -s hadoop-0.16.3 hadoop

新建目录:/home/hadoop/HadoopInstall/hadoop-conf

将/home/hadoop/HadoopInstall/hadoop/conf目录下的hadoop_site.xml,slaves,hadoop_env.sh,

masters文件拷贝到/home/hadoop/HadoopInstall/hadoop-conf目录

在/home/dbrg/.bashrc文件中设置环境变量$HADOOP_CONF_DIR:

export HADOOP_CONF_DIR=$HOME/HadoopInstall/hadoop-conf/

1.7. Hadoop环境变量设置和配置文件修改

在/home/hadoop/HadoopInstall/hadoop-conf/hadoop_env.sh文件中设置环境变量:

export JAVA_HOME=/usr/java/jdk1.6.0_06export HADOOP_HOME=/home/hadoop/HadoopInstall/hadoop

在/home/hadoop/HadoopInstall/hadoop-conf/masters文件中设置namenode:

文件内容:

test161.sqa

在/home/hadoop/HadoopInstall/hadoop-conf/slaves文件中设置datanode:

文件内容:

test162.sqatest163.sqatest164.sqa

在/home/hadoop/HadoopInstall/hadoop-conf/ hadoop-site.xml文件中设置hadoop配置:

fs.default.name

test161.sqa:9000The name of the default file system. Either the literal

string “local” or a host:port for DFS.mapred.job.tracker

test161.sqa:9001The host and port that the MapReduce job tracker runs at.

If “local”, then jobs are run in-process as a single map and reduce task.hadoop.tmp.dir/home/hadoop/HadoopInstall/tmp

A base for other temporary directories.dfs.name.dir

/home/hadoop/HadoopInstall/filesystem/nameDetermines where on the local filesystem

the DFS name node should store the name table. If this is a comma-delimited list of directories then the name table

is replicated in all of the directories, for redundancy. dfs.data.dir

/home/hadoop/HadoopInstall/filesystem/dataDetermines where on the local filesystem

an DFS data node should store its blocks. If this is a comma-delimited list of directories, then data will be stored

in all named directories, typically on different devices. Directories that do not exist are ignored. dfs.replication1Default block replication.

The actual number of replications can be specified when the file is created. The default is used if replication is

not specified in create time.

1.8. 部署datanode节点

将namenode上安装配置完成的hadoop文件拷贝到所有datanode:

scp -r /home/hadoop/HadoopInstall test162.sqa:/home/hadoop/scp -r /home/hadoop/HadoopInstall

test163.sqa:/home/hadoop/scp -r /home/hadoop/HadoopInstall test164.sqa:/home/hadoop/

1.9. 启动Hadoop

格式化namenode

/home/hadoop/HadoopInstall/hadoop/bin/hadoop namenode -format

在/home/hadoop/HadoopInstall/hadoop/bin/下面有很多启动脚本,可以根据自己的需要来启动:

* start-all.sh 启动所有的Hadoop守护。包括namenode, datanode, jobtracker, tasktrack

* stop-all.sh 停止所有的Hadoop。

* start-mapred.sh 启动Map/Reduce守护。包括Jobtracker和Tasktrack。

* stop-mapred.sh 停止Map/Reduce守护

* start-dfs.sh 启动Hadoop DFS守护.Namenode和Datanode

* stop-dfs.sh 停止DFS守护

在这里,简单启动所有守护

bin/start-all.sh

同样,如果要停止hadoop,则

bin/stop-all.sh

1.10. HDFS测试

运行bin/目录的hadoop命令,可以查看Haoop所有支持的操作及其用法,这里以几个简单的操作为例。

在HDFS建立目录:

bin/hadoop dfs -mkdir testdir

在HDFS中建立一个名为testdir的目录

复制文件到HDFS:

bin/hadoop dfs -put /home/hadoop/large.zip testfile.zip

把本地文件large.zip拷贝到HDFS的根目录/user/hadoop/下,文件名为testfile.zip

查看HDFS的现有文件

bin/hadoop dfs -ls

1.11. C++测试程序

分别用c++编写mapper和reducer程序,完成对文件中的单词数量的统计:

mapper.cpp:

// c++ map reduce Mapper

// word count example

// 2008.4.18

// by iveney

#include

#include

using namespace std;

int main()

{

string buf;

while( cin>>buf )

cout

}

reducer.cpp:

#include

#include

#include

using namespace std; int main()

{

map dict;

map::iterator iter;

string word;

int count;

while( cin>>word>>count )

dict[word]+=count;

iter = dict.begin();

while( iter != dict.end() )

{

cout

}

return 0;

}

来自:Hadoop安装部署

编译两个源文件:

g++ mapper.cpp -o mapperg++ reducer.cpp -o reducer

简单测试一下这两个程序:echo "ge abc ab df " | ./mapper | ./reducer

输出:ab 1abc 1df 1hadoop

运行测试bin/hadoop dfs -mkdir inputbin/hadoop dfs -put /home/hadoop/ap_base_session_fatmt0.txt

inputbin/hadoop jar contrib/streaming/hadoop-0.16.3-streaming.jar -mapper

/home/hadoop/hdfile/mapper -reducer /home/hadoop/hdfile/reducer -input input/ap_base_session_fatmt0.txt -output output

注意:

1、 用streaming方式运行测试程序,执行的是本地文件,所以要讲mapper和reducer

两个程序拷贝到namenode和每个datanode的相同目录下。本例是将mapper和reducer拷贝到每台机器的

/home/hadoop/hdfile目录下。

2、 处理的文本文件要先传到HDFS中,本例是将ap_base_session_fatmt0.txt传到HDFS的input目录下。

3、 如果要重新运行测试,需要将HDFS上的output目录删除,否则会报output目录已经存在的错误。

删除命令:bin/hadoop dfs -rmr output


相关内容

  • Hadoop大数据平台的搭建与测试_崔文斌
  • Hadoop 大数据平台的搭建与测试 *崔文斌,王云诚,牟少敏,浩庆波,昌腾腾 (山东农业大学农业大数据研究中心,山东泰安271018) 摘要:大数据处理平台Apache ?Hadoop 是一个开源的分布式系统框架,可以运行分布式应用程序.在大数据时 代Hadoop 有着良好的发展前景.本文简要介绍 ...

  • 大数据平台概要设计说明书
  • 计算平台 概要设计说明书 作者:日期:批准:日期: 审核:日期: (版权所有,翻版必究) 文件修改记录 目录 1. 引言 ......................................................................................... ...

  • 必知的大数据处理框架技术
  • 这5种必知的大数据处理框架技术,你的项目应该使用哪种? 本文将介绍大数据系统一个最基本的组件:处理框架.处理框架负责对系统中的数据进行计算,例如处理从非易失存储中读取的数据,或处理刚刚摄入到系统中的数据.数据的计算则是指从大量单一数据点中提取信息和见解的过程. 作者:佚名来源:大数据杂谈|2016- ...

  • 分布式数据库调研报告
  • 1. Oracle的NoSQL 也许是NoSQL 运动太红火的原因,Oracle 决定开发一款产品,将键/值对拆分在整个节点集上,这样的优势在于提供了一个灵活的事务保护措施,进而可以确保从数据在节点上等待存储开始到通过网络被成功备份结束,都尽在掌握之中. Oracle 的,是在10月4号的甲骨文全球 ...

  • 分布式架构在银行系统的应用分析
  • 分布式架构在银行系统的应用分析 1 一.概述 (一) 分布式架构简介 一般可以将架构分为两类,一类是以垂直扩展(Scale up)为主的架构,如通过增加单机配置,或者将中低端设备升级成为高端设备,用以提升系统的处理能力,称之为集中式架构,早期的哑终端主机架构是典型代表:一类是以水平扩展(Scale ...

  • 通信新技术
  • 目录 1. 固定通信网络....................................................................................................................... 2 1.1 SDN( Softwar ...

  • 大数据实训室方案建议书20160424
  • 大数据实训室 建设方案建议书 杭州华三通信技术有限公司 XXXX 年XX 月 目录 1. 大数据实训室建设背景 . ............................................................................................ ...

  • 基于大数据的智能交通体系架构
  • 第41卷第2期2015年4月 兰州理工大学学报 Joumal0fIanzhouIhiverSityofTechnology VDL41N0.2 Apr.2015 文章编号:1673-5196(2015)02_0112-04 基于大数据的智能交通体系架构 张 红1'2,王晓明1,曹洁2,朱昶胜2 (1 ...

  • 系统工程师笔试题
  • 系统工程师笔试题 一.选择题(共25道) 1.操作系统在控制和管理进程过程中,涉及到( )这一重要数据结构,这是进程存在的唯一标识. A. FCB B. FIFO C. FDT D. PCB 2.在一个请求页式存储管理中.一个程序的页面走向为4.3.2.1.3.5.4.3.2.1.5,并采用LUR ...