在之前的0.20.2版本因为硬盘坏道惨遭毒害之后,默默地决定安装Hadoop-2.X版本的。安装步骤并不是很繁琐但是杂七杂八的东西太多,所以留下记录以备不时之需
以一个熟练掌握JavaEE和初步了解Linux系统的程序员的视角……
P.S 所谓三位一体就是三台机器应该一同设置,或者操作的这个文件应该复制到3台机器上
一、Hadoop安装前的准备工作
1、Linux系统的安装
首先安装3台虚拟机,一台master,两台slave分别为slave1,slave2,操作系统为CentOS-6.5-x64位
目前阶段我直接使用vmvare的快捷安装,以图步骤快捷
顺带一提在网络设置里面,我是用的是NAT模式而不是各个视频、书里写到的网桥模式,目前来说,一切正常
Linux的hostname定义的名称并不是在这里,所以这里也可以瞎写,但是最好还是标识起来,例如我依旧定义了master,slave1,slave2等等…同时定义账号和密码
然后就是漫长的安装阶段,由于是快捷安装,时区,分区,语言等都是默认的。
2、Linux系统的基本配置
安装好了之后,也是需要各个配置的,首当其冲的……
1)安装JDK(三位一体)
在Oracle官网直接下载jdk7.x版本的即可,由于本机安装的是CentOS,所以选择了tar.gz的文件格式
链接 http://download.oracle.com/otn-pub/java/jdk/7u67-b01/jdk-7u67-linux-x64.tar.gz
在Linux下载好之后直接使用
tar -xvzf jdk-7u67-linux-x64.tar.gz //当然路径得对呀~
解压好了之后直接放进 /usr/jdk 目录里吃灰
mv jdk1.7.0_64 /usr/jdk
然后在root账号下配置 /etc/profile文件 (当然.bash_profile也可以,各有喜好)加上这几句
export JAVA_HOME=/usr/jdk
export JAVA_BIN=/usr/jdk/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
这时候
我们使用javac命令或者java -version命令就可以了~天才~
2)配置主机名(三位一体)
在命令中输入 hostname 就能查看当前主机的名字 默认是localhost.xxxxxxx
这当然不符合我们风格啦~全改之!
第一步 : 创建临时主机名
hostname master(其他的啥的)
第二步: 在root权限下 更改 /etc/sysconfig/network文件
NETWORKING=yes
HOSTNAME=master //你要的主机名
第三步 : 在hosts文件里面作威作福
// /etc/hosts路径下
127.0.0.1 localhost //这里加入master会在hdfs阶段出错,反正现在来看能用
192.168.8.100 master
192.168.8.101 slave1 //顺带把之后的步骤给做了
192.168.8.102 slave2
之后也是ping来ping去的,看看好不好使。
3)配置ssh免密码(三位一体)
切记!退出root之后!在个人账号下使用以下命令
这一步一定要注意文件权限问题!!!痛!
ssh-keygen -t rsa
生成ssh密钥,这时候会问你路径和基准值啥的……不用管,直接回车回车过去
之后他会在你的 /home/你的帐号名/.ssh路径下生成两个文件
一个是公钥,一个是私钥。
把id_rsa.pub内的内容复制下来(三台机器上都要),然后创建并粘贴到一个叫做 authorized_keys的文件下。
就是乱糟糟的这么一堆,然后放到.ssh目录下即可
接着输入ssh命令,连接各个主机,包括自己的。看看能不能免密码喽~
二、Hadoop的安装
目前为止,在Hadoop-2.5.0版本中,我们需要配置的文件有7个,这里有些文件是需要另外创建的
hadoop-2.5.0/etc/hadoop/hadoop-env.sh
hadoop-2.5.0/etc/hadoop/yarn-env.sh
hadoop-2.5.0/etc/hadoop/slaves
hadoop-2.5.0/etc/hadoop/core-site.xml
hadoop-2.5.0/etc/hadoop/hdfs-site.xml
hadoop-2.5.0/etc/hadoop/mapred-site.xml //另外创建
hadoop-2.5.0/etc/hadoop/yarn-site.xml
1、各个文件的配置(三位一体)
1)hadoop-env.sh
他的配置很简单,只需要在茫茫人海中找到这一行就行了
# The java implementation to use.
export JAVA_HOME=/usr/jdk //就是它
2)yarn-env.sh
同上,我们需要在茫茫人海中找到这一行
# resolve links - $0 may be a softlink
export YARN_CONF_DIR="${YARN_CONF_DIR:-$HADOOP_YARN_HOME/conf}"
# some Java parameters
export JAVA_HOME=/usr/jdk //就是它
在
进行这两部的时候,一定要确保java已经配置完成
3)slaves
这个文件里面啥也没有,只要把slave们的主机名写上就好了
之后是xml的配置,在这里面多数都有一个<configuration>标签对,在这里写数据
4)core-site.xml
<configuration>
<property> 定义默认节点
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value> 这里接主机名和端口9000
</property>
<property> 缓存大小
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property> 设定tmp路径,<strong>重要!</strong>
<name>hadoop.tmp.dir</name>
<value>file:/home/hope6537/hadoop-2.5.0/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
</configuration>
5)hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value> 主机名+端口
</property>
<property> 定义节点路径
<name>dfs.namenode.name.dir</name>
<value>file:/home/hope6537/hadoop-2.5.0/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hope6537/hadoop-2.5.0/data</value>
</property>
<property> 这里是副本复制数 1或者2就好了
<name>dfs.replication</name>
<value>2</value>
</property>
<property> 打开网页端
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
6)mapred-site.xml 需要自己创建
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
7) yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<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>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
2、Hadoop的部署(Master Only)
改完配置文件之后我们就可以进行测试了~所谓的部署嘛~就是放在一个你感觉好用的地方。
注意要把设置好的Hadoop文件分发给Slave机器中啊~!
我们需要先格式化hdfs文件系统
在hadoop目录下使用如下命令
bin/hdfs namenode –format
从输出中可以看到格式化成功的信息。
之后激动人心的一刻来了~在目录下输入如下命令
sbin/start-all.sh
就这样~我们启动成功了~开始了hadoop的星辰大海般的旅程~
怎么可能就这么顺利呀!拍飞!
之前说了吧~咱家的Linux是64位的(我想问问哪台服务器是32位),这样就会有个问题。
在运行的时候会出现一个警告
<span style="font-family:Microsoft YaHei;">WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable</span>
这个警告说的是啥呢?就是说本地库无法加载,因为它丫的是32位的!艹,32位的。
所以我们需要进行苦逼的本地重新编译,以适应32位环境。
三、Hadoop的本地库重新编译(Master Only)
1、下载和编译有关的包
为了进行重新编译的活动,我们需要下载安装几个附属文件。
在网络通畅的环境下~输入以下的命令
yum install svn
yum install autoconfautomake libtool cmake
yum install ncurses-devel
yum install openssl-devel
yum install gcc*
安装时间大概持续半小时,只要不停的yes就好了~
2、安装Maven
目前来说 Maven的稳定版本的是3.2.3
所以我们直接下载和安装就可以了
wget http://apache.fayea.com/apache-mirror/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
然后解压缩
tar xzvf./apache-maven-3.2.3-bin.tar.gz
之后把它移动到/usr/local中去(建议)
mv./ apache-maven-3.2.3 /usr/local
并配置环境变量,在profile里面(公共的也行,私有的也可以)的PATH里面添加
:/usr/local/apache-maven-3.2.3/bin //别忘了冒号口牙~
之后使用set命令查看环境变量
然后输入mvn -version看看是否配置好了
接下来是配置它的更新库,由于Maven的外国服务器貌似被墙了,于是添加了开源中国的Maven下载镜像
</mirror>
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>jdk-1.4</id>
<activation>
<jdk>1.4</jdk>
</activation>
<repositories>
<repository>
<id>nexus</id>
<name>local private nexus</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>local private nexus</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
哦也~干的漂亮~
3、下载并安装protobuf
由于谷歌被墙了,所以很明显我们没法直接wget了
所以我下了一个CSDN资源提供的
http://download.csdn.net/detail/px_dn/7414673
接着解压缩,并进入文件夹目录 运行如下安装命令
./configure
make
make check
make install
在这里要注意权限问题,不然很有可能安装失败 万能解决方式是直接root chmod 777
4、重新编译Hadoop
通过svn获取hadoop源代码
svn checkout http://svn.apache.org/repos/asf/hadoop/common/tags/release-2.5.0 //注意版本号
进入release-2.5.0目录输入如下命令
mvnpackage -Pdist,native -DskipTests -Dtar
然后开始漫长的编译过程吧~
编译的时候要下载很多的文件包,所以注意网络畅通,同时Maven镜像有效。
直到出现Bulid Success字样,就大功告成了~!
5、覆盖本地库(三位一体)
将/release-2.5.0/hadoop-dist/target/hadoop-2.5.0/lib 里面的编译包覆盖到你的hadoop安装位置里的lib文件夹即可~!
and enjoy!
附 hadoop-2.5.0 64为本地库地址:http://pan.baidu.com/s/1hq1ibD6
P.S. 接着学习Hadoop2.x的新特性去~
P.S.S 实际上Hadoop1.x也没咋学精
P.S.S.S 妹的应该先把Linux弄明白呀~!