搭建Hadoop集群 (二)
前面的步骤请看 搭建Hadoop集群 (一)
安装Hadoop
解压安装
登录master, 下载解压hadoop 2.6.2压缩包到/home/hm/文件夹. (也可以从主机拖拽或者psftp压缩包到master)
[hm@master ~]$ tar -xzvf hadoop-2.6.2.tar.gz -C ~
[hm@master ~]$ mv hadoop-2.6.2 hadoop
[hm@master ~]$ cd hadoop/
修改环境变量
[hm@master hadoop]$ vi etc/hadoop/hadoop-env.sh
找到export JAVA_HOME=${JAVA_HOME}, 修改为绝对路径:
# The java implementation to use.
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.95.x86_64
建议同时把etc/hadoop/yarn-env.sh和mapred-env.sh的JAVA_HOME也相应修改.
Optional - 修改$PATH
方便在任何路径下执行hadoop命令和Java命令
[hm@master hadoop]$ cd ~
[hm@master ~]$ vi .bash_profile
修改为:
# User specific environment and startup programs
export HADOOP_PREFIX=/home/hm/hadoop
export JAVA_HOME=/usr/lib/jvm/java-1.7.-openjdk-1.7.0.95.x86_64
PATH=$PATH:$HOME/bin:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin:$JAVA_HOME/bin export PATH
使更改立即生效:
[hm@master ~]$ source .bash_profile
测试环境变量设置
[hm@master hadoop]$ bin/hadoop
可以看到hadoop命令的usage信息.
[hm@master ~]$ jps
可以看到jvm中的进程信息.
配置分布式Hadoop集群
修改配置文件
hadoop/etc/hadoop/core-site.xml
创建tmp目录, 用于放置hdfs产生的临时文件, 不配置的话, 默认位置是/tmp/hadoop-{username}/, 导致机器重启后每次都需要重新format NameNode.
[hm@master hadoop]$ mkdir tmp
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9100</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hm/hadoop/tmp</value>
</property>
</configuration>
file: 代表在本地文件系统中, hdfs: 则代表在分布式文件系统中.
注意提前查看端口是否有被占用
[hm@master hadoop]$ netstat -nap | grep 9100
hadoop/etc/hadoop/hdfs-site.xml
创建hdfs文件系统目录:
[hm@master hadoop]$ mkdir dfs
修改配置文件
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hm/hadoop/dfs/name</value>
<description> </description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hm/hadoop/dfs/data</value>
<description> </description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
hadoop/etc/hadoop/mapred-site.xml
默认不存在, 需要从template复制或者改名
[hm@master hadoop]$ cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
hadoop/etc/hadoop/yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<description>The hostname of the RM.</description>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<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>
</configuration>
添加master, slave节点的hostname, 或者ip
该文件主要被hadoop的某些脚本调用, 作用是从master一次性向多台slave发生命令. 因此前提是ssh免密码登录必须配置好.
[hm@master hadoop]$ vi etc/hadoop/slaves
修改为:
slave1
slave2
Optional - 实现机架感知 (rack-aware)
http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/RackAwareness.html
Logging
通过修改etc/hadoop/log4j.properties可以自定义hadoop daemons的log设置
更多配置
比如NodeManagers的状态监控等等, 都可以在yarn-site.xml中配置, 详细参见官方文档:
http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html
将配置好的Hadoop安装包拷贝到Slaves
这样可以节省很多安装部署的时间, 但必须要保证slave和master拥有同样的文件目录结构, 用户和用户组的名字以及权限.
[hm@master hadoop]$ scp -r hadoop/ hm@slave1:~
[hm@master hadoop]$ scp -r hadoop/ hm@slave2:~
此外, 记得修改slave机器上的环境变量, e.g. .bash_profile文件, 内容和master保持一致.
启动HDFS
格式化分布式文件系统
[hm@master hadoop]$ bin/hdfs namenode -format
关闭防火墙
CentOS 6.7, 默认会有防火墙开启, DataNode发给NameNode的心跳信息会被挡在防火墙外.
需要去防火墙里设置master, slave对应的端口, 或者不考虑安全性的话, 直接关闭所有集群虚拟机的防火墙. 步骤:
1. 检查防火墙状态
[hm@master ~]$ sudo /etc/init.d/iptables status
2. 停止防火墙
[hm@master ~]$ sudo /etc/init.d/iptables stop
可以把防火墙设置为开机不自启
[hm@master hadoop]$ sudo chkconfig iptables off
[hm@master hadoop]$ chkconfig --list iptables
启动HDFS
[hm@master hadoop]$ sbin/start-dfs.sh
检查启动结果:
在master上, 输入jps, 可以看到NameNode和SecondaryNameNode两个daemon
[hm@master hadoop]$ jps
24440 Jps
24153 NameNode
24325 SecondaryNameNode
在slave1和slave2上, 输入jps, 可以看到DataNode的daemon
[hm@slave1 hadoop]$ jps
23852 DataNode
23927 Jps
检查集群状态
[hm@master hadoop]$ bin/hdfs dfsadmin -report
或者登录 http://master:50070 查看. Live DataNodes应该>0. 否则查看DataNode节点的log看具体原因.
启动YARN
[hm@master hadoop]$ sbin/start-yarn.sh
此时查看jps结果, 在master上可以看到多了ResourceManager的daemon
[hm@master hadoop]$ jps
24153 NameNode
24762 Jps
24506 ResourceManager
24325 SecondaryNameNode
在slave上则多了NodeManager的daemon
[hm@slave1 hadoop]$ jps
23852 DataNode
23971 NodeManager
24082 Jps
至此, 整个集群环境配置完成.
Web Interface
http://master:50070 NameNode信息, 应该可以看到slave1, slave2的信息.
http://master:8088 ResourceManager信息
注意: 如果虚拟机启用了proxy, 必须把master加入到proxy的Ignored Hosts里面, 否则上述URL无法访问.
运行MapReduce Job
这里以自带的wordcount为例.
准备工作
在hdfs里创建input文件夹: (/user/hm是hm用户在hdfs的默认home)
[hm@master hadoop]$ bin/hdfs dfs -mkdir -p /user/hm/input/wordcount
创建一个测试文件, 添加些内容, 并上传到hdfs里
[hm@master hadoop]$ vi tmp/helloworld
hello hadoop
hello master
hello slave
hello slave too
[hm@master hadoop]$ bin/hdfs dfs -put tmp/helloworld input/wordcount
查看内容是否成功上传到hdfs
[hm@master hadoop]$ bin/hdfs dfs -ls input/wordcount
或者想看看内容是否一致
[hm@master hadoop]$ bin/hdfs dfs -text input/wordcount/helloworld
重复上述步骤, 多上传几个文件.
运行wordcount程序
[hm@master hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.2.jar wordcount input/wordcount output/wordcount
查看运行输出结果:
[hm@master hadoop]$ bin/hdfs dfs -cat output/wordcount/*
hadoop 1
hello 4
master 1
slave 2
too 1
停止YARN和HDFS
运行结束, 不再需要执行其他任务了, 就可以关闭守护进程:
[hm@master hadoop]$ sbin/stop-yarn.sh
[hm@master hadoop]$ sbin/stop-dfs.sh
如果希望下次重新格式化hdfs, 最好把相关的文件删除, 然后重启机器. 也建议删除不再需要的log文件释放虚拟机空间.
[hm@master hadoop]$ rm -rf dfs/
[hm@master hadoop]$ rm -rf tmp/*
[hm@master hadoop]$ rm -rf logs/*
整个环境配置和java app运行都没有问题了. 接下来要进行debug, 参见 搭建Hadoop集群 (三)
搭建Hadoop集群 (二)的更多相关文章
- 搭建Hadoop集群 (三)
通过 搭建Hadoop集群 (二), 我们已经可以顺利运行自带的wordcount程序. 下面学习如何创建自己的Java应用, 放到Hadoop集群上运行, 并且可以通过debug来调试. 有多少种D ...
- 搭建Hadoop集群 (一)
上面讲了如何搭建Hadoop的Standalone和Pseudo-Distributed Mode(搭建单节点Hadoop应用环境), 现在我们来搭建一个Fully-Distributed Mode的 ...
- Hadoop集群(二) HDFS搭建
HDFS只是Hadoop最基本的一个服务,很多其他服务,都是基于HDFS展开的.所以部署一个HDFS集群,是很核心的一个动作,也是大数据平台的开始. 安装Hadoop集群,首先需要有Zookeeper ...
- Linux 搭建Hadoop集群 成功
内容基于(自己的真是操作步骤编写) Linux 搭建Hadoop集群---Jdk配置 Linux 搭建Hadoop集群 ---SSH免密登陆 一:下载安装 Hadoop 1.1:下载指定的Hadoop ...
- 阿里云搭建hadoop集群服务器,内网、外网访问问题(详解。。。)
这个问题花费了我将近两天的时间,经过多次试错和尝试,现在想分享给大家来解决此问题避免大家入坑,以前都是在局域网上搭建的hadoop集群,并且是局域网访问的,没遇见此问题. 因为阿里云上搭建的hadoo ...
- 虚拟机搭建Hadoop集群
安装包准备 操作系统:ubuntu-16.04.3-desktop-amd64.iso 软件包:VirtualBox 安装包:hadoop-3.0.0.tar.gz,jdk-8u161-linux-x ...
- 在搭建Hadoop集群环境时遇到的一些问题
最近在学习搭建hadoop集群环境,在搭建的过程中遇到很多问题,在这里做一些记录.1. SSH相关的问题 问题一: ssh: connect to host localhost port 22: Co ...
- 使用Docker搭建Hadoop集群(伪分布式与完全分布式)
之前用虚拟机搭建Hadoop集群(包括伪分布式和完全分布式:Hadoop之伪分布式安装),但是这样太消耗资源了,自学了Docker也来操练一把,用Docker来构建Hadoop集群,这里搭建的Hado ...
- Spark集群环境搭建——Hadoop集群环境搭建
Spark其实是Hadoop生态圈的一部分,需要用到Hadoop的HDFS.YARN等组件. 为了方便我们的使用,Spark官方已经为我们将Hadoop与scala组件集成到spark里的安装包,解压 ...
随机推荐
- shape和selector是Android UI设计中经常用到的
shape和selector是Android UI设计中经常用到的,比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到shape和selector.可以这样说,shape和 ...
- 开源消息总线ActiveMQ
一.消息中间件MOM(Message-Oriented Middleware) 消息中间件是解决异步分布式系统中通讯和排队问题的中间件技术.它利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数 ...
- Girl_iOS100天学iOS的第一天(规划)
不好的开端. 只是还好,总算是開始. 今天一直在做项目中的某个模块,发现自己尽管工作了一段时间,但编码速度还是够慢的 >.< 探究其为什么慢的原因,还是由于自己对某些控件等基础的不熟悉,如 ...
- Mock, 让你的开发脱离接口
在前后台共同进行一个项目的时候常会遇到一种情景, 后台定义好接口,前端按照接口进行开发, 当前端开发完成后台接口却还没有开发完成, 这个时候要进行接口测试, 只能等后台开发完成才能测试, 在这中间浪费 ...
- jquery.ellipsis.js段落超出省略号插件
为了实现在段落尾部超出文字替换为省略号,自己写的插件,并作了简单的优化. 下面给出脚本演示页面及注释,在此之前介绍一下插件参数 1.lineNum:数字.限制段落的行数 2.english:布尔.英文 ...
- AngularJs 实例
1.AngularJs 表单验证: 示例 .controller('signupController', ['$scope', function($scope) { $scope.submitted ...
- api (三)文本字符输出 (转)
在使用Win32编程时,我们常常要输出文本到窗口上,Windows所有的文本字符或者图形输出都是通过图形设备接口(GDI)进行的,Windows的三大核心组件之一的GDI32.dll封装了所有的文本和 ...
- interview collect
1. binary tree inorder traversal 不能用recursive写 (LC原题)2. 比如有个数组F={1,3, 4, 5, 2, 0}, A=3, 那么F[A]=5, F[ ...
- OC语法7——内存管理之@property参数
@property的参数: 我们已经知道为了给开发者提供便捷,OC提供了@porperty关键字,它可以自动生成属性的set和get方法. 但是我们又知道,在OC中还面临者对象内存管理的问题,而且我们 ...
- 关于 MyBatis MyBatis-Spring Jdbc 批量插入的各种比较分析
因为目前SME项目中编写了一套蜘蛛爬虫程序,所以导致插入数据库的数据量剧增.就项目中使用到的3种DB插入方式进行了一个Demo分析: 具体代码如下: 1: MyBatis 开启Batch方式,最普通的 ...