hadoop学习(day01)-环境搭建
学习参考资料
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伪集群环境用于学习和测试,此过程主要包括四点:
- Hadoop 伪集群的环境变量设置。
- Haddop 伪集群配置文件的修改。
- 启动 hadoop 伪集群环境并进行成功与否的测试。
- 在伪集群环境中运行Hadoop自带的demo 进行作业测试并且查看作业结果。
开始搭建:
Step1-在Ubuntu 16.0 中安装JAVA运行环境
- 到JDK官网下载JDK(或者我的百度云盘:https://pan.baidu.com/s/1sl7ey4X)到Ubuntu首页,如下所示:
- 建立java文件夹-弹出终端(Ctrl+Alt+t),运行命令:sudo mkdir /usr/local/java 命令建立java文件夹。
- 复制jak 到新建的java 目录,命令如下: cp jdk-8u151-linux-x64.tar.gz /usr/local/java
- 解压JDK,进行新建好的java 目录下(cd /usr/local/java),运行命令如下:sudo tar -xzvf jdk-8u151-linux-x64.tar.gz 解压jdk压缩包,解压完成后运行 sudo -rm -rf jdk-8u151-linux-x64.tar.gz 删除掉压缩包。
- 配置全局的JAVA环境变量,即所有用户都可以访问到,运行命令:sudo gedit ~/.bashrc 打开环境配置文件,在末尾增加以下配置:
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
- 配置好环境变量后,在终端运行 java -version 后会有版本号信息出现: java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
如此就是JAVA环境变量安装好了。
此过程参考文章如下: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 ):
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories</description>
</property>
<property>
<name>fs.defaultFs</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
红色标注的部分是我为解决namenode无法启动时添加的,目前不知道起什么作用。
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
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
绿色部分是网上推荐加的配置,这在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