版本:虚拟机下安装的ubuntu14.04(x64),hadoop-2.6.0
下面是hadoop2.6.0的官方教程(英文):
hadoop下载地址:
http://mirror.bit.edu.cn/apache/hadoop/common/ 选择hadoop-2.6.0.tar.gz这个二进制文件
安装之前首先考虑的是hadoop的版本问题,hadoop-1x和hadoop-2x其实完全是两个东西,生产环境下多采用hadoop1.2.1-这是一个稳定的版本。而hadoop-2x版本bug相对比较多。
其次hadoop2.6.0本地库文件是64位的,而hadoop2.4.0本地库是32位的。如果跟系统版本不匹配,运行hadoop例子时会出现:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable(这个错误也可能是其他原因导致的,我遇到的是其他原因,后面会说解决办法)
最后是hadoop的三种模式:单机、伪分布、全分布。全分布需要至少三个节点,因为我的笔记本电脑内存不大,所以最后只是搭建到伪分布模式。所以并没有创建hadoop用户组,也剩下了很多麻烦。以后搭建完全分布式再来补这个点,但是伪分布没有hadoop用户组,也能用。
另:碰到最多的麻烦就是权限问题了。
sudo chmod 777 {path}获取该路径下文件夹的最高权限
sudo chmod 777 {path}/* -R 获取该目录下所有文件最高权限
sudo nautilus 对文件夹随意操作,没有权限,偶尔使用!!
1.安装前准备
一、安装ssh
安装命令sudo apt-get install openssh-server 启动服务:sudo /etc/init.d/ssh start 查看服务是否正确启动:ps -e | grep ssh 设置免密码登录,生成私钥和公钥:ssh-keygen -t rsa -P ""此时会在/home/hadoop/.ssh下生成两个文件:id_rsa和id_rsa.pub,前者为私钥,后者为公钥。(.ssh文件是隐藏文件,可以设置显示隐藏文件让其显示出来) 将公钥追加到authorized_keys中:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 用ssh连接自己:ssh localhost。如果还是需要密码,则没有成功。 二、安装java jdk和设置环境变量 安装openjdk命令:sudo apt-get install openjdk-7-jdk 然而openjdk东西比较少,可以安装oraclejdk:(推荐安装Java-7-oracle)
sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java7-installer
最后通过:java -version查看是否安装成功,并显示java版本。
查看JAVA_HOME位置:sudo update-alternatives --config java。我的结果是/usr/lib/jvm/java-7-oracle/bin/jre/java。配置环境变量只写到java-7-oracle。
配置环境变量:
命令:sudo gedit ~/.bashrc (配置.bashrc文件,或者.profile文件)
在文件末尾加入(第二行JAVA_HOME和第三行HADOOP_INSTALL安装路径改成自己的)
#HADOOP VARIABLES START export JAVA_HOME=/usr/lib/jvm/java-7-oracle export HADOOP_INSTALL=/usr/local/hadoop export PATH=$PATH:$HADOOP_INSTALL/bin export PATH=$PATH:$HADOOP_INSTALL/sbin export HADOOP_MAPRED_HOME=$HADOOP_INSTALL export HADOOP_COMMON_HOME=$HADOOP_INSTALL export HADOOP_HDFS_HOME=$HADOOP_INSTALL export YARN_HOME=$HADOOP_INSTALL export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib" #HADOOP VARIABLES END
使环境变量设置立即生效(重新注销或者重启都行):source ~/.bashrc
2.hadoop配置
我的hadoop安装路径/usr/local/hadoop,下载的文件解压缩后的文件名改成了hadoop,hadoop配置文件放在{HADOOP安装路径}/etc/hadoop文件夹下:需要修改hadoop-env.sh,core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml五个文件。
1.hadoop-env.sh文件,在末尾添加(第一行JAVA_HOME和第二行HADOOP_PREFIX(hadoop安装路径)改成自己的)
export JAVA_HOME=/usr/lib/jvm/java-7-oracle export HADOOP_PREFIX=/usr/local/hadoop export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib:$HADOOP_PREFIX/lib/native"
注意第三行的HADOOP_OPTS,如果没有这一项运行会有:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable的错误提示。如果你是32位的系统,运行hadoop2.6.0还需要重新编译本地库。本地库路径为:{hadoop安装路径}/lib/natives。
查看本地库版本命令:file /usr/loacl/hadoop/lib/native/libhadoop.so.1.0.0
(32位)libhadoop.so.1.0.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped
(64位)libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
查看系统位数:uname -a,如果有x86_64就是64位的,没有就是32位的。
2.core-site.xml文件,在末尾<configuration></configuration>中间添加内容,最后:
<configuration> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories. </description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
其中前一部分的hadoop.tmp.dir参数官方教程里没有,如果没有配置临时文件会默认生成在:根目录/tmp/hadoop-hadoop中,但是重启系统后内容会重新删掉,会有意想不到的问题出现!!注意修改路径,并在该路径下新建tmp文件夹。
3.mapred-site.xml是没有的,有一个mapred-site.xml.template文件将其改名为mapred-site.xml就好。同样在末尾<configuration></configuration>中间添加内容,最后:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
4.yarn-site.xml文件,在末尾<configuration><!-- Site specific YARN configuration properties --></configuration>添加内容,最后:
yarn-site.xml <configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
5.hdfs-site.xml文件,在末尾<configuration></configuration>中间添加内容,最后:
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/dfs/data</value> </property> </configuration>
后面两个dfs.name.dir,dfs.datanode.data.dir参数官网教程没有(注意修改路径),并不必需新建dfs文件夹,会自动生成的。
3.hadoop运行
- 格式化hdfs:/usr/local/hadoop$ bin/hdfs namenode -format.
/usr/local/hadoop$ bin/hdfs namenode -format.
当出现:INFO common.Storage: Storage directory /home/hadoop/tmp/dfs/name has been successfully formatted.表示成功。只需要格式化一次。
- hadoop启动,执行:/usr/local/hadoop$ sbin/start-all.sh
/usr/local/hadoop$ sbin/start-all.sh
输入命令检测:jps。如果成功启动的话会有:jps,NameNode,DataNode,SecondaryNameNode,ResourceManager,NodeManager六个进程。并且查看NameNode-http://localhost:50070/,ResourceManager-http://localhost:8088/这两个网址是否能够打开
- 创建MapReduce作业所需的HDFS目录:/usr/local/hadoop$ bin/hdfs dfs -mkdir /user;/usr/local/hadoop$ bin/hdfs dfs -mkdir /user/<usrname>(机器名)
/usr/local/hadoop$ bin/hdfs dfs -mkdir /user /usr/local/hadoop$ bin/hdfs dfs -mkdir /user/<usrname>(机器名)
事实上HDFS目录中内容通过文件夹是看不到的,之后可以用eclipse通过hadoop插件很方便的查看和操作。
- 运行一下例子:
(1)复制一些文件到HDFS目录/usr/<usrname>下:/usr/local/hadoop$ bin/hdfs dfs -put etc/hadoop input
/usr/local/hadoop$ bin/hdfs dfs -put etc/hadoop input
(2)运行:/usr/local/hadoop$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep input output ‘dfs[a-z.]+
/usr/local/hadoop$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep input output ‘dfs[a-z.]+
(3)输出结果从HDFS到本地文件output中(事先在HADOOP目录下新建output文件夹):/usr/local/hadoop$ bin/hdfs dfs -get output output
(4)从本地output文件夹查看结果:/usr/local/hadoop$ cat output/*
/usr/local/hadoop$ cat output/*
或者直接在HDFS目录下直接查看:/usr/local/hadoop$ bin/hdfs dfs -cat output/*
/usr/local/hadoop$ bin/hdfs dfs -cat output/*
- 关闭hadoop:/usr/local/hadoop$ bin/stop-all.sh
/usr/local/hadoop$ bin/stop-all.sh
至此搭建完成。OVER!