CentOS6.5 x64 Hadoop学习过程
George Jiang jhz
一.搭建环境简介
本次搭建采用的是CentOS6.5的64位版本,在VmWare中搭建的,Hadoop使用是Hadoop 2.2.0 stable version。搭建中由于Apache官网给出的是32位版本的Hadoop,所以此次搭建中还包含了对Hadoop源代码编译的过程。
二.搭建前的准备
1. 网络下载的VMware-workstation-full-10.0.1-1379776
2. Apache官网的CentOS-6.5-x86_64-bin-DVD1.iso
3. Apache官网的hadoop-2.2.0-src.tar.gz
4. Apache官网的apache-maven-3.2.1-bin.tar.gz
5. Oracle官网的jdk-7u51-linux-x64.rpm
6. Google官网的protobuf-2.5.0.tar.gz
三.对于准备工作的解释
1. 采用jdk1.7版本的原因:
Jdk1.8版本的javadoc功能具有jdk8新特性,根据网络搜索,采用jdk1.8版本,可能会在javadoc处出现问题,所以选择jdk1.7版本。详见“hadoop 2_2_0 在 windows8_1 64bit、jdk1_8的编译问题 - 无限天空 - 博客频道 - CSDN_NET.mht”
2. 对于编译所需文件的解释:
64位系统必须先对Hadoop源代码编译,以产生可运行的文件结果集,此过程所需的组件:apache-maven-3.2.1-bin.tar.gz和protobuf-2.5.0.tar.gz
四.编译环境搭建
1. 安装VmWare,略
2. 安装CentOS虚拟机,此处要注意的是:推荐把根目录“/”大小设置为10G,否则可能会对编译过程有影响(3G试验过,编译时报错,no space left);同时,推荐把总硬 盘设置成50G空间
3. Java环境搭建
⑴java –version查看一下目前系统的jdk版本
⑵yum remove java卸载系统默认版本的jdk
⑶rpm –ivh {rpm版本的jdk文件名}
⑷此时jdk已被安装至/usr/java/jdk1.7.1_51中
⑸设置环境变量,vim /etc/profile,在末尾处添加:
export JAVA_HOME=/usr/java/jdk1.7.0_51
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
exportPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
⑹source /etc/profile
4. Maven安装
⑴安装目录定为/opt,cp apache-maven-3.2.1-bin.tar.gz/opt
⑵unzip apache-maven-3.2.1-bin.tar.gz,并cd进入
⑶在/etc/profie里配置环境变量
export MAVEN_HOME=/opt/apache-maven-3.2.1
exportPATH=$PATH:$MAVEN_HOME/bin
⑷验证配置是否成功: mvn –version
如果成功,会出现以下类似:
1. Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 23:22:22+0800)
2. Maven home: /opt/maven3.1.1
3. Java version: 1.7.0_45, vendor: Oracle Corporation
4. Java home: /opt/jdk1.7/jre
5. Default locale: en_US, platform encoding: UTF-8
6. OS name: "linux", version: "2.6.32-358.el6.x86_64", arch: "amd64", family: "unix"
⑸由于maven国外服务器可能连不上,先给maven配置一下国内镜像,
在maven目录下,conf/settings.xml,在<mirrors></mirros>里添加,
原本的不要动
1. <mirror>
2. <id>nexus-osc</id>
. <mirrorOf>*</mirrorOf>
4. <name>Nexusosc</name>
5. <url>http://maven.oschina.net/content/groups/public/</url>
6. </mirror>
⑹同样,在<profiles></profiles>内新添加
1. <profile>
2. <id>jdk-1.7</id>
3. <activation>
4. <jdk>1.7</jdk>
5. </activation>
6. <repositories>
7. <repository>
8. <id>nexus</id>
9. <name>local private nexus</name>
10. <url>http://maven.oschina.net/content/groups/public/</url>
11. <releases>
12. <enabled>true</enabled>
13. </releases>
14. <snapshots>
15. <enabled>false</enabled>
16. </snapshots>
17. </repository>
18. </repositories>
19. <pluginRepositories>
20. <pluginRepository>
21. <id>nexus</id>
22. <name>local private nexus</name>
23. <url>http://maven.oschina.net/content/groups/public/</url>
24. <releases>
25. <enabled>true</enabled>
26. </releases>
27. <snapshots>
28. <enabled>false</enabled>
29. </snapshots>
30. </pluginRepository>
31. </pluginRepositories>
32. </profile>
5.Protobuf安装
⑴对protoc进行编译安装前先要装几个依赖包:gcc,gcc-c++,make如果已经安装的可以忽略
1. yum install gcc
2. yum intall gcc-c++
3. yum install make
⑵安装
1. tar -xvf protobuf-2.5.0.tar.gz
2. cd protobuf-2.5.0
3. ./configure --prefix=/opt/protoc/
4. make && make install
⑶此处要注意的是:请将第3条和第4条命令准确键入
⑷在/etc/profie里配置环境变量
export PROTOBUF=/opt/protoc
export PATH=$PATH:$PROTOBUF/bin
6. 需要安装cmake,openssl-devel,ncurses-devel依赖
1. yum install cmake
2. yum install openssl-devel
3. yum install ncurses-devel
7. Hadoop编译
⑴将hadoop-2.2.0-src.tar.gz放在/opt下,并tar –xvf解压
⑵编译clean
1. cd hadoop2.2.0-src
2. mvn clean install–DskipTests
⑶编译,之后等待build success
1. mvn package-Pdist,native -DskipTests -Dtar
⑷编译后的路径:hadoop-2.2.0-src/hadoop-dist/target/hadoop-2.2.0
1. [root@localhost bin]#./hadoop version
2. Hadoop 2.2.0
3. SubversionUnknown -r Unknown
4. Compiled by rooton 2013-11-22T08:47Z
5. Compiled withprotoc 2.5.0
6. From source withchecksum 79e53ce7994d1628b240f09af91e1af4
7. This command wasrun using /data/hadoop-2.2.0-src/hadoop-dist/target/hadoop- 2.2.0/share/hadoop/common/hadoop-common-2.2.0.jar
8. [root@localhosthadoop-2.2.0]#filelib//native/*
9. lib//native/libhadoop.a: current ar archive
10. lib//native/libhadooppipes.a: current ar archive
11. lib//native/libhadoop.so: symbolic link to `libhadoop.so.1.0.0'
12. lib//native/libhadoop.so.1.0.0:<SPAN style="COLOR: #ff0000">ELF 64-bit LSB shared object,x86-64, version 1</SPAN> (SYSV), dynamically linked, not stripped
8. 编译后的路径:hadoop-2.2.0-src/hadoop-dist/target/hadoop-2.2.0下的hadoop-2.2.0可以拷贝出来使用了,复 制给slave等
五.进行测试
1. 创建新用户
useradd hadoop
2. Vim/etc/sysconfig/network
修改主机名:master
3. Vim/etc/hosts
添加主机名master
之后,reboot一下,查看名称是否都更改完成
4. Ssh免密码登陆设置
⑴rpm –qa|grep ssh查看一下是否缺失openssh-clients;如果缺失,yum一下
六.单机模式测试
1. 确认JDK 配置成功
2. 无密码SSH登录
由于是单节点的应用,只要实现localhost的无密码ssh登录即可,这个比较简单:
⑴cd ~
ssh-keygen -t rsa
[hadoop@master ~]$ cd.ssh/ (注意“~”目录下,即/root)
[hadoop@master .ssh]$ cpid_rsa.pub authorized_keys
[hadoop@master .ssh]$ chmod 600 authorized_keys
⑵验证是否成功:
ssh localhost
Last login: Sat Jan 18 10:17:19 2014
这样就表示SSH无密码登录成功了。
3. Hadoop安装配置
①下载发布包
打开官方下载链接http://hadoop.apache.org/releases.html#Download ,选择2.2.0版本的发布包下载 后解 压到指定路径下:micmiu$tar -zxf hadoop-2.2.0.tar.gz -C /usr/local/share,那么本文中HADOOP_HOME = /usr/local/share/hadoop-2.2.0/。
②配置系统环境变量 vim ~/.profile ,添加如下内容:
exportHADOOP_HOME="/usr/local/share/hadoop-2.2.0"
export HADOOP_PREFIX=${HADOOP_HOME}
export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
export HADOOP_MAPRED_HOME=${HADOOP_PREFIX}
export HADOOP_YARN_HOME=${HADOOP_PREFIX}
exportHADOOP_CONF_DIR="$HADOOP_HOME/etc/hadoop/"
export YARN_CONF_DIR=${HADOOP_CONF_DIR}
export PATH=$PATH:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin
③修改 <HADOOP_HOME>/etc/hadoop/hadoop-env.sh
export JAVA_HOME=系统中JDK实际路径
④修改 <HADOOP_HOME>/etc/hadoop/core-site.xml
在<configuration>节点下添加或者更新下面的配置信息:
<!-- 新变量f:s.defaultFS代替旧的:fs.default.name -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
<description>Thename of the default file system.</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/temp</value>
<description>A base for other temporary directories.这个地方很重要,文件夹要事先创建好,否则无 法启动namenode</description>
</property>
<property>
<name>io.native.lib.available</name>
<value>false</value>
<description>default value is true:Should native hadoop libraries,if present, be used.</description>
</property>
⑤修改 <HADOOP_HOME>/etc/hadoop/hdfs-site.xml
在<configuration>节点下添加或者更新下面的配置信息:
<property>
<name>dfs.replication</name>
<value>1</value>
<!-- 如果是单节点配置为1,如果是集群根据实际集群数量配置-->
</property>
⑥修改 <HADOOP_HOME>/etc/hadoop/yarn-site.xml
在<configuration>节点下添加或者更新下面的配置信息:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
⑦修改 <HADOOP_HOME>/etc/hadoop/mapred-site.xml
默认没有mapred-site.xml文件,copy mapred-site.xml.template 一份为 mapred-site.xml即可
在<configuration>节点下添加或者更新下面的配置信息:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>
4. 启动及演示
⑴启动Hadoop
①首先执行hdfs namenode -format :
②然后执行 start-dfs.sh :
③jps,查看是否有以下进程:
NameNode
DataNode
SecondaryNameNode
Jps
④再执行 start-yarn.sh :
⑤jps,查看是否有以下进程:
NodeManager
ResourceManager
NameNode
DataNode
Jps
SecondaryNameNode
⑥启动日志没有错误信息,并确认上面的相关进程存在,就表示启动成功了。
⑵演示
①演示hdfs 一些常用命令,为wordcount演示做准备:
hdfs dfs -ls /
hdfs dfs -mkdir /user
hdfs dfs -ls /
hdfs dfs -mkdir -p /user/George/wordcount/in
hdfs dfs -ls /user/George/wordcount
②本地创建一个文件 George-word.txt, 写入如下内容:
Hi George welcome to Hadoop
Hi George welcome to BigData
Hi George welcome to world
more see micmiu.com
③把George-word.txt 文件上传到hdfs:
hdfs dfs -put George-word.txt /user/George/wordcount/in
④然后cd 切换到Hadoop的根目录下执行:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jarwordcount /user/George/wordcount/in/user/George/wordcount/out
ps: /user/George/wordcount/out 目录不能存在 否则运行报错。
看到类似如下的日志信息: