Hadoop环境配置
来源:互联网 发布:三网通软件 编辑:程序博客网 时间:2024/05/16 15:15
Alex的说明
- 本页主要讨论Hadoop的搭建和使用,以及其中可能出现的问题。您可以了解:
- 如何快速试用Hadoop?比如手头只有一台装有Windows的计算机,用VMware中的Ubuntu虚拟机去体验Hadoop。
- 如何在一个简易集群上搭建Hadoop?比如在局域网内几台普通配置计算机上搭建。
- 如何在Hadoop上开发应用?比如在Windows上的Eclipse远程调试,可能需要编译Hadoop。
- 本页所做工作均通过本人测试。但配置方法条条大路通罗马,可能出现各种问题,本页也无法以偏概全,希望大家实践后能及时纠正和补充。
准备工作
版本选择
- 不同的版本号前缀表示版本所属的系列,比如稳定版或alpha、beta版。
- 1.0.X - current stable version, 1.0 release
- 1.1.X - current beta version, 1.1 release
- 2.X.X - current alpha version
- 0.23.X - simmilar to 2.X.X but missing NN HA.
- 0.22.X - does not include security
- 0.20.203.X - old legacy stable version
- 0.20.X - old legacy version
- 本页选择稳定版之1.0.4(05-Oct-2012)
支持的OS平台
- Hadoop最好运行在GNU/Linux环境之上,其开发和编译也需GNU/Linux的支持。本页使用常见的Ubuntu Desktop 12.04.2 LTS作为安装、编译等的演示平台。
Hadoop对Win32的支持不够好。本页使用Windows(7)上的Eclipse开发MapReduce应用,并在远端的Hadoop(VMware虚拟机或集群)上调试。
创建Hadoop账户
- Hadoop要求所有机器节点上Hadoop的部署目录结构要相同,并且都有一个相同用户名的帐户。
- 创建一个名为hadoop的用户并加入hadoop用户组:
sudo addgroup hadoopsudo adduser --ingroup hadoop hadoop...Full Name []: hadoop...
- 为hadoop用户赋予sudo权限,在/etc/sudoers如下位置加入hadoop ALL=(ALL) ALL:
...# Members of the admin group may gain root privileges%admin ALL=(ALL) ALLhadoop ALL=(ALL) ALL...
JDK安装
- Hadoop是用Java编写的,运行需要JVM支持,编译也需要安装JDK。
- 测试命令:
java -versionjavac -version
- Hadoop要求JDK的版本最好大于1.6。
apt-get方式
- Ubuntu从10.04版本起去掉了sun-java6-jre,sun-java6-jdk的源,标准库只有openJDK了,所以直接运行会提示:
sudo apt-get install sun-java6-jdk...Package sun-java6-jdk is not available, but is referred to by another package.This may mean that the package is missing, has been obsoleted, oris only available from another sourceE: Package 'sun-java6-jdk' has no installation candidate
- 尝试使用8.04 LTS中的JDK源,在/etc/apt/sources.list中添加如下源,并update。
deb http://us.archive.ubuntu.com/ubuntu/ hardy multiversedeb-src http://us.archive.ubuntu.com/ubuntu/ hardy multiverse
在apt-get install的过程中,可能有4个包打包下载仍然没有源:
- java-common_0.38_all.deb
- odbcinst1debian2_2.2.14p2-1ubuntu1_i386.deb
- odbcinst_2.2.14p2-1ubuntu1_i386.deb
- unixodbc_2.2.14p2-1ubuntu1_i386.deb
- 安装完成的版本为:1.6.0_06
下载bin包手动安装
- Hadoop要求JDK的版本大于1.6,本页选择Java SE Development Kit 6 Update 45。
Oracle官网下载相关包为:jdk-6u45-linux-i586.bin
- 执行如下命令安装(解压)。
chmod u+x jdk-6u45-linux-i586.bin./jdk-6u45-linux-i586.bin
- 用得到的名为jdk1.6.0_45的文件夹,创建JVM目录。
sudo mkdir -p /usr/lib/jvmsudo mv jdk1.6.0_45 /usr/lib/jvm/
- 配置(所有用户的)环境变量,编辑/etc/profile,末尾加入如下,并注销注销生效。
export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_45export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- 设置一个Hadoop可用的符号链接/usr/lib/jvm/java-6-sun
sudo ln -s /usr/lib/jvm/jdk1.6.0_45/ /usr/lib/jvm/java-6-sun
SSH server安装
- Hadoop通过SSH来对整个集群执行远程操作。
- 测试命令:
ssh localhost
- 若出现如下提示,则没有安装或启动SSH server服务:
ssh: connect to host localhost port 22: Connection refused
- Ubuntu默认安装openssh-client,但没有安装server,则需安装对应版本的openssh-server:
sudo apt-get install openssh-server
- 若已安装SSH server,可查看有无名为“sshd”的进程:
ps -A|grep ssh
- 若没有,则尝试启动SSH进程:
/etc/init.d/ssh -start
安装Hadoop
在Apache提供的镜像地址下载相关包。
Debian包方式
下载:hadoop_1.0.4_1-i386.deb
- 执行命令安装:(或图形界面下双击安装)
sudo dpkg -i hadoop_1.0.4-1_i386.deb
- 测试命令:
hadoop version
- 安装目录说明:
- /etc/hadoop/:配置文件
- /usr/sbin/:启动和终止hadoop运行
- /var/log/hadoop/:日志,需要hadoop用户的读写权限:
sudo chown hadoop:hadoop /var/log/hadoop/
- /var/run/hadoop:默认运行创建pid的目录,需要非root用户(hadoop用户)有对/var/run/(/run/)的读写权限。但该目录属于Ubuntu的tmpfs,因此最好重设pid目录位置。编辑/etc/hadoop/hadoop-env.sh
# The directory where pid files are stored. /tmp by default.export HADOOP_PID_DIR=/home/hadoop/pidsexport HADOOP_SECURE_DN_PID_DIR=/home/hadoop/pids
- /usr/share/hadoop/:主要文件(如hadoop-core-1.0.4.jar)存放目录
- /usr/share/hadoop/templates/conf/:配置文件模板
运行Hadoop
三种运行模式
- 独立模式(local mode/standalone):把Hadoop作为一个Java程序在单个JVM上执行,此时Hadoop不是分布式的,无需运行守护进程(demon),有利于调试。
- 伪分布模式(pseudo-distributed mode):Hadoop运行在单个机器节点上,每个守护程序分别运行在不同的Java进程上,从而模拟集群的行为。
- 全分布模式(fully distributed mode):Hadoop守护进程运行在一个集群上。
- 本页关注的运行模式:
- 单机(或单虚拟机)运行Hadoop,并在该机编译运行Hadoop应用。(伪分布模式)
- 单机(或单虚拟机)运行Hadoop,在另外一台计算机(Windows7)上用Eclipse编译调试运行Hadoop应用。(伪分布模式)
- 在多台计算机组成的集群上运行Hadoop,在另外一台计算机(Windows7)上用Eclipse编译调试运行Hadoop应用。(全分布模式)
网络配置
- Ubuntu自带的防火墙可能阻止对Hadoop所需端口的访问。简单起见,可关闭ufw和iptables
sudo ufw disablesudo iptables -P INPUT ACCEPTsudo iptables -P FORWARD ACCEPTsudo iptables -P OUTPUT ACCEPT
- 对于全分布模式,假设集群中有三台计算机。为了便于配置,分别设置一个主机名用于解析。
IP(参考实际情况)
主机名
作用
运行的守护进程
49.123.105.71
dancy-ubuntu
主&从节点
NameNode,JobTracker,DataNode,TaskTracker
49.123.105.179
yang-ubuntu
从节点
DataNode,TaskTracker
49.123.105.2
xuxiao-ubuntu
从节点
DataNode,TaskTracker
- 根据每个节点的主机名,修改其/etc/hosts如下:(此步可略过,但之后的配置文件均需直接写IP,容易乱)
49.123.105.71 dancy-ubuntu49.123.105.179 yang-ubuntu49.123.105.2 xuxiao-ubuntu
- 注释掉用于本机回环测试的127.0.1.1
Hadoop配置文件编写
- 在/etc/hadoop/下,参考下表编写配置文件(若没有则新建):
配置文件
属性名称
含义
独立模式
伪分布模式
全分布模式
core-site.xml
fs.default.name
NameNode所在主机地址
file:///
hdfs://localhost:9000
hdfs://namenode:9000
core-site.xml
hadoop.tmp.dir
Hadoop运行时临时目录
默认为/tmp/
hdfs-site.xml
dfs.replication
数据块的复制次数
N/A
1
slave节点数(≤3)
hdfs-site.xml
dfs.permissions
是否启用权限
N/A
远程调试时设置为false
hdfs-site.xml
dfs.block.size
数据块大小(Byte)
默认为67108864(即64MB)
mapred-site.xml
mapred.job.tracker
JobTracker所在主机地址
local
localhost:9001
jobtracker:9001
masters
N/A
主节点列表
localhost
主节点IP或主机名表
slaves
N/A
从节点列表
localhost
从节点IP或主机名表
- 独立模式下core-site.xml,hdfs-site.xml,mapred-site.xml均为空。
- 例1:伪分布模式的配置文件编写。
- /etc/hadoop/core-site.xml
<configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property></configuration>
- /etc/hadoop/hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property></configuration>
- /etc/hadoop/mapred-site.xml
<configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property></configuration>
例2:全分布模式的配置文件编写。参考运行Hadoop->网络配置一节的网络环境。
- /etc/hadoop/core-site.xml
<configuration> <property> <name>fs.default.name</name> <value>hdfs://dancy-ubuntu:9000</value> </property></configuration>
- /etc/hadoop/hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>3</value> </property></configuration>
- /etc/hadoop/mapred-site.xml
<configuration> <property> <name>mapred.job.tracker</name> <value>dancy-ubuntu:9001</value> </property></configuration>
- /etc/hadoop/masters
dancy-ubuntu
- /etc/hadoop/slaves
dancy-ubuntuyang-ubuntuxuxiao-ubuntu
SSH配置
- 为了防止Hadoop运行时为了访问集群中的节点而需不断输入密码,一般设置为SSH互信,因此允许hadoop用户无需键入密码即可SSH登录集群内部的机器。
- 创建一个空口令的公钥/私钥对,并建立authorized_keys(权限为600)
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsacat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- 此时若ssh localhost而不用输入密码,则配置成功。
在整个集群间共享密钥对,主要是让主节点能SSH从节点时无需键入密码。参考运行Hadoop->网络配置一节的网络环境。
# 主机dancy-ubuntu执行scp ~/.ssh/authorized_keys yang-ubuntu:/home/hadoop/.ssh/scp ~/.ssh/authorized_keys xuxiao-ubuntu:/home/hadoop/.ssh/
- 若远程机没有.ssh目录,则先手动创建一个(权限为700),再执行上述命令。
- 若提示Agent admitted failure to sign using the key,则将私钥加进来:
ssh-add ~/.ssh/id_rsa
Hadoop基本控制
- 格式化HDFS文件系统。
hadoop namenode -format
- 注:有时需要删除hadoop.tmp.dir(默认为/tmp/hadoop-${user.name})
- Hadoop守护进程的启动和停止。
/usr/sbin/start-all.sh/usr/sbin/stop-all.sh
- 杀掉正在运行的Job
# 列出正在运行的Jobhadoop job -list# 找到该任务的JobId,杀掉hadoop job -kill [JobId]
运行状态
- 用jps命令查看Java进程(进程号参考实际情况):
jps6930 Jps5746 SecondaryNameNode5835 JobTracker5513 DataNode6056 TaskTracker5295 NameNode
slaves机的进程只有DataNode和TaskTracker。
- 通过Web查看(hostname参考实际情况):
JobTracker:http://hostname:50030
NameNode:http://hostname:50070
TaskTracker:http://hostname:50060
- 日志:/var/log/hadoop/
安全模式
- 在HDFS启动的时候,会进入安全模式,只需要等待一会儿即可。
- 安全模式时,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。
安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。
- 运行期通过命令也可以进入安全模式。
- 关闭安全模式。
hadoop dfsadmin -safemode leave
Hadoop Hello World
用Hadoop执行最简单的示例WorldCount。
编译WordCount.java并打包。
mkdir classesjavac -classpath /usr/share/hadoop/hadoop-core-1.0.4.jar WordCount.java -d classesjar cvf WordCount.jar -C classes/ .
- 添加输入文件file01和file02到HDFS。
file01:Hello World Bye Worldfile02:Hello Hadoop Goodbye Hadoop
hadoop fs -copyFromLocal file01 /input/file01hadoop fs -copyFromLocal file02 /input/file02
- 查看HDFS中的目录或文件。
hadoop fs -ls [目录]hadoop fs -cat [文件]
- 运行示例及查看结果。
hadoop jar WordCount.jar com.xdream.WordCount /input /outputhadoop fs -cat /output/part-00000
- 清除结果(下次运行必须)。
hadoop fs -rmr /output
Hadoop编译
- 【待编辑】
Eclipse远程调试
安装Eclipse插件
- 【待编辑】
调试伪分布式
修改配置文件
见运行Hadoop->编写配置文件一节。
- 配置中的localhost仅仅用于单机测试,远程调试替换为节点ip,参考“hosts配置”一节。
- 注2:远程调试
- Hadoop客户端环境配置
- hadoop环境配置
- Hadoop客户端环境配置
- Hadoop单机环境配置
- hadoop环境配置
- hadoop环境配置
- Hadoop单机环境配置
- Hadoop客户端环境配置
- hadoop环境配置
- hadoop环境配置
- hadoop的环境配置
- Hadoop环境配置
- 配置HADOOP开发环境
- Hadoop单机环境配置
- hadoop开发环境配置
- Hadoop环境配置
- eclipse Hadoop环境配置
- Hadoop 环境配置
- 关于log4cplus中AsyncAppender的配置
- linux工作队列机制详解
- Asp.net Authorization "Allow" and "Deny" Order
- aspose.words 操作word生成试卷
- log4cplus源码分析
- Hadoop环境配置
- CI框架百问百答:安装配置完毕,URL出现缺省页面?-第3问
- JAVA Integer进制的转换
- 机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用
- offsetof(TYPE, MEMBER)
- 关于使用javah生成头文件时无法访问class文件的问题
- 开源日志系统log4cplus
- 【iOS编程之路】界面设计--1.TableViewController的应用
- 目标检测的图像特征提取之(二)LBP特征