Ubuntu安装Hadoop2进行单机和伪分布配置
---------------------------------------------------
单机配置(Local Standalone Mode):
官方说法:Hadoop 默认模式为非分布式模式,无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。
伪分布配置(Pseudo-Distributed Mode):
官方说法:Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,
节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
---------------------------------------------------------------------
环境:
Ubuntu15.10
Hadoop2.7.1
java环境 java-7-openjdk
----------------------------------------------------------------------
写在前面:
本文是根据Hadoop官方帮助文档关于配置单机和伪分布式的教程所编写
其实安装测试过程都比较简单,但是官网上的教程比较简单笼统,对于新手来说
无疑是学习Hadoop系统的一大门槛,所以在这里详细写出我配置的过程,但过程
基本和官网相差不大。可以参考官方教程:Hadoop官方教程:单机和伪分布配置
开始之前我有三点要指出:
①哪些细节看不懂的请百度
②哪些细节有问题的请Google
③哪些概念不懂的请百度百科
----------------------------------------------------------------------
目录:
一.Ubuntu下创建hadoop用户组和用户
二.安装ssh服务和配置ssh无密码登录
三.Java环境(JDK配置)
四.安装Hadoop2
五.单机配置过程
六.伪分布配置
七.配置PATH环境变量
-----------------------------------------------------------------------
一.Ubuntu下创建hadoop用户组和用户
这里的目的是为了之后要做涉及到hadoop应用的工作的时候可以单独用该用户来操作。
1.创建hadoop用户组
2.创建hadoop用户并加入到hadoop用户组 , -g hadoop 是指后面的用户加入到该组的意思
’
3.给新建hadoop用户设立密码 passwd hadoop 来设置,hadoop是用户名
4.给新建的用户权限 打开/etc/sudoers文件
5.切换到新建的用户,接下来的工作都在hadoop用户下进行操作
可以用 su 用户名 命令来切换用户
也可以直接注销切换
二.安装ssh服务和配置ssh无密码登录
目的:通常集群、单节点模式都用到 ssh 登陆,Ubuntu 默认已安装了 SSH client(用来登录),此外还需要安装 SSH server(用来可以被登录连接)
1.安装ssh server
2.登录ssh ssh localhost 输入密码来登录
可以用上面的命令来登录,但是每次这样链接都要输入密码很麻烦,所以可以生成密钥对来处理
这一步非必须,但是能方便以后配置
上面的命令后会在 /home/hadoop/下生成 .ssh目录 用于下面步骤3
exit 命令先退出ssh连接
3.生成密钥对,达到免密码登录
- cd ~/.ssh/ 进入目录
- ssh-keygen -t rsa # 会有提示,都按回车就可以
- cat ./id_rsa.pub >> ./authorized_keys # 加入授权
- 再ssh localhost登录就发现不用密码就能登录了
三.Java环境(JDK配置)
oracle JDK 或者 OpenJDK 区别自行百度,Ubuntu15.10自带Openjdk7
这里用自带的Openjdk7来进行下面配置,需要换装其他版本的请自行百度
1.获取openjdk7的目录 update-alternatives --list java 列出当前安装jdk的目录
这里要注意,自带的Openjdk7并不像大多数网上说的用whereis java或其他来获取目录路径
这里 我们记下路径 /usr/lib/jvm/java-7-openjdk-i386
四.安装Hadoop2
下载地址: 下载Hadoop
1.下载好Hadoop2后,解压到/usr/local/目录下 如下面的 hadoop-2.7.1
2 .改名 hadoop-2.7.1 为hadoop 非必须但是比较简便
3 .把hadoop文件夹的权限给hadoop用户管理
4 .测试hadoop安装情况
cd hadoop
./bin/hadoop version
5 .配置hadoop中java的路径
编辑文件 usr/local/hadoop/etc/hadoop/hadoop-env.sh
添加 export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386 注意=号后面不能有空格 修改好后保存。
注意:原来是使用系统环境变量当中JAVA_HOME我把原来的注视掉了,其实到系统环境中配置和这里配置是一样的
所以我直接在这里配置,而把这里原来的注释掉了,可以看图片中添加代码的下一行。
6.设置系统环境变量包含hadoop路径
gedit ~/.bashrc 命令 .bashrc和其他几个环境文件的区别请自行百度,这个文件位置在root/ 下
添加
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
之后执行 source ~/.bashrc 让环境生效 运行之后只有当前运行命令这个终端可以得到生效的效果,其他终端是没效果的,需要重启解决
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
到这里 我们的标准所需就已经安装好了
--------------------------------------
五.单机配置过程
下面是运行hadoop自带的例子来进行单机过程,
Hadoop 附带了丰富的例子(运行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。
在此我们选择运行 grep 例子,我们将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中。
第一步是创建input 文件夹
第二步是拷贝所有.xml 文件到input文件夹,这里其实是随便找一些文件当作处理字符串查找的来源而已
第三步执行Hadoop操作
注意:output文件夹自动创建,而且创建的时候如果存在同样的文件夹则会出错,所以当再次实验的时候要先删除已有的output文件夹。
执行完最后一句命令后会出现下面的东西 则说明成功了
六.伪分布配置
伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 在etc/hadoop/里
Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。
1.修改core-site.xml文件 gedit ./etc/hadoop/core-site.xml 命令
将最后的
<configuration>
</configuration>
改为:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
保存
2.修改 gedit ./etc/hadoop/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/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
保存
说明:
Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件)因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程如此)不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
3.格式化文件系统
$ bin/hdfs namenode -format
成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示
4.开启namenode和datanode守护进程
$ sbin/start-dfs.sh
注:启动日志被写进/usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.log 可以查看该日志来了解出错情况
5.运行jps命令查看启动情况
若成功启动则会列出如下进程: “NameNode”、”DataNode” 和 “SecondaryNameNode”
(如果 SecondaryNameNode 没有启动,请运行 sbin/stop-dfs.sh 关闭进程,然后再次尝试启动尝试)
如果没有 NameNode 或 DataNode ,那就是配置不成功,请仔细检查之前步骤,或通过查看启动日志排查原因。
6.成功启动后,浏览器访问 http://localhost:50070
接下来是进行伪分布处理实例:
前面我们运行的是单机实例,现在我们运行伪分布实例,单机实例中我们的数据来源是本地的数据,而伪分布需要的数据来自HDFS系统
1.在HDFS系统中建立用户目录
./bin/hdfs dfs -mkdir -p /usr/hadoop
2.创建数据来源文件夹input和像前面单机实例一样将一些数据文件复制到input里面
./bin/hdfs dfs -mkdir /usr/hadoop/input
./bin/hdfs dfs -put ./etc/hadoop/*.xml /usr/hadoop/input
3.使用-ls 命令 查看创建目录情况
./bin/hdfs dfs -ls /usr/hadoop/input
4.运行处理
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /usr/hadoop/input /usr/hadoop/output 'dfs[a-z.]+'
注意:Hadoop 运行程序时,输出目录不能存在,否则会提示错误,因此若要再次执行,需要执行如下命令删除 output 文件夹:
./bin/hdfs dfs -rm -r output # 删除 output 文件夹
5.查看处理结果
./bin/hdfs dfs -cat /usr/hadoop/output/*
6.将HDFS系统中的文件取回本地
rm -r ./output # 先删除本地的 output 文件夹(如果存在)
./bin/hdfs dfs -get output ./output # 将 HDFS 上的 output 文件夹拷贝到本机
cat ./output/*
7.停止Hadoop
./sbin/stop-dfs.sh
注意:下次启动 hadoop 时,无需进行 NameNode 的格式化,只需要运行 ./sbin/start-dfs.sh 就可以!
七.配置PATH环境变量
在这里额外讲一下 PATH 这个环境变量(可执行 echo $PATH 查看,当中包含了多个目录)。例如我们在主文件夹 ~ 中执行 ls 这个命令时, 实际执行的是 /bin/ls 这个程序, 而不是 ~/ls 这个程序。系统是根据 PATH 这个环境变量中包含的目录位置,逐一进行查找,直至在这些目录位置下找到匹配的程序(若没有匹配的则提示该命令不存在)。 上面的教程中,我们都是先进入到 /usr/local/hadoop 目录中,再执行 sbin/hadoop,实际上等同于运行/usr/local/hadoop/sbin/hadoop。 我们可以将 Hadoop 命令的相关目录加入到 PATH 环境变量中,这样就可以直接通过 start-dfs.sh 开启 Hadoop,也可以直接通过 hdfs 访问 HDFS 的内容,方便平时的操作。 同样我们选择在 ~/.bashrc 中进行设置(vim ~/.bashrc,与 JAVA_HOME 的设置相似),在文件最前面加入如下单独一行: export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin 添加后执行 source ~/.bashrc 使设置生效,生效后,在任意目录中,都可以直接使用 hdfs 等命令了,读者不妨现在就执行 hdfs dfs -ls input 查看 HDFS 文件试试看。----------------------------------------------------------------------
到这里单机和伪分布用到的知识都已经讲完
后面两个额外可能需要了解的东西请自行百度
①启动YARN
②安装Hadoop集群
----------------------------------------------------------------------