共计 11430 个字符,预计需要花费 29 分钟才能阅读完成。
引言
一直用的 Ubuntu 32 位系统(准备下次用 Fedora,Ubuntu 越来越不适合学习了),今天准备学习一下 Hadoop,结果下载 Apache 官网上发布的最新的封装好的 2.5.1 版,配置完了根本启动不起来,查看错误日志发现是 native 库的版本和系统不一致,使用 file 命令可以发现封装版的 native 库文件全是 64 位的:
原来官网发布的版本开始用 64 位环境编译了(貌似之前是 32 位环境编译)。没办法,只好自己下载源码编译了。
毫无意外的,编译时各种错误简直停不下来,强忍着一个个耐心解决了,配置的时候又由于自 2.3 开始带来的框架的质变,很多配置都不一样,网上教程真是看花了眼。。。不过最后还是强行配置好,终于跑起来了。系统地记下来,避免后来者绕弯路。
主要参考了 2 篇文章(其实就是 2 篇文章的整合):
CentOS 6.5 源码编译安装 Hadoop2.5.1 http://www.linuxidc.com/Linux/2015-12/126187.htm
Hadoop(2.5.1)伪分布式环境 CentOS(6.5 64 位)配置 http://www.linuxidc.com/Linux/2014-10/107696.htm
下面关于 Hadoop 的文章您也可能喜欢,不妨看看:
Ubuntu14.04 下 Hadoop2.4.1 单机 / 伪分布式安装配置教程 http://www.linuxidc.com/Linux/2015-02/113487.htm
CentOS 安装和配置 Hadoop2.2.0 http://www.linuxidc.com/Linux/2014-01/94685.htm
Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm
Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm
Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm
Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm
单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm
环境
Ubuntu 14.04 (32 bit) 下载:http://www.ubuntu.com/download/desktop
[建议使用 64 位系统,最好是其他 Linux 发行版]
JDK 7u71
[一定要使用 JDK7,不要用最新的 JDK8,否则编译会出错,系统自带的 OpenJDK 也别用,注意配置环境变量,使默认 Java 环境为 JDK7,一定要用“java -version”命令确认一下!] Ant 1.9.4
[Ubuntu 官方源的 Ant 是 1.9.3 版,也能用,不想手动配置环境就“apt-get install ant”也行] Maven 3.2.3
[使用官方最新的 3.2.3 版就行,不要用 2,不要 apt-get 安装,Ubuntu 官方源的当前版本可能太旧,可能导致编译失败] FindBugs 3.0.0
[就用最新的 3.0.0 版,Ubuntu官方源的当前版是 2.0 版,太旧,会导致编译失败] Protobuf 2.5
[这个要注意:官方最新的是 2.6 版,但是 hadoop 2.5.1 就要求 Protobuf 是 2.5 版,所以务必使用链接提供的 2.5 版,否则编译会失败] Hadoop 2.5.1 src
[32 位系统的就老老实实源码编译吧,别下到那个编译完成的版本了]
注:以上工具版本最好保持一致,使用其他版本可能导致编译失败,当然可以随便尝试,能编译成功就行,上述工具正确安装配置后一般能保证编译成功。
编译环境
先把编译环境配置起来。依次安装并配置 JDK 7u71,Ant 1.9.4,Maven 3.2.3,Findbugs 3.0.0 和 Protobuf 2.5 就行了:
JDK 7u71:
tar -zxvf jdk-7u71-linux-i586.tar.gz
sudo cp -r jdk1.7.0_71 /usr/lib/jvm/
# 配置环境变量:
export JAVA_HOME=/usr/lib/jvm//jdk1.7.0_71
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre//bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH
# 注意:
#1、JAVA 路径要在原本的 PATH 之前,否则 java 命令默认会软连接到自带的 OpenJDK 上。最好“java -version”确认一下。
#2、/etc/profile,.profile 或者.bashrc(.zshrc) 中配置都行,但必须 source 之后才能生效。.bashrc 或.zshrc 的话 source 一次就行了,/etc/profile 或 .profile 则需要每次启动终端时都 source 一次才能生效,直到下次开机。不同配置文件的加载机制不同,不多说。
#3、下面工具的配置同理。
Ant 1.9.4:
tar zxvf apache-ant-1.9.4-bin.tar.gz
sudo cp -r apache-ant-1.9.4 /usr/share/
# 配置环境变量:export ANT_HOME=/usr/share/apache-ant-1.9.4 export PATH=$PATH:$ANT_HOME/bin
Maven 3.2.3:
tar -zxvf apache-maven-3.2.3-bin.tar.gz
sudo cp -r apache-maven-3.2.3 /usr/share/
# 配置环境变量:
export M2_HOME=/usr/share/apache-maven-3.2.3
export MAVEN_OPTS=”-Xms256m -Xmx512m”
export PATH=$PATH:$M2_HOME/bin
FindBugs 3.0.0:
tar zxvf findbugs-3.0.0.tar.gz
udo cp -r findbugs-3.0.0 /usr/share/
# 配置环境变量:
export FINDBUGS_HOME=/usr/share/findbugs-3.0.0
export PATH=$PATH:$FINDBUGS_HOME/bin
Protobuf 2.5.0:
tar zxvf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
./configure –prefix=/usr/share
make
sudo make install
我把工具都安装在 /usr/share 目录下,Ubuntu 系统默认会搜寻该目录下的库文件,无需其他配置就行了。但是如果工具被安装在了 /usr/local 目录下,Ubuntu 是不会自动搜索该目录的库文件的,此时需要配置开发库环境变量:
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2015-12/126188p2.htm
编译
tar zxvf Hadoop-2.5.1-src.tar.gz
cd hadoop-2.5.1-src
mvn package -Pdist,native,docs -DskipTests -Dtar
# 等待编译完成就行了,完成后得到的编译版 Hadoop 位于 hadoop-2.5.1-src/hadoop-dist/target 中,其中的 hadoop-2.5.1 目录即为编译版。
自编译虽然麻烦,但是成功编译得到的版本比直接下载的打包编译版在本机上表现更稳定,error 和 warning 基本没有了。另外下面这篇文章提供了编译过程中可能产生的常见问题和解决办法:http://www.linuxidc.com/Linux/2015-12/126189.htm
配置
万事俱备,开始正式搭建。
Hadoop 三种运行模式:
1. 单机模式(standalone):单机模式是 Hadoop 的默认模。当配置文件为空时,Hadoop 完全运行在本地。因为不需要与其他节点交互,单机模式就不使用 HDFS,也不加载任何 Hadoop 的守护进程。该模式主要用于开发调试 MapReduce 程序的应用逻辑。
2. 伪分布模式(Pseudo-Distributed Mode):Hadoop 守护进程运行在本地机器上,模拟一个小规模的的集群。该模式在单机模式之上增加了代码调试功能,允许你检查内存使用情况,HDFS 输入输出,以及其他的守护进程交互。
3. 全分布模式(Fully Distributed Mode):Hadoop 守护进程运行在一个集群上。
自己学习还是搭伪分布式比较好(单机模式其实不需要什么配置)。也不单独添加 Hadoop 用户了,切换麻烦,就用自己常用帐户就行了。
步骤:
1、安装 ssh
由于 Hadoop 用 ssh 通信,先安装 ssh
~$ sudo apt-get install openssh-server
ssh 安装完成以后,先启动服务:
~$ sudo /etc/init.d/ssh start
启动后,可以通过如下命令查看服务是否正确启动:
~$ ps -e | grep ssh
作为一个安全通信协议,使用时需要密码,因此我们要设置成免密码登录,生成私钥和公钥:
~$ ssh-keygen -t rsa -P “”
因为我已有私钥,所以会提示是否覆盖当前私钥。第一次操作时会提示输入密码,按 Enter 直接过,这时会在~/home/{username}/.ssh 下生成两个文件:id_rsa 和 id_rsa.pub,前者为私钥,后者为公钥,现在我们将公钥追加到 authorized_keys 中(authorized_keys 用于保存所有允许以当前用户身份登录到 ssh 客户端用户的公钥内容):
~$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
现在可以登入 ssh 确认以后登录时不用输入密码:
~$ ssh localhost
登出:
~$ exit
第二次登录:
~$ ssh localhost
登出:
~$ exit
这样以后登录就不用输入密码了。
2、安装 hadoop 2.5.1 将刚才编译得到的 hadoop-2.5.1 复制到 /opt 目录下(大型软件和平台我一般放在这个目录),为方便配置,设置权限为 777:
~$ sudo cp -r hadoop-2.5.1-src/hadoop-dist/target/hadoop-2.5.1 /opt/
~$ sudo chmod -R 777 /opt/hadoop-2.5.1
3、配置 hadoop 环境变量
在 /etc/profile 或 .profile 或 .bashrc 中配置 hadoop 环境变量,注意配置完成后一定要 source 一下。
export HADOOP_HOME=/opt/hadoop-2.5.1
export CLASSPATH=.:$HADOOP_HOME/lib:$CLASSPATH
export PATH=$PATH:$HADOOP_HOME/bin
4. 设置 hadoop-env.sh(Java 安装路径)
打开 /opt/hadoop-2.5.1/etc/hadoop
目录下的 hadoop-env.sh 文件,添加以下信息:
export JAVA_HOME=${JAVA_HOME} #当然如果没有配置 JAVA_HOME 也可以设置成具体的 JDK 路径
export HADOOP_HOME=/opt/hadoop-2.5.1 #以下 2 行纯粹为了保险,实际上是重复设置了一次步骤 3
export PATH-$PATH:$HADOOP_HOME/bin
并且,让环境变量配置生效 source
~$ source /opt/hadoop-2.5.1/etc/hadoop/hadoop-env.sh
不设置的话,可能出现启动 hadoop 时提示“JAVA_HOME is not set and could not be found”错误。
至此,hadoop 的单机模式已经安装成功。
引言
一直用的 Ubuntu 32 位系统(准备下次用 Fedora,Ubuntu 越来越不适合学习了),今天准备学习一下 Hadoop,结果下载 Apache 官网上发布的最新的封装好的 2.5.1 版,配置完了根本启动不起来,查看错误日志发现是 native 库的版本和系统不一致,使用 file 命令可以发现封装版的 native 库文件全是 64 位的:
原来官网发布的版本开始用 64 位环境编译了(貌似之前是 32 位环境编译)。没办法,只好自己下载源码编译了。
毫无意外的,编译时各种错误简直停不下来,强忍着一个个耐心解决了,配置的时候又由于自 2.3 开始带来的框架的质变,很多配置都不一样,网上教程真是看花了眼。。。不过最后还是强行配置好,终于跑起来了。系统地记下来,避免后来者绕弯路。
主要参考了 2 篇文章(其实就是 2 篇文章的整合):
CentOS 6.5 源码编译安装 Hadoop2.5.1 http://www.linuxidc.com/Linux/2015-12/126187.htm
Hadoop(2.5.1)伪分布式环境 CentOS(6.5 64 位)配置 http://www.linuxidc.com/Linux/2014-10/107696.htm
下面关于 Hadoop 的文章您也可能喜欢,不妨看看:
Ubuntu14.04 下 Hadoop2.4.1 单机 / 伪分布式安装配置教程 http://www.linuxidc.com/Linux/2015-02/113487.htm
CentOS 安装和配置 Hadoop2.2.0 http://www.linuxidc.com/Linux/2014-01/94685.htm
Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm
Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm
Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm
Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm
单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm
环境
Ubuntu 14.04 (32 bit) 下载:http://www.ubuntu.com/download/desktop
[建议使用 64 位系统,最好是其他 Linux 发行版]
JDK 7u71
[一定要使用 JDK7,不要用最新的 JDK8,否则编译会出错,系统自带的 OpenJDK 也别用,注意配置环境变量,使默认 Java 环境为 JDK7,一定要用“java -version”命令确认一下!] Ant 1.9.4
[Ubuntu 官方源的 Ant 是 1.9.3 版,也能用,不想手动配置环境就“apt-get install ant”也行] Maven 3.2.3
[使用官方最新的 3.2.3 版就行,不要用 2,不要 apt-get 安装,Ubuntu 官方源的当前版本可能太旧,可能导致编译失败] FindBugs 3.0.0
[就用最新的 3.0.0 版,Ubuntu官方源的当前版是 2.0 版,太旧,会导致编译失败] Protobuf 2.5
[这个要注意:官方最新的是 2.6 版,但是 hadoop 2.5.1 就要求 Protobuf 是 2.5 版,所以务必使用链接提供的 2.5 版,否则编译会失败] Hadoop 2.5.1 src
[32 位系统的就老老实实源码编译吧,别下到那个编译完成的版本了]
注:以上工具版本最好保持一致,使用其他版本可能导致编译失败,当然可以随便尝试,能编译成功就行,上述工具正确安装配置后一般能保证编译成功。
编译环境
先把编译环境配置起来。依次安装并配置 JDK 7u71,Ant 1.9.4,Maven 3.2.3,Findbugs 3.0.0 和 Protobuf 2.5 就行了:
JDK 7u71:
tar -zxvf jdk-7u71-linux-i586.tar.gz
sudo cp -r jdk1.7.0_71 /usr/lib/jvm/
# 配置环境变量:
export JAVA_HOME=/usr/lib/jvm//jdk1.7.0_71
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre//bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH
# 注意:
#1、JAVA 路径要在原本的 PATH 之前,否则 java 命令默认会软连接到自带的 OpenJDK 上。最好“java -version”确认一下。
#2、/etc/profile,.profile 或者.bashrc(.zshrc) 中配置都行,但必须 source 之后才能生效。.bashrc 或.zshrc 的话 source 一次就行了,/etc/profile 或 .profile 则需要每次启动终端时都 source 一次才能生效,直到下次开机。不同配置文件的加载机制不同,不多说。
#3、下面工具的配置同理。
Ant 1.9.4:
tar zxvf apache-ant-1.9.4-bin.tar.gz
sudo cp -r apache-ant-1.9.4 /usr/share/
# 配置环境变量:export ANT_HOME=/usr/share/apache-ant-1.9.4 export PATH=$PATH:$ANT_HOME/bin
Maven 3.2.3:
tar -zxvf apache-maven-3.2.3-bin.tar.gz
sudo cp -r apache-maven-3.2.3 /usr/share/
# 配置环境变量:
export M2_HOME=/usr/share/apache-maven-3.2.3
export MAVEN_OPTS=”-Xms256m -Xmx512m”
export PATH=$PATH:$M2_HOME/bin
FindBugs 3.0.0:
tar zxvf findbugs-3.0.0.tar.gz
udo cp -r findbugs-3.0.0 /usr/share/
# 配置环境变量:
export FINDBUGS_HOME=/usr/share/findbugs-3.0.0
export PATH=$PATH:$FINDBUGS_HOME/bin
Protobuf 2.5.0:
tar zxvf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
./configure –prefix=/usr/share
make
sudo make install
我把工具都安装在 /usr/share 目录下,Ubuntu 系统默认会搜寻该目录下的库文件,无需其他配置就行了。但是如果工具被安装在了 /usr/local 目录下,Ubuntu 是不会自动搜索该目录的库文件的,此时需要配置开发库环境变量:
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2015-12/126188p2.htm
5、伪分布式环境搭建
5.1. 设定 *-site.xml
这里需要设定 4 个文件:core-site.xml,hdfs-site.xml,mapred-site.xml 和 yarn-site.xml. 都在 /opt/Hadoop-2.5.1/etc/hadoop/ 目录下
core-site.xml: Hadoop Core 的配置项,例如 HDFS 和 MapReduce 常用的 I / O 设置等。
hdfs-site.xml: Hadoop 守护进程的配置项,包括 namenode,辅助 namenode 和 datanode 等。
mapred-site.xml:MapReduce 守护进程的配置项,包括 jobtracker 和 tasktracker。
yarn-site.xml:Yarn 框架用于执行 MapReduce 处理程序
首先在 hadoop 目录下新建几个文件夹
~$ mkdir tmp
~$ mkdir -p hdfs/name
~$ mkdir -p hdfs/data
接下来编辑那 4 个文件(IP 地址处我填了我的局域网 IP:192.168.1.135,根据需要填写自己主机的 IP 或者直接用 localhost):
core-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.1.135:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-2.5.1/tmp</value>
</property>
</configuration>
hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/uopt/hadoop-2.5.1/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/opt/hadoop-2.5.1/hdfs/data</value>
</property>
</configuration>
上述路径都需要自己手动用 mkdir 创建(开头就已经创建了),具体位置也可以自己选择,其中 dfs.replication 的值建议配置为与分布式 cluster 中实际的 DataNode 主机数一致,在这里由于是伪分布式环境所以设置其为 1。
mapred-site.xml(这个文件默认不存在,但是存在其模板文件 mapred-site.xml.template,copy 一份就行了):
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>Yarn</value>
</property>
</configuration>
请注意这里安装的 2.5.1 版本,2.* 版本较 1.* 版本改动很大,主要是用 Hadoop MapReduceV2(Yarn) 框架代替了一代的架构,其中 JobTracker 和 TaskTracker 不见了,取而代之的是 ResourceManager, ApplicationMaster 与 NodeManager 三个部分,而具体的配置文件位置与内容也都有了相应变化。所以我们在 mapred-site.xml 中设置了处理 map-reduce 的框架 Yarn,接下来就需要在 yarn-site.xml 中配置 ResourceManager, ApplicationMaster 与 NodeManager。
yarn-site.xml:
<configuration>
<!– Site specific YARN configuration properties –>
<property>
<name>Yarn.nodemanager.aux-services</name>
<value>mapreduce.shuffle</value>
</property>
<property>
<description>The address of the applications manager interface in the RM.</description>
<name>Yarn.resourcemanager.address</name>
<value>192.168.1.135:18040</value>
</property>
<property>
<description>The address of the scheduler interface.</description>
<name>Yarn.resourcemanager.scheduler.address</name>
<value>192.168.1.135:18030</value>
</property>
<property>
<description>The address of the RM web application.</description>
<name>Yarn.resourcemanager.webapp.address</name>
<value>192.168.1.135:18088</value>
</property>
<property>
<description>The address of the resource tracker interface.</description>
<name>Yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.1.135:8025</value>
</property>
</configuration>
5.2. 格式化 HDFS
通过以上步骤,我们已经设定好 Hadoop 单机测试到环境,接着就是启动 Hadoop 到相关服务,格式化 namenode,secondarynamenode,tasktracker:
~$ /opt/hadoop-2.5.1/bin/hadoop namenode -format
如上图表示格式化成功。
5.3. 启动 Hadoop
接着执行 start-all.sh 来启动所有服务,包括 namenode,datanode,start-all.sh 脚本用来装载守护进程。
/opt/hadoop-2.5.1/sbin$ ./start-all.sh #2.5.1 版推荐使用 start-dfs.sh 和 start-yarn.sh 来启动
用 Java 的 jps 命令列出所有守护进程来验证安装成功
/opt/hadoop-2.5.1/bin$ jps
出现如下列表,表明成功
5.4. 检查运行状态
所有的设置已完成,Hadoop 也启动了,现在可以通过下面的操作来查看服务是否正常,在 Hadoop 中用于监控集群健康状态的 Web 界面(填写自己的 IP):
http://192.168.1.135:50070 #dfs 运行状态
http://192.168.1.135:8088 #resource manager 运行状态
更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13
(完)
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-12/126188.htm