虚拟机: VirtualBox 5

Server操作系统: 
Ubuntu Server 14.04.3 LTS

如果对虚拟机空间和性能不做考虑, 且不习惯用Linux命令, 你也可以使用Ubuntu Desktop版本, 配合VirtualBox的增强功能包, 操作简便, 可实现和主机相互拖拽文件, 以及共享剪贴板等等, 但虚拟机的资源消耗较大.
也可以使用CentOS 6的各个版本, 比如LiveCD版.

Hadoop版本: 2.6.2

准备工作

添加Hadoop专用用户

optional, 出于安全性和便于管理的角度考虑, 建议单独为hadoop添加用户. 本例中用户名为hm

安装相关软件包:

  • SSH:   本例使用openssh-server, 和openssh-client(一般Linux发行版都有默认安装)
  • JAVA: 本例使用openjdk-7-jdk (如果有多个openjdk版本, 请选择devel版本, 否则jps命令有可能无法使用)

检查软件包是否已经安装

输入命令

hm@u14s64:~$ dpkg -l|grep -e ssh

可以查看ssh软件包的安装状态. ii代表已经成功安装. 同理, 把ssh换做jdk即可查看jdk的安装情况.

如果尚未安装上述软件包, 使用命令apt-get进行安装.

hm@u14s64:~$ sudo apt-get install openssh-server
hm@u14s64:~$ sudo apt-get install openjdk-7-jdk

如报错

E: Package 'openssh-server' has no installation candidate

运行一下apt-get update即可. 仍然有问题, 可以尝试去更新/etc/apt/source.list, 换个好一点的源, 比如mirrors.163.com/ubuntu等等.

验证安装结果

1. jps - JVM进程查看工具, 将来要用于查看Hadoop守护进程

hm@u14s64:~$ jps

应该可以看到至少有jps进程存在.

2. ssh - 单机免密码登录 (hadoop伪分布模式和分布模式需要用到)

hm@u14s64:~$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
hm@u14s64:~$ cat .ssh/id_dsa.pub >> .ssh/authorized_keys
hm@u14s64:~$ ssh localhost

成功登录后, 输入exit退出当前ssh登录. 以后再输入ssh localhost就可以直接无密码登录.

如果再次登录仍需要密码, 可能是authorized_keys的权限设置不对, 请修改后再测试

hm@u14s64:~$ sudo chmod 600 .ssh/authorized_keys

安装Hadoop

下载解压

从官网下载安装包, 这里使用2.6.2版本, 通过psftp把hadoop安装包上传到本server. e.g. /home/hm/hadoop-2.6.2.tar.gz

解压文件到你的安装目录, 这里我把它安装在/home/hm/hadoop目录下:

hm@u14s64:~$ tar -xzvf hadoop-2.6.2.tar.gz -C ~
hm@u14s64:~$ mv hadoop-2.6.2 hadoop

确认权限

输入ls -la 确认hadoop文件夹及包含的所有文件所属的user和group是hm.

hm@u14s64:~$ ls -la
hm@u14s64:~$ ls -la hadoop/

如果不是, 输入下面的命令改变拥有权: (保证hm用户可以正常运行hadoop的各个命令)

hm@u14s64:~$ sudo chown -R -v hm:hm hadoop/

修改环境变量

hm@u14s64:~/hadoop$ vi etc/hadoop/hadoop-env.sh

找到export JAVA_HOME=${JAVA_HOME}, 修改为绝对路径 export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

使用yarn框架的话, 建议同时修改文件 etc/hadoop/yarn-env.sh, 找到下面这行:
#export JAVA_HOME=/home/y/libexec/jdk1.6.0/
修改为: export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

注意: 如果不知道JDK安装路径, 使用下面的命令查找: (第一行命令用于确定server上jdk的软件包名称)

hm@u14s64:~/hadoop$ dpkg -l|grep -e jdk
hm@u14s64:~/hadoop$ dpkg -L openjdk-7-jdk

Optional:
如果想在其他路径下运行hadoop命令, 需要先运行下面的命令:

hm@u14s64:~/hadoop$ export HADOOP_PREFIX=/home/hm/hadoop/
hm@u14s64:~/hadoop$ export PATH=$PATH:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin

如果要对所有用户永久生效, 则去/etc/profile文末添加这两行, 保存后, 运行source profile命令可以使其立即生效. (不推荐)

在Ubuntu Server版中, 如果只对当前用户永久更改的话, 则将上述两个export加到.profile文件末尾: (推荐)

hm@u14s64:~/hadoop$ vi ~/.profile
hm@u14s64:~/hadoop$ source ~/.profile

测试jdk设置是否成功

hm@u14s64:~/hadoop$ bin/hadoop

此时应该能显示hadoop命令的usage选项

Local(Standalone)模式

这是Hadoop的默认模式, 运行在单个Java进程里, 主要用于debug.

下面我们做个演示, 拷贝hadoop自己的一些配置文件到input目录模拟需要处理的大数据, 运用MapReduce来分析dfs开头的字串的出现次数以及名字, 最后把结果输出到屏幕上

 hm@u14s64:~/hadoop$ mkdir input
hm@u14s64:~/hadoop$ cp etc/hadoop/*.xml input
hm@u14s64:~/hadoop$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.2.jar grep input output 'dfs[a-z.]+'
hm@u14s64:~/hadoop$ cat output/*

可以看到符合dfs开头的单次总共出现一次, 名为"dfsadmin"

Pseudo-Distributed Mode (伪分布模式)

修改hadoop配置文件

一般来说总共有4个配置文件可以修改: (demo的具体修改见后文)

core-site.xml    配置全局属性
hdfs-site.xml    配置hdfs分布式文件系统相关属性
mapred-site.xml   配置旧框架MapReduce相关属性
yarn-site.xml    配置新框架yarn相关属性

注意, mapred-site.xml比较特殊:

  • 使用MapReduce框架时, 通过该文件对MapReduce相关属性进行配置.
  • 使用yarn框架时, 该文件的新属性mapreduce.framework.name必须配置. 
    通常情况下这个配置的值都设置为 yarn, 如果没有配置这项, 那么提交的 yarn job 只会运行在Local模式,而不是分布式模式.
    此外, 新框架也可以通过该属性来支持第三方 MapReduce 开发框架, 比如 SmartTalk/DGSG 等非 Yarn 架构.

想查看默认配置, 或者查看配置项解释, 可以在本地hadoop解压包里面, 搜索core-default.xml或者其他xxx-default.xml来参考. 一般位于share/doc/hadoop/hadoop-project-dist/hadoop-common中.

也可以去 http://hadoop.apache.org/docs/ 选择你需要的版本, 点击左下侧的configuration中对应的xml文件即可.

不同Hadoop版本的属性名称有差别, 本例采用了较新的Hadoop 0.23.X 配置写法. 详细对比请看 http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/

etc/hadoop/core-site.xml
输入命令

hm@u14s64:~/hadoop$ sudo vi etc/hadoop/core-site.xml

添加fs.defaultFS属性来指定默认文件系统的URI. 由于是单点伪分布式, host设为localhost. port设置要尽量避免冲突的可能性. 可以用netstat -anp | grep portNumber命令来查看端口使用状态.

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:49000</value>
</property>
</configuration>

etc/hadoop/hdfs-site.xml

同上, 使用vi设置缺省的hdfs数据块的默认副本数, 非伪分布式模式下, 如果有多个slave, 可以把默认副本数设置成至少和slave数量一致. 本例并无多个slave, 因此设置成1即可.

<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>

使用旧MapReduce框架的单点伪分布式配置 (运行MapReduce Job)

格式化文件系统

注意, 默认情况下, 该操作会使用/tmp/hadoop-{username}/dfs/name作为hdfs的common storage路径, 如果之后再次格式化NameNode发生错误, 可以去删除tmp下对应目录来解决. 重启server也会自动删除tmp下的文件.

hm@u14s64:~/hadoop$ bin/hdfs namenode -format

启动NameNode和DataNode的守护进程(deamon)

hm@u14s64:~/hadoop$ sbin/start-dfs.sh

仔细看输出的信息, 会看到

Starting secondary namenodes [0.0.0.0]
The authenticity of host '0.0.0.0 (0.0.0.0)' can't be established.

SecondaryNameNode(snn)是作为NameNode的灾难备份而存在的, 我们的演示中暂时用不到, 所以直接忽略这个错误即可.

此时输入命令jps, 查看jvm中的相关进程, 可以看到我们需要的守护进程都已经开启了:

  • SecondaryNameNode
  • DataNode
  • NameNode
  • Jps

守护进程相关的log放在~/hadoop/logs文件夹中, 这些内容非常重要, 将来debug可以依靠这些log.

配置HDFS

hm@u14s64:~/hadoop$ bin/hdfs dfs -mkdir -p /user/hm

既然是伪分布式, 我们接下来都不在本地进行文件操作, 而是去hdfs里面. 可以用命令

hm@u14s64:~/hadoop$ bin/hdfs dfs -ls /user/hm

查看hdfs中的文件和文件夹.

接下来将input文件放到我们的分布式系统上去

hm@u14s64:~/hadoop$ bin/hdfs dfs -mkdir /user/hm/input
hm@u14s64:~/hadoop$ bin/hdfs dfs -put etc/hadoop/*.xml input

运行MapReduce Job

hm@u14s64:~/hadoop$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.2.jar grep input output 'dfs[a-z.]+'

把hdfs上的output文件夹拿到本地来查看结果, 或者直接在hdfs上查看结果:

hm@u14s64:~/hadoop$ bin/hdfs dfs -get output output
hm@u14s64:~/hadoop$ cat output/*
hm@u14s64:~/hadoop$ bin/hdfs dfs -cat /user/hm/output/*

停止HDFS守护进程

完工后, 停掉hdfs守护进程(daemon), 可以用jps检验

hm@u14s64:~/hadoop$ sbin/stop-dfs.sh

使用新yarn框架的单点伪分布式配置 (运行Yarn Job)

修改etc/hadoop/mapred-site.xml

默认情况下这个文件不存在, 所以先从模板新建一个

hm@u14s64:~/hadoop$ cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml

设置好Framework名称

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

修改etc/hadoop/yarn-site.xml

<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

配置HDFS

接下来和旧框架的步骤一样:
先格式化分布式文件系统(如果没重启, 接上面的步骤操作, 这个可以省略)
启动NameNode和DataNode daemon
然后创建好用户目录和input目录, 上传input数据 (没重启, 接上面操作的话, 这步也省略, 但是记得把output目录删除, 命令: hm@u14s64:~/hadoop$ bin/hdfs dfs -rm -r -f /user/hm/output )

启动yarn框架的守护进程

两个守护进程: ResourceManager和NodeManager

hm@u14s64:~/hadoop$ sbin/start-yarn.sh

可以用jps命令检查, 正确启动, 则可以看到, 除了NameNode, DataNode和SecondaryNameNode, 多了ResourceManager和NodeManager两个进程.

运行MapReduce Job

hm@u14s64:~/hadoop$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.2.jar grep input output 'dfs[a-z.]+' 

对比输出信息, 可以看到和旧框架的运行方式有诸多不同.

如果运行出错, 可以根据具体的container id, 去logs文件夹查找root cause.

同样, 运行output命令可以查看最终结果.

结束守护进程

任务完成, 运行下面的命令结束yarn守护进程

hm@u14s64:~/hadoop$ sbin/stop-yarn.sh

如果不再用到hdfs的守护进程, 则

hm@u14s64:~/hadoop$ sbin/stop-dfs.sh

搭建单节点Hadoop应用环境的更多相关文章

  1. centos搭建单节点hadoop

    由于本地机器资源有限,搭建单节点hadoop供开发.测试. 1.安装java mkdir /usr/local/java cd /usr/local/java tar zxvf jdk-8u181-l ...

  2. 基于Docker快速搭建多节点Hadoop集群--已验证

    Docker最核心的特性之一,就是能够将任何应用包括Hadoop打包到Docker镜像中.这篇教程介绍了利用Docker在单机上快速搭建多节点 Hadoop集群的详细步骤.作者在发现目前的Hadoop ...

  3. hadoop集群搭建——单节点(伪分布式)

    1. 准备工作: 前提:需要电脑安装VM,且VM上安装一个Linux系统 注意:本人是在学习完尚学堂视频后,结合自己的理解,在这里做的总结.学习的视频是:大数据. 为了区分是在哪一台机器做的操作,eg ...

  4. Zookeeper在Centos7上搭建单节点应用

    (默认机器上已经安装并配置好了jdk) 1.下载zookeeper并解压 $ tar -zxvf zookeeper-3.4.6.tar.gz 2.将解压后的文件夹移动到 /usr/local/ 目录 ...

  5. dcoker 搭建单节点redis

    1.安装docker 1.检查内核版本,必须是3.10及以上 [root@localhost ~]# uname -r 2.安装docker [root@localhost ~]# yum insta ...

  6. 吴裕雄--天生自然HADOOP操作实验学习笔记:单节点伪分布式安装

    实验目的 了解java的安装配置 学习配置对自己节点的免密码登陆 了解hdfs的配置和相关命令 了解yarn的配置 实验原理 1.Hadoop安装 Hadoop的安装对一个初学者来说是一个很头疼的事情 ...

  7. kafka系列一:单节点伪分布式集群搭建

    Kafka集群搭建分为单节点的伪分布式集群和多节点的分布式集群两种,首先来看一下单节点伪分布式集群安装.单节点伪分布式集群是指集群由一台ZooKeeper服务器和一台Kafka broker服务器组成 ...

  8. ASP.NET Core on K8S学习初探(1)K8S单节点环境搭建

    当近期的一个App上线后,发现目前的docker实例(应用服务BFF+中台服务+工具服务)已经很多了,而我司目前没有专业的运维人员,发现运维的成本逐渐开始上来,所以容器编排也就需要提上议程.因此我决定 ...

  9. Hadoop的单节点集群详细启动步骤

    见,如下博客 hadoop-2.2.0.tar.gz的伪分布集群环境搭建(单节点) 很简单,不多赘述.

随机推荐

  1. Memcached基本架构和思想

    Memcached采用客户端-服务器的架构,客户端和服务器端的通讯使用自定义的协议标准,只要满足协议格式要求,客户端Library可以用任何语言实现. 从用户的角度来说,服务器维护了一个键-值关系的数 ...

  2. 业务需求那些事,使用WCF如何实现业务需求!

    最近遇到一个新项目,需要与硬件结合,进行读取信息并保存在数据库中.业务要求也在昨天发布一个问题,当然感谢许多园内的朋友出谋划策,截图有真相! 关于这个问题,我做了如下假设.目前处于测试状态,代码比较简 ...

  3. C# 懒人常用异步方法

    Winform this.Invoke(new Action(() => { })); Wpf this.Dispatcher.Invoke(DispatcherPriority.Normal, ...

  4. caret彻底的理解css的三角形【通过border】

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. MFC CListCtrl得到ctrl,shift多选的行号

    vector<int> selVect; int count = m_consumeList.GetItemCount(); //你的列表多少行 for (int i = 0; i< ...

  6. iOS定位与地图

    定位: 手机上定位的实现主要有三种方式:基站(附近基站的位置),wifi(所连接路由器的位置),卫星(最准确,也最耗能). iOS的定位功能主要是由CLLocationManager类来完成的.这个类 ...

  7. js 删除本身节点元素

    var theParent = document.getElementById("bq_ly");   theParent.parentNode.removeChild(thePa ...

  8. php分页类及其实现原理

    /** * * 实现思路:分页显示拆分 : 1...上页 12 13 14 15 [16] 17 18 19 20 ...100 下页 * * function htmlPart1() : 上页 * ...

  9. 求一个int型整数的两种递减数之和(华为2015笔试题及答案)

    给出一个整数(负数使用其绝对值),输出这个整数中的两种递减数(1.最大递减数:2.递减数中各位数之和最大的数)之和. 递减数:一个数字的递减数是指相邻的数位从大到小排列的数字,不包含相邻的数位大小相同 ...

  10. Orchard 源码探索(Localization)之国际化与本地化

    本地化与国际化 基本上相关代码都在在Orchard.Framework.Localization中. T("english")是如何调用到WebViewPage.cs中的Local ...