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
- hadoop2.6.1版本集群环境搭建
- hadoop2.6.0版本集群环境搭建
- hadoop2.6.0版本集群环境搭建
- hadoop2.6.0版本集群环境搭建
- hadoop2.6.0版本集群环境搭建
- hadoop2.6.0版本集群环境搭建
- hadoop2.6.0版本集群环境搭建
- hadoop2.6.0版本集群环境搭建
- hadoop2.6.0版本集群环境搭建
- hadoop2.6.0版本集群环境搭建
- hadoop2.6.0版本集群环境搭建
- hadoop2.6.0版本集群环境搭建
- Hadoop2.6.3版本集群搭建
- 搭建hadoop2.2集群环境
- hadoop2.4.1集群环境搭建
- 搭建hadoop2.6.0集群环境
- hadoop2.4.1集群环境搭建
- 搭建hadoop2.6.0集群环境
- Xcode调试工具Instruments指南
- MyEclipse professional 2014破解教程-转载并修正错误
- Android Samples视频系列之ApiDemos讲解视频
- [转载]spring+mybatis加载属性文件设置数据源失败原因及解决方案 - 泡在网上的日子
- maven 设置编译版本为java8 设置字符集为utf8
- hadoop2.6.1版本集群环境搭建
- Ubuntu设置时区和更新时间
- 线程间的通信,避免创建过多线程
- 用isalpha函数来判断一个字符串中的字符是否是字母
- ListView的item高度问题及分割线的颜色设置
- 编写DLL格式的wireshark插件
- 为什么文件打开和编辑,notepad++显示的文件不一样呢?
- 权限设计
- 知识在于积累