hadoop2.6.1版本集群环境搭建

来源:互联网 发布:养车软件哪个好 知乎 编辑:程序博客网 时间:2024/04/25 23:31

以rpm方式安装jdk1.7.0_79

 

系统环境:redhatlinux 6.5 64位

Jdk安装包:oracle jdk-7u79-linux-x64.rpm存放在/opt/software目录中

 

一、linux用户的创建

创建ghadoop分组:

# groupaddghadoop

 

创建gvoice分组

# groupadd gvoice

 

创建hadoop用户:

# useradd -g ghadoop -G gvoice -d /home/hadoop -mhadoop

(-g[--initial_group] -G[--group] -d[--home-dir] -m[--create-home])

 

设置hadoop用户密码:

# passwd hadoop

 

使hadoop用户能sudo命令:

vi /etc/sudoers

找到root                   ALL=(ALL)                   ALL这行,在改行后添加

hadoop              ALL=(ALL)                   ALL

 

:x保存退出

 

二、rpm安装oracle jdk-7u79-linux-x64

进入官网下载Java SE Development Kit 7u79 Linux x64 的rpm包http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk7-downloads-1880260.html

下载好的名叫jdk-7u79-linux-x64.rpm,放在

由于我的redhat系统中已自带open jdk,故须先卸载

查看已安装rpm包:

# rpm -qa | grep java

(-q[--query] -a[--all])

显示类似以下信息:

java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5

执行卸载命令:

# rpm -e --nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
# rpm -e --nodepsjava-1.6.0-openjdk-1.6.0.0-1.7.b09.el5

(-e[--erase]–nodeps安装或升级前不检查依赖关系)

 

安装jdk:

# rpm -ivh jdk-7u79-linux-x64.rpm

(-i[--install] –v[--verbose] –h[--hash]使用#符号显示解压进度)

 

此时,jdk已经安装在/usr/java目录下,下面配置环境变量

# vi /etc/profile

在末尾加上以下几行

export JAVA_HOME=/usr/java/jdk1.7.0_79
exportCLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

 

:x保存退出

 

运行命令“source /etc/profile”使修改立即生效

 

同时须更改以前/usr/bin/java的软连接:

# ln -s $JAVA_HOME/bin/java /usr/bin/java

(-s[--symbolic])

 

在终端中输入“java -version”,系统显示:

java version "1.7.0_79"

Java(TM) SE Runtime Environment (build1.7.0_79-b15)

Java HotSpot(TM) 64-Bit Server VM (build24.79-b02, mixed mode)

JDK安装成功!

 

ssh免密码验证

准备在三台虚拟机搭建hadoop集群,地址为:200.1.1.140(master)、200.1.1.141(slave)、200.1.1.142(slave)

 

系统环境:redhat linux 6.5 64位

 

预备工作:安装好jdk1.7.0_79,见我上篇博文

 

先对200.1.1.140的系统进行设置,200.1.1.141、200.1.1.142采用相同的设置方式

 

修改hostname

 

通过hostname命令

# hostname hadoop140

此命令的作用是暂时的修改linux的主机名,它的存活时间linux当前的运行时间,即在
重启前的运行时间内。一般修改以后就生效,但是不能永久修改

 

通过配置文件/etc/sysconfig/network修改

# vi /etc/sysconfig/network

修改hostname如下(如果HOSTNAME已经存在也可以不修改,但后面修改/etc/ hosts文件时记得对应好):

HOSTNAME=hadoop140

:x保存退出

(200.1.1.141的HOSTNAME=hadoop141、200.1.1.142的HOSTNAME=hadoop142)

通过修改此文件的内容,它能够实现永久修改linux的主机名,但是它不会立即生效,即有可能不在当前运行时间生效,即在从下次重启后才开始生效,至少是不在当前session生效,需要用户退出以后才生效。通过修改此配置文件,再配合hostname命令,可实现立即永久修改linux的主机名。

 

修改/etc/ hosts文件

这个文件的作用就是提供ip和主机名的对照作用,linux通过这个文件知道某个ip对应于某个主机名,运行命令:

# vi /etc/hosts

这个文件的最后加上三行

200.1.1.140     hadoop140

200.1.1.141     hadoop141

200.1.1.142     hadoop142

 

ssh免密码验证配置

 

依次按以下步骤在140、141和142操作

 

此时由root用户切换到hadoop用户:

# su – hadoop

生成RSA公钥私钥:

$ ssh-keygen -t rsa

一路回车最终生成(id_rsa私钥,id_rsa.pub公钥两个文件)

此时cd ~/.ssh即可以看见以上两个文件

 

以sudo方式或切换到root用户配置sshd_config文件

$ vi /etc/ssh/sshd_config

 

去掉以下配置的#注释符号

1.RSAAuthentication yes # 启用 RSA 认证

2.PubkeyAuthentication yes # 启用公钥私钥配对认证方式

3.AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径(和上面生成的文件同)

 

然后先在140收集140本身、141和142的id_rsa.pub公钥到authorized_keys文件,如下

假定当前目录切换到~/.ssh,140本身的公钥收集运行以下命令

$ cat id_rsa.pub >> authorized_keys

$ chmod 600 authorized_keys

 

对于141和142公钥的收集,分别登录141和142,运行以下命令

$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@hadoop140

输入140的密码后,以上命令会自动将141和142的公钥追加到140的authorized_keys文件,此时,141和142就可以免密码登录140了

 

分别在141和142,运行以下命令获取140的authorized_keys文件

$ scp hadoop140:~/.ssh/authorized_keys~/.ssh

$ chmod 600 authorized_keys

 

运行之后,140、141和142之间就可以免密码互相登录了

 

如果ssh本地连接测试失败,则有可能和selinux有关,以sudo方式或切换到root用户输入命令

# restorecon-r -vv /home/ 

详见:http://www.linuxidc.com/Linux/2013-07/87267.htm一次由SELinux引起的SSH公钥认证失败问题

 

 

hadoop2.6.1版本集群环境搭建

假定hadoop2.6.1的安装包存放在/opt/software目录,名字为hadoop-2.6.1.tar.gz

以hadoop用户登录140,在该机器配置好hadoop

在home目录创建opt文件夹

$ mkdir opt

解压hadoop-2.6.1.tar.gz文件

$ tar -xzvf hadoop-2.6.1.tar.gz ~/opt

切换到hadoop主目录

$ cd ~/opt/hadoop-2.6.1

在主目录创建tmp、data、name文件夹

$ mkdir tmp data name

切换到hadoop配置文件的目录

$ cd etc/hadoop

分别对hadoop-env.sh、yarn-env.sh、slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml配置文件进行修改

配置 hadoop-env.sh文件-->修改JAVA_HOME

$ vi hadoop-env.sh

 

# The java implementation to use.

export JAVA_HOME=/usr/java/jdk1.7.0_79

export HADOOP_PREFIX=/home/hadoop/opt/hadoop-2.6.1#建议加上

 

配置 yarn-env.sh 文件-->>修改JAVA_HOME

$ vi yarn-env.sh

# some Java parameters

export JAVA_HOME=/usr/java/jdk1.7.0_79

 

配置slaves文件-->>增加slave节点

$ vi slaves

 

hadoop140

hadoop141

hadoop142

 

配置 core-site.xml文件-->>增加hadoop核心配置(hdfs文件端口是9000、临时文件file:/home/hadoop/opt/hadoop-2.6.1/tmp)

$ vi core-site.xml

 

<configuration>

       <property>

               <name>fs.defaultFS</name>

               <value>hdfs://hadoop140:9000</value>

       </property>

       <property>

               <name>io.file.buffer.size</name>

                <value>131072</value>

       </property>

       <property>

               <name>hadoop.tmp.dir</name>

               <value>file:/home/hadoop/opt/hadoop-2.6.1/tmp</value>

                <description>Abaseforother temporary directories.</description>

        </property>

       <property>

               <name>hadoop.proxyuser.spark.hosts</name>

                <value>*</value>

       </property>

       <property>

               <name>hadoop.proxyuser.spark.groups</name>

                <value>*</value>

       </property>

</configuration>

 

配置  hdfs-site.xml 文件-->>增加hdfs配置信息(namenode、datanode端口和目录位置)

$ vi hdfs-site.xml

 

<configuration>

       <property>

               <name>dfs.namenode.secondary.http-address</name>

                <value>hadoop140:9001</value>

       </property>

       <property>

               <name>dfs.namenode.name.dir</name>

               <value>file:/home/hadoop/opt/hadoop-2.6.1/dfs/name</value>

       </property>

       <property>

                <name>dfs.datanode.data.dir</name>

               <value>file:/home/hadoop/opt/hadoop-2.6.1/dfs/data</value>

       </property>

       <property>

               <name>dfs.replication</name>

                <value>2</value>

       </property>

       <property>

                <name>dfs.webhdfs.enabled</name>

                <value>true</value>

       </property>

</configuration>

 

配置  mapred-site.xml 文件-->>增加mapreduce配置(使用yarn框架、jobhistory使用地址以及web地址)

$ vi mapred-site.xml

 

<configuration>

       <property>

               <name>mapreduce.framework.name</name>

                <value>yarn</value>

       </property>

       <property>

               <name>mapreduce.jobhistory.address</name>

               <value>hadoop140:10020</value>

       </property>

        <property>

               <name>mapreduce.jobhistory.webapp.address</name>

               <value>hadoop140:19888</value>

       </property>

</configuration>

 

配置   yarn-site.xml  文件-->>增加yarn功能

$ vi yarn-site.xml

 

<configuration>

       <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.resourcemanager.address</name>

               <value>hadoop140:8032</value>

       </property>

       <property>

                <name>yarn.resourcemanager.scheduler.address</name>

               <value>hadoop140:8030</value>

       </property>

       <property>

               <name>yarn.resourcemanager.resource-tracker.address</name>

               <value>hadoop140:8035</value>

       </property>

       <property>

               <name>yarn.resourcemanager.admin.address</name>

               <value>hadoop140:8033</value>

       </property>

       <property>

               <name>yarn.resourcemanager.webapp.address</name>

               <value>hadoop140:8088</value>

       </property>

 

</configuration>

 

将配置好的hadoop文件copy到141和142机器上

$ scp -r ~/opt/hadoop-2.6.1/ hadoop141:~/opt/hadoop-2.6.1

$ scp -r ~/opt/hadoop-2.6.1/ hadoop142:~/opt/hadoop-2.6.1

 

对以上配置进行验证

格式化namenode:

$ cd ~/opt/hadoop-2.6.1/

$ ./bin/hdfs namenode -format

 

启动hdfs

$ ./sbin/start-dfs.sh

 

15/10/0920:22:28 WARN util.NativeCodeLoader: Unable to load native-hadoop library foryour platform... using builtin-java classes where applicable

Startingnamenodes on [hadoop140]

hadoop140:starting namenode, logging to/home/hadoop/opt/hadoop-2.6.1/logs/hadoop-hadoop-namenode-hadoop140.out

hadoop140:starting datanode, logging to/home/hadoop/opt/hadoop-2.6.1/logs/hadoop-hadoop-datanode-hadoop140.out

hadoop141:starting datanode, logging to/home/hadoop/opt/hadoop-2.6.1/logs/hadoop-hadoop-datanode-hadoop141.out

hadoop142:starting datanode, logging to/home/hadoop/opt/hadoop-2.6.1/logs/hadoop-hadoop-datanode-hadoop142.out

Startingsecondary namenodes [hadoop140]

hadoop140:starting secondarynamenode, logging to/home/hadoop/opt/hadoop-2.6.1/logs/hadoop-hadoop-secondarynamenode-hadoop140.out

15/10/0920:22:50 WARN util.NativeCodeLoader: Unable to load native-hadoop library foryour platform... using builtin-java classes where applicable

 

查看进程

$ jps

 

13970 DataNode

13862 NameNode

14284 Jps

14167 SecondaryNameNode

 

说明成功启动hdfs

 

相应的停止hdfs脚本名称为:./sbin/stop-dfs.sh

 

启动yarn:

$ ./sbin/start-yarn.sh

 

startingyarn daemons

startingresourcemanager, logging to /home/hadoop/opt/hadoop-2.6.1/logs/yarn-hadoop-resourcemanager-hadoop140.out

hadoop141:starting nodemanager, logging to/home/hadoop/opt/hadoop-2.6.1/logs/yarn-hadoop-nodemanager-hadoop141.out

hadoop142:starting nodemanager, logging to /home/hadoop/opt/hadoop-2.6.1/logs/yarn-hadoop-nodemanager-hadoop142.out

hadoop140:starting nodemanager, logging to/home/hadoop/opt/hadoop-2.6.1/logs/yarn-hadoop-nodemanager-hadoop140.out

 

查看进程

$ jps

 

14777 Jps

13970 DataNode

14341 ResourceManager

14451 NodeManager

13862 NameNode

14167 SecondaryNameNode

 

说明成功启动yarn

 

相应的停止yarn脚本名称为:./sbin/stop-yarn.sh

 

查看集群状态命令:

$ ./bin/hdfs dfsadmin -report

 

通过网页查看hdfs状态:http://200.1.1140:50070/

 

通过网页查看mapreduce状态:http://200.1.1140:8088/

 

其它注意事项:

 

a) master(即:namenode节点)若要重新格式化,请先清空各datanode上的data目录(最好连tmp目录也一起清空),否则格式化完成后,启动dfs时,datanode会启动失败

 

b) 如果觉得master机器上只运行namenode比较浪费,想把master也当成一个datanode,直接在slaves文件里,添加一行master即可

 

c) 为了方便操作,可修改~/.bashrc,把hadoop所需的lib目录,先加到CLASSPATH环境变量中,同时把hadoop/bin,hadoop/sbin目录也加入到PATH变量中,可参考下面的内容:

 

exportHADOOP_HOME=/home/hadoop/opt/hadoop-2.6.1

exportCLASSPATH=$CLASSPATH:$HADOOP_HOME/share/hadoop/common/hadoop-common-2.6.1.jar:$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.1.jar:$HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar

exportPATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

记得修改之后运行source ~/.bashrc命令

另附上用mapreduce跑wordcount的例子

切换到hadoop主目录,创建input目录

$ cd ~/opt/hadoop-2.6.1

$ mkdir input

生成两个文件:

$ vi f1

Hello world bye jk haah

 

$vi f2

I’m not a Hello World

 

 

在hdfs创建目录

$ hadoop fs -mkdir -p /tmp/input

将input中的文件由本地上传至hdfs

$ hadoop fs -put input/* /tmp/

 

执行wordcount程序

$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.1.jarwordcount /tmp/input /output

 

查看执行结果

hadoop fs -cat /output/part-r-00000

0 0