Hadoop系统运行的软件环境
1.Linux操作系统
① 直接安装,如Ubuntu 16.04 LTS。
② Window下安装Linux虚拟机/Cygwin是一个在windows平台上运行的类UNIX模拟环境。
2.Java
JDK是Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
3.SSH(Secure Shell)
SSH 为建立在应用层基础上的安全协议。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。 主要用于远程管理Hadoop节点以及Hadoop节点间的安全共享访问。
传统的网络服务程序,如FTP、POP和Telnet本质上都是不安全的;它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,SSH另一项优点是其传输的数据是经过压缩的,所以可以加快传输的速度。Hadoop使用SSH保证在远程管理Hadoop节点和节点间用户共享访问时的安全性。
一、Hadoop系统的安装方式
1.单机方式
在一台运行Linux或Windows下虚拟Linux的单机上安装运行Hadoop系统。Hadoop 默认模式为非分布式模式,无需进行其他配置即可运行。即单 Java 进程,方便进行调试。
2.单机伪分布方式
通常集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode也作为TaskTracker。这些机器是slaves。
在一台运行Linux或Window下虚拟Linux的单机上,用伪分布方式,用不同的java进程模拟分布运行中的NameNode、DataNode、JobTracker、TaskTracker等各类节点.安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。
3.集群分布模式
在一个真实的集群环境下安装运行Hadoop系统,集群的每个节点可以运行Linux或Window下的虚拟Linux。单机和伪分布模式下编写调试完成的程序不需修改即可在真实的分布式Hadoop集群下运行。
一、Hadoop系统安装基本步骤
1. 单机操作系统安装
在单机上安装Linux或Window下虚拟Linux,假设安装后机器名为ubuntu。
2. 创建用户
$ sudo useradd -m hadoop -s /bin/bash #创建hadoop用户,为Hadoop创建一个专门的用户如hadoop,然后在该用户组下创建不同的用户。可在安装系统的时候创建,也可以在安装好之后用命令创建。-m:自动建立用户的登入目录;-s:指定用户登入后所使用的shell;
$ sudo passwd hadoop # 设置密码
$ sudo adduser hadoop sudo # 增加管理员权限
再切换到hadoop用户下。
3. 配置SSH
Ubuntu 默认已安装了 SSH client(客户端),还需要安装SSH server(服务器):
$ sudo apt-get install openssh-server
安装后,可以使用如下命令登陆本机:
$ ssh localhost
此时会有SSH首次登陆提示,输入yes。然后按提示输入密码hadoop,这样就登陆到本机了。
$ ssh username@ip # 登陆其它机器
配置SSH无密码登陆:
$ cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
$ ssh-keygen -t rsa # 利用 ssh-keygen生成密钥
$ cat ./id_rsa.pub >> ./authorized_keys # 加入授权
首先退出刚才的 ssh,就回到了我们原先的终端窗口,然后利用ssh-keygen生成密钥,并将密钥加入到授权中(cat命令是将生成的密钥文件和授权文件合并)。
4. 安装JDK
下载和安装JDK,将java安装在/opt/java目录下,并配置环境。echo $JAVA ,java -version
5. 下载和安装Hadoop
Hadoop 2 可以通过 http://mirror.bit.edu.cn/apache/hadoop/common/
下载 “stable” 下的hadoop-2.x.y.tar.gz。包含src的是Hadoop源代码,需要进行编译才可使用。
在/opt下解压:
$ sudo tar -zxf hadoop-2.6.5.tar.gz -C /usr/local
$ cd /usr/local/
$ sudo mv ./hadoop-2.6.5/ ./hadoop
#将文件夹名改为hadoop
$ sudo chown -R hadoop ./hadoop # 修改权限
6. 单机和单机伪分布式配置
输入如下命令来检查 Hadoop 是否可用
$ cd /usr/local/hadoop
$ ./bin/hadoop version
单机伪分布式配置:Hadoop可以在单节点上以伪分布式的方式运行,Hadoop进程以分离的Java进程来运行,节点既作为NameNode也作为DataNode,同时,读取的是HDFS中的文件。Hadoop的配置文件位于/usr/local/hadoop/etc/hadoop/中,伪分布式需要修改2个配置文件core-site.xml和hdfs-site.xml。Hadoop的配置文件是xml格式,每个配置以声明property的name和value的方式来实现。
Hadoop配置文件说明,Hadoop的运行方式是由配置文件决定的(运行Hadoop时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除core-site.xml 中的配置项。
此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程),不过若没有配置hadoop.tmp.dir参数,则默认使用的临时目录为/tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行format才行。所以我们进行了设置,同时也指定dfs.namenode.name.dir和dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
修改配置文件 core-site.xml
<configuration>
</configuration>
修改为:
<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>
</configuration>
同样的,修改配置文件 hdfs-site.xml:
<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>
7. 格式化HDFS文件系统
配置完成后,执行 NameNode 的格式化:$ ./bin/hdfs namenode -format
了解Hadoop的同学都知道,Hadoop有两个核心的组成部分,一个是HDFS,另一个则是MapReduce,HDFS作为Hadoop的数据存储方案,MapReduce则提供计算服务;同时,HDFS作为一种分布式文件系统,它的安装也是需要相应的格式化操作的,如果安装失败或者我们需要重新安装的时候,那我们就需要对HDFS重新进行格式化。
8. 启动Hadoop环境
接着开启 NameNode 和 DataNode 守护进程。
$ ./sbin/start-dfs.sh
Hadoop安装完后,启动时报错:
Error: JAVA_HOME is not set and could not be found.
解决办法:修改./etc/hadoop/hadoop-env.sh中的JAVA_HOME。
export JAVA_HOME=$JAVA_HOME //错误
export JAVA_HOME=/opt/jdk1.8.0_144 //正确
开启 NameNode 和DataNode 守护进程。
$ ./sbin/start-dfs.sh
启动完成后,可以通过命令 jps 来判断是否成功启动。
成功启动后,可以访问 Web 界面 http://localhost:50070 查看 NameNode和Datanode信息,还可以在线查看HDFS中的文件。
9. 运行程序测试(wordcount)
首先需要在 HDFS 中创建用户目录:创建用户目录:
cd /usr/local/hadoop
$ ./bin/hdfs dfs -mkdir -p /user/hadoop
接着将 ./etc/hadoop 中的 xml 文件作为输入文件复制到分布式文件系统中,即将/usr/local/hadoop/etc/hadoop复制到分布式文件系统中的 /user/hadoop/input中。我们使用的是hadoop用户,并且已创建相应的用户目录/user/hadoop,因此在命令中就可以使用相对路径如input,其对应的绝对路径就是/user/hadoop/input:
$ ./bin/hdfs dfs -mkdir input #创建input文件夹
$ ./bin/hdfs dfs -put ./etc/hadoop/*.xml input #将配置文件作为输入
$ ./bin/hdfs dfs -ls input #查看文件列表
运行 wordcount 例子:
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount input output
查看运行结果
$ ./bin/hdfs dfs -cat output/*
$ ./bin/hdfs dfs -rm -r output
# 删除 output文件夹,Hadoop运行程序时,输出目录不能存在,否则会提示错误,因此若要再次执行,需要执行如下命令删除output文件夹
$ ./sbin/stop-dfs.sh # 关闭Hadoop
下一篇介绍自己写的hadoop单机脚本安装方法。