hadoop的默认下载版本是32位的,但是本人的系统时64位,所以在安装hadoop的时候出现了Unable to load native-hadoop library for your platform 问题,所以笔者现在要用编译安装的方式来安装hadoop
环境:
maven : 3.3.3
hadoop: 2.7.1
jdk : 1.7
centos : 6.6-64位
1.下载hadoop源码包
wget http://archive.apache.org/dist/hadoop/core/stable/hadoop-2.7.1-src.tar.gz
解压压缩包
tar -zvxf hadoop-2.7.1-src.tar.gz
将压缩包移动到安装目录
mkdir /opt/hadoop/hadoop-2.7.1-64
mv hadoop-2.7.1-src/* /opt/hadoop/hadoop-2.7.1-64/
cd /opt/hadoop/hadoop-2.7.1-64/
maven编译之前,要安装protobuf,本人使用2.5版本,可以从http://pan.baidu.com/s/1pJlZubT进行下载
解压:
tar -zvxf protobuf-2.5.0.tar.gz
移到安装目录
mv protobuf-2.5.0 /opt/
安装依赖
yum install gcc
yum install gcc-c++
yum install make
yum install cmake
yum install openssl-devel
yum install ncurses-devel
cd /opt/protobuf-2.5.0/
./configure --prefix=/opt/protoc/
make && make install
编译完成以后,将protoc添加到path中
vim /etc/profile
添加protoc环境变量:其中PROTOC_HOME是protoc环境变量,PATH中添加:$PROTOC_HOME/bin
export PROTOC_HOME=/opt/protoc
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$MAVEN_HOME/bin:$PROTOC_HOME/bin
刷新配置
source /etc/profile
在maven编译之前安装maven,http://blog.csdn.net/mingtian625/article/details/48184485
maven编译本地包:
cd /opt/hadoop/hadoop-2.7.1-64/
mvn package -Pdist,native -DskipTests -Dtar
编译成功后的hadoop路径在/opt/hadoop/hadoop-2.7.1-64/hadoop-dist/target/hadoop-2.7.1/bin下面
cd /opt/hadoop/hadoop-2.7.1-64/hadoop-dist/target/hadoop-2.7.1/bin
./hadoop version
查看版本信息
Hadoop 2.7.1
Subversion Unknown -r Unknown
Compiled by root on 2015-09-03T06:28Z
Compiled with protoc 2.5.0
From source with checksum fc0a1a23fc1868e4d5ee7fa2b28a58a
This command was run using /opt/hadoop/hadoop-2.7.1-64/hadoop-dist/target/hadoop-2.7.1/share/hadoop/common/hadoop-common-2.7.1.jar
查看编译hadoop的编译
cd /opt/hadoop/hadoop-2.7.1-64/hadoop-dist/target/hadoop-2.7.1
file lib//native/*
查看打印信息,可以看出编译版本是64bit
lib//native/libhadoop.a: current ar archive
lib//native/libhadooppipes.a: current ar archive
lib//native/libhadoop.so: symbolic link to `libhadoop.so.1.0.0'
lib//native/libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
lib//native/libhadooputils.a: current ar archive
lib//native/libhdfs.a: current ar archive
lib//native/libhdfs.so: symbolic link to `libhdfs.so.0.0.0'
lib//native/libhdfs.so.0.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
hadoop目录结构介绍:
bin:可执行命令
etc:hadoop的配置文件
include: C或C++的一些头文件
libexec: - - -
lib:本地库
sbin:执行脚本,启动,停止等
share:引用的jar包
将编译后的hadoop-64bit移动到安装目录:
mkdir /opt/hadoop/hadoop271-64
cp -r /opt/hadoop/hadoop-2.7.1-64/hadoop-dist/target/hadoop-2.7.1/* /opt/hadoop/hadoop271-64
2.3hadoop配置文件修改(共五个)
打开配置文件所在目录:
/opt/hadoop/hadoop271-64/etc/hadoop
hadoop-env.sh:hadoop环境变量
vim hadoop-env.sh
将hadoop-env.sh的
# The java implementation to use.
export JAVA_HOME=${JAVA_HOME}
修改为jdk所在的位置:
# The java implementation to use.
export JAVA_HOME=/usr/java/jdk1.7.0_75
第二个:
core-site.xml:
vim core-site.xml
在<configuration></configuration>之间添加
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop115:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/hadoop271-64/tmp</value>
</property>
hadoop115是我的主机名,查看主机名的指令:hostname
其中 fs.defaultFS指的是 用来指定hdfs的namenode的地址
hadoop.tmp.dir指的是hadoop运行时产生文件的存放目录
第三个:
hdfs-site.xml:
vim hdfs-site.xml
在<configuration></configuration>之间添加
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
dfs.replication指的是保存副本的数量
第四个:
mapred-site.xml:使用mapred-site.xml.template来复制一份mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
在<configuration></configuration>之间添加
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
这个配置指的是 mapreduce运行在yarn上
第五个
yarn-site.xml:
vim yarn-site.xml
在<configuration></configuration>之间添加
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop115</value>
</property>
hadoop115是我的主机名,查看主机名的指令:hostname
yarn.nodemanager.aux-services:指的是nodemanager获取数据的方式是shuffle
yarn.resourcemanager.hostname:指定yarn的老大(resourcemanager)的地址
2.4将hadoop添加到环境变量
vim /etc/profile
在文件末尾添加hadoop的home
export HADOOP_HOME=/opt/hadoop/hadoop271-64
将hadoop的bin目录添加到PATH,格式为 :$HADOOP_HOME/bin , 下面是我的配置,大家忽略掉我的java配置即可,重要的是hadoop的home配置
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
使配置生效:
source /etc/profile
2.5初始化HDFS(格式化文件系统)
打开bin目录
cd /opt/hadoop/hadoop271-64/bin
初始化namenode:
hdfs namenode -format
可以看到,初始化成功了
可以看到,hadoop271-64目录下,多了一个tmp目录
启动hadoop:
cd /opt/hadoop/hadoop271-64/sbin
./start-all.sh
启动过程中可能需要需要多次输入 密码,如果不想要输入密码的话,请看我的 hadoop学习(二)-- 配置ssh免登陆
在浏览器中查看hadoop信息:
先关闭防火墙
service iptables stop
启动完成后食用jps命令查看,表示启动成功
[root@hadoop115 sbin]# jps
2896 DataNode
3509 NodeManager
3222 ResourceManager
3639 Jps
2772 NameNode
3060 SecondaryNameNode
在浏览器中查看hadoop信息:
先关闭防火墙
service iptables stop
在浏览器中查看hadoop信息:
先关闭防火墙
http://192.168.10.115:50070/ (hdfs管理页面)
http://192.168.10.115:8088/ (yarn管理页面)
测试HDFS
hadoop上传一个文件
hadoop fs -put /opt/software/hadoop-2.7.1.tar.gz hdfs://hadoop115:9000/hadoop271
查看已经上传的文件
将刚上传的文件下载到本地
hadoop fs -get hdfs://hadoop115:9000/hadoop271 /opt/tmp/haddop271.tar.gz
在浏览器中查看hadoop信息:
先关闭防火墙