Hadoop入门(二)集群安装

一、集群安装条件前置

在虚拟机上先准备一个机子  按用前面【安装单机hadoop】 已完成安装jdk,hadoop和ssh、网络等配置环境等。

虚拟机和操作系统

环境:ubuntu14 + hadoop2.6+jdk1.7+ssh

虚拟机:(vmware10)

 

二、集群安装环境设置

Hadoop的安装为分布式模式,考虑到实际条件集群机定为3台(2台也可以)。

(1)克隆3个ubuntu实例

先关闭当前虚拟机实例,在虚拟机工具栏上点击【虚拟机】|【管理】|【克隆】,打开克隆虚拟机向导窗口点击【下一步】|【下一步】,其中克隆类型选择【创建完整克隆】,点击【下一步】,填写【虚拟机名称】|【位置】,【完成】克隆。

 

(2)设置3台机子的hostname

先正确设置各虚拟机的hostname 执行命令

sudo   gedit   /etc/hostname 

将文件中的名称改成想要的机器名,如 hadoop01, hadoop02, hadoop03。

 

(3)设置3台机子的hosts文件

修改3台虚拟机hosts文件都是一样 执行命令

sudo  gedit  /etc/hosts

在hosts文件添加如下内容

192.168.150.128  hadoop01
192.168.150.129  hadoop02
192.168.150.130  hadoop03

这样,就不用记IP了。也可以只修改一台,其他使用scp命令拷贝hosts文件。

 

(4)设置虚拟机的静态ip

修改3台主机设置静态ip,在hadoop0x上也要参考设置修改成具体的ip

sudo  gedit   /etc/network/interfaces

打开文件修改成已下内容(hadoop01)

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.150.128
netmask 255.255.255.0
network 192.168.150.0
boardcast 192.168.150.255
gateway 192.168.150.2

打开文件修改成已下内容(hadoop02)

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.150.129
netmask 255.255.255.0
network 192.168.150.0
boardcast 192.168.150.255
gateway 192.168.150.2

打开文件修改成已下内容(hadoop03)

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.150.130
netmask 255.255.255.0
network 192.168.150.0
boardcast 192.168.150.255
gateway 192.168.150.2

 

(5)配置NAT网络

1)虚拟机网络设置

在虚拟机工具栏上点击【编辑机】|【虚拟机网络编辑】,如果没有NAT模式的网络就点击【添加网络】,然后Wnet信息修改为【NAT模式】,设置子网为【192.168.150.0】,点击【NAT设置】按钮如图【NAT设置图】,点击【DCHP设置】按钮如图【DCHP设置图】,点击【应用】按钮和【确认】按钮。

NAT设置图:

DCHP设置图:

2)设置虚拟计算机NAT

选择【我的计算机】的一个虚拟机,鼠标右键选择【设置】,选择【网络适配器】,在右侧【网络连接】点击【自定义】然后选择【NAT模式】的网络,点击【确定】按钮保存

 

(6)重启检验网络

重启一次系统生效 

每个虚拟机执行命令

ping hadoop01
ping hadoop02
ping hadoop03

正常的话,应该能ping通 。如果不能ping通,重新设置NAT网络。

 

(7)配置DNS服务器(虚拟机能上网忽略这个步骤)

如果不能上网,需要修改/etc/resolv.conf文件,配置DNS服务器

执行命令

sudo  gedit   /etc/resolv.conf

修改文件添加如下配置

nameserver  8.8.8.8  8.8.4.4  
nameserver  124.172.174.13

 

(8)配置ssh免密码登录

配置ssh免密码登录是让各节点能自动通过安全认证,不影响正常通讯。

1)安装SSH(已安装的忽略)

安装ssh有两种方式:

A.在ubuntu上在线安装

执行命令

sudo  apt-get  install  ssh 
sudo  apt-get  update

B.离线安装

在网上下载离线包,拷贝到ubuntu中按照离线包中的安装说明在本地进行安装

2)配置ssh的实现

配置ssh的实现思路:

在每台机子上都使用ssh-keygen生成public key,private key 所有机子的public key都拷到一台机子如hadoop01上

在hadoop01上生成一个授权key文件authorized_keys 最后把authorized_keys拷给所有集群中的机子,就能保证无密码登录

1、在所有虚拟机上,在当前用户目录下生成公钥、私钥对

执行命令

cd  /home/mk       
ssh-keygen  -t  rsa  -P ''

2、导入公钥

执行hadoop01命令

cat  .ssh/id_rsa.pub  >  .ssh/authorized_keys 

执行完以后,可以在本机上测试下,用ssh连接自己

执行命令

ssh hadoop01
#成功登陆则退出
exit

如果提示要输入密码, 查看authorized_keys文件权限, 如果是属于其他用户的, 需要修改该文件给其他用户权限

执行命令

chmod  644  .ssh/authorized_keys 

修改文件权限,然后再测试下

ssh hadoop01

如果不需要输入密码,就连接成功,表示ok,一台机器已经搞定了。

 

tip:出现问题尝试解决

请先检查SSH服务是否启动,如果没启动,请启动!

如果没有.ssh目录则创建一个:

执行命令

cd  /home/mk 
mkdir   .ssh 

如无权限,使用命令修改要操作文件夹的owner为当前用户:

执行命令

sudo  chown  -R  mk  /home/mk

3、在其它机器上生成公钥、密钥,并将公钥文件复制到hadoop01

执行命令:

#在hadoop0x上:
scp  .ssh/id_rsa.pub   mk@hadoop01:/home/mk/id_rsa_1.pub#在slave2上:
scp  .ssh/id_rsa.pub  mk@hadoop01:/home/mk/id_rsa_2.pub

hadoop01中,查看下/home/mk目录,应该有二个新文件id_rsa_1.pub、id_rsa_2.pub 在hadoop01上,导入这二个公钥

执行命令
 

cat id_rsa_1.pub >> .ssh/authorized_keys 
cat id_rsa_2.pub >> .ssh/authorized_keys 

这样,hadoop01这台机器上,就有所有3台机器的公钥了。

4、将hadoop01上的“最全”公钥,复制到其它机器

在hadoop01上 执行命令

scp .ssh/authorized_keys  mk@hadoop02:/home/mk/.ssh/authorized_keys 
scp .ssh/authorized_keys  mk@hadoop02:/home/mk/.ssh/authorized_keys 

修改其它机器上authorized_keys文件的权限 hadoop02以及hadoop03机器上,均执行命令

 chmod  600  .ssh/authorized_keys

5、验证

在每个虚拟机上,均用命令  ssh+其它机器的hostname 都能正常无密码连接成功 执行命令

ssh  hadoop01
ssh  hadoop02
ssh  hadoop03

6、SSH免密码设置失败解决
A.权限问题
.ssh目录,以及/home/当前用户 需要700权限,参考以下操作调整

sudo   chmod   777   ~/.ssh
sudo  chmod 700  /home/当前用户

.ssh目录下的authorized_keys文件需要600或644权限,参考以下操作调整

sudo chmod   644   ~/.ssh/authorized_keys

B.StrictModes问题

sudo gedit /etc/ssh/sshd_config
#找到
#StrictModes yes
#改成
StrictModes no

如果还不行,可以用ssh -vvv 目标机器ip 查看详情

 

三、配置hadoop集群

一共有7个文件要修改:
hadoop-2.6.0/etc/hadoop/hadoop-env.sh
hadoop-2.6.0/etc/hadoop/yarn-env.sh
hadoop-2.6.0/etc/hadoop/core-site.xml
hadoop-2.6.0/etc/hadoop/hdfs-site.xml
hadoop-2.6.0/etc/hadoop/mapred-site.xml
hadoop-2.6.0/etc/hadoop/yarn-site.xml
hadoop-2.6.0/etc/hadoop/slaves
执行命令

cd /home/mk/soft/hadoop-2.6.0

(1) hadoop-env.sh 、yarn-env.sh

这二个文件主要是修改JAVA_HOME改成实际本机jdk所在目录位置

执行命令

gedit  etc/hadoop/hadoop-env.sh

gedit  etc/hadoop/yarn-env.sh

打开文件找到下面这行的位置,改成(jdk目录位置,大家根据实际情况修改)

export JAVA_HOME=/home/mk/soft/jdk1.7.0_80

在 hadoop-env.sh中加上这句:

export HADOOP_PREFIX=/home/mk/soft/hadoop-2.6.0

(2)core-site.xml

 参考下面的内容修改:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><property><name>fs.defaultFS</name><value>hdfs://hadoop01:9000</value>       </property><property><name>hadoop.tmp.dir</name><value>/home/mk/tmp</value></property> 
</configuration> 


注:/home/mk/tmp 目录如不存在,则先mkdir手动创建
core-site.xml的完整参数请参考 
http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/core-default.xml
(3)hdfs-site.xml

参考下面的内容修改:

<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><property><name>dfs.datanode.ipc.address</name><value>0.0.0.0:50020</value></property><property><name>dfs.datanode.http.address</name><value>0.0.0.0:50075</value></property>  <property><name>dfs.namenode.name.dir</name><value>file:/home/mk/data/namenode</value></property><property><name>dfs.datanode.data.dir</name><value>file:/home/mk/data/datanode</value></property><property><name>dfs.namenode.secondary.http-address</name><value>hadoop02:9001</value></property>    <property><name>dfs.replication</name><value>1</value></property><property> <name>dfs.permissions</name> <value>false</value> </property></configuration>

hdfs-site.xml的完整参数请参考
http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

(4)mapred-site.xml

参考下面的内容修改:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapreduce.jobhistory.address</name><value>hadoop01:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>hadoop01:19888</value></property>
</configuration>

mapred-site.xml的完整参数请参考 http://hadoop.apache.org/docs/r2.6.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

(5)yarn-site.xml

<?xml version="1.0"?>
<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.scheduler.address</name> <value>hadoop01:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>hadoop01:8025</value> </property><property> <name>yarn.resourcemanager.address</name><value>hadoop01:8040</value></property> 
</configuration>

yarn-site.xml的完整参数请参考
http://hadoop.apache.org/docs/r2.6.0/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

(6)slaves

执行命令

gedit slaves

编辑该文件,输入

hadoop02
hadoop03

这样只有hadoop02,hadoop03上有datanode进程。

hadoop 1.x与2.x相比, 1.x中的很多参数已经被标识为过时,具体可参考 http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/DeprecatedProperties.html

(7)修改/etc/profile设置环境变量

执行命令

sudo gedit /etc/profile

打开/etc/profile,添加hadoop配置内容。注意CLASSPATH,PATH是在原来的配置项上添加hadoop的包路径

export HADOOP_HOME=/home/mk/soft/hadoop-2.6.0
export  CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH:$HADOOP_HOME/share/hadoop/common/hadoop-common-2.6.0.jar:$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.0.jar:$HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH

使profile文件修改配置生效

source /etc/profile

(8)分发到集群的其它机器

把hadoop-2.6.0文件夹连同修改后的配置文件,通过scp拷贝到其它2台机器上。

执行命令

scp -r /home/mk/soft/hadoop-2.6.0/  mk@hadoop02:/home/mk/soft/hadoop-2.6.0
scp -r /home/mk/soft/hadoop-2.6.0/  mk@hadoop03:/home/mk/soft/hadoop-2.6.0

hadoop02、hadoop03上的hadoop临时目录(tmp)及数据目录(data),仍然要先手动创建。

(9)测试hadoop配置

在hadoop01上启用 NameNode测试
执行命令

hdfs namenode -format 

先格式化
15/02/12 21:29:53 INFO namenode.FSImage: Allocated new BlockPoolId: BP-85825581-192.168.187.102-1423747793784
15/02/12 21:29:53 INFO common.Storage: Storage directory /home/hadoop/tmp/dfs/name has been successfully formatted.
等看到执行信息有has been successfully formatted表示格式化ok

 

四、启动hadoop集群

(1)启动HDFS

执行命令

HADOOP_HOME/sbin/start-dfs.sh

启动完成后,输入jps查看进程

执行命令

jps

2283  NameNode

如果看到上面NameNode进程,表示hadoop01节点成功

(2)启动yarn

执行命令

start-yarn.sh 

jps

4363  ResourceManager

2283  NameNode

如果看到上面2个进程,表示 yarn启动完成。

(3)停止

执行命令

stop-dfs.sh
stop-yarn.sh

保存退出停掉刚才启动的服务

 

五、测试Hadoop服务

(1)hadoop01节点上,重新启动
执行命令

start-dfs.sh
start-yarn.sh

hadoop01节点上有几下2个进程:
3421 ResourceManager
3412 NameNode

hadoop02上有几下3个进程:

3214 SecondaryNameNode
3243 DataNode
3249 NodeManager

hadoop03上有几下2个进程:
2324 DataNode
2342 NodeManager

(2)web界面检查hadoop

hdfs管理界面    http://hadoop01:50070/
yarn的管理界面不再是原来的50030端口而是8088  http://hadoop01:8088/ 
 
(3)查看hadoop状态
hdfs dfsadmin -report 查看hdfs的状态报告
yarn  node -list   查看yarn的基本信息

 

六、其他问题

1.若namenode上的core-site.xml中的fs.defaultFS缺失,则启动时会报错。

2.若各机器上的yarn-site.xml中的yarn.resourcemanager.resource-tracker.address缺失,
    虽然resourcemanager与nodemanager进程能够正常启动,但是在执行yarn node -list会出现node数量为0的情况。
 
2.若各机器上的yarn-site.xml中的yarn.resourcemanager.scheduler.address或yarn.resourcemanager.address缺失,则在运行job时,
    会卡在INFO mapreduce.Job: Job job_1422695884569_0001 running in uber mode : false
 

七、使用hadoop集群运行例子

同样的例子比单机模式时间长

(1)运行自带mapreduce例子grep
执行命令

hadoop fs -mkdir /input
hadoop fs -put $HADOOP_HOME/etc/hadoop/*.xml  /input  
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep /input /output 'dfs[a-z.]+'
hadoop fs -get /output  /home/hadoop/output

 查看结果

cat output/*

1 dfsadmin  
得到和单机一样的结果,'dfs'只出现一次

(2)运行自带mapreduce例子wordcount
words.txt 
hello liuchengwu
hello liulao
hello dora
hello liu
hello hadoop
文件拷入/words.txt下
 
执行命令

hadoop fs -put /hpme/mk/words.txt /words.txt 
hadoop  jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount  
/words.txt /count1
hadoop fs -cat  /count1/*


  参考文档:Hadoop MapReduce Next Generation - Cluster Setup
 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

poj doubles_余数运算符在Java中用于Doubles

poj doubles我在OSU任教已近两年了&#xff0c;这总是令我惊讶&#xff0c;我从学生那里学到了多少。 例如&#xff0c;过去&#xff0c; 我让学生写一些我不理解的奇怪代码 。 在这一点上&#xff0c;即使经过300多个博客文章&#xff0c; 几个YouTube视频 &#xff0c;甚至还…

面向对象与面向过程

一、面向过程编程 面向过程编程是一种以过程为中心的编程思想,分析出解决问题的步骤&#xff0c;然后用函数把这些步骤一步一步实现。面向过程编程&#xff0c;数据和对数据的操作是分离的。二、面向对象编程 面向对象编程是将事物对象化&#xff0c;通过对象通信来解决问题。面…

本地方法(JNI)——数值参数与返回值

【0】README 1&#xff09; 本文部分文字描述 转自 core java volume 2 &#xff0c; 旨在理解 本地方法&#xff08;JNI&#xff09;——数值参数与返回值 的基础知识 &#xff1b; 2&#xff09; for source code, please visit https://github.com/pacosonTang/core-java…

class employe_Java 8 –集合sort()方法–按Employe对象(Id,名称,年龄)列出自定义排序示例

class employe有关在Java中对自定义对象进行排序的完整指南。 Collections.sort&#xff08;&#xff09;方法基于Comparable或Comparator实现进行排序。 用于对Employee对象进行排序的示例自定义排序 1.简介 在本教程中&#xff0c;您将学习如何在java中对Custom对象进行排序…

Spring入门(一)之简介

一、Spring定义 Spring是一个开源框架&#xff0c;Spring是于2003 年兴起的一个轻量级的Java 开发框架&#xff0c;由Rod Johnson创建。 简单来说&#xff0c;Spring是一个分层的JavaSE/javaEE full-stack(全栈的) 轻量级开源框架。 二、Spring框架特征 &#xff08;1&#xff…

本地方法(JNI)——访问域+字符串参数

【0】README 1&#xff09; 本文部分文字描述 转自 core java volume 2 &#xff0c; 旨在理解 本地方法&#xff08;JNI&#xff09;——访问域字符串参数 的基础知识 &#xff1b; 2&#xff09; for source code, please visit https://github.com/pacosonTang/core-java…

aws上负载均衡器标组端口_AWS CloudFormation:目标组没有关联的负载均衡器

aws上负载均衡器标组端口昨天&#xff0c;我使用AWS CloudFormation模板最终创建了ECS服务&#xff08;Fargate类型&#xff09;&#xff0c;还创建了包括应用程序负载均衡器&#xff0c;目标组和IAM角色的资源。 创建堆栈时&#xff0c;出现以下错误&#xff1a; 具有target…

Spring入门(二)之下载与安装

一、Spring下载 参考其他博客&#xff1a;http://www.cnblogs.com/yjmyzz/p/3847364.html或http://blog.csdn.net/xinzhujin/article/details/54319043 Spring下载地址为&#xff1a;http://repo.spring.io/release/org/springframework/spring/ 二、压缩包下的SpringFramewo…

HttpClient 4 API –获取状态代码-getStatusLine()。getStatusCode()示例

在HttpClient API中获取状态代码的快速指南。 getStatusLine&#xff08;&#xff09;。getStatusCode&#xff08;&#xff09;示例和相关的错误。 1.简介 在这个非常快速的教程中&#xff0c;我将展示如何使用HttpClient 4获取和验证HTTP响应的StatusCode。 2. Maven依赖 要…

Spring入门(三)之IoC

一、IoC定义IoC&#xff0c;即控制反转。开发者在使用类的实例之前&#xff0c;需要先创建对象的实例。但是IoC将创建实例的任务交给IoC容器&#xff0c;这样开发应用代码时只需要直接使用类的实例&#xff0c;这就是IoC。在讨论控制反转这个概念的过程中&#xff0c;Martin Fo…

云服务器的优点和缺点_为什么要使用云计算? 的优点和缺点

云服务器的优点和缺点在过去的几年中&#xff0c;云计算一直是IT界的热门话题。 像许多事物一样&#xff0c;当它第一次出现时&#xff0c;很多人都将其视为下一件大事&#xff0c;但是云计算确实达到了期望&#xff0c;并真正改变了当今信息技术业务部门的运作方式。 云计算由…

本地方法(JNI)——编码签名

【0】README 1&#xff09; 本文部分文字描述 转自 core java volume 2 &#xff0c; 旨在理解 本地方法&#xff08;JNI&#xff09;——编码签名 的基础知识 &#xff1b; 【1】编码签名相关 1&#xff09; 混编规则&#xff1a;为了访问实例域和调用用 java 定义的方法&a…

Shell入门(一)之简介

一、Shell 定义 &#xff08;1&#xff09;Shell Shell是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言。 &#xff08;2&#xff09;Shell 脚本&#xff08;shell script&#xff09; Shell 脚本…

aws dynamodb_使用适用于Java 2的AWS开发工具包的AWS DynamoDB版本字段

aws dynamodb将任何实体上的版本属性保存到 AWS DynamoDB数据库&#xff0c;它只是表示已修改实体次数的数字表示。 首次创建实体时&#xff0c;可以将其设置为1&#xff0c;然后在每次更新时递增。 好处是立竿见影的-指示实体已被修改的次数&#xff0c;可用于审核实体。 此…

本地方法(JNI)——调用 java 方法

【0】README 1&#xff09; 本文部分文字描述 转自 core java volume 2 &#xff0c; 旨在理解 本地方法&#xff08;JNI&#xff09;——调用 java 方法 的基础知识 &#xff1b; 2&#xff09; C语言调用java 方法&#xff0c;包括&#xff1a; 静态C 方法 和 非静态C 方法…

Shell入门(二)之变量

一、shell变量类型 shell变量一般只有两种类型&#xff1a;数值型与字符串型。 运行shell时&#xff0c;会同时存在三种变量&#xff1a; 1) 局部变量 局部变量在脚本或命令中定义&#xff0c;仅在当前shell实例中有效&#xff0c;其他shell启动的程序不能访问局部变量。 …

aws部署ssh_将Quarkus应用程序部署到AWS Elastic Beanstalk

aws部署sshElastic Beanstalk允许在AWS云中部署和管理应用程序&#xff0c;而无需了解运行这些应用程序的基础架构。 使用Elastic Beanstalk&#xff0c;您可以运行可处理HTTP请求的网站&#xff0c;Web应用程序或Web API&#xff0c;但也可以运行辅助应用程序以运行长任务。 …

本地方法(JNI)——访问数组元素+错误处理

【0】README 1&#xff09; 本文文字描述 均转自 core java volume 2 &#xff0c; 旨在理解 本地方法&#xff08;JNI&#xff09;——访问数组元素错误处理 的基础知识 &#xff1b; 2&#xff09;for source code, please visit : https://github.com/pacosonTang/core-j…

Shell入门(三)之字符串

一、单引号 字符串可以用单引号&#xff0c;也可以用双引号&#xff0c;也可以不用引号。单双引号的区别跟PHP类似。 单引号不存在转义字符&#xff0c;如&#xff1a;\a&#xff0c;\n&#xff0c;$abc #!/bin/bash aabc b${a}bc; echo $b; #结果为&#xff1a;${a}bc…

tms tck_在雅加达EE TCK中使用Arquillian的可能方法

tms tck最近&#xff0c;我们讨论了如何创建独立的Jakarta Batch测试套件&#xff08;TCK&#xff09;。 对于大多数提交者而言&#xff0c;使用Arquillian将测试从实现中如何执行抽象化是很自然的。 但是Romain提出了一个有趣的想法&#xff0c;即使用纯JUnit5引起了我的思考。…