http://archboy.org/2011/08/19/simple-apache-hadoop-setup-application-1/

Apache Hadoop 是一个分布式计算基础框架,通过它可以使用N台计算机同时处理某个复杂的计算任务。用户(应用程序)只需要定义如何将一项计算任务拆分(Map)以及如何将各个分任务的结果合并(Reduce),剩下的事情比如如何协调N台计算机一起工作,如何保证即使某一台计算机中途坏掉了也不会影响整项任务的工作等,都由 Hadoop 代劳。Hadoop 同时还可以扩展为分布式储存(HDFS)、分布式NoSQL数据库(HBase)等等。本文将简单介绍基本的 Hadoop 系统的搭建方法。

Hadoop 在运行时由5个程序组成:

  • 1个NameNode,用于管理命名空间以及客户端对文件的访问;
  • 1个JobTracker,用于调度工作以及分配任务(Task);
  • 1个SecondaryNameNode,用于辅助NameNode的工作;
  • 1~N个DataNode 用于数据储存;
  • 1~N个TaskTracker 用于执行任务,DataNode 和 TaskTracker 总是成对出现在同一台计算机里运行。

前3个程序一般是分别在三台不同的计算机里运行,为了简单起见下面的例子将在同一台计算机里运行这3个程序,然后再另外找3台计算机运行DataNode(连同TaskTracker),所以这个示例一共需要4台计算机。结构图如下:

下面是详细的搭建过程

1、下载 Apache Hadoop
因为分布式储存是分布式计算的基础,所以我们必须下载 HDFS 。到这里下载 HDFS,这里使用的版本是 0.20.2,下载回来的一个压缩包已经包含了上面提到的5个程序。

2、配置 Hadoop
虽然在一个典型的 Hadoop 系统里会有 4种不同角色的计算机,不过我们为了简单起见可以先在某一台计算机编辑好配置文件,然后再分发到其他计算机,这样可以避免一台台地配置浪费时间。

a、编辑 conf/hadoop-env.sh,设置正确的 JAVA_HOME 环境变量,比如
export JAVA_HOME=/usr/lib/jvm (CentOS + OpenJDK)

PS:某些 Hadoop 版本在配置了 IPv6 的计算机上会监听错网络地址,所以需要增加如下一行以屏蔽 java 的 IPv6 功能:
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true

b、编辑 conf/core-site.xml

<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/lib/hadoop/hadoop-${user.name}</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.0.10:9000</value>
</property>
</configuration>

第一段设置数据的储存位置(相应的目录当前用户应该有全权限),第二段设置 namenode 服务地址,用于跟其他计算机交流。

c、编辑 conf/mapred-site.xml

<configuration>
<property>
<name>mapred.job.tracker</name>
<value>192.168.0.10:9001</value>
</property>
</configuration>

这段设置了 JobTracker 的服务地址。

d、编辑 conf/hdfs-site.xml

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

这段设置一个文件数据在 Hadoop 系统里冗余多少份,一般设置为3。这样一旦有新的文件数据写入 Hadoop,系统会随机将文件分别写入到3台datanode,这样一旦系统中的某一台 datanode 坏掉了(比如硬盘烧了)只需要将这台计算机整台卸下,再换上一台新的计算机到网络即可,数据会自动复制以保证始终有3份数据。这也是分布式储存系统维护方便的y原因。

e、编辑 /etc/hosts
由于 Hadoop 有时会使用 hostname 访问系统中的其他计算机,而 hostname 有时会解析错误,所以比较笨的方法是在 /etc/hosts 里增加每一台计算机的名称和IP地址。比如:

192.168.0.10    master
192.168.0.100    data001
192.168.0.101    data002
192.168.0.102    data003

3、复制已配置好的 Hadoop 到每一台计算机

首先要保证从 namenode 计算机能够使用  ssh public key 方式登录到其他的每一台计算机(当前示例是1台自己和3台 datanode),实现的方法是在 namenode 计算机使用 ssh-keygen 命令生成 ssh public key,对于红帽系 Linux 发行版可能还需要运行 ssh-add 命令,然后使用 ssh-copy-id 的方法把这个 key 复制到每一台计算机,然后使用 ssh 登录一次所有计算机(包括自己)。

接下来就可以使用 scp 命令复制配置好的 Hadoop 程序到每一台 datanode 计算机了,Hadoop 程序的存放位置必须一致,比如在 namenode 计算机中Hadoop程序位于 /usr/local/hadoop,那么其他计算机也应该存放在这里。

4、设置 namenode 特有的配置
因为我们可以在 namenode 控制所有计算机的 Hadoop 启动或者关闭,所以需要列出有哪些计算机是受控制的。
a、编辑 conf/master 文件,写入如下1行
192.168.0.10
这一行表示要启动的 secondaryNameNode 位于 192.168.0.10 这台计算机(跟 nameNode 同用一台)
b、编辑 conf/slaves 文件,写入如下3行
192.168.0.100
192.168.0.101
192.168.0.102
这表示当前 Hadoop 系统一共有3台 datanode。

5、格式化 namenode
这一步只需做一遍,切换到 Hadoop 程序目录,运行:

$ bin/hadoop namenode -format

6、启动 hadoop

$ bin/start-dfs.sh

这时应该看到启动了 namenode, secondaryNamenode 以及3个 datanode。

$ bin/start-mapred.sh

这时应该看到启动了 jobTracker 和 3个taskTracker。
上面的两个命令也可以用一个命令代替:bin/start-all.sh

7、测试一个分布式计算
在 Hadoop 程序目录里附带了一个统计一个文件里每个单词出现次数的示例,下面将会用它来测试。
首先你需要准备几个纯文本文件(比如有文件 /tmp/text/hello.txt 和 /tmp/text/world.txt ),把他写入到 Hadoop。

$ bin/hadoop fs -copyFromLocal /tmp/text text

这样就会在 Hadoop 里创建了一个 text 文件夹,并且把 hello.txt 和 world.txt 复制到其中了。可以运行 ls 命令查看 Hadoop 里面的文件:

$ bin/hadoop fs -ls

然后运行示例程序

$ bin/hadoop jar hadoop-0.20.2-examples.jar wordcount text text-output

运行完毕之后使用 ls 命令可以查看运行结果:

$ bin/hadoop fs -ls text-output

你可以根据示例的源码修改成自己的程序,并且运行测试一下。

8、Web 监控页面
访问 http://192.168.0.10:50070 可以查看 namenode 的总体运行情况以及已连入的 datanode 列表
访问 http://192.168.0.10:50030 可以查看 jobTracker 的运行情况以及各个 taskTracker 的运行情况和日志

9、关闭Hadoop系统
$bin/stop-all.sh

10、新增加一台 datanode 到系统
如果某台 datanode 重启了,为了让它重新加入 Hadoop 系统,需要在 datanode 计算机上运行:

$ bin/hadoop -daemon.sh start datanode

假如系统需要扩容或者换了一台新机器,这时只需把之前配置好的 Hadoop 复制过来,然后运行上面一行命令即可。假如新增了IP地址或者IP地址发生改变,记得还要在 conf/slaves 文件里作相应的增改。

最后,需要成功配置 Hadoop 可能会有些意外问题,最好的解决方法是查看 Hadoop 的日志,一般来根据日志提供的线索都能把问题解决。

参考资料
1、Hadoop中文文档
2、Hadoop 命令手册
3、Running Hadoop On Ubuntu Linux (Single-Node Cluster)
4、Running Hadoop On Ubuntu Linux (Multi-Node Cluster)

继续阅读下一篇

=====

http://archboy.org/2011/08/19/httparchboy-org20110819simple-apache-hadoop-setup-application-2/

上一篇讲到 Hadoop 的基本配置,实际上我们在搭建分布式计算系统的同时也已经搭建好分布式储存系统了,我们除了可以使用 Hadoop 命令行 管理系统内的文件和目录,也可以通过 Hadoop API 来操作数据。下面简述如何在应用程序调用HDFS。

1、先用 Maven 创建一个Java Application (Console) 程序,然后引用 hadoop-core-0.20.2.jar。

2、在项目根目录创建 core-site.xml :

<?xml version="1.0"?>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.0.10:9000</value>
</property>
</configuration>

程序在运行时会自动寻找 CLASS_PATH 里面的 core-site.xml 文件,假如缺少这个文件的话,程序会使用本地文件系统。

3、创建 Helloworld.java,代码如下:

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class HelloWorld {public static void main(String[] args) {try {HelloWorld helloWorld = new HelloWorld();
helloWorld.run();
} catch (IOException e) {e.printStackTrace();
}
}
public void run() throws IOException {Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path filenamePath = new Path("hello.txt");
if (fs.exists(filenamePath)) {fs.delete(filenamePath, false);
}
FSDataOutputStream out = fs.create(filenamePath);
out.writeUTF("hello world");
out.close();
FSDataInputStream in = fs.open(filenamePath);
String messageIn = in.readUTF();
System.out.print(messageIn);
in.close();
}
}

这段代码比较简单所以就不加说明了。

4、编译然后运行,没有问题的话应该会在HDFS里创建如:
/user/YOUR_NAME/hello.txt
这样的一个文本文件,可以通过浏览器访问 http://192.168.0.10:50070 检查。

最后说一下文件权限。HDFS 的文件权限跟操作系统的文件权限概念上是一致的,假如你用 yang 帐号启动(运行) Hadoop,然后上面程序是用 huang 帐号运行的,那么就会出现没有权限的错误。解决方法一是使用同一个帐号,二是用启动 Hadoop 的帐号创建文件夹并且赋权给 huang,如:

$ bin/hadoop fs -mkdir /user/huang
$ bin/hadoop fs -chown huang /user/huang

更多 Hadoop 命令行可以参阅这里。

Apache Hadoop 简单配置及实践相关推荐

  1. 【Hadoop】安装Apache Hadoop

    一.环境介绍 本篇博客介绍手工安装Apache Hadoop的过程,建立VMware上建立三台Linux虚拟机,每台硬盘20G,内存1G. 1. 环境版本 操作系统:CentOS 6.7Java版本: ...

  2. Apache Hadoop 基础设施容器化在 Uber 的实践

    大数据厂长备注:以下的我们均代表 Uber 的 Hadoop 运维团队. 介绍 随着 Uber 业务的增长,Uber 公司在 5 年内将 Apache Hadoop(本文简称为"Hadoop ...

  3. Apache简单配置(4)搭建Discuz 7.0.0论坛

    Apache简单配置(4)搭建Discuz 7.0.0论坛 RHEL5.3 基本网络配置 一. 1.RHEL5 U3:如图1 (如图1) 2.#hostname //查看当前主机的主机名:如图2 (如 ...

  4. applicaiton.yml 日志配置_底层基于Apache Hudi的DLA最佳实践 海量、低成本日志分析...

    背景信息 日志作为一种特殊的数据,对处理历史数据.诊断问题以及了解系统活动等有着非常重要的作用.对数据分析人员.开发人员或者运维人员而言,日志都是其工作过程中必不可缺的数据来源. 通常情况下,为节约成 ...

  5. RH Linux 企业5+apache+mysql+php+phpmyadmin的简单配置.

    1年前在论坛发的帖.现在归纳到博客里~ RH Linux 企业5+apache+mysql+php+phpmyadmin的简单配置. 小生初学者,刚工作,分享下刚刚的成果. RedHat Linux ...

  6. oracle xe 安装配置,(转)oracle 10g xe 我的安装实践及简单配置过程

    (转)oracle 10g xe 我的安装实践及简单配置过程 我的安装过程 1.编辑 /etc/apt/sources.list : sudo cp /etc/apt/sources.list /et ...

  7. Apache Rewrite url重定向功能的简单配置

    1.Apache Rewrite的主要功能 就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范.平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等 2.Apache Rewrite ...

  8. 关于hadoop的环境配置出错问题org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z

    关于:::**Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nat ...

  9. 简单介绍apache虚拟主机配置的三种方式

    本文主要介绍了apache虚拟主机配置的三种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 记事本打开httpd.conf文 ...

最新文章

  1. Windows LTSC、LTSB、Server 安装 Windows Store 应用商店
  2. python yaml用法详解
  3. 李彦宏称AI可让人们获得永生
  4. 修改以服务方式启动tomcat7的堆内存设置
  5. 软件项目获取用户需求的沟通技巧(摘自IT168技术频道)
  6. LeetCode 1114 按序打印
  7. 《Java 高并发》01 高并发基本概念
  8. 如何使用MySQL和JPA使用Spring Boot构建Rest API
  9. OpenShift 4 Tekton - 用Webhook实现CI/CD
  10. 医疗大数据可能面临的挑战
  11. 销售自用计算机损益计入哪里,用友创业者4.0下的ERP沙盘模拟经营规则中,销售所需紧急采购产品时,按成品直接成本的(    )倍直接扣除现金,付款即到货,紧急采购多付出的成本计入费用表损失项。...
  12. 【LOJ6038】【雅礼集训 2017 Day5】远行(LCT,树的直径)
  13. 【第一组】第十一次例会纪要
  14. java word编辑_java实现word在线编辑及流转
  15. ubuntu vscode use clang-format google style
  16. 元宇宙:虚拟仿真技术的全面提升
  17. flash游戏代码html5,Flash贪吃蛇游戏AS代码翻译
  18. 锂电池电量百分比计算_锂电池容量计算
  19. Java架构师成长之道之Java架构师技术栈
  20. 百问网物联网实战-STM32中断

热门文章

  1. PHP XAMPP配置PHP环境和Apache80端口被占用解决方案
  2. Git之深入解析Git的安装流程与初次运行Git前的环境配置
  3. 2013\National _C_C++_A\4.约数倍数选卡片
  4. Python中is和==的区别
  5. 面试官,求你了别再问我TCP三次握手和四次挥手了(含面试题)
  6. BEGIN-4 Fibonacci数列
  7. 征战蓝桥 —— 2016年第七届 —— C/C++A组第8题——四平方和
  8. python人工智能——机器学习——分类算法-朴素贝叶斯算法对新闻进行分类案例
  9. oracel 中序列
  10. 【Qt】窗口组件和窗口类型