学习参考资料
hadoop 官网:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster.html
厦门大学数据库实验室文章:http://dblab.xmu.edu.cn/blog/install-hadoop/
国外hadoop环境搭建:http://www.bogotobogo.com/Hadoop/BigData_hadoop_Install_on_ubuntu_single_node_cluster.php
(备注:其实官网和厦门大学的hadoop伪集群搭建过程已经很清晰了,但是自己在对照操作时还是由于没有完全吻合他们的步骤,导致出现了一些不同的问题,为了解决这些问题,增加或者修改了一些东西,因此重新记录一遍)
开发环境准备:
操作系统环境:Ubuntu16.0
JDK:jdk-8u151-linux-x64 - 百度云下载(https://pan.baidu.com/s/1sl7ey4X)
Hadoop 安装包:hadoop-2.9.0.tar.gz -百度云下载(https://pan.baidu.com/s/1o8Nz8KE)
搭建的主要环节:
Step1: 在Ubuntu16.0 中搭建JAVA环境并进行成功与否的测试。
Step2:搭建hadoop伪集群环境用于学习和测试,此过程主要包括四点:
开始搭建:
Step1-在Ubuntu 16.0 中安装JAVA运行环境
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
此过程参考文章如下:Ubuntu 下java环境安装:http://www.linuxidc.com/Linux/2015-01/112030.htm
Step2-搭建hadoop伪集群环境
1. 设置hadoop 环境变量,这里设置了全局的两个有关hadoop的环境变量,一个是HADOOP_HOME,另外一个是HADOOP_CONF_DIR,配置如下(参考java环境变量的设置):
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
这在厦门大学的教程中并没有指出,我这里增加这两个环境变量是因为后面我启动整个伪集群的时候,namenode和datanode都无法启动,并且报了一个错误:
Incorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured.
Starting namenodes on []
Error: Cannot find configuration directory: /etc/hadoop
Error: Cannot find configuration directory: /etc/hadoop
Starting secondary namenodes [0.0.0.0]
Error: Cannot find configuration directory: /etc/hadoop
这里看出好像是某个路径配置的问题,网上的说法是新下载的hdaoop安装包的配置文件的位置变成了etc/hadoop下面,而之前的则是在conf/hadoop下面,因此需要设置一下。
2. 复制hadoop-2.9.0.tar.gz 压缩包到/usr/local 目录下,解压文件,并命名为hadoop,具体过程参考jdk的操作。
3. 配置伪集群相关的hadoop配置文件,这里包括两个配置文件:core-site.xml 和hdfs-site.xml ,这两个文件都在hadoop安装目录的etc/hadoop目录下。
4. 修改core-site.xml文件如下(gedit /usr/local/hadoop/etc/hadoop/core-site.xml ):
hadoop.tmp.dir
file:/usr/local/hadoop/tmp
Abase for other temporary directories
fs.defaultFs
hdfs://localhost:9000
fs.default.name
hdfs://localhost:9000
5. 修改hdfs-site.xlm文件(gedit /usr/local/hadoop/etc/hadoop/hdfs-site.xml ),内容如下:
在HDFS文件系统中创建文件夹 ./bin/hdfs dfs -mkdir -p /user/input(-p 循环创建目录)
加载文件到HDFS: ./bin/hdfs dfs -put ./etc/hadoop/*.xml /user/input
查看HDFS分布式文件系统的文件 ./bin/hadoop fs -ls /user(/user是目录)
查看HDFS作业结果: ./bin/hdfs dfs -cat /user/output/*
将HDFS上的文件取回到本地系统:./bin/hdfs dfs -get /user/output ./output
删除HDFS上的文件:./bin/hdfs dfs -rm -r /user/output
dfs.replication
1
dfs.namenode.name.dir
file:/usr/local/hadoop/tmp/dfs/name
dfs.datanode.data.dir
file:/usr/local/hadoop/tmp/dfs/data
绿色部分是网上推荐加的配置,这在hadoop官网并没有指明,这里是为了解决一个问题:
伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程如此),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
6. 开始启动Hadoop伪集群环境,这里需要注意的是以下所有的操作需要使用SHH登录,即在终端运行SSH localhost后,在开始启动伪集群环境,具体的操作可以参考厦门大学相关的步骤:http://dblab.xmu.edu.cn/blog/install-hadoop/
这里我又出现了问题就是namenode无法启动,启动集群时使用./sbin/start-dfs.sh
命令无法成功,后来百度使用./sbin/start-all.sh 命令就能把整个集群启动成功,目前不知道原因。
jps查看当前运行的守护进程如下:
9905 SecondaryNameNode
10067 ResourceManager
10371 NodeManager
14729 Jps
9707 DataNode
9550 NameNode
从这里看出整个伪集群启动成功,可以运行相关的测试demo进行数据分析,通过URL查看集群健康状况:http://localhost:50070/dfshealth.html#tab-overview
以下是操作HDFS文件系统的命令:
在HDFS文件系统中创建文件夹 ./bin/hdfs dfs -mkdir -p /user/input(-p 循环创建目录)
加载文件到HDFS: ./bin/hdfs dfs -put ./etc/hadoop/*.xml /user/input
查看HDFS分布式文件系统的文件 ./bin/hadoop fs -ls /user(/user是目录)
查看HDFS作业结果: ./bin/hdfs dfs -cat /user/output/*
将HDFS上的文件取回到本地系统:./bin/hdfs dfs -get /user/output ./output
删除HDFS上的文件:./bin/hdfs dfs -rm -r /user/output