Hadoop平台搭建
指南
学院:计算机科学与工程学院专业:计算机科学与技术
学生姓名:吕瑞
指导老师:蔡国永
目录
一.Hadoop简介 (3)
二.实验环境 (3)
硬件环境 (3)
软件环境 (4)
三.Hadoop平台搭建 (4)
1.安装必需软件 (4)
2.系统配置 (5)
3.hadoop配置 (6)
4.Hadoop格式化 (8)
5.启动/停止Hadoop (8)
四.配置eclipse开发环境 (10)
1.下载eclipse (10)
2.配置hadoop-eclipse开发环境 (10)
五. 新建hadoop项目 (12)
1.新建hadoop项目 (12)
2.加载hadoop软件包 (13)
六. 远程访问 (14)
1.网络设置(在校园网环境下) (14)
2.安装ssh服务器 (15)
3.远程访问 (15)
七. 实例分析 (17)
1.FPTree算法 (17)
2.运行FPTree算法 (17)
附FPTree算法在hadoop和单机上的实验数据错误!未定
义书签。
Hadoop平台搭建
一.Hadoop简介
Hadoop是由Apache软件基金会开发的一个基于分布式文件系统HDFS和并行编程模型Map/Reduce的大数据处理平台。其中,HDFS保证了大量数据的可靠存储和高效读写,Map/Reduce实现了数据的并行处理。它具有高可靠性,高容错性,高扩展性,高效性,高性价比等显著特点。
HDFS是一个分布式的文件系统,从功能上可以分为Namenode(主节点)和Datanode (从节点),Namenode节点主要负责文件系统元信息的管理和维护,Datanode负责文件数据的存储。通过采用数据冗余保证数据的可靠性,通过心跳机制实现Namenode和Datanode 的通信,通过数据文件的分布式存储实现数据的并发读写。
Map/Reduce是一个并行的计算模型,从功能上可以分为Jobtrack和tasktrack,Jobtrack 主要负责系统资源的分配和任务的管理调度,tasktrack主要负责任务的执行。Map/Reduce 的任务管理模式实现了“移动数据”向“移动计算”的转移,从而大大降低了数据传输中宝贵的带宽资源,提升了程序的执行效率,将数据请求和数据传输分裂开来大大减轻了namenode 节点的数据压力,实现数据访问者和数据存储方的直接通信和数据传输。
HDFS和Map/Reduce是Hadoop系统的核心,随着Hadoop平台的日渐成熟和应用越来越广泛,如今Hadoop已经形成了一个Hadoop Ecosystem,它涉及到分布式按列存储的数据库HBASE和数据仓库HIVE,数据集检索工具PIG,结构化和非结构化数据传输工具SQOOP,永久化序列化存储的系统A VRO,高可用性的协调服务ZooKeeper等。
二.实验环境
本文通过搭建一个Hadoop平台和运行一个简单程序演示Hadoop的使用方法。
硬件环境
硬件部分包括8台普通主机(作为datanode使用)和1台高配主机(作为namenode 使用),具体信息如下:
表1.平台硬件环境
名字操作系统IP地址CPU/内存
namenode0 Ubuntu 10.04 192.168.0.100 Xeon(R)2.0ghz/6g
datanode1 Ubuntu 10.04 192.168.0.101 I G645 2.9ghz/2g
datanode2 Ubuntu 10.04 192.168.0.102 I G645 2.9ghz/2g
datanode3 Ubuntu 10.04 192.168.0.103 I G645 2.9ghz/4g
datanode4 Ubuntu 10.04 192.168.0.104 I G645 2.9ghz/4g
datanode5 Ubuntu 10.04 192.168.0.105 I G645 2.9ghz/4g
datanode6 Ubuntu 10.04 192.168.0.106 I G645 2.9ghz/4g
datanode7 Ubuntu 10.04 192.168.0.107 I G645 2.9ghz/4g
datanode8 Ubuntu 10.04 192.168.0.108 I G645 2.9ghz/4g
注:在Hadoop部署的分布式文件系统中有4种角色:namenode,datanode,jobtracker,tasktracker。Namenode和Jobtracker属于Master角色,Datanode和Tasktracker属于
Slaver角色。Namenode和Datanode用于分布式存储,JobTracker和T asktracker用于分布式计算。
软件环境
操作系统:Linux Ubuntu 10.0.4
JAVA运行环境:Jdk 1.7.0
其他软件:
Hadoop版本:Haoop 1.0.4
安全协议:SSH
开发工具:eclipse(版本Juno Service Release 2)
三.Hadoop平台搭建
1.安装必需软件
(1)下载并安装jdk1.7.0
下载地址:
https://www.doczj.com/doc/741491920.html,/technetwork/java/javase/downloads/jdk7-downloads-1880260. html
(2)设置环境变量:
1)输入命名:
$ sudo gedit /etc/profile
2)在文档最后umask 022前写入下面三行内容:
###JA V A
export JA V A_HOME=/home/hadoop/jdk1.7.0
export PATH=$JA V A_HOME/bin:$PATH
(3)测试
在终端中输入命令:
$java -version
终端如果返回以下信息:
图1-1.Java版本信息
则说明jdk已经安装好了。
(4)安装安全协议SSH
SSH是实现主节点对从节点的免密码登录,实现对从节点的启动,停止等控制在终端中输入命令:
$ sudo apt-get install ssh
根据系统提示,回车即可
注:在每个节点上都要执行以上(1)(2)相同的过程。
2.系统配置
(1)修改主机名(以修改admin为namenode0为例)
1)在终端中输入命令:
hadoop@admin:~$ sudo gedit /etc/hostname
在打开的文件中写入要修改为的主机名(如namenode0):
namenode0
2)保存文件退出,命令行变为: hadoop@namenode0:/hadoop$
注:此步骤意在为每台主机提供一个容易理解和管理的名字,名字名称任意,本实验中数据节点分别命名为datanode【1-8】和名字节点namenode0;
(2)修改hosts文件
1)在终端中输入命令:
hadoop@namenode0:~$ sudo gedit /etc/hosts
将集群中的
2)保存文件退出
注:1)此步骤为了实现用主机名可以直接访问相应的主机
2)以上步骤(1)(2)需要在每台主机上进行相同操作
(3)配置ssh
Hadoop启动以后,Namenode通过SSH来启动和停止各个节点上的各种守护进程,需要在节点之间执行指令的时候是不输入密码,所以需要用无密码公钥认证的方式配置SSH。本实验中以namenode0为主节点,它要通过SSH连接到所有其它datanode节点(datanode1, datanode2,datanode3.。。。。)。对于SSH服务来说,namenode是客户端,datanode是服务端。
1)在主目录下创建.ssh文件夹,然后生成公钥和私钥:
进入隐藏文件.ssh:
$cd .ssh
$hadoop@namenode0:~/.ssh$ ssh-keygen -t rsa
#该命令在namendoe0上生成一个私钥和一个公钥。公钥放到服务端(datanode)去,私钥留在客户端(namenode0)。
2)将公钥写入authorized_keys文件中
hadoop@namenode0:~/.ssh$ cp id_rsa.pub authorized_keys
3)将uthorized_keys文件复制到网络中所有datanode节点的.ssh目录下
hadoop@namenode0:~/.ssh$ scp authorized_keys datanode1:/home/hadoop/.ssh/
4)测试ssh
hadoop@namenode0:~/.ssh$ ssh datanode1
图1-2.ssh测试
该图说明ssh已经正确配置好了,不需要输入密码。
(4)目录结构
Hadoop要求所有结点上Hadoop的目录结构要相同,因此必须在每个系统中创建一个相同的用户名的账户。本实验配置中都采用了hadoop账户,主目录是/home/hadoo p
Hadoop存放的目录为:/home/hadoop/Hadoop-1.0.4
3.hadoop配置
(1)下载hadoop-1.0.4
将下载的文件解压到/home/hadoop/目录下
下载地址:
https://www.doczj.com/doc/741491920.html,/releases.html#12+October%2C+2012%3A+Release+1.0.4+a vailable
在终端中输入命令:
$ sudo tar zxvf hadoop-1.0.4.tar.gz
(2)配置环境变量,
1)修改hadoop-env.sh
$ cd hadoop-1.0.4
$sudo gedit ./conf/hadoop-env.sh
export JA V A_HOME=/home/hadoop/jdk1.7.0
2)修改profile
$sudo gedit /etc/profile
在文件末尾umask 022前添加
###Hadoop
export HADOOP_HOME=/home/hadoop/hadoop-1.0.4
export PATH=$HADOOP_HOME/bin:$PATH
export HADOOP_HOME_WARN_SUPPRESS=1
(3)配置mapred-site.xml
在终端中输入命令,打开文件写入下面内容:
$sudo gedi ./conf/mapred-site.xml
(4)配置core-site.xml
在终端中输入命令,打开文件写入下面内容:
$sudo gedit ./conf/core-site.xml
(5)hdfs-site.xml
在终端中输入命令,打开文件写入下面内容:
$sudo gedit ./conf/hdfs-site.xml
(6)配置编辑conf/masters ,conf/slaves
1)定义HDFS主节点,本实验中为namenode0,如:在打开的文件中写入:
在终端中输入命令,打开文件写入下面内容:
$ sudo gedit ./conf/masters
Namenode0
2)定义HDFS从节点,本实验中为datanode[1-8],如:在打开的文件中写入:在终端中输入命令,打开文件写入下面内容:
$ sudo gedit ./conf/slaves
datanode1
datanode2
datanode3
datanode4
datanode5
datanode6
datanode7
datanode8
注:以上1-5步骤须在每个节点上执行或者将配置好的hadoop-1.0.4文件夹复制到各个节点上并在每个节点上添加步骤(1)中的环境变量
4.Hadoop格式化
在主节点(namenode)上HDFS格式化
在终端中输入命令:
hadoop@namenode0:~/hadoop-1.0.4$bin/hadoop namenode -format
图1-3格式化HDFS
5.启动/停止Hadoop
(1)启动hadoop
在终端中输入命令:
$ bin/start-all.sh
图https://www.doczj.com/doc/741491920.html,node启动界面
检测是否启动成功:
输入命令:jps,如下图列出4个正在运行的进程,则hadoop启动成功
图1-5验证hadoop启动成功
(2)停止hadoop
在终端中输入命令:
$ stop-all.sh
图1-6.Hadoop停止过程
四.配置eclipse开发环境
1.下载eclipse
1),下载linux环境下的eclipse编译器,解压到用户名目录下(/home/hadoop/):
2),下载hadoop eclipse插件:hadoop-eclipse-plugin-1.0.4.jar
2.配置hadoop-eclipse开发环境
1)将下载的插件添加到eclipse/plugins/目录下
2)打开eclipse菜单栏的首选项,并选中hadoop的安装目录后点击确定
3)菜单栏中窗口----打开透视图-----Map/Reduce;如图
4)在显示的视图中编Myloc
5)点击右键,填入相应内容
6)接着点击"Advanced parameters"从中找到"hadoop.tmp.dir",修改为Hadoop集群中设置的地址,本实验中是"/home/hadoop/tmp",这个参数在"core-site.xml"进行了配置。
7)至此,eclipse开发环境配置完成,启动hadoop,测试hadoop与eclipse的链接。选择窗口-显示视图-项目资源管理器,出现如下Myloc文件目录树即为链接成功:
五. 新建hadoop项目
1.新建hadoop项目
1)选择文件-新建-项目:
2)选择Map/Reduce Project,下一步:
3)输入项目名称,点击完成。
2.加载hadoop软件包
1)在文件中右击构建路径,配置构建路径,将hadoop目录中的*.jar文件全部加
载到项目中,如图:
点击添加外部jAR(X)选中jar文件,完成加载,如图
至此,完成了一个项目的创建。
六. 远程访问
1.网络设置(在校园网环境下)
1)配置hadoop集群的网络参数IP地址,子网掩码,网关,DNS,如下图
WLAN端口,如下图
2.安装ssh服务器
在namenode节点终端上输入以下命令:
$sudo apt-get install openssh-server
3.远程访问
1)安装客户端软件winscp(或者putty),并登录
登录成功可进行文件上传,提交程序,查看运行过程和分析结果。2)通过浏览器查看作业执行信息
在浏览其中输入http://namenodeIP:63414查看HDFS信息
在浏览其中输入http://namenodeIP:63415查看作业执行情况
七. 实例分析
1.FPTree算法
(1)简介:
在关联规则挖掘领域最经典的算法是Apriori,其致命的缺点是需要多次扫描事务数据库。于是人们提出了各种裁剪(prune)数据集的方法以减少I/O开支,韩嘉炜老师的FP-Tree算法就是其中非常高效的一种。本实例实现了在hadoop环境下的FP-Tree算法
(2)涉及到的文件
注:DC_FPTree.java:构建事务树,求解频繁集
Record.java:定义事务集数据结构
TreeNode.java:定义树节点数据结构
(3)输入输出文件
输入文件(12.2M):(部分)
输出文件(1.1k):(部分)
2.运行FPTree算法
(1)在eclipse下运行FPTree算法
1)$start-all.sh 启动hadoop集群
2)打开eclipse编辑器,菜单----运行方式------hadoop运行
运行过程如下
13/08/13 14:22:46 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
13/08/13 14:22:46 WARN mapred.JobClient: No job jar file set. User classes may not be found. See JobConf(Class) or JobConf#setJar(String).
13/08/13 14:22:46 INFO input.FileInputFormat: Total input paths to process : 1
13/08/13 14:22:46 WARN snappy.LoadSnappy: Snappy native library not loaded
13/08/13 14:22:47 INFO mapred.JobClient: Running job: job_local_0001
13/08/13 14:22:47 INFO util.ProcessTree: setsid exited with exit code 0
13/08/13 14:22:47 INFO mapred.Task: Using ResourceCalculatorPlugin :
org.apache.hadoop.util.LinuxResourceCalculatorPlugin@5890bd
13/08/13 14:22:47 INFO mapred.MapTask: io.sort.mb = 100
13/08/13 14:22:49 INFO mapred.JobClient: map 0% reduce 0%
13/08/13 14:22:49 INFO mapred.MapTask: data buffer = 79691776/99614720
13/08/13 14:22:49 INFO mapred.MapTask: record buffer = 262144/327680
13/08/13 14:22:51 INFO mapred.MapTask: Spilling map output: record full = true
13/08/13 14:22:51 INFO mapred.MapTask: bufstart = 0; bufend = 5417647; bufvoid = 99614720
13/08/13 14:22:51 INFO mapred.MapTask: kvstart = 0; kvend = 262144; length = 327680
13/08/13 14:22:51 INFO mapred.MapTask: Finished spill 0
13/08/13 14:22:52 INFO mapred.MapTask: Spilling map output: record full = true 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
13/08/13 14:24:25 INFO mapred.JobClient: map 100% reduce 0%
13/08/13 14:24:27 INFO mapred.LocalJobRunner: reduce > reduce
13/08/13 14:24:27 INFO mapred.Task: Task 'attempt_local_0002_r_000000_0' done.
13/08/13 14:24:28 INFO mapred.JobClient: map 100% reduce 100%
13/08/13 14:24:28 INFO mapred.JobClient: Job complete: job_local_0002
13/08/13 14:24:28 INFO mapred.JobClient: Counters: 20
13/08/13 14:24:28 INFO mapred.JobClient: File Output Format Counters
13/08/13 14:24:28 INFO mapred.JobClient: Bytes Written=1131
13/08/13 14:24:28 INFO mapred.JobClient: FileSystemCounters
13/08/13 14:24:28 INFO mapred.JobClient: FILE_BYTES_READ=269634746
13/08/13 14:24:28 INFO mapred.JobClient: FILE_BYTES_WRITTEN=218593881
13/08/13 14:24:28 INFO mapred.JobClient: File Input Format Counters
13/08/13 14:24:28 INFO mapred.JobClient: Bytes Read=1418
13/08/13 14:24:28 INFO mapred.JobClient: Map-Reduce Framework
13/08/13 14:24:28 INFO mapred.JobClient: Map output materialized bytes=1404
13/08/13 14:24:28 INFO mapred.JobClient: Map input records=64
13/08/13 14:24:28 INFO mapred.JobClient: Reduce shuffle bytes=0
13/08/13 14:24:28 INFO mapred.JobClient: Spilled Records=128
13/08/13 14:24:28 INFO mapred.JobClient: Map output bytes=1270
13/08/13 14:24:28 INFO mapred.JobClient: Total committed heap usage (bytes)=947912704 13/08/13 14:24:28 INFO mapred.JobClient: CPU time spent (ms)=0
13/08/13 14:24:28 INFO mapred.JobClient: SPLIT_RAW_BYTES=113
13/08/13 14:24:28 INFO mapred.JobClient: Combine input records=0
13/08/13 14:24:28 INFO mapred.JobClient: Reduce input records=64
13/08/13 14:24:28 INFO mapred.JobClient: Reduce input groups=50
13/08/13 14:24:28 INFO mapred.JobClient: Combine output records=0
13/08/13 14:24:28 INFO mapred.JobClient: Physical memory (bytes) snapshot=0
13/08/13 14:24:28 INFO mapred.JobClient: Reduce output records=50
13/08/13 14:24:28 INFO mapred.JobClient: Virtual memory (bytes) snapshot=0
13/08/13 14:24:28 INFO mapred.JobClient: Map output records=64
注:本程序分别运行了一个12M的文件和一个24M的文件,运行正常
(2)以终端方式运行FPTree算法
1):程序打包
选中PageRank包,右击导出,选择jar文件,
点击下一步,选中要打包文件
下一步,选择主类,点击完成。
2):执行程序
在命令行下输入命令:
hadoop@namenode0:~/hadoop-1.0.4$ bin/hadoop jar fptree.jar FPTree.DC_FPTree
注:结果和在eclipse下运行结果相同